{"version":3,"file":"keu-design-system.mjs","sources":["../../src/lib/components/button/button.component.ts","../../src/lib/components/button/button.component.html","../../src/lib/components/dropdown/dropdown.component.ts","../../src/lib/components/dropdown/dropdown.component.html","../../src/lib/components/table/table.component.ts","../../src/lib/components/table/table.component.html","../../src/lib/components/alert/alert.component.ts","../../src/lib/components/alert/alert.component.html","../../src/lib/components/dialog/dialog.component.ts","../../src/lib/components/dialog/dialog.component.html","../../src/lib/components/accordion/accordion.component.ts","../../src/lib/components/accordion/accordion.component.html","../../src/lib/components/pagination/pagination.component.ts","../../src/lib/components/pagination/pagination.component.html","../../src/lib/components/typography/typography.component.ts","../../src/lib/components/typography/typography.component.html","../../src/lib/components/chip/chip.component.ts","../../src/lib/components/chip/chip.component.html","../../src/lib/components/card/card.component.ts","../../src/lib/components/card/card.component.html","../../src/lib/components/datepicker/datepicker.component.ts","../../src/lib/components/datepicker/datepicker.component.html","../../src/lib/components/input/input.component.ts","../../src/lib/components/input/input.component.html","../../src/lib/components/radio/radio.component.ts","../../src/lib/components/radio/radio.component.html","../../src/lib/components/checkbox/checkbox.component.ts","../../src/lib/components/checkbox/checkbox.component.html","../../src/lib/components/switch/switch.component.ts","../../src/lib/components/switch/switch.component.html","../../src/lib/components/grid/grid.component.ts","../../src/lib/components/grid/grid.component.html","../../src/lib/components/grid/grid-item.component.ts","../../src/lib/components/grid/grid-item.component.html","../../src/lib/components/tabs/tabs.component.ts","../../src/lib/components/tabs/tabs.component.html","../../public-api.ts","../../keu-design-system.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonStyleType = 'solid' | 'outline' | 'ghost';\n\n/**\n * Reusable Button Component with Tailwind CSS\n * \n * @example Basic\n * <keu-button variant=\"primary\" size=\"medium\" (clicked)=\"handleClick()\">\n *   Click Me\n * </keu-button>\n * \n * @example With Badge\n * <keu-button variant=\"primary\" [badge]=\"9\" badgeVariant=\"danger\">\n *   Messages\n * </keu-button>\n * \n * @example Loading State\n * <keu-button variant=\"primary\" [loading]=\"true\">\n *   Saving...\n * </keu-button>\n */\n@Component({\n  selector: 'keu-button',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './button.component.html',\n  styles: [],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ButtonComponent {\n  @Input() variant: ButtonVariant = 'primary';\n  @Input() size: ButtonSize = 'medium';\n  @Input() styleType: ButtonStyleType = 'solid';\n  @Input() type: ButtonType = 'button';\n  @Input() disabled = false;\n  @Input() loading = false;\n  @Input() icon?: string;\n  @Input() iconPosition: 'left' | 'right' = 'left';\n  @Input() iconOnly = false;\n  @Input() fullWidth = false;\n  @Input() rounded = false;\n  @Input() badge?: number | string;\n  @Input() badgeVariant: 'primary' | 'danger' | 'success' | 'warning' = 'danger';\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n  \n  @Output() clicked = new EventEmitter<MouseEvent>();\n\n  getButtonClasses(): string {\n    const baseClasses = [\n      'inline-flex items-center justify-center gap-2',\n      'font-medium transition-all duration-200',\n      'focus:outline-none focus:ring-2 focus:ring-offset-2',\n      'disabled:opacity-50 disabled:cursor-not-allowed',\n      'relative whitespace-nowrap'\n    ];\n\n    // Size classes\n    const sizeClasses = {\n      small: 'px-3 py-1.5 text-sm min-h-[28px]',\n      medium: 'px-5 py-2.5 text-base min-h-[40px]',\n      large: 'px-7 py-3.5 text-lg min-h-[48px]'\n    };\n\n    // Variant + Style Type combination\n    const variantClasses = this.getVariantClasses();\n\n    // Additional classes\n    const additionalClasses = [];\n    if (this.fullWidth) additionalClasses.push('w-full');\n    if (this.rounded) additionalClasses.push('rounded-full');\n    else additionalClasses.push('rounded-md');\n    if (this.iconOnly) additionalClasses.push('!p-2 aspect-square');\n\n    return [\n      ...baseClasses,\n      sizeClasses[this.size],\n      variantClasses,\n      ...additionalClasses,\n      this.customClass || '' // Add custom classes if provided\n    ].filter(Boolean).join(' ');\n  }\n\n  private getVariantClasses(): string {\n    const variants = {\n      solid: {\n        primary: 'bg-primary-500 text-white hover:bg-primary-600 focus:ring-primary-500',\n        secondary: 'bg-neutral-600 text-white hover:bg-neutral-700 focus:ring-neutral-600',\n        success: 'bg-success-500 text-white hover:bg-success-600 focus:ring-success-500',\n        warning: 'bg-accent-500 text-neutral-900 hover:bg-accent-600 focus:ring-accent-500',\n        danger: 'bg-danger-500 text-white hover:bg-danger-600 focus:ring-danger-500',\n        info: 'bg-primary-400 text-white hover:bg-primary-500 focus:ring-primary-400'\n      },\n      outline: {\n        primary: 'border-2 border-primary-500 text-primary-600 hover:bg-primary-50 focus:ring-primary-500',\n        secondary: 'border-2 border-neutral-400 text-neutral-700 hover:bg-neutral-50 focus:ring-neutral-400',\n        success: 'border-2 border-success-500 text-success-600 hover:bg-success-50 focus:ring-success-500',\n        warning: 'border-2 border-accent-500 text-accent-700 hover:bg-accent-50 focus:ring-accent-500',\n        danger: 'border-2 border-danger-500 text-danger-600 hover:bg-danger-50 focus:ring-danger-500',\n        info: 'border-2 border-primary-400 text-primary-500 hover:bg-primary-50 focus:ring-primary-400'\n      },\n      ghost: {\n        primary: 'text-primary-600 hover:bg-primary-50 focus:ring-primary-500',\n        secondary: 'text-neutral-700 hover:bg-neutral-100 focus:ring-neutral-400',\n        success: 'text-success-600 hover:bg-success-50 focus:ring-success-500',\n        warning: 'text-accent-700 hover:bg-accent-50 focus:ring-accent-500',\n        danger: 'text-danger-600 hover:bg-danger-50 focus:ring-danger-500',\n        info: 'text-primary-500 hover:bg-primary-50 focus:ring-primary-400'\n      }\n    };\n\n    return variants[this.styleType][this.variant];\n  }\n\n  getBadgeClasses(): string {\n    const baseClasses = 'ml-2 w-5 h-5 rounded-full inline-flex items-center justify-center text-xs font-semibold flex-shrink-0';\n    \n    const badgeVariants = {\n      primary: 'bg-primary-500 text-white',\n      danger: 'bg-danger-500 text-white',\n      success: 'bg-success-500 text-white',\n      warning: 'bg-accent-500 text-neutral-900'\n    };\n\n    return `${baseClasses} ${badgeVariants[this.badgeVariant]}`;\n  }\n\n  handleClick(event: MouseEvent): void {\n    if (!this.disabled && !this.loading) {\n      this.clicked.emit(event);\n    }\n  }\n}\n","<button\n  [type]=\"type\"\n  [class]=\"getButtonClasses()\"\n  [disabled]=\"disabled || loading\"\n  (click)=\"handleClick($event)\"\n>\n  <!-- Loading Spinner - centered vertically -->\n  <svg *ngIf=\"loading\" class=\"animate-spin h-4 w-4 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n    <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n    <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n  </svg>\n  \n  <!-- Left Icon - centered vertically with flex -->\n  <span *ngIf=\"icon && iconPosition === 'left' && !loading\" \n        class=\"flex items-center justify-center flex-shrink-0\"\n        [class]=\"'icon-' + icon\">\n  </span>\n  \n  <!-- Button Content -->\n  <span class=\"flex items-center\">\n    <ng-content></ng-content>\n  </span>\n  \n  <!-- Badge circle with number - placed after label, inside button -->\n  <span *ngIf=\"badge !== undefined && badge !== null\" [class]=\"getBadgeClasses()\">\n    {{ badge }}\n  </span>\n  \n  <!-- Right Icon - centered vertically with flex -->\n  <span *ngIf=\"icon && iconPosition === 'right' && !loading\" \n        class=\"flex items-center justify-center flex-shrink-0\"\n        [class]=\"'icon-' + icon\">\n  </span>\n</button>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport interface DropdownOption {\n  label: string;\n  value: any;\n  disabled?: boolean;\n  icon?: string;\n}\n\n@Component({\n  selector: 'keu-dropdown',\n  standalone: true,\n  imports: [FormsModule],\n  templateUrl: './dropdown.component.html',\n})\nexport class DropdownComponent {\n  @Input() options: DropdownOption[] = [];\n  @Input() placeholder: string = 'Select an option';\n  @Input() value: any = null;\n  @Input() disabled: boolean = false;\n  @Input() size: 'small' | 'medium' | 'large' = 'medium';\n  @Input() emptyMessage: string = 'No options available';\n  @Input() label: string = '';\n  @Input() required: boolean = false;\n  @Input() searchable: boolean = false;\n  \n  @Output() valueChange = new EventEmitter<any>();\n  @Output() optionSelected = new EventEmitter<DropdownOption>();\n  \n  isOpen: boolean = false;\n  selectedOption: DropdownOption | null = null;\n  searchTerm: string = '';\n  filteredOptions: DropdownOption[] = [];\n\n  constructor(private elementRef: ElementRef) {}\n\n  ngOnInit() {\n    this.updateSelectedOption();\n    this.filteredOptions = [...this.options];\n  }\n\n  ngOnChanges() {\n    this.updateSelectedOption();\n    this.filteredOptions = [...this.options];\n  }\n\n  private updateSelectedOption() {\n    this.selectedOption = this.options.find(opt => opt.value === this.value) || null;\n  }\n\n  toggle() {\n    if (!this.disabled) {\n      this.isOpen = !this.isOpen;\n      if (this.isOpen) {\n        this.searchTerm = '';\n        this.filteredOptions = [...this.options];\n        // Focus search input after dropdown opens\n        setTimeout(() => {\n          const searchInput = this.elementRef.nativeElement.querySelector('input[type=\"text\"]');\n          if (searchInput && this.searchable) {\n            searchInput.focus();\n          }\n        }, 0);\n      }\n    }\n  }\n\n  onSearchChange() {\n    const term = this.searchTerm.toLowerCase().trim();\n    if (term === '') {\n      this.filteredOptions = [...this.options];\n    } else {\n      this.filteredOptions = this.options.filter(option => \n        option.label.toLowerCase().includes(term)\n      );\n    }\n  }\n\n  selectOption(option: DropdownOption) {\n    if (option.disabled) return;\n    \n    this.value = option.value;\n    this.selectedOption = option;\n    this.isOpen = false;\n    this.searchTerm = '';\n    this.filteredOptions = [...this.options];\n    \n    this.valueChange.emit(option.value);\n    this.optionSelected.emit(option);\n  }\n\n  isSelected(option: DropdownOption): boolean {\n    return this.value === option.value;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: Event) {\n    if (!this.elementRef.nativeElement.contains(event.target)) {\n      this.isOpen = false;\n      this.searchTerm = '';\n      this.filteredOptions = [...this.options];\n    }\n  }\n\n  // Tailwind class generators\n  getContainerClasses(): string {\n    const classes = ['relative inline-block w-full'];\n    \n    if (this.disabled) {\n      classes.push('opacity-60 pointer-events-none');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getTriggerClasses(): string {\n    const baseClasses = [\n      'w-full flex items-center justify-between',\n      'bg-white border border-neutral-300 rounded',\n      'cursor-pointer transition-all duration-200',\n      'focus:outline-none focus:border-primary-500 focus:ring-4 focus:ring-primary-50',\n      'disabled:bg-neutral-50 disabled:text-neutral-500 disabled:cursor-not-allowed disabled:border-neutral-200'\n    ];\n\n    // Size-specific padding and font size\n    const sizeClasses = {\n      small: 'px-2.5 py-1.5 text-sm',\n      medium: 'px-3 py-2 text-base',\n      large: 'px-3.5 py-2.5 text-lg'\n    };\n\n    const classes = [...baseClasses, sizeClasses[this.size]];\n\n    // Highlight when open\n    if (this.isOpen) {\n      classes.push('border-primary-500 ring-4 ring-primary-50');\n    } else {\n      classes.push('hover:border-primary-500 hover:ring-4 hover:ring-primary-50');\n    }\n\n    return classes.join(' ');\n  }\n\n  getMenuClasses(): string {\n    const baseClasses = [\n      'absolute left-0 right-0 mt-1',\n      'bg-white border border-neutral-300 rounded',\n      'shadow-lg z-50',\n      'animate-[fadeIn_0.2s_ease]'\n    ];\n\n    // Auto height - mengikuti konten seperti accordion\n    return baseClasses.join(' ');\n  }\n\n  getOptionClasses(option: DropdownOption): string {\n    const baseClasses = [\n      'flex items-center px-3 py-2.5',\n      'transition-colors duration-150'\n    ];\n\n    if (option.disabled) {\n      baseClasses.push('text-neutral-500 cursor-not-allowed opacity-60');\n    } else {\n      baseClasses.push('cursor-pointer text-neutral-900');\n      \n      if (this.isSelected(option)) {\n        baseClasses.push('bg-primary-50 text-primary-600 hover:bg-primary-100');\n      } else {\n        baseClasses.push('hover:bg-neutral-50');\n      }\n    }\n\n    return baseClasses.join(' ');\n  }\n}\n","<!-- Dropdown container with Tailwind utility classes -->\n    <div [class]=\"getContainerClasses()\">\n      <!-- Label -->\n      @if (label) {\n        <label class=\"block text-sm font-medium text-neutral-700 mb-2\">\n          {{ label }}\n          @if (required) {\n            <span class=\"text-danger-500 ml-1\">*</span>\n          }\n        </label>\n      }\n\n      <!-- Trigger button -->\n      <button \n        type=\"button\"\n        [class]=\"getTriggerClasses()\"\n        (click)=\"toggle()\"\n        [disabled]=\"disabled\"\n      >\n        <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden text-ellipsis\">\n          {{ selectedOption ? selectedOption.label : placeholder }}\n        </span>\n        <span class=\"ml-2 text-xs text-neutral-600 transition-transform duration-200\" [class.rotate-180]=\"isOpen\">▼</span>\n      </button>\n      \n      <!-- Dropdown menu - uses Tailwind for styling, no custom CSS needed -->\n      @if (isOpen && !disabled) {\n        <div [class]=\"getMenuClasses()\">\n          <!-- Search input -->\n          @if (searchable) {\n            <div class=\"p-2 border-b border-neutral-200\">\n              <div class=\"relative\">\n                <input\n                  #searchInput\n                  type=\"text\"\n                  [(ngModel)]=\"searchTerm\"\n                  (input)=\"onSearchChange()\"\n                  (click)=\"$event.stopPropagation()\"\n                  placeholder=\"Search...\"\n                  class=\"w-full px-3 py-2 pl-9 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-50\"\n                />\n                <svg class=\"w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-neutral-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"/>\n                </svg>\n              </div>\n            </div>\n          }\n\n          <!-- Options list -->\n          <div class=\"max-h-60 overflow-y-auto\">\n            @for (option of filteredOptions; track option.value) {\n              <div \n                [class]=\"getOptionClasses(option)\"\n                (click)=\"selectOption(option)\"\n              >\n                @if (option.icon) {\n                  <span class=\"mr-2 text-base\">{{ option.icon }}</span>\n                }\n                <span class=\"flex-1\">{{ option.label }}</span>\n                @if (isSelected(option)) {\n                  <span class=\"ml-2 text-primary-600 font-bold\">✓</span>\n                }\n              </div>\n            }\n            <!-- Empty state -->\n            @if (filteredOptions.length === 0) {\n              <div class=\"px-4 py-4 text-center text-neutral-500 text-sm\">\n                {{ searchTerm ? 'No results found' : emptyMessage }}\n              </div>\n            }\n          </div>\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport interface TableColumn {\n  key: string;\n  label: string;\n  sortable?: boolean;\n  width?: string;\n  align?: 'left' | 'center' | 'right';\n  type?: 'text' | 'avatar' | 'number' | 'badge'; // Support different cell types\n  editable?: boolean; // Support inline editing\n}\n\nexport interface TableData {\n  [key: string]: any;\n  avatar?: string; // Avatar image URL\n  name?: string; // Name for avatar display\n}\n\nexport interface TableFilter {\n  dateFrom?: string;\n  dateTo?: string;\n  status?: string;\n  search?: string;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\n@Component({\n  selector: 'keu-table',\n  standalone: true,\n  imports: [FormsModule],\n  templateUrl: './table.component.html',\n})\nexport class TableComponent {\n  // Basic inputs\n  @Input() columns: TableColumn[] = [];\n  @Input() data: TableData[] = [];\n  @Input() size: 'small' | 'medium' | 'large' = 'medium';\n  @Input() striped: boolean = false;\n  @Input() bordered: boolean = false;\n  @Input() hover: boolean = true;\n  @Input() selectable: boolean = false;\n  @Input() pagination: boolean = false;\n  @Input() pageSize: number = 10;\n  @Input() emptyMessage: string = 'No data available';\n  \n  // New Figma-inspired inputs\n  @Input() title?: string; // Card title\n  @Input() subtitle?: string; // Card subtitle\n  @Input() showFilters: boolean = false; // Show filter section\n  @Input() statusOptions: string[] = []; // Status dropdown options\n  @Input() editable: boolean = false; // Show edit icon in actions\n  @Input() showToggle: boolean = false; // Show toggle switch in actions\n  @Input() actions?: { key: string; label: string; icon?: string; variant?: 'default' | 'primary' }[];\n  \n  // Outputs\n  @Output() rowSelected = new EventEmitter<TableData[]>();\n  @Output() actionClicked = new EventEmitter<{ action: string; row: TableData }>();\n  @Output() sortChanged = new EventEmitter<{ key: string; direction: SortDirection }>();\n  @Output() filterChanged = new EventEmitter<TableFilter>();\n  @Output() toggleChanged = new EventEmitter<{ row: TableData; enabled: boolean }>();\n  @Output() cellEdited = new EventEmitter<{ row: TableData; column: string; value: any }>();\n  @Output() editClicked = new EventEmitter<TableData>();\n  \n  // State\n  selectedRows: Set<TableData> = new Set();\n  sortKey: string | null = null;\n  sortDirection: SortDirection = null;\n  currentPage: number = 1;\n  filters: TableFilter = {};\n  editingCell: { row: number; col: number } | null = null;\n  originalValue: any = null;\n\n  // Filter data based on filter inputs\n  get filteredData(): TableData[] {\n    let result = [...this.data];\n    \n    // Apply search filter\n    if (this.filters.search) {\n      const search = this.filters.search.toLowerCase();\n      result = result.filter(row => \n        Object.values(row).some(val => \n          String(val).toLowerCase().includes(search)\n        )\n      );\n    }\n    \n    // Apply status filter\n    if (this.filters.status) {\n      result = result.filter(row => row['status'] === this.filters.status);\n    }\n    \n    // Apply date filters (placeholder - implement based on your date format)\n    // if (this.filters.dateFrom) { ... }\n    // if (this.filters.dateTo) { ... }\n    \n    return result;\n  }\n\n  get sortedData(): TableData[] {\n    if (!this.sortKey || !this.sortDirection) {\n      return this.filteredData;\n    }\n    \n    return [...this.filteredData].sort((a, b) => {\n      const aVal = a[this.sortKey!];\n      const bVal = b[this.sortKey!];\n      \n      if (aVal < bVal) return this.sortDirection === 'asc' ? -1 : 1;\n      if (aVal > bVal) return this.sortDirection === 'asc' ? 1 : -1;\n      return 0;\n    });\n  }\n\n  get paginatedData(): TableData[] {\n    if (!this.pagination) {\n      return this.sortedData;\n    }\n    \n    const start = (this.currentPage - 1) * this.pageSize;\n    const end = start + this.pageSize;\n    return this.sortedData.slice(start, end);\n  }\n\n  get totalPages(): number {\n    return Math.ceil(this.filteredData.length / this.pageSize);\n  }\n\n  get visiblePages(): number[] {\n    const pages: number[] = [];\n    const maxVisible = 5;\n    let start = Math.max(1, this.currentPage - Math.floor(maxVisible / 2));\n    let end = Math.min(this.totalPages, start + maxVisible - 1);\n    \n    if (end - start < maxVisible - 1) {\n      start = Math.max(1, end - maxVisible + 1);\n    }\n    \n    for (let i = start; i <= end; i++) {\n      pages.push(i);\n    }\n    \n    return pages;\n  }\n\n  get allPages(): number[] {\n    const pages: number[] = [];\n    for (let i = 1; i <= this.totalPages; i++) {\n      pages.push(i);\n    }\n    return pages;\n  }\n\n  get startIndex(): number {\n    return (this.currentPage - 1) * this.pageSize;\n  }\n\n  get endIndex(): number {\n    return Math.min(this.startIndex + this.pageSize, this.filteredData.length);\n  }\n\n  get totalColumns(): number {\n    let count = this.columns.length;\n    if (this.selectable) count++;\n    if (this.actions) count++;\n    return count;\n  }\n\n  sort(key: string) {\n    if (this.sortKey === key) {\n      if (this.sortDirection === 'asc') {\n        this.sortDirection = 'desc';\n      } else if (this.sortDirection === 'desc') {\n        this.sortDirection = null;\n        this.sortKey = null;\n      }\n    } else {\n      this.sortKey = key;\n      this.sortDirection = 'asc';\n    }\n    \n    this.sortChanged.emit({ key: this.sortKey || '', direction: this.sortDirection });\n  }\n\n  isSelected(row: TableData): boolean {\n    return this.selectedRows.has(row);\n  }\n\n  toggleSelect(row: TableData) {\n    if (this.selectedRows.has(row)) {\n      this.selectedRows.delete(row);\n    } else {\n      this.selectedRows.add(row);\n    }\n    this.rowSelected.emit(Array.from(this.selectedRows));\n  }\n\n  isAllSelected(): boolean {\n    return this.paginatedData.length > 0 && \n           this.paginatedData.every(row => this.selectedRows.has(row));\n  }\n\n  isSomeSelected(): boolean {\n    return this.selectedRows.size > 0 && !this.isAllSelected();\n  }\n\n  toggleSelectAll() {\n    if (this.isAllSelected()) {\n      this.paginatedData.forEach(row => this.selectedRows.delete(row));\n    } else {\n      this.paginatedData.forEach(row => this.selectedRows.add(row));\n    }\n    this.rowSelected.emit(Array.from(this.selectedRows));\n  }\n\n  goToPage(page: number) {\n    if (page >= 1 && page <= this.totalPages) {\n      this.currentPage = page;\n    }\n  }\n\n  onAction(action: string, row: TableData) {\n    this.actionClicked.emit({ action, row });\n  }\n\n  onFilterChange() {\n    this.currentPage = 1; // Reset to first page on filter change\n    this.filterChanged.emit(this.filters);\n  }\n\n  onPageSizeChange() {\n    this.currentPage = 1; // Reset to first page on page size change\n  }\n\n  onPageChange(event: Event) {\n    const target = event.target as HTMLSelectElement;\n    this.currentPage = parseInt(target.value, 10);\n  }\n\n  onToggle(row: TableData) {\n    row['enabled'] = !row['enabled'];\n    this.toggleChanged.emit({ row, enabled: row['enabled'] });\n  }\n\n  onEdit(row: TableData) {\n    this.editClicked.emit(row);\n  }\n\n  startEditing(rowIndex: number, colIndex: number) {\n    const row = this.paginatedData[rowIndex];\n    const column = this.columns[colIndex];\n    this.originalValue = row[column.key];\n    this.editingCell = { row: rowIndex, col: colIndex };\n  }\n\n  stopEditing() {\n    if (this.editingCell) {\n      const row = this.paginatedData[this.editingCell.row];\n      const column = this.columns[this.editingCell.col];\n      this.cellEdited.emit({ row, column: column.key, value: row[column.key] });\n      this.editingCell = null;\n      this.originalValue = null;\n    }\n  }\n\n  cancelEditing() {\n    if (this.editingCell) {\n      const row = this.paginatedData[this.editingCell.row];\n      const column = this.columns[this.editingCell.col];\n      row[column.key] = this.originalValue;\n      this.editingCell = null;\n      this.originalValue = null;\n    }\n  }\n\n  // Tailwind class generators\n  getTableClasses(): string {\n    const baseClasses = ['w-full border-collapse bg-white'];\n    \n    // Size-specific classes\n    const sizeClasses = {\n      small: 'text-xs',\n      medium: 'text-sm',\n      large: 'text-base'\n    };\n    \n    baseClasses.push(sizeClasses[this.size]);\n    \n    return baseClasses.join(' ');\n  }\n\n  getTheadClasses(): string {\n    return 'bg-neutral-100';\n  }\n\n  getHeaderCellClasses(column: TableColumn): string {\n    const classes = ['px-4 py-3 font-semibold text-neutral-900 border-b-2 border-neutral-200 whitespace-nowrap'];\n    \n    // Alignment\n    const alignClasses = {\n      left: 'text-left',\n      center: 'text-center',\n      right: 'text-right'\n    };\n    classes.push(alignClasses[column.align || 'left']);\n    \n    // Sortable\n    if (column.sortable) {\n      classes.push('cursor-pointer select-none hover:bg-neutral-200 transition-colors');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getRowClasses(index: number): string {\n    const classes = ['border-b border-neutral-200'];\n    \n    // Striped\n    if (this.striped && index % 2 === 1) {\n      classes.push('bg-neutral-50');\n    }\n    \n    // Hover\n    if (this.hover) {\n      classes.push('hover:bg-neutral-100 cursor-pointer transition-colors');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getDataCellClasses(column: TableColumn): string {\n    const baseClasses = ['px-4 py-3 text-neutral-700'];\n    \n    // Size-specific padding\n    const sizePadding = {\n      small: 'px-2 py-2',\n      medium: 'px-4 py-3',\n      large: 'px-4 py-4'\n    };\n    \n    // Alignment\n    const alignClasses = {\n      left: 'text-left',\n      center: 'text-center',\n      right: 'text-right'\n    };\n    \n    return [sizePadding[this.size], alignClasses[column.align || 'left'], 'text-neutral-700'].join(' ');\n  }\n\n  getActionButtonClasses(action?: { key: string; label: string; icon?: string; variant?: 'default' | 'primary' }): string {\n    const baseClasses = ['px-3 py-1.5 text-sm font-medium rounded transition-colors'];\n    \n    if (action?.variant === 'primary') {\n      baseClasses.push('bg-primary-600 text-white border border-primary-600 hover:bg-primary-700');\n    } else {\n      baseClasses.push('bg-white text-neutral-700 border border-neutral-300 hover:bg-neutral-50 hover:border-primary-500');\n    }\n    \n    return baseClasses.join(' ');\n  }\n\n  getPageButtonClasses(page: number): string {\n    const baseClasses = [\n      'px-3 py-1 text-sm border rounded transition-colors min-w-[36px]'\n    ];\n    \n    if (page === this.currentPage) {\n      baseClasses.push('bg-primary-600 text-white border-primary-600 hover:bg-primary-700');\n    } else {\n      baseClasses.push('bg-white text-neutral-700 border-neutral-300 hover:bg-neutral-100 hover:border-primary-500');\n    }\n    \n    return baseClasses.join(' ');\n  }\n}\n","<!-- Card wrapper -->\n    <div class=\"w-full bg-white rounded-lg border border-neutral-200 shadow-sm\">\n      <!-- Card header with title and subtitle -->\n      @if (title) {\n        <div class=\"px-6 py-4 border-b border-neutral-200\">\n          <h3 class=\"text-lg font-semibold text-neutral-900\">{{ title }}</h3>\n          @if (subtitle) {\n            <p class=\"text-sm text-neutral-500 mt-1\">{{ subtitle }}</p>\n          }\n        </div>\n      }\n      \n      <!-- Filter section -->\n      @if (showFilters) {\n        <div class=\"px-6 py-4 border-b border-neutral-200 bg-neutral-50\">\n          <div class=\"flex flex-wrap gap-3 items-center\">\n          <!-- Date From with calendar icon -->\n          <div class=\"relative\">\n            <input \n              type=\"text\"\n              placeholder=\"dd/mm/yy\"\n              [(ngModel)]=\"filters.dateFrom\"\n              (ngModelChange)=\"onFilterChange()\"\n              class=\"pl-3 pr-9 py-2 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-50 w-36\"\n            />\n            <span class=\"absolute right-3 top-1/2 -translate-y-1/2 text-neutral-400 pointer-events-none\">📅</span>\n          </div>\n          \n          <!-- Date To with calendar icon -->\n          <div class=\"relative\">\n            <input \n              type=\"text\"\n              placeholder=\"dd/mm/yy\"\n              [(ngModel)]=\"filters.dateTo\"\n              (ngModelChange)=\"onFilterChange()\"\n              class=\"pl-3 pr-9 py-2 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-50 w-36\"\n            />\n            <span class=\"absolute right-3 top-1/2 -translate-y-1/2 text-neutral-400 pointer-events-none\">📅</span>\n          </div>\n          \n          <!-- Status Dropdown -->\n          <select \n            [(ngModel)]=\"filters.status\"\n            (ngModelChange)=\"onFilterChange()\"\n            class=\"px-3 py-2 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-50 bg-white cursor-pointer w-40 text-neutral-500\"\n            [class.text-neutral-900]=\"filters.status\"\n          >\n            <option value=\"\" disabled selected hidden>Status</option>\n            @for (status of statusOptions; track status) {\n              <option [value]=\"status\" class=\"text-neutral-900\">{{ status }}</option>\n            }\n          </select>\n          \n          <!-- Search -->\n          <div class=\"flex-1 relative min-w-[200px]\">\n            <input \n              type=\"text\"\n              placeholder=\"Search\"\n              [(ngModel)]=\"filters.search\"\n              (ngModelChange)=\"onFilterChange()\"\n              class=\"w-full px-3 py-2 pr-10 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 focus:ring-2 focus:ring-primary-50\"\n            />\n            <span class=\"absolute right-3 top-1/2 -translate-y-1/2 text-neutral-400\">🔍</span>\n          </div>\n        </div>\n        </div>\n      }\n      \n      <!-- Table -->\n      <div class=\"overflow-x-auto\">\n        <table [class]=\"getTableClasses()\">\n        <!-- Table header -->\n        <thead [class]=\"getTheadClasses()\">\n          <tr>\n            <!-- Checkbox column -->\n            @if (selectable) {\n              <th class=\"w-12 px-4 py-3 text-left\">\n                <input \n                  type=\"checkbox\"\n                  class=\"w-4 h-4 rounded border-neutral-300 text-primary-600 focus:ring-2 focus:ring-primary-500 cursor-pointer\"\n                  [checked]=\"isAllSelected()\"\n                  [indeterminate]=\"isSomeSelected()\"\n                  (change)=\"toggleSelectAll()\"\n                />\n              </th>\n            }\n            <!-- Data columns -->\n            @for (column of columns; track column.key) {\n              <th \n                [style.width]=\"column.width\"\n                [class]=\"getHeaderCellClasses(column)\"\n                (click)=\"column.sortable ? sort(column.key) : null\"\n              >\n                <div class=\"flex items-center gap-2\">\n                  <span class=\"font-semibold\">{{ column.label }}</span>\n                  <!-- Sort icons -->\n                  @if (column.sortable) {\n                    <span class=\"text-neutral-400\">\n                      @if (sortKey !== column.key) {\n                        <span>⇅</span>\n                      }\n                      @if (sortKey === column.key && sortDirection === 'asc') {\n                        <span class=\"text-primary-600\">↑</span>\n                      }\n                      @if (sortKey === column.key && sortDirection === 'desc') {\n                        <span class=\"text-primary-600\">↓</span>\n                      }\n                    </span>\n                  }\n                </div>\n              </th>\n            }\n            <!-- Actions column -->\n            @if (actions) {\n              <th class=\"px-4 py-3 text-left font-semibold\">Actions</th>\n            }\n          </tr>\n        </thead>\n        <!-- Table body -->\n        <tbody>\n          @for (row of paginatedData; track row; let i = $index; let rowIndex = $index) {\n            <tr [class]=\"getRowClasses(i)\">\n              <!-- Checkbox cell -->\n              @if (selectable) {\n                <td class=\"px-4 py-3\">\n                  <input \n                    type=\"checkbox\"\n                    class=\"w-4 h-4 rounded border-neutral-300 text-primary-600 focus:ring-2 focus:ring-primary-500 cursor-pointer\"\n                    [checked]=\"isSelected(row)\"\n                    (change)=\"toggleSelect(row)\"\n                  />\n                </td>\n              }\n              <!-- Data cells -->\n              @for (column of columns; track column.key; let colIndex = $index) {\n                <td \n                  [class]=\"getDataCellClasses(column)\"\n                >\n                  <!-- Avatar/Image type -->\n                  @if (column.type === 'avatar' && row[column.key]) {\n                    <div class=\"flex items-center gap-3\">\n                      <div class=\"w-8 h-8 rounded-full bg-primary-100 flex items-center justify-center overflow-hidden\">\n                        @if (row.avatar) {\n                          <img [src]=\"row.avatar\" [alt]=\"row[column.key]\" class=\"w-full h-full object-cover\" />\n                        }\n                        @if (!row.avatar) {\n                          <span class=\"text-sm font-semibold text-primary-600\">\n                            {{ row[column.key]?.charAt(0)?.toUpperCase() }}\n                          </span>\n                        }\n                      </div>\n                      <div class=\"flex flex-col\">\n                        <span class=\"font-medium text-neutral-900\">{{ row[column.key] }}</span>\n                        @if (row['email']) {\n                          <span class=\"text-xs text-neutral-500\">{{ row['email'] }}</span>\n                        }\n                      </div>\n                    </div>\n                  }\n                  \n                  <!-- Editable text -->\n                  @if (column.editable && editingCell?.row === rowIndex && editingCell?.col === colIndex && column.type !== 'avatar') {\n                    <div>\n                      <input \n                        type=\"text\"\n                        [(ngModel)]=\"row[column.key]\"\n                        (blur)=\"stopEditing()\"\n                        (keyup.enter)=\"stopEditing()\"\n                        (keyup.escape)=\"cancelEditing()\"\n                        class=\"px-2 py-1 text-sm border border-primary-500 rounded focus:outline-none focus:ring-2 focus:ring-primary-50 w-full\"\n                        [autofocus]=\"true\"\n                      />\n                    </div>\n                  }\n                  \n                  <!-- Regular text (non-editable or not editing) -->\n                  @if (column.type !== 'avatar' && (!column.editable || editingCell?.row !== rowIndex || editingCell?.col !== colIndex)) {\n                    <div\n                         (dblclick)=\"column.editable ? startEditing(rowIndex, colIndex) : null\"\n                         [class.cursor-text]=\"column.editable\">\n                      {{ row[column.key] }}\n                    </div>\n                  }\n                </td>\n              }\n              <!-- Actions cell -->\n              @if (actions || showToggle) {\n                <td class=\"px-4 py-3\">\n                  <div class=\"flex items-center gap-2\">\n                    <!-- Toggle switch -->\n                    @if (showToggle) {\n                      <label class=\"relative inline-flex items-center cursor-pointer\">\n                        <input \n                          type=\"checkbox\" \n                          [checked]=\"row['enabled'] || false\"\n                          (change)=\"onToggle(row)\"\n                          class=\"sr-only peer\"\n                        />\n                        <div class=\"w-9 h-5 bg-neutral-300 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-primary-50 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-neutral-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-primary-600\"></div>\n                      </label>\n                    }\n                    \n                    <!-- Edit icon -->\n                    @if (editable) {\n                      <button \n                        class=\"p-1.5 text-neutral-600 hover:text-primary-600 hover:bg-primary-50 rounded transition-colors\"\n                        title=\"Edit\"\n                        (click)=\"onEdit(row)\"\n                      >\n                        ✏️\n                      </button>\n                    }\n                    \n                    <!-- Custom action buttons -->\n                    @for (action of actions; track action.key) {\n                      <button \n                        [class]=\"getActionButtonClasses(action)\"\n                        [title]=\"action.label\"\n                        (click)=\"onAction(action.key, row)\"\n                      >\n                        {{ action.icon || action.label }}\n                      </button>\n                    }\n                  </div>\n                </td>\n              }\n            </tr>\n          }\n          <!-- Empty state -->\n          @if (data.length === 0) {\n            <tr>\n              <td [attr.colspan]=\"totalColumns\" class=\"px-4 py-8 text-center text-neutral-500\">\n                {{ emptyMessage }}\n              </td>\n            </tr>\n          }\n        </tbody>\n      </table>\n      </div>\n      \n      <!-- Footer with pagination -->\n      @if (pagination && filteredData.length > 0) {\n        <div class=\"px-6 py-4 border-t border-neutral-200 bg-white\">\n          <div class=\"flex flex-wrap items-center justify-end gap-4\">\n            <!-- Pagination info and controls (all right-aligned) -->\n            <div class=\"flex items-center gap-4\">\n              <!-- Row range: \"1-8 dari 1\" -->\n              <span class=\"text-sm text-neutral-600\">\n                {{ startIndex + 1 }}-{{ endIndex }} dari {{ currentPage }}\n              </span>\n              \n              <!-- Page selector: \"Halaman [dropdown] dari total pages\" -->\n              <div class=\"flex items-center gap-2\">\n                <span class=\"text-sm text-neutral-600\">Halaman</span>\n                <select \n                  [value]=\"currentPage\"\n                  (change)=\"onPageChange($event)\"\n                  class=\"px-2 py-1 text-sm border border-neutral-300 rounded focus:outline-none focus:border-primary-500 bg-white cursor-pointer\"\n                >\n                  @for (page of allPages; track page) {\n                    <option [value]=\"page\">{{ page }}</option>\n                  }\n                </select>\n                <span class=\"text-sm text-neutral-600\">dari {{ totalPages }}</span>\n              </div>\n            </div>\n            \n            <!-- Page navigation -->\n            <div class=\"flex items-center gap-1\">\n              <!-- Previous arrow button -->\n              <button \n                class=\"w-8 h-8 flex items-center justify-center text-neutral-600 border border-neutral-300 rounded hover:bg-neutral-50 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n                [disabled]=\"currentPage === 1\"\n                (click)=\"goToPage(currentPage - 1)\"\n                title=\"Previous\"\n              >\n                ‹\n              </button>\n              \n              <!-- Current page number button (active) -->\n            <button \n              class=\"min-w-[32px] h-8 px-3 flex items-center justify-center text-sm font-medium text-white bg-primary-600 border border-primary-600 rounded hover:bg-primary-700 transition-colors\"\n            >\n              {{ currentPage }}\n            </button>\n            \n            <!-- Next arrow button -->\n            <button \n              class=\"w-8 h-8 flex items-center justify-center text-neutral-600 border border-neutral-300 rounded hover:bg-neutral-50 disabled:opacity-40 disabled:cursor-not-allowed transition-colors\"\n              [disabled]=\"currentPage === totalPages\"\n              (click)=\"goToPage(currentPage + 1)\"\n              title=\"Next\"\n            >\n              ›\n            </button>\n          </div>\n        </div>\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'keu-alert',\n  standalone: true,\n  imports: [],\n  templateUrl: './alert.component.html',\n})\nexport class AlertComponent {\n  @Input() variant: 'success' | 'info' | 'warning' | 'error' = 'info';\n  @Input() message: string = \"I'm an Alert Usage Example\";\n  @Input() dismissible: boolean = false;\n  @Input() showIcon: boolean = false;\n  @Input() visible: boolean = true;\n  @Input() bordered: boolean = false; // New: outline/bordered variant\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n  \n  @Output() closed = new EventEmitter<void>();\n  \n  close() {\n    this.visible = false;\n    this.closed.emit();\n  }\n\n  // Tailwind class generators for Figma design\n  getAlertClasses(): string {\n    const baseClasses = [\n      'flex items-center gap-3 px-4 py-3 rounded text-white'\n    ];\n\n    if (this.bordered) {\n      // Bordered/Outline variant with bottom border\n      const borderedClasses = {\n        success: 'bg-white border border-success-500 border-b-[3px] text-success-700',\n        info: 'bg-white border border-primary-500 border-b-[3px] text-primary-700',\n        warning: 'bg-white border border-accent-500 border-b-[3px] text-accent-700',\n        error: 'bg-white border border-danger-500 border-b-[3px] text-danger-700'\n      };\n      baseClasses.push(borderedClasses[this.variant]);\n    } else {\n      // Solid/Filled variant\n      const solidClasses = {\n        success: 'bg-success-500',\n        info: 'bg-primary-500',\n        warning: 'bg-accent-500',\n        error: 'bg-danger-500'\n      };\n      baseClasses.push(solidClasses[this.variant]);\n    }\n\n    // Add custom classes if provided\n    if (this.customClass) {\n      baseClasses.push(this.customClass);\n    }\n\n    return baseClasses.filter(Boolean).join(' ');\n  }\n\n  getIconClasses(): string {\n    if (this.bordered) {\n      // Icon color for bordered variant\n      const iconColors = {\n        success: 'text-success-600',\n        info: 'text-primary-600',\n        warning: 'text-accent-600',\n        error: 'text-danger-600'\n      };\n      return `flex-shrink-0 ${iconColors[this.variant]}`;\n    } else {\n      // White icon for solid variant\n      return 'flex-shrink-0 text-white';\n    }\n  }\n\n  getCloseButtonClasses(): string {\n    const baseClasses = [\n      'flex-shrink-0 hover:opacity-80 transition-opacity focus:outline-none'\n    ];\n    \n    if (this.bordered) {\n      const closeColors = {\n        success: 'text-success-600',\n        info: 'text-primary-600',\n        warning: 'text-accent-600',\n        error: 'text-danger-600'\n      };\n      baseClasses.push(closeColors[this.variant]);\n    } else {\n      baseClasses.push('text-white');\n    }\n    \n    return baseClasses.join(' ');\n  }\n}\n","<!-- Alert with Tailwind classes - Figma design -->\n    @if (visible) {\n      <div \n        [class]=\"getAlertClasses()\"\n        role=\"alert\"\n      >\n        <!-- Left: Icon (optional) -->\n        @if (showIcon) {\n          <div [class]=\"getIconClasses()\">\n            <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              @if (variant === 'success' || variant === 'info') {\n                <path fill-rule=\"evenodd\" d=\"M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z\" clip-rule=\"evenodd\"/>\n              }\n              @if (variant === 'warning' || variant === 'error') {\n                <path fill-rule=\"evenodd\" d=\"M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z\" clip-rule=\"evenodd\"/>\n              }\n            </svg>\n          </div>\n        }\n        \n        <!-- Center: Message content -->\n        <div class=\"flex-1\">\n          <span class=\"text-sm font-medium\">{{ message }}</span>\n        </div>\n        \n        <!-- Right: Close button (optional) -->\n        @if (dismissible) {\n          <button \n            [class]=\"getCloseButtonClasses()\"\n            type=\"button\"\n            (click)=\"close()\"\n            aria-label=\"Close\"\n          >\n            <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\n            </svg>\n          </button>\n        }\n      </div>\n    }","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\n\n@Component({\n  selector: 'keu-dialog',\n  standalone: true,\n  imports: [],\n  templateUrl: './dialog.component.html',\n})\nexport class DialogComponent {\n  @Input() visible: boolean = false;\n  @Input() title: string = '';\n  @Input() message: string = '';\n  @Input() icon: 'warning' | 'success' | 'none' = 'none';\n  @Input() size: 'small' | 'medium' | 'large' = 'small';\n  @Input() closable: boolean = true;\n  @Input() closeOnBackdrop: boolean = true;\n  @Input() closeOnEscape: boolean = true;\n  @Input() showFooter: boolean = true;\n  @Input() showCancelButton: boolean = true;\n  @Input() showConfirmButton: boolean = true;\n  @Input() cancelText: string = 'Cancel';\n  @Input() confirmText: string = 'Confirm';\n  @Input() type: 'default' | 'success' = 'default'; // For styling\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n  \n  @Output() visibleChange = new EventEmitter<boolean>();\n  @Output() closed = new EventEmitter<void>();\n  @Output() canceled = new EventEmitter<void>();\n  @Output() confirmed = new EventEmitter<void>();\n\n  @HostListener('document:keydown.escape')\n  onEscapeKey() {\n    if (this.closeOnEscape && this.visible) {\n      this.close();\n    }\n  }\n\n  onBackdropClick() {\n    if (this.closeOnBackdrop) {\n      this.close();\n    }\n  }\n\n  close() {\n    this.visible = false;\n    this.visibleChange.emit(false);\n    this.closed.emit();\n  }\n\n  cancel() {\n    this.canceled.emit();\n    this.close();\n  }\n\n  confirm() {\n    this.confirmed.emit();\n    this.close();\n  }\n\n  // Tailwind class generators for Figma design\n  getDialogClasses(): string {\n    const baseClasses = [\n      'relative bg-white rounded-lg shadow-xl',\n      'animate-[slideIn_0.3s_ease]',\n      'w-full'\n    ];\n\n    // Size-specific max-widths\n    const sizeClasses = {\n      small: 'max-w-sm p-6',      // ~384px - for confirmations\n      medium: 'max-w-md p-6',     // ~448px - for messages\n      large: 'max-w-2xl p-6'      // ~672px - for content-heavy dialogs\n    };\n\n    baseClasses.push(sizeClasses[this.size]);\n\n    // Add max-height for scrollable content\n    if (this.size === 'large') {\n      baseClasses.push('max-h-[80vh] overflow-y-auto');\n    }\n\n    // Add custom classes if provided\n    if (this.customClass) {\n      baseClasses.push(this.customClass);\n    }\n\n    return baseClasses.filter(Boolean).join(' ');\n  }\n\n  getIconContainerClasses(): string {\n    const baseClasses = ['flex justify-center mb-4'];\n    \n    if (this.icon === 'warning') {\n      baseClasses.push('text-accent-500'); // Orange warning\n    } else if (this.icon === 'success') {\n      baseClasses.push('text-success-500'); // Green success\n    }\n    \n    return baseClasses.join(' ');\n  }\n\n  getTitleClasses(): string {\n    const classes = ['font-semibold mb-2'];\n    \n    if (this.icon) {\n      classes.push('text-center text-base');\n    } else {\n      classes.push('text-lg');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getContentClasses(): string {\n    const classes = [];\n    \n    if (this.icon || this.message) {\n      classes.push('text-center');\n    }\n    \n    if (this.size === 'large') {\n      classes.push('mb-2');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getCancelButtonClasses(): string {\n    return 'px-6 py-2 text-sm font-medium text-neutral-700 bg-white border border-neutral-300 rounded hover:bg-neutral-50 transition-colors min-w-[100px]';\n  }\n\n  getConfirmButtonClasses(): string {\n    return 'px-6 py-2 text-sm font-medium text-white bg-primary-600 rounded hover:bg-primary-700 transition-colors min-w-[100px]';\n  }\n}\n","<!-- Dialog Backdrop -->\n    @if (visible) {\n      <div \n        class=\"fixed inset-0 flex items-center justify-center z-50 p-4\" \n        (click)=\"onBackdropClick()\"\n      >\n        <!-- Dialog Container -->\n        <div \n          [class]=\"getDialogClasses()\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          <!-- Close button (top right) -->\n          @if (closable) {\n            <button \n              class=\"absolute top-4 right-4 text-neutral-400 hover:text-neutral-600 transition-colors focus:outline-none\"\n              type=\"button\"\n              (click)=\"close()\"\n              aria-label=\"Close\"\n            >\n              <svg class=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n              </svg>\n            </button>\n          }\n\n          <!-- Icon (optional - centered at top) -->\n          @if (icon && icon !== 'none') {\n            <div [class]=\"getIconContainerClasses()\">\n              @if (icon === 'warning') {\n                <svg class=\"w-6 h-6\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                  <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"/>\n                </svg>\n              }\n              @if (icon === 'success') {\n                <svg class=\"w-8 h-8\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                  <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\n                </svg>\n              }\n            </div>\n          }\n          \n          <!-- Title -->\n          @if (title) {\n            <h3 [class]=\"getTitleClasses()\">\n              {{ title }}\n            </h3>\n          }\n          \n          <!-- Content/Message -->\n          <div [class]=\"getContentClasses()\">\n            @if (message) {\n              <p class=\"text-sm text-neutral-600 leading-relaxed\">{{ message }}</p>\n            }\n            <ng-content></ng-content>\n          </div>\n          \n          <!-- Footer Buttons -->\n          @if (showFooter) {\n            <div class=\"flex gap-3 justify-center mt-6\">\n              @if (showCancelButton) {\n                <button \n                  [class]=\"getCancelButtonClasses()\"\n                  type=\"button\"\n                  (click)=\"cancel()\"\n                >\n                  {{ cancelText }}\n                </button>\n              }\n              @if (showConfirmButton) {\n                <button \n                  [class]=\"getConfirmButtonClasses()\"\n                  type=\"button\"\n                  (click)=\"confirm()\"\n                >\n                  {{ confirmText }}\n                </button>\n              }\n            </div>\n          }\n        </div>\n      </div>\n    }","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nexport interface AccordionItem {\n  id: string;\n  title: string;\n  content: string;\n  disabled?: boolean;\n}\n\n@Component({\n  selector: 'keu-accordion',\n  standalone: true,\n  imports: [],\n  templateUrl: './accordion.component.html',\n})\nexport class AccordionComponent {\n  @Input() items: AccordionItem[] = [];\n  @Input() multiple: boolean = false;\n  @Input() defaultOpen: string[] = [];\n  \n  @Output() itemToggled = new EventEmitter<{ id: string; isOpen: boolean }>();\n  \n  openItems: Set<string> = new Set();\n\n  ngOnInit() {\n    this.defaultOpen.forEach(id => this.openItems.add(id));\n  }\n\n  isOpen(id: string): boolean {\n    return this.openItems.has(id);\n  }\n\n  toggle(id: string) {\n    const item = this.items.find(i => i.id === id);\n    if (item?.disabled) return;\n\n    if (this.openItems.has(id)) {\n      this.openItems.delete(id);\n      this.itemToggled.emit({ id, isOpen: false });\n    } else {\n      if (!this.multiple) {\n        this.openItems.clear();\n      }\n      this.openItems.add(id);\n      this.itemToggled.emit({ id, isOpen: true });\n    }\n  }\n\n  // Tailwind class generators\n  getHeaderClasses(id: string): string {\n    const baseClasses = [\n      'w-full flex items-center justify-between px-4 py-4',\n      'bg-neutral-50 border-none cursor-pointer text-sm text-left',\n      'transition-colors duration-200',\n      'hover:bg-neutral-100 disabled:cursor-not-allowed'\n    ];\n\n    if (this.isOpen(id)) {\n      baseClasses.push('bg-primary-50 text-primary-600');\n    } else {\n      baseClasses.push('text-neutral-900');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  getContentClasses(id: string): string {\n    const baseClasses = [\n      'overflow-hidden transition-[max-height] duration-300 ease-in-out'\n    ];\n\n    if (this.isOpen(id)) {\n      baseClasses.push('max-h-[1000px]');\n    } else {\n      baseClasses.push('max-h-0');\n    }\n\n    return baseClasses.join(' ');\n  }\n}\n","<!-- Accordion with Tailwind -->\n    <div class=\"border border-neutral-200 rounded overflow-hidden\">\n      @for (item of items; track item.id; let i = $index) {\n        <div \n          class=\"border-b border-neutral-200 last:border-b-0\"\n          [class.opacity-60]=\"item.disabled\"\n          [class.pointer-events-none]=\"item.disabled\"\n        >\n          <!-- Accordion header -->\n          <button\n            [class]=\"getHeaderClasses(item.id)\"\n            [disabled]=\"item.disabled\"\n            (click)=\"toggle(item.id)\"\n            type=\"button\"\n          >\n            <span class=\"font-medium\">{{ item.title }}</span>\n            <span \n              class=\"text-sm transition-transform duration-200\"\n              [class.rotate-180]=\"isOpen(item.id)\"\n            >\n              ▼\n            </span>\n          </button>\n          <!-- Accordion content -->\n          <div \n            [class]=\"getContentClasses(item.id)\"\n          >\n            <div class=\"px-4 py-3 text-neutral-700\">\n              {{ item.content }}\n            </div>\n          </div>\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'keu-pagination',\n  standalone: true,\n  imports: [],\n  templateUrl: './pagination.component.html',\n})\nexport class PaginationComponent {\n  @Input() currentPage: number = 1;\n  @Input() totalPages: number = 1;\n  @Input() maxVisiblePages: number = 5;\n  @Input() shape: 'square' | 'rounded' = 'square';\n  @Input() align: 'left' | 'right' | 'between' = 'right';\n  @Input() showInfo: boolean = true;\n  @Input() showPageSize: boolean = false;\n  @Input() pageSize: number = 10;\n  @Input() pageSizeOptions: number[] = [10, 20, 50, 100];\n  @Input() totalItems: number = 0;\n  \n  @Output() pageChanged = new EventEmitter<number>();\n  @Output() pageSizeChanged = new EventEmitter<number>();\n\n  get visiblePages(): number[] {\n    const pages: number[] = [];\n    let start = Math.max(1, this.currentPage - Math.floor(this.maxVisiblePages / 2));\n    let end = Math.min(this.totalPages, start + this.maxVisiblePages - 1);\n    \n    // Adjust start if we're near the end\n    if (end - start < this.maxVisiblePages - 1) {\n      start = Math.max(1, end - this.maxVisiblePages + 1);\n    }\n    \n    for (let i = start; i <= end; i++) {\n      pages.push(i);\n    }\n    \n    return pages;\n  }\n\n  get showEllipsis(): boolean {\n    return this.totalPages > this.maxVisiblePages && \n           this.visiblePages[this.visiblePages.length - 1] < this.totalPages;\n  }\n\n  goToPage(page: number) {\n    if (page >= 1 && page <= this.totalPages && page !== this.currentPage) {\n      this.currentPage = page;\n      this.pageChanged.emit(page);\n    }\n  }\n\n  goToFirst() {\n    this.goToPage(1);\n  }\n\n  goToLast() {\n    this.goToPage(this.totalPages);\n  }\n\n  goToPrevious() {\n    this.goToPage(this.currentPage - 1);\n  }\n\n  goToNext() {\n    this.goToPage(this.currentPage + 1);\n  }\n\n  onPageSizeChange(event: Event) {\n    const select = event.target as HTMLSelectElement;\n    const newSize = parseInt(select.value, 10);\n    this.pageSize = newSize;\n    this.pageSizeChanged.emit(newSize);\n  }\n\n  // Tailwind class generators\n  getNavButtonClasses(isDisabled: boolean): string {\n    const baseClasses = [\n      'min-w-[40px] h-10 px-3',\n      'border border-neutral-300 bg-white',\n      'text-sm font-medium text-neutral-700',\n      'inline-flex items-center justify-center',\n      'transition-colors',\n      'rounded-lg'\n    ];\n\n    if (isDisabled) {\n      baseClasses.push('opacity-50 cursor-not-allowed');\n    } else {\n      baseClasses.push('cursor-pointer hover:bg-neutral-50 hover:border-primary-400');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  getButtonClasses(): string {\n    const baseClasses = [\n      'px-3 py-2 bg-white border border-neutral-300',\n      'cursor-pointer text-sm min-w-[36px] inline-flex items-center justify-center',\n      'transition-all hover:bg-neutral-100 hover:border-primary-500',\n      'disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-neutral-50'\n    ];\n\n    // Shape-specific classes\n    if (this.shape === 'rounded') {\n      baseClasses.push('rounded-full w-9 h-9 p-0');\n    } else {\n      baseClasses.push('rounded');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  getPageButtonClasses(page: number): string {\n    const baseClasses = [\n      'px-3 py-2 border cursor-pointer text-sm min-w-[36px]',\n      'inline-flex items-center justify-center transition-all'\n    ];\n\n    // Shape-specific classes\n    if (this.shape === 'rounded') {\n      baseClasses.push('rounded-full w-9 h-9 p-0');\n    } else {\n      baseClasses.push('rounded');\n    }\n\n    // Active state\n    if (page === this.currentPage) {\n      baseClasses.push('bg-primary-600 text-white border-primary-600 font-semibold hover:bg-primary-700');\n    } else {\n      baseClasses.push('bg-white text-neutral-700 border-neutral-300 hover:bg-neutral-100 hover:border-primary-500');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  getContainerClasses(): string {\n    const baseClasses = ['flex items-center gap-4 flex-wrap'];\n    \n    switch (this.align) {\n      case 'left':\n        baseClasses.push('justify-start');\n        break;\n      case 'right':\n        baseClasses.push('justify-end');\n        break;\n      case 'between':\n        baseClasses.push('justify-between');\n        break;\n    }\n    \n    return baseClasses.join(' ');\n  }\n\n  getPageInfoText(): string {\n    if (this.totalItems > 0) {\n      const startItem = (this.currentPage - 1) * this.pageSize + 1;\n      const endItem = Math.min(this.currentPage * this.pageSize, this.totalItems);\n      return `${startItem}-${endItem} dari ${this.totalItems}`;\n    }\n    return `Page ${this.currentPage} of ${this.totalPages}`;\n  }\n}\n","<!-- Pagination with flexible alignment -->\n    <div [class]=\"getContainerClasses()\">\n      <!-- Page info text (left side) -->\n      @if (showInfo) {\n        <div class=\"text-sm text-neutral-600\">\n          {{ getPageInfoText() }}\n        </div>\n      }\n      \n      <!-- Page size selector -->\n      @if (showPageSize) {\n        <div class=\"flex items-center gap-2\">\n          <label class=\"text-sm text-neutral-600 font-medium\">Halaman</label>\n          <select \n            class=\"h-10 px-3 border border-neutral-300 rounded-lg text-sm font-medium cursor-pointer hover:border-primary-400 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500 bg-white transition-colors\"\n            [value]=\"pageSize\"\n            (change)=\"onPageSizeChange($event)\"\n          >\n            @for (size of pageSizeOptions; track size) {\n              <option [value]=\"size\">\n                {{ size }}\n              </option>\n            }\n          </select>\n          <span class=\"text-sm text-neutral-600 font-medium\">dari {{ totalPages }}</span>\n        </div>\n      }\n      \n      <!-- Pagination controls (right side) -->\n      <div class=\"flex items-center gap-2\">\n        <!-- Previous page button -->\n        <button \n          [class]=\"getNavButtonClasses(currentPage === 1)\"\n          [disabled]=\"currentPage === 1\"\n          (click)=\"goToPrevious()\"\n          title=\"Previous page\"\n        >\n          ‹\n        </button>\n        \n        <!-- Current page display (active state like table) -->\n        <button \n          class=\"min-w-[40px] h-10 px-3 bg-primary-500 text-white font-medium text-sm rounded-lg shadow-sm cursor-default\"\n          disabled\n        >\n          {{ currentPage }}\n        </button>\n        \n        <!-- Next page button -->\n        <button \n          [class]=\"getNavButtonClasses(currentPage === totalPages)\"\n          [disabled]=\"currentPage === totalPages\"\n          (click)=\"goToNext()\"\n          title=\"Next page\"\n        >\n          ›\n        </button>\n      </div>\n    </div>","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'keu-typography',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './typography.component.html',\n})\nexport class TypographyComponent {\n  @Input() variant: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'subheadline' | 'body1' | 'body2' | 'caption' | 'overline' = 'body1';\n  @Input() weight: 'regular' | 'medium' | 'bold' | 'extrabold' = 'regular';\n  @Input() color: string = 'text-neutral-900';\n  @Input() align: 'left' | 'center' | 'right' | 'justify' = 'left';\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n\n  getTypographyClasses(): string {\n    const classes: string[] = [];\n\n    // Size and line-height based on variant\n    switch (this.variant) {\n      case 'h1':\n        classes.push('text-6xl leading-tight'); // 60px\n        break;\n      case 'h2':\n        classes.push('text-5xl leading-tight'); // 48px\n        break;\n      case 'h3':\n        classes.push('text-4xl leading-snug'); // 36px\n        break;\n      case 'h4':\n        classes.push('text-3xl leading-snug'); // 30px\n        break;\n      case 'h5':\n        classes.push('text-2xl leading-normal'); // 24px\n        break;\n      case 'h6':\n        classes.push('text-xl leading-normal'); // 20px\n        break;\n      case 'subheadline':\n        classes.push('text-lg leading-relaxed'); // 18px\n        break;\n      case 'body1':\n        classes.push('text-base leading-relaxed'); // 16px\n        break;\n      case 'body2':\n        classes.push('text-sm leading-relaxed'); // 14px\n        break;\n      case 'caption':\n        classes.push('text-xs leading-normal'); // 12px\n        break;\n      case 'overline':\n        classes.push('text-xs leading-normal uppercase tracking-wider'); // 12px uppercase\n        break;\n    }\n\n    // Font weight\n    switch (this.weight) {\n      case 'regular':\n        classes.push('font-normal'); // 400\n        break;\n      case 'medium':\n        classes.push('font-medium'); // 500\n        break;\n      case 'bold':\n        classes.push('font-bold'); // 700\n        break;\n      case 'extrabold':\n        classes.push('font-extrabold'); // 800\n        break;\n    }\n\n    // Text alignment\n    switch (this.align) {\n      case 'left':\n        classes.push('text-left');\n        break;\n      case 'center':\n        classes.push('text-center');\n        break;\n      case 'right':\n        classes.push('text-right');\n        break;\n      case 'justify':\n        classes.push('text-justify');\n        break;\n    }\n\n    // Color\n    classes.push(this.color);\n\n    // Merge with custom classes - custom classes come last to override conflicting ones\n    if (this.customClass) {\n      classes.push(this.customClass);\n    }\n\n\n    return classes.filter(Boolean).join(' ');\n  }\n}\n","<div [class]=\"getTypographyClasses()\">\n      <ng-content></ng-content>\n    </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'keu-chip',\n  standalone: true,\n  imports: [],\n  templateUrl: './chip.component.html',\n})\nexport class ChipComponent {\n  @Input() label: string = 'Chip';\n  @Input() size: 'x-small' | 'small' | 'default' | 'large' | 'x-large' = 'default';\n  @Input() variant: 'default' | 'filled' | 'primary' | 'warning' | 'danger' = 'default';\n  @Input() showIcon: boolean = false;\n  @Input() removable: boolean = false;\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n  \n  @Output() removed = new EventEmitter<void>();\n\n  onRemove(event: Event) {\n    event.stopPropagation();\n    this.removed.emit();\n  }\n\n  getChipClasses(): string {\n    const classes: string[] = [\n      'inline-flex items-center gap-1.5',\n      'rounded-full',\n      'font-medium',\n      'transition-colors',\n      'whitespace-nowrap'\n    ];\n\n    // Size-based padding and text\n    switch (this.size) {\n      case 'x-small':\n        classes.push('px-2 py-0.5 text-xs'); // 8px padding, 12px text\n        break;\n      case 'small':\n        classes.push('px-2.5 py-1 text-xs'); // 10px padding, 12px text\n        break;\n      case 'default':\n        classes.push('px-3 py-1 text-sm'); // 12px padding, 14px text\n        break;\n      case 'large':\n        classes.push('px-3.5 py-1.5 text-sm'); // 14px padding, 14px text\n        break;\n      case 'x-large':\n        classes.push('px-4 py-2 text-base'); // 16px padding, 16px text\n        break;\n    }\n\n    // Variant colors\n    switch (this.variant) {\n      case 'default':\n        classes.push('bg-white border border-neutral-300 text-neutral-700');\n        break;\n      case 'filled':\n        classes.push('bg-neutral-100 text-neutral-700 border border-transparent');\n        break;\n      case 'primary':\n        classes.push('bg-primary-500 text-white border border-transparent');\n        break;\n      case 'warning':\n        classes.push('bg-accent-500 text-white border border-transparent');\n        break;\n      case 'danger':\n        classes.push('bg-danger-500 text-white border border-transparent');\n        break;\n    }\n\n    // Add custom classes if provided\n    if (this.customClass) {\n      classes.push(this.customClass);\n    }\n\n    return classes.filter(Boolean).join(' ');\n  }\n\n  getIconClasses(): string {\n    const classes: string[] = [];\n    \n    switch (this.size) {\n      case 'x-small':\n        classes.push('w-3 h-3'); // 12px\n        break;\n      case 'small':\n        classes.push('w-3.5 h-3.5'); // 14px\n        break;\n      case 'default':\n        classes.push('w-4 h-4'); // 16px\n        break;\n      case 'large':\n        classes.push('w-4 h-4'); // 16px\n        break;\n      case 'x-large':\n        classes.push('w-5 h-5'); // 20px\n        break;\n    }\n\n    return classes.join(' ');\n  }\n\n  getLabelClasses(): string {\n    return 'leading-none';\n  }\n\n  getCloseButtonClasses(): string {\n    const classes: string[] = [\n      'inline-flex items-center justify-center',\n      'rounded-full',\n      'transition-colors',\n      'hover:bg-black hover:bg-opacity-10',\n      'focus:outline-none'\n    ];\n\n    switch (this.size) {\n      case 'x-small':\n        classes.push('w-3.5 h-3.5 -mr-0.5'); // 14px button\n        break;\n      case 'small':\n        classes.push('w-4 h-4 -mr-0.5'); // 16px button\n        break;\n      case 'default':\n        classes.push('w-4 h-4 -mr-1'); // 16px button\n        break;\n      case 'large':\n        classes.push('w-5 h-5 -mr-1'); // 20px button\n        break;\n      case 'x-large':\n        classes.push('w-6 h-6 -mr-1'); // 24px button\n        break;\n    }\n\n    return classes.join(' ');\n  }\n\n  getCloseIconClasses(): string {\n    const classes: string[] = [];\n    \n    switch (this.size) {\n      case 'x-small':\n        classes.push('w-2.5 h-2.5'); // 10px\n        break;\n      case 'small':\n        classes.push('w-3 h-3'); // 12px\n        break;\n      case 'default':\n        classes.push('w-3 h-3'); // 12px\n        break;\n      case 'large':\n        classes.push('w-3.5 h-3.5'); // 14px\n        break;\n      case 'x-large':\n        classes.push('w-4 h-4'); // 16px\n        break;\n    }\n\n    return classes.join(' ');\n  }\n}\n","<div [class]=\"getChipClasses()\">\n      <!-- Icon (user icon) -->\n      @if (showIcon) {\n        <svg \n          [class]=\"getIconClasses()\" \n          fill=\"currentColor\" \n          viewBox=\"0 0 20 20\"\n        >\n          <path fill-rule=\"evenodd\" d=\"M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z\" clip-rule=\"evenodd\"/>\n        </svg>\n      }\n      \n      <!-- Label text -->\n      <span [class]=\"getLabelClasses()\">{{ label }}</span>\n      \n      <!-- Close button (X) -->\n      @if (removable) {\n        <button \n          type=\"button\"\n          [class]=\"getCloseButtonClasses()\"\n          (click)=\"onRemove($event)\"\n          aria-label=\"Remove\"\n        >\n        <svg \n          [class]=\"getCloseIconClasses()\" \n          fill=\"none\" \n          stroke=\"currentColor\" \n          viewBox=\"0 0 24 24\"\n        >\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n        </svg>\n        </button>\n      }\n    </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'keu-card',\n  standalone: true,\n  imports: [],\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.scss']\n})\nexport class CardComponent {\n  // Card Settings\n  @Input() variant: 'base' | 'status' | 'shortlink' | 'media' | 'user-profile' | 'graph' = 'base';\n  @Input() elevated: boolean = true;\n  @Input() borderStyle: 'default' | 'none' | 'thick' = 'default';\n  @Input() disabled: boolean = false;\n\n  // Header\n  @Input() showHeader: boolean = true;\n  @Input() cardInfo: string = '';\n  @Input() title: string = '';\n  @Input() titleEditable: boolean = false;\n  @Input() subtitle: string = '';\n  @Input() status: string = '';\n  @Input() statusType: 'active' | 'inactive' | 'pending' = 'active';\n  @Input() draft: string = '';\n  @Input() closable: boolean = false;\n  @Input() menuButton: boolean = false;\n  \n  // Graph variant specific\n  @Input() icon: string = ''; // Icon class atau SVG path untuk graph card\n  @Input() iconColor: 'primary' | 'success' | 'danger' | 'accent' | 'neutral' = 'primary';\n\n  // Media\n  @Input() imageSrc: string = '';\n  @Input() imageAlt: string = '';\n\n  // Body/Content\n  @Input() dateHeading: string = '';\n  @Input() heading: string = '';\n  @Input() content: string = '';\n  @Input() contentMaxLines: number = 0; // 0 = no limit, 2 = 2 lines, 3 = 3 lines\n  \n  // Progress\n  @Input() showProgress: boolean = false;\n  @Input() progressLabel: string = '';\n  @Input() progressValue: number = 0;\n  @Input() progressStatus: string = '';\n\n  // Chips\n  @Input() chips: Array<{ label: string; variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' }> = [];\n\n  // Footer\n  @Input() showFooter: boolean = false;\n  @Input() action1Label: string = '';\n  @Input() action2Label: string = '';\n  @Input() footerText: string = '';\n\n  // Custom styling for MFE\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n\n  // Events\n  @Output() closed = new EventEmitter<void>();\n  @Output() menuClicked = new EventEmitter<void>();\n  @Output() action1Clicked = new EventEmitter<void>();\n  @Output() action2Clicked = new EventEmitter<void>();\n\n  getCardClasses(): string {\n    const baseClasses = 'bg-white rounded-lg overflow-hidden transition-all';\n    const elevationClasses = this.elevated ? 'shadow-md hover:shadow-lg' : 'shadow-sm';\n    const borderClasses = this.borderStyle === 'default' \n      ? 'border border-neutral-200' \n      : this.borderStyle === 'thick'\n      ? 'border-2 border-primary-500'\n      : '';\n    const disabledClasses = this.disabled ? 'opacity-60 pointer-events-none' : '';\n    const customClasses = this.customClass || '';\n\n    return [baseClasses, elevationClasses, borderClasses, disabledClasses, customClasses]\n      .filter(Boolean)\n      .join(' ');\n  }\n\n  getHeaderClasses(): string {\n    return 'px-6 py-4 border-b border-neutral-100';\n  }\n\n  getTitleClasses(): string {\n    return 'text-base font-semibold text-neutral-900';\n  }\n\n  getStatusClasses(): string {\n    const baseClasses = 'px-3 py-1 text-xs font-medium rounded-full inline-flex items-center gap-1.5';\n    \n    switch (this.statusType) {\n      case 'active':\n        return `${baseClasses} bg-success-50 text-success-600`;\n      case 'inactive':\n        return `${baseClasses} bg-neutral-100 text-neutral-600`;\n      case 'pending':\n        return `${baseClasses} bg-accent-50 text-accent-600`;\n      default:\n        return `${baseClasses} bg-neutral-100 text-neutral-600`;\n    }\n  }\n\n  getBodyClasses(): string {\n    const hasChips = this.chips && this.chips.length > 0;\n    const paddingBottom = hasChips ? 'pb-0' : 'pb-6';\n    return `px-6 pt-6 ${paddingBottom}`;\n  }\n\n  getContentClasses(): string {\n    const baseClasses = 'text-sm text-neutral-600';\n    const lineClampClasses = this.contentMaxLines > 0 \n      ? `line-clamp-${this.contentMaxLines}` \n      : '';\n    \n    return `${baseClasses} ${lineClampClasses}`;\n  }\n\n  getChipsContainerClasses(): string {\n    return 'px-6 py-4 flex flex-wrap gap-2';\n  }\n\n  getChipClasses(chip: any): string {\n    const baseClasses = 'px-3 py-1 text-xs font-medium rounded-full';\n    \n    switch (chip.variant) {\n      case 'primary':\n        return `${baseClasses} bg-primary-500 text-white`;\n      case 'success':\n        return `${baseClasses} bg-success-500 text-white`;\n      case 'warning':\n        return `${baseClasses} bg-accent-500 text-white`;\n      case 'danger':\n        return `${baseClasses} bg-danger-500 text-white`;\n      default:\n        return `${baseClasses} bg-neutral-100 text-neutral-700`;\n    }\n  }\n\n  getIconClasses(): string {\n    const baseClasses = 'w-10 h-10 rounded-lg flex items-center justify-center';\n    \n    switch (this.iconColor) {\n      case 'primary':\n        return `${baseClasses} bg-primary-50 text-primary-500`;\n      case 'success':\n        return `${baseClasses} bg-success-50 text-success-500`;\n      case 'danger':\n        return `${baseClasses} bg-danger-50 text-danger-500`;\n      case 'accent':\n        return `${baseClasses} bg-accent-50 text-accent-500`;\n      case 'neutral':\n        return `${baseClasses} bg-neutral-50 text-neutral-500`;\n      default:\n        return `${baseClasses} bg-primary-50 text-primary-500`;\n    }\n  }\n\n  onClose(): void {\n    this.closed.emit();\n  }\n\n  onMenuClick(): void {\n    this.menuClicked.emit();\n  }\n\n  onAction1Click(): void {\n    this.action1Clicked.emit();\n  }\n\n  onAction2Click(): void {\n    this.action2Clicked.emit();\n  }\n}\n","<div [class]=\"getCardClasses()\">\n      <!-- Header Section -->\n      @if (showHeader) {\n        <div [class]=\"getHeaderClasses()\">\n          <div class=\"flex items-center justify-between\">\n            <!-- Icon for Graph Variant -->\n            @if (variant === 'graph' && icon) {\n              <div [class]=\"getIconClasses()\">\n                <svg class=\"w-6 h-6\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                  <path [attr.d]=\"icon\"/>\n                </svg>\n              </div>\n            }\n            \n            <div class=\"flex-1\" [class.ml-3]=\"variant === 'graph' && icon\">\n              <!-- Card Info Label -->\n              @if (cardInfo) {\n                <div class=\"text-xs text-neutral-500 mb-1\">{{ cardInfo }}</div>\n              }\n              \n              <!-- Title -->\n              @if (title) {\n                <h3 [class]=\"getTitleClasses()\">\n                  {{ title }}\n                  @if (titleEditable) {\n                    <button type=\"button\" class=\"ml-2 text-neutral-400 hover:text-primary-500\">\n                      <svg class=\"w-4 h-4 inline-block\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\"/>\n                      </svg>\n                    </button>\n                  }\n                </h3>\n              }\n              \n              <!-- Subtitle -->\n              @if (subtitle) {\n                <p class=\"text-sm text-neutral-500 mt-1\">{{ subtitle }}</p>\n              }\n            </div>\n\n            <!-- Header Actions (Status Badge, Close Button, Menu) -->\n            <div class=\"flex items-center gap-2 ml-4\">\n              <!-- Status Badge -->\n              @if (status) {\n                <span [class]=\"getStatusClasses()\">{{ status }}</span>\n              }\n              \n              <!-- Draft Badge -->\n              @if (draft) {\n                <span class=\"px-3 py-1 bg-neutral-100 text-neutral-600 text-xs font-medium rounded\">\n                  {{ draft }}\n                </span>\n              }\n\n              <!-- Close Button -->\n              @if (closable) {\n                <button type=\"button\" (click)=\"onClose()\" class=\"text-neutral-400 hover:text-neutral-600\">\n                  <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n                  </svg>\n                </button>\n              }\n\n              <!-- Menu Button -->\n              @if (menuButton) {\n                <button type=\"button\" (click)=\"onMenuClick()\" class=\"text-primary-500 hover:text-primary-600\">\n                  <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                    <path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\"/>\n                  </svg>\n                </button>\n              }\n            </div>\n          </div>\n        </div>\n      }\n\n      <!-- Media Section (Image) -->\n      @if (imageSrc) {\n        <div class=\"relative\">\n          <img [src]=\"imageSrc\" [alt]=\"imageAlt || title || 'Card image'\" class=\"w-full h-48 object-cover\">\n        </div>\n      }\n\n      <!-- Body/Content Section -->\n      <div [class]=\"getBodyClasses()\">\n        <!-- Date-Date Heading -->\n        @if (dateHeading) {\n          <div class=\"text-xs text-neutral-500 font-medium mb-2\">{{ dateHeading }}</div>\n        }\n        \n        <!-- Heading -->\n        @if (heading) {\n          <h4 class=\"text-sm font-semibold text-neutral-700 mb-2\">{{ heading }}</h4>\n        }\n        \n        <!-- Content Text -->\n        @if (content) {\n          <p [class]=\"getContentClasses()\">{{ content }}</p>\n        }\n\n        <!-- Progress Bar -->\n        @if (showProgress) {\n          <div class=\"mt-3\">\n            <div class=\"flex items-center justify-between text-xs text-neutral-500 mb-1\">\n              <span>{{ progressLabel || 'Progress' }}</span>\n              <span>{{ progressValue }}% {{ progressStatus }}</span>\n            </div>\n            <div class=\"w-full bg-neutral-200 rounded-full h-1.5\">\n              <div class=\"bg-primary-500 h-1.5 rounded-full transition-all\" [style.width.%]=\"progressValue\"></div>\n            </div>\n          </div>\n        }\n\n        <!-- Custom Content Slot -->\n        <ng-content></ng-content>\n      </div>\n\n      <!-- Chips Section -->\n      @if (chips && chips.length > 0) {\n        <div [class]=\"getChipsContainerClasses()\">\n          @for (chip of chips; track chip.label) {\n            <span [class]=\"getChipClasses(chip)\">\n              {{ chip.label }}\n            </span>\n          }\n        </div>\n      }\n\n      <!-- Footer/Actions Section -->\n      @if (showFooter) {\n        <div class=\"border-t border-neutral-100\">\n          <!-- Footer Text (Optional) - dengan background gray -->\n          @if (footerText) {\n            <div class=\"px-6 py-3 bg-neutral-50 text-center\">\n              <p class=\"text-xs text-neutral-600\">{{ footerText }}</p>\n            </div>\n          }\n\n          <!-- Action Buttons - dengan background putih -->\n          <div class=\"px-6 py-4 bg-white\">\n            <div class=\"flex items-center gap-2\">\n              @if (action2Label) {\n                <button \n                  type=\"button\" \n                  (click)=\"onAction2Click()\"\n                  class=\"px-4 py-2 bg-white border border-primary-500 text-primary-500 font-medium text-sm rounded-lg hover:bg-primary-50 transition-colors\"\n                >\n                  {{ action2Label }}\n                </button>\n              }\n              @if (action1Label) {\n                <button \n                  type=\"button\" \n                  (click)=\"onAction1Click()\"\n                  class=\"flex-1 px-4 py-2 bg-primary-500 text-white font-medium text-sm rounded-lg hover:bg-primary-600 transition-colors\"\n                >\n                  {{ action1Label }}\n                </button>\n              }\n            </div>\n          </div>\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter, forwardRef, HostListener, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'keu-datepicker',\n  standalone: true,\n  imports: [FormsModule],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DatepickerComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './datepicker.component.html',\n  styleUrls: ['./datepicker.component.scss']\n})\nexport class DatepickerComponent implements ControlValueAccessor {\n  // Basic Properties\n  @Input() label: string = '';\n  @Input() placeholder: string = 'Select date';\n  @Input() helperText: string = '';\n  @Input() inputId: string = `datepicker-${Math.random().toString(36).substr(2, 9)}`;\n  \n  // Validation\n  @Input() required: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() error: boolean = false;\n  @Input() errorMessage: string = 'Please select a valid date';\n  \n  // Date Constraints (string inputs for backward compatibility)\n  @Input() set minDate(value: string) {\n    this._minDate = value;\n    this.minDateObject = value ? new Date(value) : undefined;\n  }\n  get minDate(): string {\n    return this._minDate;\n  }\n  \n  @Input() set maxDate(value: string) {\n    this._maxDate = value;\n    this.maxDateObject = value ? new Date(value) : undefined;\n  }\n  get maxDate(): string {\n    return this._maxDate;\n  }\n  \n  // Features\n  @Input() clearable: boolean = true;\n  @Input() size: 'small' | 'default' | 'large' = 'default';\n  @Input() iconPosition: 'left' | 'right' = 'right';\n  \n  // Events\n  @Output() dateChange = new EventEmitter<string>();\n  @Output() cleared = new EventEmitter<void>();\n\n  // Internal state\n  value: Date | null = null;\n  isCalendarOpen: boolean = false;\n  currentMonth: number = new Date().getMonth();\n  currentYear: number = new Date().getFullYear();\n  calendarDays: CalendarDay[] = [];\n  pickerMode: 'date' | 'month' | 'year' = 'date';\n  yearRange: number[] = [];\n  minDateObject: Date | undefined;\n  maxDateObject: Date | undefined;\n  private _minDate: string = '';\n  private _maxDate: string = '';\n  private justOpened: boolean = false;\n\n  monthNames = ['January', 'February', 'March', 'April', 'May', 'June', \n                'July', 'August', 'September', 'October', 'November', 'December'];\n  dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n  dayNamesShort = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\n  private onChange: (value: Date | null) => void = () => {};\n  public onTouched: () => void = () => {};\n\n  constructor(private elementRef: ElementRef) {}\n\n  ngOnInit() {\n    this.generateCalendar();\n    this.generateYearRange();\n  }\n\n  // Click outside to close calendar\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    // Use setTimeout to check after the current event cycle completes\n    setTimeout(() => {\n      // Skip if calendar just opened to prevent immediate close\n      if (this.justOpened) {\n        this.justOpened = false;\n        return;\n      }\n      \n      if (this.isCalendarOpen && !this.elementRef.nativeElement.contains(event.target as Node)) {\n        this.closeCalendar();\n      }\n    }, 0);\n  }\n\n  get formattedValue(): string {\n    if (!this.value) return '';\n    const month = String(this.value.getMonth() + 1).padStart(2, '0');\n    const day = String(this.value.getDate()).padStart(2, '0');\n    const year = this.value.getFullYear();\n    return `${month}/${day}/${year}`;\n  }\n\n  get yearRangeText(): string {\n    if (this.yearRange.length > 0) {\n      return `${this.yearRange[0]} - ${this.yearRange[this.yearRange.length - 1]}`;\n    }\n    return '';\n  }\n\n  getFormattedHeaderDate(): string {\n    if (!this.value) return '';\n    const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n    const dayName = days[this.value.getDay()];\n    const monthName = this.monthNames[this.value.getMonth()].substring(0, 3);\n    const date = this.value.getDate();\n    return `${dayName}, ${monthName} ${date}`;\n  }\n\n  toggleCalendar(): void {\n    if (this.disabled) return;\n    \n    if (!this.isCalendarOpen) {\n      // Opening calendar - set flag and delay the opening\n      this.justOpened = true;\n      setTimeout(() => {\n        this.isCalendarOpen = true;\n        this.pickerMode = 'date';\n        if (this.value) {\n          this.currentMonth = this.value.getMonth();\n          this.currentYear = this.value.getFullYear();\n        }\n        this.generateCalendar();\n        this.generateYearRange();\n      }, 0);\n    } else {\n      // Closing calendar\n      this.isCalendarOpen = false;\n    }\n  }\n\n  openCalendar(): void {\n    if (this.disabled) return;\n    if (!this.isCalendarOpen) {\n      // Opening calendar - set flag and delay the opening\n      this.justOpened = true;\n      setTimeout(() => {\n        this.isCalendarOpen = true;\n        this.pickerMode = 'date';\n        if (this.value) {\n          this.currentMonth = this.value.getMonth();\n          this.currentYear = this.value.getFullYear();\n        }\n        this.generateCalendar();\n        this.generateYearRange();\n      }, 0);\n    }\n  }\n\n  closeCalendar(): void {\n    this.isCalendarOpen = false;\n    this.pickerMode = 'date';\n  }\n\n  // Mode Switching\n  switchToMonthPicker(): void {\n    this.pickerMode = 'month';\n  }\n\n  switchToYearPicker(): void {\n    this.pickerMode = 'year';\n    this.generateYearRange();\n  }\n\n  switchToDatePicker(): void {\n    this.pickerMode = 'date';\n    this.generateCalendar();\n  }\n\n  // Navigation - handles all three modes\n  onPrevious(): void {\n    if (this.pickerMode === 'date') {\n      this.previousMonth();\n    } else if (this.pickerMode === 'month') {\n      this.currentYear--;\n    } else if (this.pickerMode === 'year') {\n      this.previousYearRange();\n    }\n  }\n\n  onNext(): void {\n    if (this.pickerMode === 'date') {\n      this.nextMonth();\n    } else if (this.pickerMode === 'month') {\n      this.currentYear++;\n    } else if (this.pickerMode === 'year') {\n      this.nextYearRange();\n    }\n  }\n\n  previousMonth(): void {\n    if (this.currentMonth === 0) {\n      this.currentMonth = 11;\n      this.currentYear--;\n    } else {\n      this.currentMonth--;\n    }\n    this.generateCalendar();\n  }\n\n  nextMonth(): void {\n    if (this.currentMonth === 11) {\n      this.currentMonth = 0;\n      this.currentYear++;\n    } else {\n      this.currentMonth++;\n    }\n    this.generateCalendar();\n  }\n\n  previousYearRange(): void {\n    const startYear = this.yearRange[0] - 12;\n    this.yearRange = Array.from({ length: 12 }, (_, i) => startYear + i);\n  }\n\n  nextYearRange(): void {\n    const startYear = this.yearRange[0] + 12;\n    this.yearRange = Array.from({ length: 12 }, (_, i) => startYear + i);\n  }\n\n  generateYearRange(): void {\n    const currentYear = this.currentYear;\n    const startYear = Math.floor(currentYear / 12) * 12;\n    this.yearRange = Array.from({ length: 12 }, (_, i) => startYear + i);\n  }\n\n  generateCalendar(): void {\n    this.calendarDays = [];\n    \n    const firstDay = new Date(this.currentYear, this.currentMonth, 1);\n    const startingDayOfWeek = firstDay.getDay();\n    const lastDay = new Date(this.currentYear, this.currentMonth + 1, 0);\n    const daysInMonth = lastDay.getDate();\n    \n    // Previous month's trailing days\n    const prevMonthLastDay = new Date(this.currentYear, this.currentMonth, 0).getDate();\n    for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n      const date = prevMonthLastDay - i;\n      this.calendarDays.push({\n        date,\n        month: this.currentMonth === 0 ? 11 : this.currentMonth - 1,\n        year: this.currentMonth === 0 ? this.currentYear - 1 : this.currentYear,\n        isCurrentMonth: false,\n        isToday: false,\n        isSelected: false,\n        disabled: true\n      });\n    }\n    \n    // Current month's days\n    const today = new Date();\n    const minDateObj = this.minDate ? new Date(this.minDate) : null;\n    const maxDateObj = this.maxDate ? new Date(this.maxDate) : null;\n    \n    for (let date = 1; date <= daysInMonth; date++) {\n      const currentDate = new Date(this.currentYear, this.currentMonth, date);\n      const isToday = currentDate.toDateString() === today.toDateString();\n      const isSelected = this.value ? currentDate.toDateString() === this.value.toDateString() : false;\n      \n      let disabled = false;\n      if (minDateObj && currentDate < minDateObj) disabled = true;\n      if (maxDateObj && currentDate > maxDateObj) disabled = true;\n      \n      this.calendarDays.push({\n        date,\n        month: this.currentMonth,\n        year: this.currentYear,\n        isCurrentMonth: true,\n        isToday,\n        isSelected,\n        disabled\n      });\n    }\n    \n    // Next month's leading days\n    const remainingDays = 42 - this.calendarDays.length;\n    for (let date = 1; date <= remainingDays; date++) {\n      this.calendarDays.push({\n        date,\n        month: this.currentMonth === 11 ? 0 : this.currentMonth + 1,\n        year: this.currentMonth === 11 ? this.currentYear + 1 : this.currentYear,\n        isCurrentMonth: false,\n        isToday: false,\n        isSelected: false,\n        disabled: true\n      });\n    }\n  }\n\n  selectDate(day: CalendarDay): void {\n    if (day.disabled || this.disabled) return;\n    \n    // Only set the value and close when user clicks a date\n    // This is the final step after selecting year (optional) and month (optional)\n    this.value = new Date(day.year, day.month, day.date);\n    this.onChange(this.value);\n    this.dateChange.emit(this.formatDateToString(this.value));\n    this.closeCalendar();\n  }\n\n  selectMonth(monthIndex: number): void {\n    // Set the month and switch to date picker\n    // User must click a date to actually set the value\n    this.currentMonth = monthIndex;\n    this.switchToDatePicker();\n  }\n\n  selectYear(year: number): void {\n    // Set the year and switch to month picker\n    // User must select month, then date to set the value\n    this.currentYear = year;\n    this.generateYearRange();\n    this.switchToMonthPicker();\n  }\n\n  selectToday(): void {\n    const today = new Date();\n    this.value = today;\n    this.currentMonth = today.getMonth();\n    this.currentYear = today.getFullYear();\n    this.onChange(this.value);\n    this.dateChange.emit(this.formatDateToString(this.value));\n    this.generateCalendar();\n    this.closeCalendar();\n  }\n\n  clearDate(event: Event): void {\n    event.stopPropagation();\n    this.value = null;\n    this.onChange(null);\n    this.dateChange.emit('');\n    this.cleared.emit();\n  }\n\n  getDayClasses(day: CalendarDay): string {\n    const baseClasses = 'w-10 h-10 flex items-center justify-center text-sm rounded-lg transition-colors';\n    \n    let classes = [baseClasses];\n    \n    if (!day.isCurrentMonth) {\n      classes.push('text-neutral-300');\n    } else if (day.disabled) {\n      classes.push('text-neutral-300 cursor-not-allowed');\n    } else {\n      classes.push('text-neutral-900 hover:bg-sky-50 hover:text-primary-600');\n    }\n    \n    if (day.isToday && day.isCurrentMonth && !day.disabled) {\n      classes.push('border-2 border-primary-600 font-semibold');\n    }\n    \n    if (day.isSelected && day.isCurrentMonth) {\n      classes.push('bg-primary-600 text-white hover:bg-primary-700');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getMonthClasses(monthIndex: number): string {\n    const baseClasses = 'px-4 py-3 rounded-lg font-medium text-sm transition-colors';\n    const isCurrentMonth = monthIndex === this.currentMonth;\n    const today = new Date();\n    const isThisMonth = monthIndex === today.getMonth() && this.currentYear === today.getFullYear();\n    \n    let classes = [baseClasses];\n    \n    if (isCurrentMonth) {\n      classes.push('bg-primary-600 text-white hover:bg-primary-700');\n    } else if (isThisMonth) {\n      classes.push('border-2 border-primary-600 text-primary-600 hover:bg-sky-50');\n    } else {\n      classes.push('text-neutral-900 hover:bg-neutral-100');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getYearClasses(year: number): string {\n    const baseClasses = 'px-4 py-3 rounded-lg font-medium text-sm transition-colors';\n    const isCurrentYear = year === this.currentYear;\n    const today = new Date();\n    const isThisYear = year === today.getFullYear();\n    \n    let classes = [baseClasses];\n    \n    if (isCurrentYear) {\n      classes.push('bg-primary-600 text-white hover:bg-primary-700');\n    } else if (isThisYear) {\n      classes.push('border-2 border-primary-600 text-primary-600 hover:bg-sky-50');\n    } else {\n      classes.push('text-neutral-900 hover:bg-neutral-100');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getInputClasses(): string {\n    const baseClasses = 'border rounded-lg font-medium transition-all w-64 cursor-pointer';\n    const paddingClasses = this.getPaddingClasses();\n    const iconPaddingClasses = this.iconPosition === 'left' ? 'pl-11 pr-10' : 'pl-3.5 pr-10';\n    \n    let stateClasses = '';\n    if (this.disabled) {\n      stateClasses = 'bg-neutral-50 text-neutral-400 cursor-not-allowed border-neutral-200';\n    } else if (this.error) {\n      stateClasses = 'border-danger-500 text-danger-900 focus:ring-2 focus:ring-danger-200 focus:border-danger-500';\n    } else {\n      stateClasses = 'bg-white border-neutral-300 text-neutral-900 hover:border-primary-400 focus:ring-2 focus:ring-primary-200 focus:border-primary-500';\n    }\n\n    return `${baseClasses} ${paddingClasses} ${iconPaddingClasses} ${stateClasses}`;\n  }\n\n  getPaddingClasses(): string {\n    switch (this.size) {\n      case 'small':\n        return 'py-1.5 text-sm h-9';\n      case 'large':\n        return 'py-3 text-base h-12';\n      default:\n        return 'py-2 text-sm h-10';\n    }\n  }\n\n  private formatDateToString(date: Date | null): string {\n    if (!date) return '';\n    const year = date.getFullYear();\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const day = String(date.getDate()).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n  }\n\n  // ControlValueAccessor implementation\n  writeValue(value: Date | string | null): void {\n    if (typeof value === 'string' && value) {\n      this.value = new Date(value);\n    } else if (value instanceof Date) {\n      this.value = value;\n    } else {\n      this.value = null;\n    }\n    \n    if (this.value) {\n      this.currentMonth = this.value.getMonth();\n      this.currentYear = this.value.getFullYear();\n    }\n    this.generateCalendar();\n  }\n\n  registerOnChange(fn: (value: Date | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n}\n\ninterface CalendarDay {\n  date: number;\n  month: number;\n  year: number;\n  isCurrentMonth: boolean;\n  isToday: boolean;\n  isSelected: boolean;\n  disabled: boolean;\n}\n","<div class=\"keu-datepicker-wrapper relative inline-block\">\n      <!-- Label -->\n      @if (label) {\n        <label [for]=\"inputId\" class=\"block text-sm font-medium text-neutral-700 mb-2\">\n          {{ label }}\n          @if (required) {\n            <span class=\"text-danger-500 ml-1\">*</span>\n          }\n        </label>\n      }\n\n      <!-- Input with Calendar Icon -->\n      <div class=\"relative\">\n        <!-- Calendar Icon (Left) -->\n        @if (iconPosition === 'left') {\n          <div class=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-neutral-400\">\n            <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" \n                d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n            </svg>\n          </div>\n        }\n\n        <!-- Date Input (readonly, triggers calendar) -->\n        <input\n          type=\"text\"\n          [id]=\"inputId\"\n          [value]=\"formattedValue\"\n          [placeholder]=\"placeholder\"\n          [disabled]=\"disabled\"\n          [required]=\"required\"\n          [class]=\"getInputClasses()\"\n          (click)=\"toggleCalendar(); $event.stopPropagation()\"\n          (focus)=\"openCalendar(); $event.stopPropagation()\"\n          readonly\n        />\n\n        <!-- Calendar Icon (Right) - Shows when no clear button -->\n        @if (iconPosition === 'right' && (!clearable || !value || disabled)) {\n          <div class=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-neutral-400\">\n            <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" \n                d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n            </svg>\n          </div>\n        }\n\n        <!-- Clear Button -->\n        @if (clearable && value && !disabled) {\n          <button\n            type=\"button\"\n            class=\"absolute right-3 top-1/2 -translate-y-1/2 text-neutral-400 hover:text-neutral-600 transition-colors\"\n            (click)=\"clearDate($event)\"\n          >\n            <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\n            </svg>\n          </button>\n        }\n      </div>\n\n      <!-- Calendar Popup -->\n      @if (isCalendarOpen) {\n        <div class=\"absolute top-full left-0 mt-2 z-50 bg-white border border-neutral-200 rounded-lg shadow-lg w-80\" (click)=\"$event.stopPropagation()\">\n          <!-- Selected Date Header (Top Blue Section) -->\n          <div class=\"bg-primary-600 text-white rounded-t-lg p-4\">\n            @if (value) {\n              <div class=\"text-sm opacity-90\">{{ currentYear }}</div>\n            }\n            @if (value) {\n              <div class=\"text-2xl font-semibold mt-1\">{{ getFormattedHeaderDate() }}</div>\n            }\n            @if (!value) {\n              <div class=\"text-xl font-semibold\">Select Date</div>\n            }\n          </div>\n\n          <!-- Month/Year Navigation Header -->\n          <div class=\"p-3 flex items-center justify-between border-b border-neutral-200\">\n            <!-- Previous Button -->\n            <button\n              type=\"button\"\n              class=\"p-1.5 hover:bg-neutral-100 rounded transition-colors text-neutral-600\"\n              (click)=\"onPrevious(); $event.stopPropagation()\"\n            >\n              <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"/>\n              </svg>\n            </button>\n\n            <!-- Month/Year Display (Clickable) -->\n            <div class=\"flex items-center gap-2\">\n              @if (pickerMode === 'date') {\n                <button\n                  type=\"button\"\n                  class=\"px-3 py-1.5 hover:bg-neutral-100 rounded font-medium text-neutral-900 transition-colors\"\n                  (click)=\"switchToMonthPicker(); $event.stopPropagation()\"\n                >\n                  {{ monthNames[currentMonth] }}\n                </button>\n              }\n              <button\n                type=\"button\"\n                class=\"px-3 py-1.5 hover:bg-neutral-100 rounded font-medium text-neutral-900 transition-colors\"\n                (click)=\"switchToYearPicker(); $event.stopPropagation()\"\n              >\n                {{ pickerMode === 'year' ? yearRangeText : currentYear }}\n              </button>\n            </div>\n\n            <!-- Next Button -->\n            <button\n              type=\"button\"\n              class=\"p-1.5 hover:bg-neutral-100 rounded transition-colors text-neutral-600\"\n              (click)=\"onNext(); $event.stopPropagation()\"\n            >\n              <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"/>\n              </svg>\n            </button>\n          </div>\n\n          <!-- Calendar Body - Date Picker Mode -->\n          @if (pickerMode === 'date') {\n            <div class=\"p-4\">\n              <!-- Day Headers -->\n              <div class=\"grid grid-cols-7 gap-1 mb-2\">\n                @for (day of dayNames; track day) {\n                  <div class=\"text-center text-xs font-medium text-neutral-500 py-2\">\n                    {{ day }}\n                  </div>\n                }\n              </div>\n\n              <!-- Date Grid -->\n              <div class=\"grid grid-cols-7 gap-1\">\n                @for (day of calendarDays; track day.date + '-' + day.month + '-' + day.year) {\n                  <button\n                    type=\"button\"\n                    [class]=\"getDayClasses(day)\"\n                    [disabled]=\"day.disabled || disabled\"\n                    (click)=\"selectDate(day); $event.stopPropagation()\"\n                  >\n                    {{ day.date }}\n                  </button>\n                }\n              </div>\n            </div>\n          }\n\n          <!-- Calendar Body - Month Picker Mode -->\n          @if (pickerMode === 'month') {\n            <div class=\"p-4\">\n              <div class=\"grid grid-cols-3 gap-2\">\n                @for (month of monthNames; track month; let i = $index) {\n                  <button\n                    type=\"button\"\n                    [class]=\"getMonthClasses(i)\"\n                    (click)=\"selectMonth(i); $event.stopPropagation()\"\n                  >\n                    {{ month.substring(0, 3) }}\n                  </button>\n                }\n              </div>\n            </div>\n          }\n\n          <!-- Calendar Body - Year Picker Mode -->\n          @if (pickerMode === 'year') {\n            <div class=\"p-4\">\n              <div class=\"grid grid-cols-3 gap-2\">\n                @for (year of yearRange; track year) {\n                  <button\n                    type=\"button\"\n                    [class]=\"getYearClasses(year)\"\n                    (click)=\"selectYear(year); $event.stopPropagation()\"\n                  >\n                    {{ year }}\n                  </button>\n                }\n              </div>\n            </div>\n          }\n\n          <!-- Footer Actions -->\n          <div class=\"border-t border-neutral-200 p-3 flex justify-between\">\n            <button\n              type=\"button\"\n              class=\"text-sm text-primary-600 hover:text-primary-700 font-medium\"\n              (click)=\"selectToday(); $event.stopPropagation()\"\n            >\n              Today\n            </button>\n            <button\n              type=\"button\"\n              class=\"text-sm text-neutral-600 hover:text-neutral-700 font-medium\"\n              (click)=\"closeCalendar(); $event.stopPropagation()\"\n            >\n              Close\n            </button>\n          </div>\n        </div>\n      }\n\n      <!-- Helper Text -->\n      @if (helperText && !error) {\n        <p class=\"mt-1.5 text-xs text-neutral-500\">\n          {{ helperText }}\n        </p>\n      }\n\n      <!-- Error Message -->\n      @if (error) {\n        <p class=\"mt-1.5 text-xs text-danger-500 flex items-center gap-1\">\n          <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n            <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"/>\n          </svg>\n          {{ errorMessage }}\n        </p>\n      }\n    </div>","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\n\nexport type InputType = 'text' | 'search' | 'textarea' | 'number' | 'email' | 'password' | 'tel' | 'url';\nexport type InputSize = 'small' | 'default' | 'large';\nexport type InputState = 'default' | 'success' | 'error' | 'warning';\n\n@Component({\n  selector: 'keu-input',\n  standalone: true,\n  imports: [FormsModule],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => InputComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './input.component.html',\n  styleUrls: ['./input.component.scss']\n})\nexport class InputComponent implements ControlValueAccessor {\n  // Basic Props\n  @Input() type: InputType = 'text';\n  @Input() label: string = '';\n  @Input() placeholder: string = '';\n  @Input() helperText: string = '';\n  @Input() inputId: string = `keu-input-${Math.random().toString(36).substr(2, 9)}`;\n  \n  // State Props\n  @Input() disabled: boolean = false;\n  @Input() readonly: boolean = false;\n  @Input() required: boolean = false;\n  @Input() clearable: boolean = false;\n  @Input() state: InputState = 'default';\n  \n  // Size & Style\n  @Input() size: InputSize = 'default';\n  @Input() leftIcon: 'search' | 'user' | 'mail' | 'phone' | '' = '';\n  @Input() rightIcon: 'calendar' | '' = '';\n  \n  // Number Input Props\n  @Input() min: number | null = null;\n  @Input() max: number | null = null;\n  @Input() step: number | null = null;\n  \n  // Text Props\n  @Input() maxlength: number | null = null;\n  @Input() rows: number = 4; // For textarea\n  \n  // Custom styling for MFE\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n  \n  // Events\n  @Output() valueChange = new EventEmitter<string | number>();\n  @Output() cleared = new EventEmitter<void>();\n  \n  // Internal State\n  value: string | number = '';\n  showPassword: boolean = false;\n  \n  private onChange: (value: string | number) => void = () => {};\n  public onTouched: () => void = () => {};\n\n  // ControlValueAccessor Implementation\n  writeValue(value: string | number): void {\n    this.value = value ?? '';\n  }\n\n  registerOnChange(fn: (value: string | number) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  // Methods\n  onInputChange(): void {\n    this.onChange(this.value);\n    this.valueChange.emit(this.value);\n  }\n\n  clearValue(): void {\n    this.value = '';\n    this.onChange(this.value);\n    this.valueChange.emit(this.value);\n    this.cleared.emit();\n  }\n\n  togglePasswordVisibility(): void {\n    this.showPassword = !this.showPassword;\n  }\n\n  getInputType(): string {\n    if (this.type === 'password' && this.showPassword) {\n      return 'text';\n    }\n    if (this.type === 'search') {\n      return 'text';\n    }\n    return this.type;\n  }\n\n  getInputClasses(): string {\n    const baseClasses = [\n      'block w-full rounded-lg border transition-colors',\n      'focus:outline-none focus:ring-2'\n    ];\n\n    // Size classes\n    if (this.type === 'textarea') {\n      baseClasses.push('py-2.5 px-3.5');\n    } else {\n      switch (this.size) {\n        case 'small':\n          baseClasses.push('py-1.5 px-3 text-sm');\n          break;\n        case 'large':\n          baseClasses.push('py-3 px-4 text-base');\n          break;\n        default:\n          baseClasses.push('py-2.5 px-3.5 text-sm');\n      }\n    }\n\n    // Icon padding\n    if (this.leftIcon) {\n      baseClasses.push('pl-10');\n    }\n    if (this.rightIcon || this.type === 'password' || this.clearable) {\n      baseClasses.push('pr-10');\n    }\n\n    // State classes\n    switch (this.state) {\n      case 'success':\n        baseClasses.push('border-success-300 focus:border-success-500 focus:ring-success-500/20');\n        break;\n      case 'error':\n        baseClasses.push('border-danger-300 focus:border-danger-500 focus:ring-danger-500/20');\n        break;\n      case 'warning':\n        baseClasses.push('border-warning-300 focus:border-warning-500 focus:ring-warning-500/20');\n        break;\n      default:\n        baseClasses.push('border-neutral-300 focus:border-primary-500 focus:ring-primary-500/20');\n    }\n\n    // Disabled state\n    if (this.disabled) {\n      baseClasses.push('bg-neutral-100 text-neutral-500 cursor-not-allowed');\n    } else if (this.readonly) {\n      baseClasses.push('bg-neutral-50');\n    } else {\n      baseClasses.push('bg-white');\n    }\n\n    // Add custom classes if provided\n    if (this.customClass) {\n      baseClasses.push(this.customClass);\n    }\n\n    return baseClasses.filter(Boolean).join(' ');\n  }\n\n  getHelperTextClasses(): string {\n    const classes: string[] = [];\n    \n    switch (this.state) {\n      case 'success':\n        classes.push('text-success-600');\n        break;\n      case 'error':\n        classes.push('text-danger-600');\n        break;\n      case 'warning':\n        classes.push('text-warning-600');\n        break;\n      default:\n        classes.push('text-neutral-600');\n    }\n    \n    return classes.join(' ');\n  }\n}\n","<div class=\"keu-input-wrapper\">\n      <!-- Label -->\n      @if (label) {\n        <label [for]=\"inputId\" class=\"block text-sm font-medium text-neutral-700 mb-2\">\n          {{ label }}\n          @if (required) {\n            <span class=\"text-danger-500 ml-1\">*</span>\n          }\n        </label>\n      }\n\n      <!-- Input Container -->\n      <div class=\"relative\">\n        <!-- Left Icon -->\n        @if (leftIcon) {\n          <div class=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-neutral-400\">\n            @switch (leftIcon) {\n              @case ('search') {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"/>\n                </svg>\n              }\n              @case ('user') {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\"/>\n                </svg>\n              }\n              @case ('mail') {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n                </svg>\n              }\n              @case ('phone') {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\"/>\n                </svg>\n              }\n            }\n          </div>\n        }\n\n        <!-- Textarea -->\n        @if (type === 'textarea') {\n          <textarea\n            [id]=\"inputId\"\n            [(ngModel)]=\"value\"\n            [placeholder]=\"placeholder\"\n            [disabled]=\"disabled\"\n            [readonly]=\"readonly\"\n            [required]=\"required\"\n            [rows]=\"rows\"\n            [class]=\"getInputClasses()\"\n            (blur)=\"onTouched()\"\n            (input)=\"onInputChange()\"\n          ></textarea>\n        }\n\n        <!-- Regular Input -->\n        @if (type !== 'textarea') {\n          <input\n            [type]=\"getInputType()\"\n            [id]=\"inputId\"\n            [(ngModel)]=\"value\"\n            [placeholder]=\"placeholder\"\n            [disabled]=\"disabled\"\n            [readonly]=\"readonly\"\n            [required]=\"required\"\n            [min]=\"min\"\n            [max]=\"max\"\n            [step]=\"step\"\n            [maxlength]=\"maxlength\"\n            [class]=\"getInputClasses()\"\n            (blur)=\"onTouched()\"\n            (input)=\"onInputChange()\"\n          />\n        }\n\n        <!-- Right Icon / Password Toggle / Clear Button -->\n        <div class=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2\">\n          <!-- Clear Button -->\n          @if (clearable && value && !disabled && !readonly) {\n            <button\n              type=\"button\"\n              class=\"text-neutral-400 hover:text-neutral-600 transition-colors\"\n              (click)=\"clearValue()\"\n            >\n              <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\n              </svg>\n            </button>\n          }\n\n          <!-- Password Toggle -->\n          @if (type === 'password') {\n            <button\n              type=\"button\"\n              class=\"text-neutral-400 hover:text-neutral-600 transition-colors\"\n              (click)=\"togglePasswordVisibility()\"\n            >\n              @if (!showPassword) {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"/>\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"/>\n                </svg>\n              }\n              @if (showPassword) {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\"/>\n                </svg>\n              }\n            </button>\n          }\n\n          <!-- Right Icon -->\n          @if (rightIcon && type !== 'password') {\n            <div class=\"pointer-events-none text-neutral-400\">\n              @if (rightIcon === 'calendar') {\n                <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n                </svg>\n              }\n            </div>\n          }\n        </div>\n      </div>\n\n      <!-- Helper Text / Error / Success Message -->\n      @if (helperText || state !== 'default') {\n        <div class=\"mt-2 text-sm\" [class]=\"getHelperTextClasses()\">\n          @if (state === 'success') {\n            <div class=\"flex items-center gap-1\">\n              <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\n              </svg>\n              <span>{{ helperText }}</span>\n            </div>\n          }\n          @if (state === 'error') {\n            <div class=\"flex items-center gap-1\">\n              <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n              </svg>\n              <span>{{ helperText }}</span>\n            </div>\n          }\n          @if (state === 'warning') {\n            <div class=\"flex items-center gap-1\">\n              <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"/>\n              </svg>\n              <span>{{ helperText }}</span>\n            </div>\n          }\n          @if (state === 'default' && helperText) {\n            <span>{{ helperText }}</span>\n          }\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface RadioOption {\n  label: string;\n  value: string | number;\n  disabled?: boolean;\n  description?: string;\n}\n\n@Component({\n  selector: 'keu-radio',\n  standalone: true,\n  imports: [],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RadioComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './radio.component.html',\n  styleUrls: ['./radio.component.scss']\n})\nexport class RadioComponent implements ControlValueAccessor {\n  @Input() label: string = '';\n  @Input() options: RadioOption[] = [];\n  @Input() name: string = `keu-radio-${Math.random().toString(36).substr(2, 9)}`;\n  @Input() disabled: boolean = false;\n  @Input() required: boolean = false;\n  @Input() helperText: string = '';\n  @Input() orientation: 'horizontal' | 'vertical' = 'vertical';\n  @Input() size: 'small' | 'default' | 'large' = 'default';\n\n  @Output() valueChange = new EventEmitter<string | number>();\n\n  value: string | number = '';\n\n  private onChange: (value: string | number) => void = () => {};\n  public onTouched: () => void = () => {};\n\n  writeValue(value: string | number): void {\n    this.value = value ?? '';\n  }\n\n  registerOnChange(fn: (value: string | number) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  onRadioChange(newValue: string | number): void {\n    this.value = newValue;\n    this.onChange(this.value);\n    this.valueChange.emit(this.value);\n    this.onTouched();\n  }\n\n  getRadioLabelClasses(option: RadioOption): string {\n    const classes = ['flex cursor-pointer'];\n    \n    if (this.disabled || option.disabled) {\n      classes.push('cursor-not-allowed opacity-50');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getRadioCircleClasses(option: RadioOption): string {\n    const sizeClass = this.size === 'small' ? 'w-4 h-4' : this.size === 'large' ? 'w-6 h-6' : 'w-5 h-5';\n    const classes = [\n      sizeClass,\n      'rounded-full border-2 flex items-center justify-center transition-all flex-shrink-0 mt-0.5'\n    ];\n\n    if (this.disabled || option.disabled) {\n      classes.push('border-neutral-300 bg-neutral-100');\n    } else if (this.value === option.value) {\n      classes.push('border-primary-600 bg-primary-600');\n    } else {\n      classes.push('border-neutral-300 hover:border-primary-400');\n    }\n\n    return classes.join(' ');\n  }\n\n  getRadioTextClasses(option: RadioOption): string {\n    const sizeClass = this.size === 'small' ? 'text-sm' : this.size === 'large' ? 'text-base' : 'text-sm';\n    const classes = [sizeClass, 'font-medium'];\n\n    if (this.disabled || option.disabled) {\n      classes.push('text-neutral-500');\n    } else {\n      classes.push('text-neutral-900');\n    }\n\n    return classes.join(' ');\n  }\n}\n","<div class=\"keu-radio-group\">\n      <!-- Label -->\n      @if (label) {\n        <label class=\"block text-sm font-medium text-neutral-700 mb-3\">\n          {{ label }}\n          @if (required) {\n            <span class=\"text-danger-500 ml-1\">*</span>\n          }\n        </label>\n      }\n\n      <!-- Radio Options -->\n      <div [class]=\"orientation === 'vertical' ? 'space-y-3' : 'flex flex-wrap gap-4'\">\n        @for (option of options; track option.value; let i = $index) {\n          <label [class]=\"getRadioLabelClasses(option)\">\n            <div class=\"flex items-start\">\n              <input\n                type=\"radio\"\n                [name]=\"name\"\n                [value]=\"option.value\"\n                [checked]=\"value === option.value\"\n                [disabled]=\"disabled || (option.disabled ?? false)\"\n                [required]=\"required\"\n                (change)=\"onRadioChange(option.value)\"\n                class=\"sr-only\"\n              />\n              <div [class]=\"getRadioCircleClasses(option)\">\n                @if (value === option.value) {\n                  <div class=\"w-2 h-2 bg-white rounded-full\"></div>\n                }\n              </div>\n              <div class=\"ml-3 flex-1\">\n                <div [class]=\"getRadioTextClasses(option)\">\n                  {{ option.label }}\n                </div>\n                @if (option.description) {\n                  <div class=\"text-sm text-neutral-500 mt-1\">\n                    {{ option.description }}\n                  </div>\n                }\n              </div>\n            </div>\n          </label>\n        }\n      </div>\n\n      <!-- Helper Text -->\n      @if (helperText) {\n        <div class=\"mt-2 text-sm text-neutral-600\">\n          {{ helperText }}\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'keu-checkbox',\n  standalone: true,\n  imports: [],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => CheckboxComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './checkbox.component.html',\n  styleUrls: ['./checkbox.component.scss']\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n  @Input() label: string = '';\n  @Input() description: string = '';\n  @Input() helperText: string = '';\n  @Input() disabled: boolean = false;\n  @Input() required: boolean = false;\n  @Input() indeterminate: boolean = false;\n  @Input() size: 'small' | 'default' | 'large' = 'default';\n  @Input() customClass?: string; // Custom CSS classes for MFE-specific styling\n\n  @Output() checkedChange = new EventEmitter<boolean>();\n\n  checked: boolean = false;\n\n  private onChange: (value: boolean) => void = () => {};\n  public onTouched: () => void = () => {};\n\n  writeValue(value: boolean): void {\n    this.checked = value ?? false;\n  }\n\n  registerOnChange(fn: (value: boolean) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  onCheckboxChange(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    this.checked = target.checked;\n    this.indeterminate = false;\n    this.onChange(this.checked);\n    this.checkedChange.emit(this.checked);\n    this.onTouched();\n  }\n\n  getLabelClasses(): string {\n    const classes = ['flex cursor-pointer'];\n    \n    if (this.disabled) {\n      classes.push('cursor-not-allowed opacity-50');\n    }\n    \n    // Add custom classes if provided\n    if (this.customClass) {\n      classes.push(this.customClass);\n    }\n    \n    return classes.filter(Boolean).join(' ');\n  }\n\n  getCheckboxClasses(): string {\n    const sizeClass = this.size === 'small' ? 'w-4 h-4' : this.size === 'large' ? 'w-6 h-6' : 'w-5 h-5';\n    const classes = [\n      sizeClass,\n      'rounded border-2 flex items-center justify-center transition-all flex-shrink-0 mt-0.5'\n    ];\n\n    if (this.disabled) {\n      classes.push('border-neutral-300 bg-neutral-100');\n    } else if (this.checked || this.indeterminate) {\n      classes.push('border-primary-600 bg-primary-600');\n    } else {\n      classes.push('border-neutral-300 hover:border-primary-400');\n    }\n\n    // Add custom classes if provided - at the end to override\n    if (this.customClass) {\n      classes.push(this.customClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  getTextClasses(): string {\n    const sizeClass = this.size === 'small' ? 'text-sm' : this.size === 'large' ? 'text-base' : 'text-sm';\n    const classes = [sizeClass, 'font-medium'];\n\n    if (this.disabled) {\n      classes.push('text-neutral-500');\n    } else {\n      classes.push('text-neutral-900');\n    }\n\n    return classes.join(' ');\n  }\n}\n","<div class=\"keu-checkbox-wrapper\">\n      <label [class]=\"getLabelClasses()\">\n        <div class=\"flex items-start\">\n          <input\n            type=\"checkbox\"\n            [checked]=\"checked\"\n            [disabled]=\"disabled\"\n            [required]=\"required\"\n            [indeterminate]=\"indeterminate\"\n            (change)=\"onCheckboxChange($event)\"\n            class=\"sr-only\"\n          />\n          <div [class]=\"getCheckboxClasses()\">\n            <!-- Checkmark Icon -->\n            @if (checked && !indeterminate) {\n              <svg\n                class=\"w-full h-full text-white\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                viewBox=\"0 0 24 24\"\n              >\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\"/>\n              </svg>\n            }\n            <!-- Indeterminate Line -->\n            @if (indeterminate) {\n              <div\n                class=\"w-2.5 h-0.5 bg-white rounded\"\n              ></div>\n            }\n          </div>\n          <div class=\"ml-3 flex-1\">\n            <div [class]=\"getTextClasses()\">\n              {{ label }}\n            </div>\n            @if (description) {\n              <div class=\"text-sm text-neutral-500 mt-1\">\n                {{ description }}\n              </div>\n            }\n          </div>\n        </div>\n      </label>\n\n      <!-- Helper Text -->\n      @if (helperText) {\n        <div class=\"mt-2 ml-8 text-sm text-neutral-600\">\n          {{ helperText }}\n        </div>\n      }\n    </div>","import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'keu-switch',\n  standalone: true,\n  imports: [],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => SwitchComponent),\n      multi: true,\n    },\n  ],\n  templateUrl: './switch.component.html',\n  styleUrls: ['./switch.component.scss'],\n})\nexport class SwitchComponent implements ControlValueAccessor {\n  @Input() label = '';\n  @Input() description = '';\n  @Input() helperText = '';\n  @Input() disabled = false;\n  @Input() required = false;\n  @Input() labelPosition: 'left' | 'right' = 'left';\n  @Input() size: 'small' | 'default' | 'large' = 'default';\n\n  // dukung binding dari Storybook/host: [checked] / [(checked)]\n  @Input()\n  get checked(): boolean { return this.value; }\n  set checked(v: boolean) { this.setValue(v, /*emit*/ false); }\n\n  @Output() checkedChange = new EventEmitter<boolean>();\n\n  // ——— CVA core ———\n  private _value = false;\n  get value() { return this._value; }\n\n  private onChange: (v: boolean) => void = () => {};\n  onTouched: () => void = () => {};\n\n  writeValue(v: boolean): void {\n    this._value = !!v;\n  }\n  registerOnChange(fn: (v: boolean) => void): void {\n    this.onChange = fn;\n  }\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  // event dari input native\n  handleNativeChange(e: Event): void {\n    const next = (e.target as HTMLInputElement).checked;\n    this.setValue(next, /*emit*/ true);\n    this.onTouched();\n  }\n\n  // central setter untuk sync semua kanal\n  private setValue(next: boolean, emit: boolean) {\n    this._value = !!next;\n    this.onChange(this._value);       // sync ke FormControl (jika dipakai)\n    if (emit) this.checkedChange.emit(this._value); // dukung [(checked)]\n  }\n\n  // ——— class helpers ———\n  getLabelClasses(): string {\n    const classes = ['flex cursor-pointer'];\n    if (this.disabled) classes.push('cursor-not-allowed opacity-50');\n    return classes.join(' ');\n  }\n\n  getSwitchTrackClasses(): string {\n    let w = 'w-11', h = 'h-6';\n    if (this.size === 'small') { w = 'w-9';  h = 'h-5'; }\n    if (this.size === 'large') { w = 'w-14'; h = 'h-7'; }\n\n    return [\n      w, h,\n      'rounded-full relative transition-colors flex-shrink-0',\n      this.disabled ? 'bg-neutral-300' : (this.value ? 'bg-primary-600' : 'bg-neutral-300'),\n    ].join(' ');\n  }\n\n  getSwitchThumbClasses(): string {\n    let sz = 'w-5 h-5', t0 = 'translate-x-0.5', t1 = 'translate-x-5';\n    if (this.size === 'small') { sz = 'w-4 h-4'; t1 = 'translate-x-4'; }\n    if (this.size === 'large') { sz = 'w-6 h-6'; t1 = 'translate-x-7'; }\n\n    return [\n      sz,\n      'bg-white rounded-full shadow-md transform transition-transform absolute top-0.5',\n      this.value ? t1 : t0,\n    ].join(' ');\n  }\n\n  getTextClasses(): string {\n    const size = this.size === 'small' ? 'text-sm'\n               : this.size === 'large' ? 'text-base'\n               : 'text-sm';\n    return [size, 'font-medium', this.disabled ? 'text-neutral-500' : 'text-neutral-900'].join(' ');\n  }\n}\n","<div class=\"keu-switch-wrapper\">\n      <label [class]=\"getLabelClasses()\" (click)=\"$event.preventDefault()\">\n        <div class=\"flex items-center justify-between\">\n          @if (labelPosition === 'left') {\n            <div class=\"flex-1 mr-3\">\n              <div [class]=\"getTextClasses()\">{{ label }}</div>\n              @if (description) {\n                <div class=\"text-sm text-neutral-500 mt-1\">\n                  {{ description }}\n                </div>\n              }\n            </div>\n          }\n\n          <!-- Input asli (a11y) -->\n          <input\n            type=\"checkbox\"\n            [checked]=\"value\"\n            [disabled]=\"disabled\"\n            [required]=\"required\"\n            (change)=\"handleNativeChange($event)\"\n            (blur)=\"onTouched()\"\n            class=\"sr-only\"\n            role=\"switch\"\n            [attr.aria-checked]=\"value\"\n          />\n\n          <!-- Track + Thumb -->\n          <div [class]=\"getSwitchTrackClasses()\">\n            <div [class]=\"getSwitchThumbClasses()\"></div>\n          </div>\n\n          @if (labelPosition === 'right') {\n            <div class=\"flex-1 ml-3\">\n              <div [class]=\"getTextClasses()\">{{ label }}</div>\n              @if (description) {\n                <div class=\"text-sm text-neutral-500 mt-1\">\n                  {{ description }}\n                </div>\n              }\n            </div>\n          }\n        </div>\n      </label>\n\n      @if (helperText) {\n        <div class=\"mt-2 text-sm text-neutral-600\">\n          {{ helperText }}\n        </div>\n      }\n    </div>","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'keu-grid',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './grid.component.html',\n  styleUrls: ['./grid.component.scss']\n})\nexport class GridComponent {\n  // Grid container settings\n  @Input() container: boolean = true; // Apply container constraints\n  @Input() fluid: boolean = false; // Full width container\n  @Input() gap: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'; // Gap between columns\n  \n  // Responsive breakpoints configuration\n  @Input() cols: number = 12; // Total columns in grid (default 12-column system)\n  \n  // Alignment\n  @Input() justifyContent: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly' = 'start';\n  @Input() alignItems: 'start' | 'center' | 'end' | 'stretch' | 'baseline' = 'stretch';\n\n  getContainerClasses(): string {\n    const classes: string[] = [];\n    \n    if (this.container) {\n      if (this.fluid) {\n        classes.push('w-full px-4 sm:px-6 lg:px-8');\n      } else {\n        classes.push('container mx-auto px-4 sm:px-6 lg:px-8');\n      }\n    }\n    \n    return classes.join(' ');\n  }\n\n  getGridClasses(): string {\n    const classes: string[] = ['grid'];\n    \n    // Gap classes\n    const gapMap = {\n      'none': 'gap-0',\n      'xs': 'gap-2',\n      'sm': 'gap-4',\n      'md': 'gap-6',\n      'lg': 'gap-8',\n      'xl': 'gap-10'\n    };\n    classes.push(gapMap[this.gap]);\n    \n    // Grid columns\n    classes.push(`grid-cols-${this.cols}`);\n    \n    // Justify content\n    const justifyMap = {\n      'start': 'justify-items-start',\n      'center': 'justify-items-center',\n      'end': 'justify-items-end',\n      'between': 'justify-between',\n      'around': 'justify-around',\n      'evenly': 'justify-evenly'\n    };\n    classes.push(justifyMap[this.justifyContent]);\n    \n    // Align items\n    const alignMap = {\n      'start': 'items-start',\n      'center': 'items-center',\n      'end': 'items-end',\n      'stretch': 'items-stretch',\n      'baseline': 'items-baseline'\n    };\n    classes.push(alignMap[this.alignItems]);\n    \n    return classes.join(' ');\n  }\n}\n","<div [class]=\"getContainerClasses()\">\n  <div [class]=\"getGridClasses()\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { Component, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'keu-grid-item',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './grid-item.component.html',\n  styleUrls: ['./grid-item.component.scss']\n})\nexport class GridItemComponent {\n  // Responsive column spans\n  @Input() cols: number = 12; // Mobile (default full width)\n  @Input() sm: number | null = null; // Small devices (≥640px) - tablet\n  @Input() md: number | null = null; // Medium devices (≥768px) - tablet landscape\n  @Input() lg: number | null = null; // Large devices (≥1024px) - laptop\n  @Input() xl: number | null = null; // Extra large devices (≥1280px) - desktop\n  @Input() xxl: number | null = null; // 2X large devices (≥1536px) - large desktop\n  \n  // Responsive row spans\n  @Input() rowSpan: number = 1; // Mobile\n  @Input() smRowSpan: number | null = null;\n  @Input() mdRowSpan: number | null = null;\n  @Input() lgRowSpan: number | null = null;\n  @Input() xlRowSpan: number | null = null;\n  \n  // Offset (push right)\n  @Input() offset: number = 0;\n  @Input() smOffset: number | null = null;\n  @Input() mdOffset: number | null = null;\n  @Input() lgOffset: number | null = null;\n  @Input() xlOffset: number | null = null;\n  \n  // Order\n  @Input() order: number | null = null;\n  @Input() smOrder: number | null = null;\n  @Input() mdOrder: number | null = null;\n  @Input() lgOrder: number | null = null;\n  @Input() xlOrder: number | null = null;\n\n  @HostBinding('class')\n  get hostClasses(): string {\n    return this.getItemClasses();\n  }\n\n  getItemClasses(): string {\n    const classes: string[] = [];\n    \n    // Column spans (mobile first)\n    classes.push(`col-span-${this.cols}`);\n    if (this.sm !== null) classes.push(`sm:col-span-${this.sm}`);\n    if (this.md !== null) classes.push(`md:col-span-${this.md}`);\n    if (this.lg !== null) classes.push(`lg:col-span-${this.lg}`);\n    if (this.xl !== null) classes.push(`xl:col-span-${this.xl}`);\n    if (this.xxl !== null) classes.push(`2xl:col-span-${this.xxl}`);\n    \n    // Row spans\n    if (this.rowSpan > 1) classes.push(`row-span-${this.rowSpan}`);\n    if (this.smRowSpan !== null) classes.push(`sm:row-span-${this.smRowSpan}`);\n    if (this.mdRowSpan !== null) classes.push(`md:row-span-${this.mdRowSpan}`);\n    if (this.lgRowSpan !== null) classes.push(`lg:row-span-${this.lgRowSpan}`);\n    if (this.xlRowSpan !== null) classes.push(`xl:row-span-${this.xlRowSpan}`);\n    \n    // Offsets\n    if (this.offset > 0) classes.push(`col-start-${this.offset + 1}`);\n    if (this.smOffset !== null) classes.push(`sm:col-start-${this.smOffset + 1}`);\n    if (this.mdOffset !== null) classes.push(`md:col-start-${this.mdOffset + 1}`);\n    if (this.lgOffset !== null) classes.push(`lg:col-start-${this.lgOffset + 1}`);\n    if (this.xlOffset !== null) classes.push(`xl:col-start-${this.xlOffset + 1}`);\n    \n    // Order\n    if (this.order !== null) classes.push(`order-${this.order}`);\n    if (this.smOrder !== null) classes.push(`sm:order-${this.smOrder}`);\n    if (this.mdOrder !== null) classes.push(`md:order-${this.mdOrder}`);\n    if (this.lgOrder !== null) classes.push(`lg:order-${this.lgOrder}`);\n    if (this.xlOrder !== null) classes.push(`xl:order-${this.xlOrder}`);\n    \n    return classes.join(' ');\n  }\n}\n","<ng-content></ng-content>\n","import { Component, Input, Output, EventEmitter, HostBinding, ViewChild, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface Tab {\n  id: string;\n  label: string;\n  disabled?: boolean;\n  badge?: string | number;\n}\n\n@Component({\n  selector: 'keu-tabs',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './tabs.component.html',\n  styleUrls: ['./tabs.component.scss']\n})\nexport class TabsComponent {\n  @Input() tabs: Tab[] = [];\n  @Input() activeTabId: string = '';\n  @Input() scrollable: boolean = false;\n  @Input() fullWidth: boolean = false;\n  @Input() variant: 'default' | 'pills' | 'underline' = 'underline';\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\n  \n  @Output() tabChange = new EventEmitter<string>();\n  \n  @ViewChild('tabsContainer') tabsContainer?: ElementRef;\n\n  selectTab(tabId: string, disabled?: boolean) {\n    if (disabled) return;\n    this.activeTabId = tabId;\n    this.tabChange.emit(tabId);\n  }\n\n  scrollLeft() {\n    if (this.tabsContainer) {\n      this.tabsContainer.nativeElement.scrollBy({ left: -200, behavior: 'smooth' });\n    }\n  }\n\n  scrollRight() {\n    if (this.tabsContainer) {\n      this.tabsContainer.nativeElement.scrollBy({ left: 200, behavior: 'smooth' });\n    }\n  }\n\n  getTabClasses(tab: Tab): string {\n    const classes: string[] = [];\n    \n    // Base classes\n    classes.push('relative inline-flex items-center justify-center');\n    classes.push('font-medium transition-all duration-200');\n    classes.push('focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2');\n    \n    // Size classes\n    const sizeMap = {\n      'sm': 'px-3 py-2 text-sm',\n      'md': 'px-4 py-2.5 text-base',\n      'lg': 'px-5 py-3 text-lg'\n    };\n    classes.push(sizeMap[this.size]);\n    \n    // Variant classes\n    if (this.variant === 'underline') {\n      if (tab.id === this.activeTabId) {\n        classes.push('text-primary-600 border-b-2 border-primary-600');\n      } else {\n        classes.push('text-neutral-600 border-b-2 border-transparent');\n        classes.push('hover:text-primary-500 hover:border-neutral-300');\n      }\n    } else if (this.variant === 'pills') {\n      classes.push('rounded-lg');\n      if (tab.id === this.activeTabId) {\n        classes.push('bg-primary-100 text-primary-700');\n      } else {\n        classes.push('text-neutral-600 hover:bg-neutral-100');\n      }\n    } else {\n      // default variant\n      if (tab.id === this.activeTabId) {\n        classes.push('bg-white text-primary-600 border border-neutral-200 border-b-0 rounded-t-lg');\n      } else {\n        classes.push('text-neutral-600 hover:text-primary-500');\n      }\n    }\n    \n    // Disabled state\n    if (tab.disabled) {\n      classes.push('opacity-50 cursor-not-allowed');\n    } else {\n      classes.push('cursor-pointer');\n    }\n    \n    // Full width\n    if (this.fullWidth) {\n      classes.push('flex-1');\n    }\n    \n    return classes.join(' ');\n  }\n\n  getContainerClasses(): string {\n    const classes: string[] = ['flex border-b border-neutral-200'];\n    \n    if (this.scrollable) {\n      classes.push('overflow-x-auto scrollbar-hide flex-nowrap');\n    }\n    \n    if (this.fullWidth) {\n      classes.push('w-full');\n    } else {\n      classes.push('gap-1');\n    }\n    \n    return classes.join(' ');\n  }\n}\n","<div [class]=\"getContainerClasses()\" #tabsContainer>\n  <button\n    *ngFor=\"let tab of tabs\"\n    [class]=\"getTabClasses(tab)\"\n    [disabled]=\"tab.disabled\"\n    (click)=\"selectTab(tab.id, tab.disabled)\"\n    type=\"button\"\n  >\n    <span>{{ tab.label }}</span>\n    \n    <!-- Badge -->\n    <span\n      *ngIf=\"tab.badge\"\n      class=\"ml-2 inline-flex items-center justify-center px-2 py-0.5 text-xs font-medium rounded-full\"\n      [class.bg-primary-100]=\"tab.id === activeTabId\"\n      [class.text-primary-700]=\"tab.id === activeTabId\"\n      [class.bg-neutral-100]=\"tab.id !== activeTabId\"\n      [class.text-neutral-600]=\"tab.id !== activeTabId\"\n    >\n      {{ tab.badge }}\n    </span>\n  </button>\n</div>\n","/*\n * Public API Surface of keu-design-system\n */\n\n// Components\nexport * from './src/lib/components/button/button.component';\nexport * from './src/lib/components/dropdown/dropdown.component';\nexport * from './src/lib/components/table/table.component';\nexport * from './src/lib/components/alert/alert.component';\nexport * from './src/lib/components/dialog/dialog.component';\nexport * from './src/lib/components/accordion/accordion.component';\nexport * from './src/lib/components/pagination/pagination.component';\nexport * from './src/lib/components/typography/typography.component';\nexport * from './src/lib/components/chip/chip.component';\nexport * from './src/lib/components/card/card.component';\nexport * from './src/lib/components/datepicker/datepicker.component';\nexport * from './src/lib/components/input/input.component';\nexport * from './src/lib/components/radio/radio.component';\nexport * from './src/lib/components/checkbox/checkbox.component';\nexport * from './src/lib/components/switch/switch.component';\nexport * from './src/lib/components/grid/grid.component';\nexport * from './src/lib/components/grid/grid-item.component';\nexport * from './src/lib/components/tabs/tabs.component';\n\n// Future Additions (see LIBRARY-ROADMAP.md):\n// - Guards (AuthGuard, RoleGuard, PermissionGuard)\n// - Interceptors (TokenInterceptor, ErrorInterceptor, LoggingInterceptor)\n// - Services (HttpService, StorageService, NotificationService, CacheService)\n// - Models (User, ApiResponse, PaginationParams, etc.)\n// - Utils (Validators, Formatters, Helpers)\n// - Loggers\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}