{"version":3,"sources":["../src/utils/security.ts","../src/components/BirhausButton.tsx","../src/utils/cn.ts","../src/components/BirhausBadge/index.tsx","../src/components/BirhausInput.tsx","../src/components/BirhausSelect.tsx","../src/components/BirhausCard.tsx","../src/components/BirhausDialog.tsx","../src/components/BirhausTable.tsx","../src/components/BirhausCheckbox.tsx","../src/components/BirhausTabs.tsx","../src/components/BirhausCombobox.tsx","../src/components/BirhausCalendar.tsx","../src/components/BirhausTextarea.tsx","../src/components/BirhausCurrencyInput.tsx","../src/components/BirhausToast.tsx","../src/components/BirhausAlert.tsx","../src/components/BirhausEmptyState.tsx","../src/components/BirhausDateRangePicker.tsx","../src/components/BirhausSearchInput.tsx","../src/components/BirhausFileUpload.tsx","../src/components/BirhausPagination.tsx","../src/components/BirhausCheckboxGroup.tsx","../src/components/BirhausProgress.tsx","../src/components/BirhausRadioGroup.tsx","../src/components/BirhausToggle.tsx","../src/components/BirhausDataTable/index.tsx","../src/components/BirhausDataTable/utils.ts","../src/components/BirhausSearchableList/index.tsx","../src/components/BirhausSearchableList/utils.ts","../src/components/BirhausResourceCard/index.tsx","../src/components/BirhausBulkActionBar/index.tsx","../src/components/BirhausBulkActionBar/hooks.ts","../src/components/BirhausBulkActionBar/presets.ts","../src/components/BirhausStatusBadge/index.tsx","../src/components/BirhausStatCard/index.tsx","../src/components/BirhausQuickFilter.tsx","../src/components/BirhausFilterBar.tsx","../src/components/BirhausContainer.tsx","../src/components/BirhausPageHeader.tsx","../src/components/BirhausPageLayout.tsx","../src/constants/performance.ts"],"names":["validateObjectKey","key","obj","safeAccess","fallback","safeArrayAccess","array","index","validateVariant","variant","allowedVariants","safeClassLookup","classes","BIRHAUS_VARIANTS","BIRHAUS_SIZES","validateBirhausVariant","validateBirhausSize","size","safeThemeAccess","theme","path","cn","BirhausButton","forwardRef","label","labelEs","labelEn","isPrimaryAction","loading","loadingText","loadingTextEs","loadingTextEn","destructive","undoAction","undoTimeoutMs","showSuccessState","successText","successTextEs","successTextEn","describedBy","describedByEs","describedByEn","icon","iconPosition","fullWidth","trackCognitiveLoad","cognitiveLoadLevel","className","disabled","onClick","children","props","ref","showUndoPrompt","setShowUndoPrompt","useState","isUndoing","setIsUndoing","showSuccess","setShowSuccess","undoTimeoutRef","useRef","resolveText","spanish","english","displayLabel","displayLoadingText","displaySuccessText","displayDescription","baseClasses","sizeClasses","variantClasses","cognitiveLoadIndicator","handleClick","event","result","error","handleUndo","useEffect","jsxs","jsx","AlertTriangle","Undo2","Loader2","Check","useBirhausButton","setLoading","success","setSuccess","action","inputs","twMerge","clsx","BirhausBadge","validVariant","validSize","BirhausInput","description","descriptionEs","descriptionEn","errorEs","errorEn","solution","solutionEs","solutionEn","autoSave","autoSaveDelay","onAutoSave","validateOnChange","validateOnBlur","validationRules","prefix","suffix","showPasswordToggle","showClearButton","helpText","helpTextEs","helpTextEn","fieldPriority","cognitiveWeight","type","value","defaultValue","onChange","onBlur","onFocus","required","currentValue","setCurrentValue","showPassword","setShowPassword","isFocused","setIsFocused","validationError","setValidationError","validationSolution","setValidationSolution","autoSaveStatus","setAutoSaveStatus","autoSaveTimeoutRef","inputRef","displayError","displaySolution","displayHelpText","validateValue","val","rule","triggerAutoSave","handleChange","newValue","handleBlur","handleFocus","handleClear","hasError","hasSuccess","stateClasses","priorityClasses","baseInputClasses","CheckCircle2","AlertCircle","EyeOff","Eye","X","Info","birhausValidationRules","fieldName","min","BirhausSelect","options","placeholder","placeholderEs","placeholderEn","multiple","maxSelections","searchable","searchPlaceholder","searchPlaceholderEs","searchPlaceholderEn","showCognitiveWarning","clearable","closeOnSelect","id","isOpen","setIsOpen","searchTerm","setSearchTerm","selectedValues","setSelectedValues","containerRef","searchInputRef","displayPlaceholder","displaySearchPlaceholder","MILLER_LAW_LIMIT","filteredOptions","option","visibleOptions","hasMoreOptions","cognitiveLoad","handleOptionSelect","optionValue","newValues","v","handleClickOutside","selectedLabels","opt","displayValue","triggerClasses","e","ChevronDown","Search","isSelected","optionLabel","optionDescription","useBirhausSelect","setValue","createBirhausOptionGroups","groupBy","groups","groupKey","groupArray","groupName","groupOptions","BirhausCard","title","titleEs","titleEn","subtitle","subtitleEs","subtitleEn","header","footer","aside","primaryAction","secondaryActions","collapsible","defaultExpanded","expandedContent","status","statusMessage","statusMessageEs","statusMessageEn","skeleton","lazyLoad","selectable","selected","onSelect","badge","badgeVariant","timestamp","author","category","informationDensity","isExpanded","setIsExpanded","displayTitle","displaySubtitle","displayStatusMessage","actionCount","statusClasses","statusIcons","badgeClasses","densityClasses","Clock","MoreVertical","ChevronUp","useBirhausCard","expanded","setExpanded","setSelected","prev","createBirhausCardAction","BirhausDialog","open","onOpenChange","undoConfig","position","closeOnOverlayClick","closeOnEscape","persistent","role","ariaLabelledBy","ariaDescribedBy","overlayClassName","isUndoActive","setIsUndoActive","undoTimeRemaining","setUndoTimeRemaining","timeout","interval","handleKeyDown","handleAction","positionClasses","variantStyles","currentVariant","undoMessage","undoLabel","useBirhausDialog","setOpen","undoActive","setUndoActive","createBirhausDialogAction","BirhausTable","data","columns","emptyMessage","emptyMessageEs","emptyMessageEn","loadingMessage","loadingMessageEs","loadingMessageEn","maxVisibleColumns","sortable","filterable","selectedRows","onRowSelect","onRowsSelect","pagination","sortConfig","onSort","filters","onFilter","searchValue","onSearch","getRowId","item","rowActions","hiddenColumns","setHiddenColumns","localSortConfig","setLocalSortConfig","displayEmptyMessage","displayLoadingMessage","visibleColumns","hiddenColumnCount","useMemo","priorityOrder","sortedColumns","a","b","aPriority","bPriority","aWeight","bWeight","visible","col","hidden","avgCognitiveWeight","sum","load","handleSort","columnId","direction","handleRowSelect","rowId","handleSelectAll","allIds","getCellValue","column","formatCellValue","_","i","MoreHorizontal","formattedValue","useBirhausTable","initialData","setData","setSelectedRows","setSortConfig","setFilters","setSearchValue","newSelected","ids","BirhausCheckbox","indeterminate","labelPosition","showStateIcon","errorMessage","errorMessageEs","errorMessageEn","successMessage","successMessageEs","successMessageEn","checked","labelClassName","internalChecked","setInternalChecked","isChecked","isControlled","displayErrorMessage","displaySuccessMessage","newChecked","currentSize","checkboxClasses","labelClasses","containerClasses","Minus","BirhausSwitch","showLabels","onLabel","onLabelEs","onLabelEn","offLabel","offLabelEs","offLabelEn","displayOnLabel","displayOffLabel","trackClasses","thumbClasses","useBirhausCheckbox","initialChecked","setChecked","setError","BirhausTabs","tabs","activeTab","onTabChange","maxVisibleTabs","orientation","activateOnHover","lazy","overflowBehavior","contentPadding","tabListClassName","tabClassName","contentClassName","internalActiveTab","setInternalActiveTab","showOverflowMenu","setShowOverflowMenu","currentActiveTab","visibleTabs","overflowTabs","sortedTabs","tab","overflow","handleTabChange","tabId","t","handleTabHover","activeTabData","orientationClasses","currentOrientation","renderTab","isActive","BirhausTab","Fragment","useBirhausTabs","initialActiveTab","setActiveTab","tabHistory","setTabHistory","previousTab","defaultTab","createBirhausTabItem","content","BirhausCombobox","onValueChange","maxVisibleOptions","filterFunction","dropdownPosition","dropdownClassName","focusedIndex","setFocusedIndex","internalValue","setInternalValue","dropdownRef","filterFunc","search","searchLower","additionalTerms","hiddenCount","filtered","selectedOption","handleValueChange","inputClasses","useBirhausCombobox","initialValue","createBirhausComboboxOption","MESES_ESPANOL","DIAS_CORTOS_ESPANOL","BirhausCalendar","minDate","maxDate","disabledDates","disabledDaysOfWeek","showTodayButton","showMonthYearSelector","enableUndo","onUndo","dateFormat","locale","firstDayOfWeek","trackInteraction","onMonthChange","onYearChange","selectedDate","setSelectedDate","currentMonth","setCurrentMonth","currentYear","setCurrentYear","undoState","setUndoState","interactionStartTime","getDisplayText","useCallback","primary","displayDescribedBy","formatDate","date","day","month","year","isDateDisabled","disabledDate","calendarDays","firstDayOfMonth","lastDayOfMonth","firstDayOfWeekInMonth","days","handleDateChange","newDate","interactionTime","navigateMonth","newMonth","newYear","handleToday","today","Calendar","ChevronLeft","ChevronRight","RotateCcw","useBirhausCalendar","initialDate","undoHistory","setUndoHistory","selectDate","undoLastSelection","previousDate","clearDate","createBirhausDateRange","start","end","dates","currentDate","getBirhausWeekdays","exclude","getBirhausWeekends","BirhausTextarea","_errorEs","_errorEn","maxLength","showCharacterCount","characterCountThreshold","autoResize","minRows","maxRows","undoThreshold","_cognitiveWeight","rows","_ref","currentRows","setCurrentRows","textareaRef","lastSavedValueRef","characterCount","isApproachingLimit","isOverLimit","updateRows","textarea","lineHeight","newRows","setupUndo","oldValue","getStatusColor","birhausTextareaValidationRules","max","useBirhausTextarea","history","setHistory","historyIndex","setHistoryIndex","updateValue","newHistory","undo","newIndex","redo","canUndo","canRedo","word","CURRENCIES","BirhausCurrencyInput","currency","defaultCurrency","allowCurrencySwitch","showCurrencyName","exchangeRate","showConversion","onCurrencyChange","minValue","maxValue","requiredMessage","requiredMessageEs","requiredMessageEn","currentCurrency","setCurrentCurrency","numericValue","setNumericValue","setDisplayValue","currencyConfig","displayRequiredMessage","formatCurrency","amount","currencyCode","config","formattedNumber","parseInput","input","cleaned","match","offset","string","afterMatch","parsed","validateAmount","convertCurrency","fromCurrency","toCurrency","newCurrency","difference","threshold","handleInputChange","inputValue","handleCurrencySwitch","convertedValue","conversionAmount","ArrowRightLeft","useBirhausCurrency","initialCurrency","setAmount","setCurrency","setExchangeRate","convert","getFormattedAmount","targetCurrency","updateAmount","newAmount","paraguayanCurrencyUtils","usdAmount","rate","pygAmount","ruc","baseAmount","ivaAmount","ToastContext","createContext","BirhausToastProvider","maxToasts","defaultLocale","toasts","setToasts","setLocale","addToast","toastData","newToast","current","updated","persistentToasts","nonPersistentToasts","keepCount","dismissToast","toast","clearAllToasts","contextValue","BirhausToast","onDismiss","isVisible","setIsVisible","timeRemaining","setTimeRemaining","isPaused","setIsPaused","timeoutRef","intervalRef","displayMessage","displayUndoLabel","displayActionLabel","handleDismiss","startTimer","startCountdown","newTime","timer","handleMouseEnter","handleMouseLeave","IconComponent","progressPercentage","useBirhausToast","context","useContext","message","showError","showWarning","showInfo","showSaved","entity","showDeleted","showPaymentSuccess","BirhausToastStandalone","onClose","internalVisible","setInternalVisible","mockToast","birhausToastMessages","BirhausAlert","messageEs","messageEn","details","detailsEs","detailsEn","dismissible","dismissKey","autoHide","autoHideDelay","actions","showIcon","customIcon","isDismissed","setIsDismissed","actionLoading","setActionLoading","wasPreviouslyDismissed","displayDetails","handleActionClick","handleToggleExpansion","variantConfig","limitedActions","isLoading","isPrimary","useBirhausAlert","dismiss","reset","wasDismissed","birhausAlertPresets","BirhausEmptyState","showHelpText","illustration","scenario","Users","Plus","DollarSign","RefreshCw","FileText","sizeConfig","useBirhausEmptyState","isEmpty","birhausEmptyStatePresets","BirhausDateRangePicker","maxRangeDays","presets","showPresets","enableCustomRange","autoApply","reportType","internalRange","setInternalRange","activePreset","setActivePreset","customMode","setCustomMode","getDefaultPresets","startOfToday","basePresets","allPresets","validateRange","range","newRange","oldRange","handlePresetSelect","preset","handleCustomRangeChange","field","handleApply","getDisplayValue","useBirhausDateRange","initialRange","setRange","updateRange","getDaysBetween","ipuAdminDatePresets","now","quarter","BirhausSearchInput","onSuggestionSelect","suggestions","loadingSuggestions","maxSuggestions","categories","selectedCategory","onCategoryChange","enableRecentSearches","maxRecentSearches","recentSearches","onRecentSearchesChange","debounceMs","minQueryLength","searchScope","showDropdown","setShowDropdown","internalRecentSearches","setInternalRecentSearches","debounceTimeoutRef","getDefaultCategories","allCategories","filteredSuggestions","suggestion","oldHistory","addToRecentSearches","query","clearRecentSearches","handleSubmit","searchQuery","handleSuggestionSelect","handleRecentSearchSelect","iconSizes","shouldShowSuggestions","shouldShowRecentSearches","recentSearch","useBirhausSearch","initialQuery","setQuery","setRecentSearches","setIsLoading","setSuggestions","addToHistory","clearHistory","performSearch","searchFn","results","ipuAdminSearchCategories","TrendingUp","createIPUAdminSuggestion","text","metadata","BirhausFileUpload","files","defaultFiles","onUpload","onRemove","acceptedTypes","maxFileSize","maxFiles","uploadType","enableDragDrop","showPreview","previewSize","internalFiles","setInternalFiles","isDragOver","setIsDragOver","fileInputRef","dropZoneRef","fileTypeConfig","configs","File","Image","generateFileId","validateFile","file","sizeMB","extension","ext","createFilePreview","resolve","reader","restoredFiles","removedFile","addFiles","fileList","filesArray","newFiles","validationResult","preview","fileItem","updatedFiles","uploadFile","f","progress","progressInterval","removeFile","fileId","fileToRemove","handleFileInputChange","handleDragOver","handleDragLeave","handleDrop","getFileIcon","formatFileSize","bytes","k","sizes","Upload","useBirhausFileUpload","setFiles","isUploading","setIsUploading","updateFileStatus","updates","uploadAll","uploadFn","pendingFiles","hasErrors","allCompleted","totalProgress","acc","BirhausPagination","currentPage","totalItems","itemsPerPage","onPageChange","pageSizeOptions","onPageSizeChange","showPageSizeSelector","maxVisiblePages","showQuickJump","showFirstLast","previousLabel","nextLabel","firstLabel","lastLabel","ofLabel","itemsLabel","mobileVariant","showItemsInfo","showQuickActions","jumpToPage","setJumpToPage","showJumpInput","setShowJumpInput","labels","paginationInfo","totalPages","startItem","endItem","visiblePages","maxPages","halfMax","pages","handlePageChange","page","newPage","handlePrevious","handleNext","handleFirst","handleLast","handleQuickJump","handlePageSizeChange","newPageSize","newTotalPages","currentSizeClasses","currentVariantClasses","isMobile","ChevronsLeft","ChevronsRight","useBirhausPagination","initialPageSize","setCurrentPage","pageSize","setPageSize","startIndex","endIndex","ipuAdminPaginationConfig","BirhausCheckboxGroup","showCategories","maxItemsPerCategory","showSelectAll","selectAllLabelEs","selectAllLabelEn","layout","minSelections","presetType","selectAllLabel","Shield","groupedOptions","grouped","uncategorized","validateSelection","values","handleOptionChange","handleSelectAllCategory","categoryId","categoryValues","areAllSelected","availableSlots","toAdd","allValues","getCategoryState","categoryOptions","enabledOptions","selectedCount","layoutClasses","renderCheckbox","isDisabled","renderCategoryGroup","categoryState","categoryLabel","categoryDescription","useBirhausCheckboxGroup","initialValues","selectAll","deselectAll","toggleOption","getSelectedOptions","ipuAdminCheckboxOptions","BirhausProgress","target","unit","milestones","showMilestones","startDate","endDate","showTimeMetrics","showPercentage","showValues","showAnimation","animationDuration","colorThresholds","ariaLabel","ariaLabelEs","ariaLabelEn","progressType","campaignName","onMilestoneReached","onTargetReached","animatedProgress","setAnimatedProgress","reachedMilestones","setReachedMilestones","targetReached","setTargetReached","displayAriaLabel","metrics","percentage","remaining","timeElapsed","averagePerDay","getDefaultMilestones","Target","Award","allMilestones","progressColor","formatNumber","num","formatTimeRemaining","months","remainingDays","startTime","startProgress","targetProgress","animate","elapsed","easeOutCubic","currentProgress","newReachedMilestones","milestone","newlyReached","milestoneId","m","colorClasses","renderLinearProgress","renderCircularProgress","radius","circumference","strokeDashoffset","useBirhausProgress","setCurrent","setMilestones","increment","decrement","setProgress","isComplete","ipuAdminProgressPresets","BirhausRadioGroup","name","showIcons","showDescriptions","showBadges","highlightRecommended","maxOptions","getDefaultOptions","CreditCard","processedOptions","selectedValue","validOption","renderRadioOption","optionBadge","useBirhausRadioGroup","setSelectedValue","selectOption","clearSelection","getSelectedOption","getNextOption","currentIndex","getPreviousOption","ipuAdminRadioGroupPresets","BirhausToggle","onDescription","onDescriptionEs","onDescriptionEn","offDescription","offDescriptionEs","offDescriptionEn","defaultChecked","confirmationRequired","confirmationMessageEs","confirmationMessageEn","criticalAction","showStateLabels","showStateIcons","settingType","onAsyncChange","isAnimating","setIsAnimating","showConfirmation","setShowConfirmation","pendingValue","setPendingValue","defaultStateLabels","stateConfigs","currentOnLabel","currentOffLabel","currentOnDescription","currentOffDescription","confirmationMessage","getStateIcon","isOn","iconConfigs","Bell","BellOff","ShieldOff","timeoutDuration","handleConfirmation","handleToggle","currentStateLabel","currentStateDescription","useBirhausToggle","setIsOn","toggle","turnOn","turnOff","ipuAdminTogglePresets","BirhausDataTable","keyField","globalSearch","totalCount","selectedItems","onSelectionChange","bulkActions","onRowClick","exportable","onExport","rowClassName","EmptyIcon","FileX","safeColumns","sortColumn","setSortColumn","sortDirection","setSortDirection","localSearchTerm","setLocalSearchTerm","showPagination","columnKey","sortedData","aValue","bValue","filteredData","searchableColumns","term","isAllSelected","isPartiallySelected","handleSelectItem","SortIcon","ChevronsUpDown","getLabel","es","en","j","pageNum","useBirhausDataTable","setSelectedItems","resetSelection","resetPagination","COGNITIVE_LOAD_THRESHOLDS","BIRHAUS_4_3_1_MAX_ACTIONS","validateCognitiveLoad","columnsCount","bulkActionsCount","totalLoad","createBirhausTableColumn","createBirhausBulkAction","sortDataByColumn","filterDataBySearch","commonColumnTypes","BirhausSearchableList","items","getItemKey","renderItem","searchKeys","onMultiSelect","multiSelect","maxSelectable","showSelectedCount","height","virtualize","itemHeight","sortBy","listClassName","searchClassName","emptySearchMessageEs","emptySearchMessageEn","cognitiveMode","selectedCountLabelEs","selectedCountLabelEn","maxSelectionLabelEs","maxSelectionLabelEn","debouncedSearchTerm","setDebouncedSearchTerm","selectedKeys","setSelectedKeys","expandedGroups","setExpandedGroups","listRef","shouldShowCognitiveWarning","hasHighItemCount","hasHighMaxSelection","needsVirtualization","filteredItems","sortedItems","groupedItems","group","flatItems","groupItems","shouldVirtualizeList","virtualizer","useVirtualizer","handleItemClick","selectedItemsList","allKeys","toggleGroup","newExpanded","renderListItem","virtualRow","motion","selectedCountText","AnimatePresence","validateMillersLawCompliance","groupCount","warnings","recommendations","cognitiveLoadScore","calculateCognitiveMetrics","isVirtualized","searchActive","cognitiveScore","autoConfigureForCognitiveLoad","currentProps","optimizedProps","filterItems","getItemDisplayName","itemAny","candidate","createDebounce","func","delay","timeoutId","args","BirhausSearchableListPresets","BirhausResourceCard","avatar","badges","primaryInfo","secondaryInfo","menuActions","onCardClick","showAvatar","maxPrimaryInfo","maxSecondaryInfo","maxMenuActions","isHovered","setIsHovered","ds","isClickable","cognitiveWarnings","avatarColors","formatValue","format","renderAvatar","AvatarIcon","colorClass","n","renderHeader","renderInfo","displayPrimaryInfo","displaySecondaryInfo","info","InfoIcon","renderActions","displayMenuActions","ActionIcon","cardContent","warning","cardClasses","BirhausResourceCardTemplates","ExternalLink","Edit","Copy","Trash2","BirhausBulkActionBar","onSelectAll","onClearSelection","sticky","showProgress","progressInfo","onCancelOperation","undoActions","disableAnimation","ariaLiveRegion","customContent","onValidateAction","onActionStart","onActionComplete","onActionError","actionState","setActionState","executingAction","setExecutingAction","recentUndo","setRecentUndo","mounted","setMounted","validatedActions","validation","renderActionButton","isExecuting","isCompleted","isError","CheckSquare","Square","createPortal","useBulkSelection","maxSelection","_persistSelection","selectionHistory","newSelection","updateSelection","currentSelectionJson","newSelectionJson","selectItem","deselectItem","itemId","limitedItems","toggleSelection","effectiveTotal","getSelectionStats","selectRange","rangeItems","existingIds","newItems","limited","selectByFilter","predicate","previousSelection","nextSelection","useBulkOperations","setIsExecuting","cancelled","setCancelled","executeWithProgress","operation","batchSize","onProgress","onError","batch","batchIndex","globalIndex","newCurrent","err","cancel","useBulkActionValidation","validateMillersLaw","actionsCount","validateSpanishFirst","validateSelectionSize","maxRecommended","createExportAction","FileDown","createDeleteAction","onDelete","count","createArchiveAction","onArchive","Archive","createEmailAction","onEmail","Mail","createTagAction","onTag","tag","Tag","createApproveAction","onApprove","CheckCircle","createRejectAction","onReject","XCircle","createStatusUpdateAction","onUpdateStatus","statusLabel","createDownloadAction","onDownload","Download","createCopyAction","onCopy","createEditAction","onEdit","createAssignAction","onAssign","assignee","createFavoriteAction","onFavorite","isFavorite","Star","createVisibilityAction","onToggleVisibility","makeVisible","createPriorityAction","onSetPriority","priority","priorityLabels","Flag","createPermissionAction","onUpdatePermissions","permission","grant","BulkActionPresets","ExtendedBulkActionPresets","createBulkActionConfig","presetFunc","statusConfigs","GraduationCap","PauseCircle","CircleDashed","UserCheck","UserX","BirhausStatusBadge","Icon","BirhausStudentStatusBadge","BirhausPaymentStatusBadge","enhancedLabelEs","enhancedLabelEn","BirhausCourseStatusBadge","BirhausContractStatusBadge","BirhausAttendanceStatusBadge","BirhausStatusGroup","spacing","getBirhausStatusColor","c","getBirhausStatusIcon","getBirhausStatusLabel","getStatusCategory","studentStatuses","paymentStatuses","courseStatuses","attendanceStatuses","contractStatuses","useBirhausStatusBadge","initialStatus","setStatus","React","previousStatus","setPreviousStatus","changeStatus","newStatus","undoStatusChange","BirhausStatCard","tituloEs","tituloEn","subtituloEs","subtituloEn","trend","trendValue","trendLabelEs","trendLabelEn","color","colors","TrendIcon","TrendingDown","titleSizeClasses","valueSizeClasses","displayTrendLabel","createStatMetrics","previousValue","change","percentageChange","birhausStatCardPresets","useBirhausStatCard","refreshInterval","setPreviousValue","lastUpdated","setLastUpdated","refresh","BirhausQuickFilter","active","isEmojiIcon","activeVariantClasses","inactiveVariantClasses","useBirhausQuickFilter","initialFilters","toggleFilter","filter","setFilterActive","clearAllFilters","activeFilters","birhausQuickFilterPresets","BirhausFilterBar","quickFilters","advancedFilters","showAdvancedFilters","onToggleAdvancedFilters","customFilters","onClearAll","clearAllLabelEs","clearAllLabelEn","advancedFiltersLabelEs","advancedFiltersLabelEn","quickFiltersLabelEs","quickFiltersLabelEn","showingLabelEs","showingLabelEn","quickFiltersCount","hasActiveQuickFilters","hasSearchTerm","hasActiveFilters","handleSearchChange","handleClearSearch","handleClearAll","Filter","filterProps","useBirhausFilterBar","showAdvanced","setShowAdvanced","updateFilter","clearFilter","birhausFilterBarPresets","BirhausContainer","padding","centered","Component","paddingClasses","useBirhausContainer","birhausContainerPresets","BirhausPageHeader","breadcrumbs","level","gradient","primaryActions","ghostActions","gradientClasses","HeadingTag","ActionButton","buttonVariantClasses","Home","crumb","useBirhausPageHeader","href","birhausPageHeaderPresets","BirhausPageLayout","sidebar","sidebarPosition","sidebarWidth","sidebarSticky","containerSize","containerPadding","background","skipToContentLabel","skipToContentLabelEs","skipToContentLabelEn","headerClassName","sidebarClassName","collapsibleSidebar","onSidebarToggle","sidebarCollapsed","setSidebarCollapsed","handleSidebarToggle","newCollapsed","backgroundClasses","sidebarWidthClasses","skipLabel","useBirhausPageLayout","sidebarVisible","setSidebarVisible","currentTab","setCurrentTab","toggleSidebar","hideSidebar","showSidebar","birhausPageLayoutPresets","BIRHAUS_PERFORMANCE","BIRHAUS_SCORING","DEFAULT_BIRHAUS_CONFIG","BIRHAUS_ENV_CONFIG"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Security utilities for BIRHAUS components\n * \n * Provides safe object access patterns to prevent object injection vulnerabilities\n * while maintaining type safety and performance.\n */\n\n/**\n * Type guard to validate that a key exists in an object\n */\nexport function validateObjectKey<T extends Record<string, unknown>>(\n  key: string, \n  obj: T\n): key is Extract<keyof T, string> {\n  return key in obj && Object.prototype.hasOwnProperty.call(obj, key)\n}\n\n/**\n * Safe object property access with fallback\n */\nexport function safeAccess<T extends Record<string, unknown>, F>(\n  obj: T,\n  key: string,\n  fallback: F\n): T[Extract<keyof T, string>] | F {\n  if (validateObjectKey(key, obj)) {\n    // eslint-disable-next-line security/detect-object-injection -- Safe access after validation\n    return obj[key] as T[Extract<keyof T, string>]\n  }\n  return fallback\n}\n\n/**\n * Safe array access with bounds checking\n */\nexport function safeArrayAccess<T>(\n  array: T[],\n  index: number,\n  fallback: T\n): T {\n  if (index >= 0 && index < array.length) {\n    // eslint-disable-next-line security/detect-object-injection -- Safe array access with bounds check\n    return array[index] as T\n  }\n  return fallback\n}\n\n/**\n * Validate variant against allowed values with type safety\n */\nexport function validateVariant<T extends string>(\n  variant: string,\n  allowedVariants: readonly T[],\n  fallback: T\n): T {\n  return allowedVariants.includes(variant as T) ? variant as T : fallback\n}\n\n/**\n * Safe CSS class lookup with validation\n * Common pattern for component styling\n */\nexport function safeClassLookup<T extends Record<string, string>>(\n  classes: T,\n  key: string,\n  fallback: string\n): string {\n  if (validateObjectKey(key, classes)) {\n    // eslint-disable-next-line security/detect-object-injection -- Safe access after validation\n    return classes[key] as string\n  }\n  return fallback\n}\n\n/**\n * Common BIRHAUS component variants for reuse\n */\nexport const BIRHAUS_VARIANTS = ['default', 'primary', 'secondary', 'success', 'warning', 'error', 'info'] as const\nexport type BirhausVariant = typeof BIRHAUS_VARIANTS[number]\n\n/**\n * Common BIRHAUS component sizes for reuse\n */\nexport const BIRHAUS_SIZES = ['sm', 'md', 'lg', 'xl'] as const\nexport type BirhausSize = typeof BIRHAUS_SIZES[number]\n\n/**\n * Validate BIRHAUS variant with type safety\n */\nexport function validateBirhausVariant(variant: string): BirhausVariant {\n  return validateVariant(variant, BIRHAUS_VARIANTS, 'default')\n}\n\n/**\n * Validate BIRHAUS size with type safety\n */\nexport function validateBirhausSize(size: string): BirhausSize {\n  return validateVariant(size, BIRHAUS_SIZES, 'md')\n}\n\n/**\n * Safe theme color access\n * Prevents theme object injection vulnerabilities\n */\nexport function safeThemeAccess<T extends Record<string, string>>(\n  theme: T,\n  path: string,\n  fallback: string\n): string {\n  return safeAccess(theme, path, fallback as T[keyof T]) as string\n}","'use client'\n\nimport { forwardRef, ReactNode, useState, useRef, useEffect } from 'react'\nimport { Loader2, Undo2, AlertTriangle, Check } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Button Component\n * \n * Enhanced button implementing all 10 BIRHAUS principles:\n * - Cognitive load reduction through clear visual hierarchy\n * - Spanish-first labeling with optional English\n * - Undo integration for destructive actions\n * - Loading states with progress indication\n * - Accessibility compliance (WCAG AA+)\n * - Performance optimized with minimal re-renders\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #1: Form serves flow\n  variant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost'\n  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n  \n  // BIRHAUS Principle #3: One clear action\n  isPrimaryAction?: boolean\n  \n  // BIRHAUS Principle #8: Performance is UX\n  loading?: boolean\n  loadingText?: string\n  loadingTextEs?: string\n  loadingTextEn?: string\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  destructive?: boolean\n  undoAction?: () => Promise<void>\n  undoTimeoutMs?: number\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  showSuccessState?: boolean\n  successText?: string\n  successTextEs?: string\n  successTextEn?: string\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  describedBy?: string\n  describedByEs?: string\n  describedByEn?: string\n  \n  // Enhanced functionality\n  icon?: ReactNode\n  iconPosition?: 'left' | 'right'\n  fullWidth?: boolean\n  \n  // Cognitive load tracking\n  trackCognitiveLoad?: boolean\n  cognitiveLoadLevel?: 'low' | 'medium' | 'high'\n  \n  children?: ReactNode\n}\n\nexport const BirhausButton = forwardRef<HTMLButtonElement, BirhausButtonProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Appearance\n  variant = 'secondary',\n  size = 'md',\n  isPrimaryAction = false,\n  \n  // States\n  loading = false,\n  loadingText,\n  loadingTextEs,\n  loadingTextEn,\n  \n  // Undo functionality\n  destructive = false,\n  undoAction,\n  undoTimeoutMs = 10000,\n  \n  // Success state\n  showSuccessState = false,\n  successText,\n  successTextEs,\n  successTextEn,\n  \n  // Accessibility\n  describedBy,\n  describedByEs,\n  describedByEn,\n  \n  // Enhanced props\n  icon,\n  iconPosition = 'left',\n  fullWidth = false,\n  \n  // Cognitive load\n  trackCognitiveLoad = false,\n  cognitiveLoadLevel = 'medium',\n  \n  // Standard props\n  className,\n  disabled,\n  onClick,\n  children,\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: State management for undo functionality\n  const [showUndoPrompt, setShowUndoPrompt] = useState(false)\n  const [isUndoing, setIsUndoing] = useState(false)\n  const [showSuccess, setShowSuccess] = useState(false)\n  const undoTimeoutRef = useRef<NodeJS.Timeout>()\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || labelEs || english || labelEn || fallback || ''\n  }\n  \n  const displayLabel = resolveText(labelEs, labelEn, label)\n  const displayLoadingText = resolveText(\n    loadingTextEs || 'Procesando...',\n    loadingTextEn || 'Processing...',\n    loadingText\n  )\n  const displaySuccessText = resolveText(\n    successTextEs || 'Completado',\n    successTextEn || 'Completed',\n    successText\n  )\n  const displayDescription = resolveText(describedByEs, describedByEn, describedBy)\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const baseClasses = `\n    inline-flex items-center justify-center gap-2 rounded-lg font-medium \n    transition-all duration-200 ease-in-out\n    focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\n    disabled:pointer-events-none disabled:opacity-50\n    ${fullWidth ? 'w-full' : ''}\n  `.trim()\n  \n  const sizeClasses = {\n    xs: 'h-7 px-2 text-xs',\n    sm: 'h-8 px-3 text-sm',\n    md: 'h-10 px-4 text-sm',\n    lg: 'h-11 px-6 text-base',\n    xl: 'h-12 px-8 text-base'\n  }\n  \n  // BIRHAUS Principle #3: One clear action (primary action gets special treatment)\n  const variantClasses = {\n    primary: isPrimaryAction \n      ? 'bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500 shadow-md hover:shadow-lg'\n      : 'bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500',\n    secondary: 'bg-white border border-gray-300 text-gray-700 hover:bg-gray-50 focus-visible:ring-gray-500',\n    destructive: 'bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500',\n    outline: 'border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-50 focus-visible:ring-gray-500',\n    ghost: 'text-gray-600 hover:text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-500'\n  }\n  \n  // BIRHAUS: Cognitive load visual indicators\n  const cognitiveLoadIndicator = trackCognitiveLoad ? safeAccess({\n    low: 'ring-1 ring-green-300',\n    medium: 'ring-1 ring-yellow-300', \n    high: 'ring-1 ring-red-300'\n  }, cognitiveLoadLevel, '') : ''\n  \n  // BIRHAUS Principle #5: Undo over confirm - Handle destructive actions\n  const handleClick = async (event: React.MouseEvent<HTMLButtonElement>) => {\n    if (destructive && undoAction && !showUndoPrompt) {\n      // Execute destructive action immediately, then show undo option\n      await onClick?.(event)\n      \n      setShowUndoPrompt(true)\n      \n      // Set timeout to hide undo option\n      undoTimeoutRef.current = setTimeout(() => {\n        setShowUndoPrompt(false)\n      }, undoTimeoutMs)\n      \n      return\n    }\n    \n    // Regular action\n    const result = onClick?.(event)\n    \n    // Show success state if configured\n    if (showSuccessState && result && typeof result === 'object' && 'then' in result) {\n      try {\n        await result\n        setShowSuccess(true)\n        setTimeout(() => setShowSuccess(false), 2000)\n      } catch (error) {\n        // Handle error state\n        console.error('Action failed:', error)\n      }\n    }\n  }\n  \n  // Handle undo action\n  const handleUndo = async () => {\n    if (!undoAction) return\n    \n    setIsUndoing(true)\n    \n    try {\n      await undoAction()\n      setShowUndoPrompt(false)\n      \n      // Clear timeout\n      if (undoTimeoutRef.current) {\n        clearTimeout(undoTimeoutRef.current)\n      }\n    } catch (error) {\n      console.error('Undo failed:', error)\n    } finally {\n      setIsUndoing(false)\n    }\n  }\n  \n  // Cleanup timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (undoTimeoutRef.current) {\n        clearTimeout(undoTimeoutRef.current)\n      }\n    }\n  }, [])\n  \n  // BIRHAUS: Show undo prompt instead of button when destructive action executed\n  if (showUndoPrompt) {\n    return (\n      <div className=\"inline-flex items-center gap-2 p-2 bg-red-50 border border-red-200 rounded-lg\">\n        <AlertTriangle className=\"h-4 w-4 text-red-600\" />\n        <span className=\"text-sm text-red-800\">Acción completada</span>\n        <button\n          onClick={handleUndo}\n          disabled={isUndoing}\n          className=\"inline-flex items-center gap-1 px-3 py-1 text-sm font-medium text-red-700 bg-white border border-red-300 rounded hover:bg-red-50 disabled:opacity-50\"\n        >\n          <Undo2 className=\"h-3 w-3\" />\n          {isUndoing ? 'Deshaciendo...' : 'Deshacer'}\n        </button>\n      </div>\n    )\n  }\n  \n  return (\n    <button\n      ref={ref}\n      className={cn(\n        baseClasses,\n        safeAccess(sizeClasses, size, sizeClasses.md),\n        safeAccess(variantClasses, variant, variantClasses.primary),\n        cognitiveLoadIndicator,\n        className\n      )}\n      disabled={disabled || loading}\n      onClick={handleClick}\n      aria-describedby={displayDescription ? `${props.id}-desc` : undefined}\n      data-birhaus-component=\"button\"\n      data-birhaus-variant={variant}\n      data-birhaus-primary={isPrimaryAction}\n      data-cognitive-load={trackCognitiveLoad ? cognitiveLoadLevel : undefined}\n      {...props}\n    >\n      {/* Loading state */}\n      {loading && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n      \n      {/* Success state */}\n      {showSuccess && <Check className=\"h-4 w-4 text-green-600\" />}\n      \n      {/* Icon */}\n      {icon && iconPosition === 'left' && !loading && !showSuccess && (\n        <span className=\"flex-shrink-0\">{icon}</span>\n      )}\n      \n      {/* Button content */}\n      <span>\n        {loading \n          ? displayLoadingText\n          : showSuccess \n            ? displaySuccessText\n            : children || displayLabel\n        }\n      </span>\n      \n      {/* Icon right */}\n      {icon && iconPosition === 'right' && !loading && !showSuccess && (\n        <span className=\"flex-shrink-0\">{icon}</span>\n      )}\n      \n      {/* Accessibility description */}\n      {displayDescription && (\n        <span id={`${props.id}-desc`} className=\"sr-only\">\n          {displayDescription}\n        </span>\n      )}\n    </button>\n  )\n})\n\nBirhausButton.displayName = 'BirhausButton'\n\n// BIRHAUS: Hook for managing button state\nexport function useBirhausButton() {\n  const [loading, setLoading] = useState(false)\n  const [success, setSuccess] = useState(false)\n  \n  const executeAction = async (action: () => Promise<void>) => {\n    setLoading(true)\n    try {\n      await action()\n      setSuccess(true)\n      setTimeout(() => setSuccess(false), 2000)\n    } catch (error) {\n      console.error('Button action failed:', error)\n      throw error\n    } finally {\n      setLoading(false)\n    }\n  }\n  \n  return {\n    loading,\n    success,\n    executeAction,\n    setLoading,\n    setSuccess\n  }\n}\n\n// Component and hook are exported via individual export declarations above","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Utility function to merge Tailwind CSS classes\n * Combines clsx and tailwind-merge for optimal class handling\n */\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport { safeAccess } from '../../utils/security'\n\nexport interface BirhausBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n  variant?: 'default' | 'success' | 'warning' | 'error' | 'info'\n  size?: 'sm' | 'md' | 'lg'\n}\n\nconst variantClasses = {\n  default: 'bg-gray-100 text-gray-800',\n  success: 'bg-green-100 text-green-800',\n  warning: 'bg-yellow-100 text-yellow-800', \n  error: 'bg-red-100 text-red-800',\n  info: 'bg-blue-100 text-blue-800'\n}\n\nconst sizeClasses = {\n  sm: 'px-2 py-0.5 text-xs',\n  md: 'px-2.5 py-1 text-sm',\n  lg: 'px-3 py-1.5 text-base'\n}\n\nexport function BirhausBadge({\n  variant = 'default',\n  size = 'md',\n  className,\n  children,\n  ...props\n}: BirhausBadgeProps) {\n  // Ensure variant and size are valid keys\n  const validVariant = variant in variantClasses ? variant : 'default'\n  const validSize = size in sizeClasses ? size : 'md'\n  \n  return (\n    <span\n      className={cn(\n        'inline-flex items-center rounded-full font-medium',\n        safeAccess(variantClasses, validVariant, variantClasses.default),\n        safeAccess(sizeClasses, validSize, sizeClasses.md),\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </span>\n  )\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, ReactNode } from 'react'\nimport { Eye, EyeOff, AlertCircle, CheckCircle2, Info, Search, X } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Input Component\n * \n * Enhanced input implementing all 10 BIRHAUS principles:\n * - Progressive validation with Spanish-first error messages\n * - Cognitive load reduction through clear visual feedback\n * - Auto-save functionality with status indicators\n * - Accessibility compliance (WCAG AA+)\n * - Spanish-first labeling and error handling\n * - Performance optimized with debounced validation\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'autoSave'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Spanish-first error patterns: \"Qué pasó + cómo resolver\"\n  solution?: string\n  solutionEs?: string\n  solutionEn?: string\n  \n  // BIRHAUS Principle #8: Performance is UX\n  autoSave?: boolean\n  autoSaveDelay?: number\n  onAutoSave?: (value: string) => Promise<void>\n  \n  // Progressive validation\n  validateOnChange?: boolean\n  validateOnBlur?: boolean\n  validationRules?: ValidationRule[]\n  \n  // BIRHAUS Principle #1: Form serves flow\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'filled' | 'minimal'\n  \n  // Enhanced functionality\n  prefix?: ReactNode\n  suffix?: ReactNode\n  showPasswordToggle?: boolean\n  showClearButton?: boolean\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  helpText?: string\n  helpTextEs?: string\n  helpTextEn?: string\n  \n  // Status indicators\n  loading?: boolean\n  success?: boolean\n  \n  // Cognitive load tracking\n  fieldPriority?: 'required' | 'optional' | 'progressive'\n  cognitiveWeight?: number\n}\n\nexport interface ValidationRule {\n  test: (value: string) => boolean\n  errorEs: string\n  errorEn?: string\n  solutionEs?: string\n  solutionEn?: string\n  severity?: 'error' | 'warning' | 'info'\n}\n\nexport const BirhausInput = forwardRef<HTMLInputElement, BirhausInputProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Descriptions\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Error handling\n  error,\n  errorEs,\n  errorEn,\n  solution,\n  solutionEs,\n  solutionEn,\n  \n  // Auto-save\n  autoSave = false,\n  autoSaveDelay = 1000,\n  onAutoSave,\n  \n  // Validation\n  validateOnChange = true,\n  validateOnBlur = true,\n  validationRules = [],\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Enhanced props\n  prefix,\n  suffix,\n  showPasswordToggle = false,\n  showClearButton = false,\n  \n  // Help text\n  helpText,\n  helpTextEs,\n  helpTextEn,\n  \n  // Status\n  loading = false,\n  success = false,\n  \n  // Cognitive load\n  fieldPriority = 'optional',\n  cognitiveWeight = 1,\n  \n  // Standard props\n  className,\n  type = 'text',\n  value,\n  defaultValue,\n  onChange,\n  onBlur,\n  onFocus,\n  disabled,\n  required,\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [currentValue, setCurrentValue] = useState(value || defaultValue || '')\n  const [showPassword, setShowPassword] = useState(false)\n  const [isFocused, setIsFocused] = useState(false)\n  const [validationError, setValidationError] = useState<string>('')\n  const [validationSolution, setValidationSolution] = useState<string>('')\n  const [autoSaveStatus, setAutoSaveStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle')\n  \n  const autoSaveTimeoutRef = useRef<NodeJS.Timeout>()\n  const inputRef = useRef<HTMLInputElement>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayLabel = resolveText(labelEs, labelEn, label)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  const displayError = resolveText(errorEs, errorEn, error) || validationError\n  const displaySolution = resolveText(solutionEs, solutionEn, solution) || validationSolution\n  const displayHelpText = resolveText(helpTextEs, helpTextEn, helpText)\n  \n  // BIRHAUS: Progressive validation\n  const validateValue = (val: string) => {\n    if (!validationRules.length) return\n    \n    for (const rule of validationRules) {\n      if (!rule.test(val)) {\n        setValidationError(rule.errorEs || rule.errorEn || '')\n        setValidationSolution(rule.solutionEs || rule.solutionEn || '')\n        return\n      }\n    }\n    \n    setValidationError('')\n    setValidationSolution('')\n  }\n  \n  // BIRHAUS: Auto-save functionality\n  const triggerAutoSave = (val: string) => {\n    if (!autoSave || !onAutoSave) return\n    \n    // Clear existing timeout\n    if (autoSaveTimeoutRef.current) {\n      clearTimeout(autoSaveTimeoutRef.current)\n    }\n    \n    // Set new timeout\n    autoSaveTimeoutRef.current = setTimeout(async () => {\n      setAutoSaveStatus('saving')\n      try {\n        await onAutoSave(val)\n        setAutoSaveStatus('saved')\n        setTimeout(() => setAutoSaveStatus('idle'), 2000)\n      } catch (error) {\n        setAutoSaveStatus('error')\n        setTimeout(() => setAutoSaveStatus('idle'), 3000)\n      }\n    }, autoSaveDelay)\n  }\n  \n  // Handle value change\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = event.target.value\n    setCurrentValue(newValue)\n    \n    // Progressive validation\n    if (validateOnChange) {\n      validateValue(newValue)\n    }\n    \n    // Auto-save\n    if (autoSave) {\n      triggerAutoSave(newValue)\n    }\n    \n    onChange?.(event)\n  }\n  \n  // Handle blur\n  const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(false)\n    \n    if (validateOnBlur) {\n      validateValue(currentValue as string)\n    }\n    \n    onBlur?.(event)\n  }\n  \n  // Handle focus\n  const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(true)\n    onFocus?.(event)\n  }\n  \n  // Clear input\n  const handleClear = () => {\n    setCurrentValue('')\n    setValidationError('')\n    setValidationSolution('')\n    if (inputRef.current) {\n      inputRef.current.focus()\n    }\n  }\n  \n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (autoSaveTimeoutRef.current) {\n        clearTimeout(autoSaveTimeoutRef.current)\n      }\n    }\n  }, [])\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: 'h-8 px-3 text-sm',\n    md: 'h-10 px-4 text-sm',\n    lg: 'h-12 px-4 text-base'\n  }\n  \n  const variantClasses = {\n    default: 'border border-gray-300 bg-white',\n    filled: 'border-0 bg-gray-100',\n    minimal: 'border-0 border-b border-gray-300 bg-transparent rounded-none'\n  }\n  \n  // BIRHAUS: Error state styling\n  const hasError = !!(displayError || error)\n  const hasSuccess = success && !hasError\n  \n  const stateClasses = hasError \n    ? 'border-red-500 focus:border-red-500 focus:ring-red-500'\n    : hasSuccess\n    ? 'border-green-500 focus:border-green-500 focus:ring-green-500'\n    : 'focus:border-blue-500 focus:ring-blue-500'\n  \n  // Priority visual indicators\n  const priorityClasses = {\n    required: 'ring-2 ring-red-100',\n    optional: '',\n    progressive: 'ring-1 ring-blue-100'\n  }\n  \n  const baseInputClasses = cn(\n    'w-full rounded-lg transition-all duration-200',\n    'focus:outline-none focus:ring-2 focus:ring-offset-1',\n    'disabled:cursor-not-allowed disabled:opacity-50',\n    'placeholder:text-gray-400',\n    sizeClasses[size],\n    variantClasses[variant],\n    stateClasses,\n    priorityClasses[fieldPriority],\n    className\n  )\n  \n  return (\n    <div className=\"space-y-2\">\n      {/* Label and description */}\n      {displayLabel && (\n        <div className=\"flex items-center justify-between\">\n          <label \n            htmlFor={props.id}\n            className={cn(\n              'block text-sm font-medium text-gray-700',\n              required && \"after:content-['*'] after:ml-1 after:text-red-500\"\n            )}\n          >\n            {displayLabel}\n            {fieldPriority === 'required' && (\n              <span className=\"ml-1 text-xs text-red-600\">(requerido)</span>\n            )}\n            {fieldPriority === 'optional' && (\n              <span className=\"ml-1 text-xs text-gray-500\">(opcional)</span>\n            )}\n          </label>\n          \n          {/* Auto-save status */}\n          {autoSave && (\n            <div className=\"flex items-center gap-1 text-xs\">\n              {autoSaveStatus === 'saving' && (\n                <span className=\"text-blue-600\">Guardando...</span>\n              )}\n              {autoSaveStatus === 'saved' && (\n                <span className=\"text-green-600 flex items-center gap-1\">\n                  <CheckCircle2 className=\"h-3 w-3\" />\n                  Guardado\n                </span>\n              )}\n              {autoSaveStatus === 'error' && (\n                <span className=\"text-red-600\">Error al guardar</span>\n              )}\n            </div>\n          )}\n        </div>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600\">{displayDescription}</p>\n      )}\n      \n      {/* Input container */}\n      <div className=\"relative\">\n        {/* Prefix */}\n        {prefix && (\n          <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\">\n            {prefix}\n          </div>\n        )}\n        \n        {/* Input */}\n        <input\n          ref={ref || inputRef}\n          type={showPasswordToggle ? (showPassword ? 'text' : 'password') : type}\n          value={value || currentValue}\n          onChange={handleChange}\n          onBlur={handleBlur}\n          onFocus={handleFocus}\n          disabled={disabled || loading}\n          required={required}\n          className={cn(\n            baseInputClasses,\n            prefix ? 'pl-10' : '',\n            (suffix || showPasswordToggle || showClearButton) ? 'pr-10' : ''\n          )}\n          data-birhaus-component=\"input\"\n          data-birhaus-priority={fieldPriority}\n          data-cognitive-weight={cognitiveWeight}\n          {...props}\n        />\n        \n        {/* Loading indicator */}\n        {loading && (\n          <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n            <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-600\" />\n          </div>\n        )}\n        \n        {/* Success indicator */}\n        {hasSuccess && (\n          <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n            <CheckCircle2 className=\"h-4 w-4 text-green-500\" />\n          </div>\n        )}\n        \n        {/* Error indicator */}\n        {hasError && (\n          <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n            <AlertCircle className=\"h-4 w-4 text-red-500\" />\n          </div>\n        )}\n        \n        {/* Password toggle */}\n        {showPasswordToggle && type === 'password' && !loading && !hasError && !hasSuccess && (\n          <button\n            type=\"button\"\n            onClick={() => setShowPassword(!showPassword)}\n            className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n            aria-label={showPassword ? 'Ocultar contraseña' : 'Mostrar contraseña'}\n          >\n            {showPassword ? <EyeOff className=\"h-4 w-4\" /> : <Eye className=\"h-4 w-4\" />}\n          </button>\n        )}\n        \n        {/* Clear button */}\n        {showClearButton && currentValue && !loading && !hasError && !showPasswordToggle && (\n          <button\n            type=\"button\"\n            onClick={handleClear}\n            className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n            aria-label=\"Limpiar campo\"\n          >\n            <X className=\"h-4 w-4\" />\n          </button>\n        )}\n        \n        {/* Suffix */}\n        {suffix && !showPasswordToggle && !showClearButton && !loading && !hasError && !hasSuccess && (\n          <div className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400\">\n            {suffix}\n          </div>\n        )}\n      </div>\n      \n      {/* Error message with solution */}\n      {displayError && (\n        <div className=\"flex items-start gap-2 p-3 bg-red-50 border border-red-200 rounded-lg\">\n          <AlertCircle className=\"h-4 w-4 text-red-600 mt-0.5 flex-shrink-0\" />\n          <div className=\"flex-1 text-sm\">\n            <p className=\"text-red-800 font-medium\">Qué pasó: {displayError}</p>\n            {displaySolution && (\n              <p className=\"text-red-700 mt-1\">Cómo resolver: {displaySolution}</p>\n            )}\n          </div>\n        </div>\n      )}\n      \n      {/* Help text */}\n      {displayHelpText && !displayError && (\n        <div className=\"flex items-start gap-2 text-sm text-gray-600\">\n          <Info className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n          <p>{displayHelpText}</p>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausInput.displayName = 'BirhausInput'\n\n// BIRHAUS: Common validation rules in Spanish\nexport const birhausValidationRules = {\n  required: (fieldName: string): ValidationRule => ({\n    test: (value) => value.trim().length > 0,\n    errorEs: `${fieldName} es requerido`,\n    errorEn: `${fieldName} is required`,\n    solutionEs: `Ingrese un valor para ${fieldName.toLowerCase()}`,\n    solutionEn: `Enter a value for ${fieldName.toLowerCase()}`\n  }),\n  \n  email: (): ValidationRule => ({\n    test: (value) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value),\n    errorEs: 'El formato del email no es válido',\n    errorEn: 'Email format is not valid',\n    solutionEs: 'Use el formato: usuario@ejemplo.com',\n    solutionEn: 'Use the format: user@example.com'\n  }),\n  \n  minLength: (min: number): ValidationRule => ({\n    test: (value) => value.length >= min,\n    errorEs: `Debe tener al menos ${min} caracteres`,\n    errorEn: `Must be at least ${min} characters`,\n    solutionEs: `Agregue al menos ${min} caracteres`,\n    solutionEn: `Add at least ${min} characters`\n  }),\n  \n  paraguayPhone: (): ValidationRule => ({\n    test: (value) => /^(\\+595|0)(9[0-9]{8}|[2-9][1-8][0-9]{5,6})$/.test(value.replace(/\\s/g, '')),\n    errorEs: 'El número de teléfono no es válido para Paraguay',\n    errorEn: 'Phone number is not valid for Paraguay',\n    solutionEs: 'Use el formato: 0981123456 o +595981123456',\n    solutionEn: 'Use the format: 0981123456 or +595981123456'\n  }),\n  \n  ruc: (): ValidationRule => ({\n    test: (value) => /^[0-9]{1,8}-[0-9]$/.test(value),\n    errorEs: 'El formato de RUC no es válido',\n    errorEn: 'RUC format is not valid',\n    solutionEs: 'Use el formato: 12345678-9',\n    solutionEn: 'Use the format: 12345678-9'\n  })\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, useState, useRef, useEffect, ReactNode } from 'react'\nimport { ChevronDown, Search, Check, AlertCircle, Info, X } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Select Component\n * \n * Enhanced select implementing all 10 BIRHAUS principles:\n * - Miller's Law: Maximum 7 visible options (7±2 cognitive limit)\n * - Spanish-first labeling and option text\n * - Progressive disclosure with search when >7 options\n * - Accessibility compliance (WCAG AA+)\n * - Cognitive load warnings when exceeding limits\n * - Performance optimized with virtual scrolling for large lists\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausSelectOption {\n  value: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  disabled?: boolean\n  icon?: ReactNode\n  group?: string\n}\n\nexport interface BirhausSelectProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Options (Miller's Law enforcement)\n  options: BirhausSelectOption[]\n  value?: string | string[]\n  defaultValue?: string | string[]\n  onChange?: (value: string | string[]) => void\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Placeholder text\n  placeholder?: string\n  placeholderEs?: string\n  placeholderEn?: string\n  \n  // Multi-select\n  multiple?: boolean\n  maxSelections?: number\n  \n  // BIRHAUS Principle #8: Performance is UX\n  searchable?: boolean\n  searchPlaceholder?: string\n  searchPlaceholderEs?: string\n  searchPlaceholderEn?: string\n  \n  // BIRHAUS Principle #1: Form serves flow\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'filled' | 'minimal'\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  helpText?: string\n  helpTextEs?: string\n  helpTextEn?: string\n  \n  // State\n  disabled?: boolean\n  required?: boolean\n  loading?: boolean\n  \n  // Cognitive load management\n  cognitiveLoadLevel?: 'low' | 'medium' | 'high'\n  showCognitiveWarning?: boolean\n  \n  // Enhanced functionality\n  clearable?: boolean\n  closeOnSelect?: boolean\n  \n  // Styling\n  className?: string\n  id?: string\n}\n\nexport const BirhausSelect = forwardRef<HTMLButtonElement, BirhausSelectProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Descriptions\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Data\n  options = [],\n  value,\n  defaultValue,\n  onChange,\n  \n  // Error handling\n  error,\n  errorEs,\n  errorEn,\n  \n  // Placeholder\n  placeholder,\n  placeholderEs,\n  placeholderEn,\n  \n  // Multi-select\n  multiple = false,\n  maxSelections,\n  \n  // Search\n  searchable = false,\n  searchPlaceholder,\n  searchPlaceholderEs,\n  searchPlaceholderEn,\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Help text\n  helpText,\n  helpTextEs,\n  helpTextEn,\n  \n  // State\n  disabled = false,\n  required = false,\n  loading = false,\n  \n  // Cognitive load\n  cognitiveLoadLevel = 'medium',\n  showCognitiveWarning = true,\n  \n  // Enhanced\n  clearable = false,\n  closeOnSelect = true,\n  \n  // Styling\n  className,\n  id,\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchTerm, setSearchTerm] = useState('')\n  const [selectedValues, setSelectedValues] = useState<string[]>(\n    Array.isArray(value) ? value :\n    Array.isArray(defaultValue) ? defaultValue :\n    value ? [value] :\n    defaultValue ? [defaultValue] :\n    []\n  )\n  \n  const containerRef = useRef<HTMLDivElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayLabel = resolveText(labelEs, labelEn, label)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  const displayError = resolveText(errorEs, errorEn, error)\n  const displayPlaceholder = resolveText(\n    placeholderEs || 'Seleccionar opción...',\n    placeholderEn || 'Select option...',\n    placeholder\n  )\n  const displaySearchPlaceholder = resolveText(\n    searchPlaceholderEs || 'Buscar opciones...',\n    searchPlaceholderEn || 'Search options...',\n    searchPlaceholder\n  )\n  const displayHelpText = resolveText(helpTextEs, helpTextEn, helpText)\n  \n  // BIRHAUS: Miller's Law enforcement\n  const MILLER_LAW_LIMIT = 7\n  const filteredOptions = options.filter(option =>\n    searchTerm === '' || \n    option.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\n    option.labelEs?.toLowerCase().includes(searchTerm.toLowerCase()) ||\n    option.labelEn?.toLowerCase().includes(searchTerm.toLowerCase())\n  )\n  \n  const visibleOptions = filteredOptions.slice(0, searchable ? filteredOptions.length : MILLER_LAW_LIMIT)\n  const hasMoreOptions = filteredOptions.length > MILLER_LAW_LIMIT\n  \n  // BIRHAUS: Cognitive load warning\n  const cognitiveLoad = options.length > MILLER_LAW_LIMIT ? 'high' : \n                       options.length > 4 ? 'medium' : 'low'\n  \n  // Handle option selection\n  const handleOptionSelect = (optionValue: string) => {\n    let newValues: string[]\n    \n    if (multiple) {\n      if (selectedValues.includes(optionValue)) {\n        newValues = selectedValues.filter(v => v !== optionValue)\n      } else {\n        if (maxSelections && selectedValues.length >= maxSelections) {\n          return // Don't allow more selections\n        }\n        newValues = [...selectedValues, optionValue]\n      }\n    } else {\n      newValues = [optionValue]\n      if (closeOnSelect) {\n        setIsOpen(false)\n      }\n    }\n    \n    setSelectedValues(newValues)\n    onChange?.(multiple ? newValues : newValues[0] || '')\n  }\n  \n  // Clear selection\n  const handleClear = () => {\n    setSelectedValues([])\n    onChange?.(multiple ? [] : '')\n  }\n  \n  // Handle outside click\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n      }\n    }\n    \n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n  \n  // Auto-focus search when opened\n  useEffect(() => {\n    if (isOpen && searchable && searchInputRef.current) {\n      searchInputRef.current.focus()\n    }\n  }, [isOpen, searchable])\n  \n  // Get selected option labels\n  const getSelectedLabels = () => {\n    return selectedValues.map(val => {\n      const option = options.find(opt => opt.value === val)\n      return option ? (option.labelEs || option.label) : val\n    })\n  }\n  \n  const selectedLabels = getSelectedLabels()\n  const displayValue = selectedLabels.length > 0 ? selectedLabels.join(', ') : displayPlaceholder\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: 'h-8 px-3 text-sm',\n    md: 'h-10 px-4 text-sm',\n    lg: 'h-12 px-4 text-base'\n  }\n  \n  const variantClasses = {\n    default: 'border border-gray-300 bg-white',\n    filled: 'border-0 bg-gray-100',\n    minimal: 'border-0 border-b border-gray-300 bg-transparent rounded-none'\n  }\n  \n  // Error state styling\n  const hasError = !!displayError\n  const stateClasses = hasError \n    ? 'border-red-500 focus:border-red-500 focus:ring-red-500'\n    : 'focus:border-blue-500 focus:ring-blue-500'\n  \n  const triggerClasses = cn(\n    'w-full rounded-lg transition-all duration-200 flex items-center justify-between',\n    'focus:outline-none focus:ring-2 focus:ring-offset-1',\n    'disabled:cursor-not-allowed disabled:opacity-50',\n    safeAccess(sizeClasses, size, sizeClasses.md),\n    safeAccess(variantClasses, variant, variantClasses.default),\n    stateClasses,\n    className\n  )\n  \n  return (\n    <div className=\"space-y-2\">\n      {/* Label and cognitive load warning */}\n      {(displayLabel || (showCognitiveWarning && cognitiveLoad === 'high')) && (\n        <div className=\"flex items-center justify-between\">\n          {displayLabel && (\n            <label \n              htmlFor={id}\n              className={cn(\n                'block text-sm font-medium text-gray-700',\n                required && \"after:content-['*'] after:ml-1 after:text-red-500\"\n              )}\n            >\n              {displayLabel}\n            </label>\n          )}\n          \n          {/* BIRHAUS: Cognitive load warning */}\n          {showCognitiveWarning && cognitiveLoad === 'high' && (\n            <div className=\"flex items-center gap-1 text-xs text-amber-600\">\n              <AlertCircle className=\"h-3 w-3\" />\n              <span>+{options.length - MILLER_LAW_LIMIT} opciones (considera agrupar)</span>\n            </div>\n          )}\n        </div>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600\">{displayDescription}</p>\n      )}\n      \n      {/* Select container */}\n      <div ref={containerRef} className=\"relative\">\n        <button\n          ref={ref}\n          type=\"button\"\n          onClick={() => setIsOpen(!isOpen)}\n          disabled={disabled || loading}\n          className={triggerClasses}\n          data-birhaus-component=\"select\"\n          data-cognitive-load={cognitiveLoad}\n          aria-expanded={isOpen}\n          aria-haspopup=\"listbox\"\n          id={id}\n        >\n          <span className={cn(\n            'truncate text-left',\n            selectedValues.length === 0 && 'text-gray-400'\n          )}>\n            {displayValue}\n          </span>\n          \n          <div className=\"flex items-center gap-2\">\n            {/* Clear button */}\n            {clearable && selectedValues.length > 0 && (\n              <button\n                type=\"button\"\n                onClick={(e) => {\n                  e.stopPropagation()\n                  handleClear()\n                }}\n                className=\"text-gray-400 hover:text-gray-600\"\n                aria-label=\"Limpiar selección\"\n              >\n                <X className=\"h-4 w-4\" />\n              </button>\n            )}\n            \n            {/* Loading indicator */}\n            {loading ? (\n              <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-600\" />\n            ) : (\n              <ChevronDown className={cn(\n                'h-4 w-4 text-gray-400 transition-transform duration-200',\n                isOpen && 'rotate-180'\n              )} />\n            )}\n          </div>\n        </button>\n        \n        {/* Dropdown */}\n        {isOpen && (\n          <div className=\"absolute z-50 w-full mt-1 bg-white border border-gray-300 rounded-lg shadow-lg max-h-60 overflow-hidden\">\n            {/* Search input */}\n            {searchable && (\n              <div className=\"p-2 border-b border-gray-200\">\n                <div className=\"relative\">\n                  <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\n                  <input\n                    ref={searchInputRef}\n                    type=\"text\"\n                    value={searchTerm}\n                    onChange={(e) => setSearchTerm(e.target.value)}\n                    placeholder={displaySearchPlaceholder}\n                    className=\"w-full pl-9 pr-3 py-2 text-sm border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500\"\n                  />\n                </div>\n              </div>\n            )}\n            \n            {/* Options list */}\n            <div className=\"max-h-48 overflow-y-auto\">\n              {visibleOptions.length === 0 ? (\n                <div className=\"p-3 text-sm text-gray-500 text-center\">\n                  {searchTerm ? 'No se encontraron opciones' : 'No hay opciones disponibles'}\n                </div>\n              ) : (\n                visibleOptions.map((option) => {\n                  const isSelected = selectedValues.includes(option.value)\n                  const optionLabel = option.labelEs || option.label\n                  const optionDescription = option.descriptionEs || option.description\n                  \n                  return (\n                    <button\n                      key={option.value}\n                      type=\"button\"\n                      onClick={() => handleOptionSelect(option.value)}\n                      disabled={option.disabled}\n                      className={cn(\n                        'w-full px-3 py-2 text-left flex items-center gap-3 hover:bg-gray-50',\n                        'focus:outline-none focus:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed',\n                        isSelected && 'bg-blue-50 text-blue-700'\n                      )}\n                      role=\"option\"\n                      aria-selected={isSelected}\n                    >\n                      {/* Icon */}\n                      {option.icon && (\n                        <span className=\"flex-shrink-0\">{option.icon}</span>\n                      )}\n                      \n                      {/* Content */}\n                      <div className=\"flex-1 min-w-0\">\n                        <div className=\"flex items-center justify-between\">\n                          <span className=\"text-sm font-medium truncate\">{optionLabel}</span>\n                          {isSelected && <Check className=\"h-4 w-4 text-blue-600\" />}\n                        </div>\n                        {optionDescription && (\n                          <p className=\"text-xs text-gray-500 truncate\">{optionDescription}</p>\n                        )}\n                      </div>\n                    </button>\n                  )\n                })\n              )}\n              \n              {/* More options indicator */}\n              {hasMoreOptions && !searchable && (\n                <div className=\"p-2 border-t border-gray-200 bg-gray-50 text-center\">\n                  <p className=\"text-xs text-gray-600\">\n                    +{filteredOptions.length - MILLER_LAW_LIMIT} opciones más\n                  </p>\n                  <p className=\"text-xs text-gray-500\">\n                    Habilita búsqueda para ver todas\n                  </p>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n      \n      {/* Error message */}\n      {displayError && (\n        <div className=\"flex items-start gap-2 p-3 bg-red-50 border border-red-200 rounded-lg\">\n          <AlertCircle className=\"h-4 w-4 text-red-600 mt-0.5 flex-shrink-0\" />\n          <p className=\"text-sm text-red-800\">{displayError}</p>\n        </div>\n      )}\n      \n      {/* Help text */}\n      {displayHelpText && !displayError && (\n        <div className=\"flex items-start gap-2 text-sm text-gray-600\">\n          <Info className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n          <p>{displayHelpText}</p>\n        </div>\n      )}\n      \n      {/* Selection summary for multi-select */}\n      {multiple && selectedValues.length > 0 && (\n        <div className=\"text-xs text-gray-600\">\n          {selectedValues.length} de {maxSelections || '∞'} seleccionado{selectedValues.length !== 1 ? 's' : ''}\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausSelect.displayName = 'BirhausSelect'\n\n// BIRHAUS: Hook for managing select state\nexport function useBirhausSelect() {\n  const [value, setValue] = useState<string | string[]>('')\n  const [isOpen, setIsOpen] = useState(false)\n  \n  const handleChange = (newValue: string | string[]) => {\n    setValue(newValue)\n  }\n  \n  const clear = () => {\n    setValue(Array.isArray(value) ? [] : '')\n  }\n  \n  return {\n    value,\n    isOpen,\n    handleChange,\n    clear,\n    setValue,\n    setIsOpen\n  }\n}\n\n// BIRHAUS: Helper to create option groups that respect Miller's Law\nexport function createBirhausOptionGroups(\n  options: BirhausSelectOption[],\n  groupBy: (option: BirhausSelectOption) => string\n): Record<string, BirhausSelectOption[]> {\n  const groups: Record<string, BirhausSelectOption[]> = {}\n  \n  options.forEach(option => {\n    const groupKey = groupBy(option)\n    const existingGroup = safeAccess(groups, groupKey, [] as BirhausSelectOption[])\n    if (!existingGroup) {\n      groups[groupKey] = []\n    }\n    const groupArray = groups[groupKey] // Safe after initialization above\n    if (Array.isArray(groupArray)) {\n      groupArray.push(option)\n    }\n  })\n  \n  // Warn if any group exceeds Miller's Law\n  Object.entries(groups).forEach(([groupName, groupOptions]) => {\n    if (groupOptions.length > 7) {\n      console.warn(`BIRHAUS Miller's Law Warning: Group \"${groupName}\" has ${groupOptions.length} options (max recommended: 7)`)\n    }\n  })\n  \n  return groups\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, ReactNode, useState } from 'react'\nimport { ChevronDown, ChevronUp, MoreVertical, AlertTriangle, Info, CheckCircle2, Clock } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Card Component\n * \n * Enhanced card implementing all 10 BIRHAUS principles:\n * - Information hierarchy with progressive disclosure\n * - Spanish-first labeling and content\n * - One clear primary action per card\n * - Accessibility compliance (WCAG AA+)\n * - Cognitive load reduction through structured layout\n * - Performance optimized with lazy loading\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausCardAction {\n  id: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  icon?: ReactNode\n  onClick: () => void\n  variant?: 'primary' | 'secondary' | 'destructive'\n  disabled?: boolean\n  loading?: boolean\n}\n\nexport interface BirhausCardProps extends React.HTMLAttributes<HTMLDivElement> {\n  // BIRHAUS Principle #7: Bilingual by design\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  subtitle?: string\n  subtitleEs?: string\n  subtitleEn?: string\n  \n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Content organization\n  children?: ReactNode\n  header?: ReactNode\n  footer?: ReactNode\n  aside?: ReactNode\n  \n  // BIRHAUS Principle #3: One clear action\n  primaryAction?: BirhausCardAction\n  secondaryActions?: BirhausCardAction[] // Max 2-3 recommended\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  collapsible?: boolean\n  defaultExpanded?: boolean\n  expandedContent?: ReactNode\n  \n  // BIRHAUS Principle #2: Honest data\n  status?: 'neutral' | 'success' | 'warning' | 'error' | 'info'\n  statusMessage?: string\n  statusMessageEs?: string\n  statusMessageEn?: string\n  \n  // Visual properties\n  variant?: 'default' | 'elevated' | 'outlined' | 'minimal'\n  size?: 'sm' | 'md' | 'lg'\n  \n  // BIRHAUS Principle #8: Performance is UX\n  loading?: boolean\n  skeleton?: boolean\n  lazyLoad?: boolean\n  \n  // Enhanced functionality\n  selectable?: boolean\n  selected?: boolean\n  onSelect?: () => void\n  \n  // Badge/indicator\n  badge?: string | number\n  badgeVariant?: 'neutral' | 'success' | 'warning' | 'error'\n  \n  // Metadata\n  timestamp?: Date\n  author?: string\n  category?: string\n  \n  // Cognitive load tracking\n  informationDensity?: 'low' | 'medium' | 'high'\n  \n  // Styling\n  className?: string\n}\n\nexport const BirhausCard = forwardRef<HTMLDivElement, BirhausCardProps>(({\n  // Content (Spanish-first)\n  title,\n  titleEs,\n  titleEn,\n  subtitle,\n  subtitleEs,\n  subtitleEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Layout\n  children,\n  header,\n  footer,\n  aside,\n  \n  // Actions\n  primaryAction,\n  secondaryActions = [],\n  \n  // Progressive disclosure\n  collapsible = false,\n  defaultExpanded = true,\n  expandedContent,\n  \n  // Status\n  status = 'neutral',\n  statusMessage,\n  statusMessageEs,\n  statusMessageEn,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  \n  // State\n  loading = false,\n  skeleton = false,\n  lazyLoad = false,\n  \n  // Selection\n  selectable = false,\n  selected = false,\n  onSelect,\n  \n  // Badge\n  badge,\n  badgeVariant = 'neutral',\n  \n  // Metadata\n  timestamp,\n  author,\n  category,\n  \n  // Cognitive load\n  informationDensity = 'medium',\n  \n  // Styling\n  className,\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayTitle = resolveText(titleEs, titleEn, title)\n  const displaySubtitle = resolveText(subtitleEs, subtitleEn, subtitle)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  const displayStatusMessage = resolveText(statusMessageEs, statusMessageEn, statusMessage)\n  \n  // BIRHAUS: Warn about cognitive overload\n  const actionCount = (primaryAction ? 1 : 0) + secondaryActions.length\n  if (actionCount > 4) {\n    console.warn(`BIRHAUS 4-3-1 Rule Warning: Card has ${actionCount} actions (recommended: max 4)`)\n  }\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: 'p-4',\n    md: 'p-6',\n    lg: 'p-8'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-200 shadow-sm',\n    elevated: 'bg-white border border-gray-200 shadow-md hover:shadow-lg transition-shadow',\n    outlined: 'bg-white border-2 border-gray-300',\n    minimal: 'bg-transparent border-0'\n  }\n  \n  const statusClasses = {\n    neutral: '',\n    success: 'border-green-200 bg-green-50',\n    warning: 'border-yellow-200 bg-yellow-50',\n    error: 'border-red-200 bg-red-50',\n    info: 'border-blue-200 bg-blue-50'\n  }\n  \n  const statusIcons = {\n    neutral: null,\n    success: <CheckCircle2 className=\"h-4 w-4 text-green-600\" />,\n    warning: <AlertTriangle className=\"h-4 w-4 text-yellow-600\" />,\n    error: <AlertTriangle className=\"h-4 w-4 text-red-600\" />,\n    info: <Info className=\"h-4 w-4 text-blue-600\" />\n  }\n  \n  const badgeClasses = {\n    neutral: 'bg-gray-100 text-gray-800',\n    success: 'bg-green-100 text-green-800',\n    warning: 'bg-yellow-100 text-yellow-800',\n    error: 'bg-red-100 text-red-800'\n  }\n  \n  const densityClasses = {\n    low: 'space-y-6',\n    medium: 'space-y-4',\n    high: 'space-y-2'\n  }\n  \n  const baseClasses = cn(\n    'rounded-lg transition-all duration-200',\n    safeAccess(sizeClasses, size, sizeClasses.md),\n    safeAccess(variantClasses, variant, variantClasses.default),\n    status !== 'neutral' && safeAccess(statusClasses, status, ''),\n    selectable && 'cursor-pointer hover:border-blue-300',\n    selected && 'ring-2 ring-blue-500 border-blue-300',\n    informationDensity && safeAccess(densityClasses, informationDensity, densityClasses.medium),\n    className\n  )\n  \n  // BIRHAUS: Skeleton loading state\n  if (skeleton || loading) {\n    return (\n      <div ref={ref} className={baseClasses} {...props}>\n        <div className=\"animate-pulse space-y-4\">\n          <div className=\"flex items-center justify-between\">\n            <div className=\"space-y-2\">\n              <div className=\"h-4 bg-gray-200 rounded w-3/4\"></div>\n              <div className=\"h-3 bg-gray-200 rounded w-1/2\"></div>\n            </div>\n            <div className=\"h-8 w-8 bg-gray-200 rounded\"></div>\n          </div>\n          <div className=\"space-y-2\">\n            <div className=\"h-3 bg-gray-200 rounded\"></div>\n            <div className=\"h-3 bg-gray-200 rounded w-5/6\"></div>\n          </div>\n          <div className=\"flex justify-end gap-2\">\n            <div className=\"h-8 w-16 bg-gray-200 rounded\"></div>\n            <div className=\"h-8 w-20 bg-gray-200 rounded\"></div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n  \n  return (\n    <div \n      ref={ref} \n      className={baseClasses}\n      onClick={selectable ? onSelect : undefined}\n      data-birhaus-component=\"card\"\n      data-information-density={informationDensity}\n      data-selected={selected}\n      {...props}\n    >\n      {/* Custom header */}\n      {header && (\n        <div className=\"mb-4 pb-4 border-b border-gray-200\">\n          {header}\n        </div>\n      )}\n      \n      {/* Card header with title, subtitle, and actions */}\n      <div className=\"flex items-start justify-between mb-4\">\n        <div className=\"flex-1 min-w-0\">\n          {/* Badge */}\n          {badge && (\n            <div className=\"mb-2\">\n              <span className={cn(\n                'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n                safeAccess(badgeClasses, badgeVariant, badgeClasses.neutral)\n              )}>\n                {badge}\n              </span>\n            </div>\n          )}\n          \n          {/* Title */}\n          {displayTitle && (\n            <h3 className=\"text-lg font-semibold text-gray-900 truncate\">\n              {displayTitle}\n            </h3>\n          )}\n          \n          {/* Subtitle */}\n          {displaySubtitle && (\n            <p className=\"text-sm text-gray-600 mt-1\">\n              {displaySubtitle}\n            </p>\n          )}\n          \n          {/* Metadata */}\n          {(timestamp || author || category) && (\n            <div className=\"flex items-center gap-2 mt-2 text-xs text-gray-500\">\n              {timestamp && (\n                <div className=\"flex items-center gap-1\">\n                  <Clock className=\"h-3 w-3\" />\n                  <span>{timestamp.toLocaleDateString('es-ES')}</span>\n                </div>\n              )}\n              {author && <span>por {author}</span>}\n              {category && (\n                <span className=\"px-2 py-0.5 bg-gray-100 rounded-full\">\n                  {category}\n                </span>\n              )}\n            </div>\n          )}\n        </div>\n        \n        {/* Actions dropdown or primary action */}\n        <div className=\"flex items-center gap-2 ml-4\">\n          {/* BIRHAUS Principle #3: One clear primary action */}\n          {primaryAction && (\n            <button\n              onClick={primaryAction.onClick}\n              disabled={primaryAction.disabled || primaryAction.loading}\n              className={cn(\n                'inline-flex items-center gap-2 px-3 py-1.5 text-sm font-medium rounded-md transition-colors',\n                'focus:outline-none focus:ring-2 focus:ring-offset-2',\n                'disabled:pointer-events-none disabled:opacity-50',\n                primaryAction.variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500',\n                primaryAction.variant === 'destructive' && 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500',\n                (!primaryAction.variant || primaryAction.variant === 'secondary') && 'bg-gray-100 text-gray-700 hover:bg-gray-200 focus:ring-gray-500'\n              )}\n            >\n              {primaryAction.loading ? (\n                <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-current\" />\n              ) : primaryAction.icon}\n              {primaryAction.labelEs || primaryAction.label}\n            </button>\n          )}\n          \n          {/* Secondary actions */}\n          {secondaryActions.length > 0 && (\n            <div className=\"relative\">\n              <button\n                className=\"p-1 text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-500 rounded\"\n                aria-label=\"Más acciones\"\n              >\n                <MoreVertical className=\"h-4 w-4\" />\n              </button>\n            </div>\n          )}\n          \n          {/* Collapsible toggle */}\n          {collapsible && (\n            <button\n              onClick={() => setIsExpanded(!isExpanded)}\n              className=\"p-1 text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-500 rounded\"\n              aria-label={isExpanded ? 'Contraer' : 'Expandir'}\n            >\n              {isExpanded ? (\n                <ChevronUp className=\"h-4 w-4\" />\n              ) : (\n                <ChevronDown className=\"h-4 w-4\" />\n              )}\n            </button>\n          )}\n        </div>\n      </div>\n      \n      {/* Status message */}\n      {displayStatusMessage && (\n        <div className={cn(\n          'flex items-center gap-2 p-3 rounded-lg mb-4 text-sm',\n          status === 'success' && 'bg-green-100 text-green-800',\n          status === 'warning' && 'bg-yellow-100 text-yellow-800',\n          status === 'error' && 'bg-red-100 text-red-800',\n          status === 'info' && 'bg-blue-100 text-blue-800'\n        )}>\n          {safeAccess(statusIcons, status, statusIcons.info)}\n          <span>{displayStatusMessage}</span>\n        </div>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-gray-600 text-sm mb-4\">\n          {displayDescription}\n        </p>\n      )}\n      \n      {/* Aside content */}\n      {aside && (\n        <div className=\"mb-4 p-3 bg-gray-50 rounded-lg\">\n          {aside}\n        </div>\n      )}\n      \n      {/* Main content */}\n      {children && (\n        <div className=\"mb-4\">\n          {children}\n        </div>\n      )}\n      \n      {/* Expanded content (progressive disclosure) */}\n      {collapsible && expandedContent && isExpanded && (\n        <div className=\"border-t border-gray-200 pt-4 mt-4\">\n          {expandedContent}\n        </div>\n      )}\n      \n      {/* Custom footer */}\n      {footer && (\n        <div className=\"mt-4 pt-4 border-t border-gray-200\">\n          {footer}\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCard.displayName = 'BirhausCard'\n\n// BIRHAUS: Hook for managing card state\nexport function useBirhausCard() {\n  const [expanded, setExpanded] = useState(false)\n  const [selected, setSelected] = useState(false)\n  const [loading, setLoading] = useState(false)\n  \n  const toggleExpanded = () => setExpanded(prev => !prev)\n  const toggleSelected = () => setSelected(prev => !prev)\n  \n  return {\n    expanded,\n    selected,\n    loading,\n    setExpanded,\n    setSelected,\n    setLoading,\n    toggleExpanded,\n    toggleSelected\n  }\n}\n\n// BIRHAUS: Helper to create card actions with Spanish-first labels\nexport function createBirhausCardAction(\n  id: string,\n  labelEs: string,\n  onClick: () => void,\n  options?: {\n    labelEn?: string\n    icon?: ReactNode\n    variant?: 'primary' | 'secondary' | 'destructive'\n    disabled?: boolean\n  }\n): BirhausCardAction {\n  return {\n    id,\n    label: labelEs,\n    labelEs,\n    labelEn: options?.labelEn,\n    onClick,\n    icon: options?.icon,\n    variant: options?.variant || 'secondary',\n    disabled: options?.disabled || false,\n    loading: false\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, ReactNode, useState, useEffect } from 'react'\nimport { X, AlertTriangle, Info, CheckCircle2, Undo2 } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Dialog Component\n * \n * Anti-confirmation dialog implementing BIRHAUS Principle #5: Undo over confirm\n * \n * Instead of asking \"Are you sure?\", this dialog:\n * - Performs the action immediately\n * - Shows undo option with clear feedback\n * - Reduces cognitive load through direct action\n * - Provides Spanish-first messaging\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausDialogAction {\n  id: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  onClick: () => void | Promise<void>\n  variant?: 'primary' | 'secondary' | 'destructive'\n  disabled?: boolean\n  loading?: boolean\n  icon?: ReactNode\n}\n\nexport interface BirhausUndoConfig {\n  enabled: boolean\n  timeoutMs?: number\n  undoAction: () => void | Promise<void>\n  messageEs?: string\n  messageEn?: string\n  labelEs?: string\n  labelEn?: string\n}\n\nexport interface BirhausDialogProps {\n  // Visibility control\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n  \n  // BIRHAUS Principle #7: Bilingual by design\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  \n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Content\n  children?: ReactNode\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  undoConfig?: BirhausUndoConfig\n  \n  // Dialog variants\n  variant?: 'default' | 'success' | 'warning' | 'error' | 'info'\n  \n  // Actions (following 4-3-1 rule)\n  primaryAction?: BirhausDialogAction\n  secondaryActions?: BirhausDialogAction[] // Max 2-3 recommended\n  \n  // Layout options\n  size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n  position?: 'center' | 'top' | 'bottom'\n  \n  // Behavior\n  closeOnOverlayClick?: boolean\n  closeOnEscape?: boolean\n  persistent?: boolean\n  \n  // Accessibility\n  role?: 'dialog' | 'alertdialog'\n  ariaLabelledBy?: string\n  ariaDescribedBy?: string\n  \n  // Styling\n  className?: string\n  overlayClassName?: string\n}\n\nexport const BirhausDialog = forwardRef<HTMLDivElement, BirhausDialogProps>(({\n  // Visibility\n  open = false,\n  onOpenChange,\n  \n  // Content (Spanish-first)\n  title,\n  titleEs,\n  titleEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  children,\n  \n  // Undo functionality\n  undoConfig,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  position = 'center',\n  \n  // Behavior\n  closeOnOverlayClick = true,\n  closeOnEscape = true,\n  persistent = false,\n  \n  // Actions\n  primaryAction,\n  secondaryActions = [],\n  \n  // Accessibility\n  role = 'dialog',\n  ariaLabelledBy,\n  ariaDescribedBy,\n  \n  // Styling\n  className,\n  overlayClassName\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [isUndoActive, setIsUndoActive] = useState(false)\n  const [undoTimeRemaining, setUndoTimeRemaining] = useState(0)\n  const [isUndoing, setIsUndoing] = useState(false)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayTitle = resolveText(titleEs, titleEn, title)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  \n  // BIRHAUS: Undo countdown effect\n  useEffect(() => {\n    if (!isUndoActive || !undoConfig?.enabled) return\n    \n    const timeout = undoConfig.timeoutMs || 10000 // 10 seconds default\n    setUndoTimeRemaining(timeout)\n    \n    const interval = setInterval(() => {\n      setUndoTimeRemaining(prev => {\n        if (prev <= 1000) {\n          setIsUndoActive(false)\n          clearInterval(interval)\n          return 0\n        }\n        return prev - 1000\n      })\n    }, 1000)\n    \n    return () => clearInterval(interval)\n  }, [isUndoActive, undoConfig?.enabled, undoConfig?.timeoutMs])\n  \n  // BIRHAUS: Keyboard handling\n  useEffect(() => {\n    if (!open) return\n    \n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape' && closeOnEscape && !persistent) {\n        onOpenChange?.(false)\n      }\n    }\n    \n    document.addEventListener('keydown', handleKeyDown)\n    return () => document.removeEventListener('keydown', handleKeyDown)\n  }, [open, closeOnEscape, persistent, onOpenChange])\n  \n  // BIRHAUS: Handle undo action\n  const handleUndo = async () => {\n    if (!undoConfig?.undoAction) return\n    \n    setIsUndoing(true)\n    try {\n      await undoConfig.undoAction()\n      setIsUndoActive(false)\n      onOpenChange?.(false)\n    } catch (error) {\n      console.error('BIRHAUS Dialog: Undo action failed:', error)\n    } finally {\n      setIsUndoing(false)\n    }\n  }\n  \n  // BIRHAUS: Enhanced action handler with undo support\n  const handleAction = async (action: BirhausDialogAction) => {\n    if (action.disabled || action.loading) return\n    \n    try {\n      await action.onClick()\n      \n      // If this is a destructive action and undo is configured, show undo option\n      if (action.variant === 'destructive' && undoConfig?.enabled) {\n        setIsUndoActive(true)\n      } else {\n        onOpenChange?.(false)\n      }\n    } catch (error) {\n      console.error('BIRHAUS Dialog: Action failed:', error)\n    }\n  }\n  \n  // BIRHAUS: Warn about cognitive overload\n  const actionCount = (primaryAction ? 1 : 0) + secondaryActions.length\n  if (actionCount > 4) {\n    console.warn(`BIRHAUS 4-3-1 Rule Warning: Dialog has ${actionCount} actions (recommended: max 4)`)\n  }\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: 'max-w-sm',\n    md: 'max-w-md',\n    lg: 'max-w-lg',\n    xl: 'max-w-xl',\n    full: 'max-w-full mx-4'\n  }\n  \n  const positionClasses = {\n    center: 'items-center justify-center',\n    top: 'items-start justify-center pt-16',\n    bottom: 'items-end justify-center pb-16'\n  }\n  \n  const variantStyles = {\n    default: {\n      icon: null,\n      headerBg: 'bg-gray-50',\n      borderColor: 'border-gray-200'\n    },\n    success: {\n      icon: <CheckCircle2 className=\"h-5 w-5 text-green-600\" />,\n      headerBg: 'bg-green-50',\n      borderColor: 'border-green-200'\n    },\n    warning: {\n      icon: <AlertTriangle className=\"h-5 w-5 text-yellow-600\" />,\n      headerBg: 'bg-yellow-50',\n      borderColor: 'border-yellow-200'\n    },\n    error: {\n      icon: <AlertTriangle className=\"h-5 w-5 text-red-600\" />,\n      headerBg: 'bg-red-50',\n      borderColor: 'border-red-200'\n    },\n    info: {\n      icon: <Info className=\"h-5 w-5 text-blue-600\" />,\n      headerBg: 'bg-blue-50',\n      borderColor: 'border-blue-200'\n    }\n  }\n  \n  const currentVariant = safeAccess(variantStyles, variant, variantStyles.default)\n  \n  if (!open) return null\n  \n  // BIRHAUS: Undo overlay (Principle #5: Undo over confirm)\n  if (isUndoActive && undoConfig?.enabled) {\n    const undoMessage = resolveText(\n      undoConfig.messageEs, \n      undoConfig.messageEn, \n      'Acción completada. Presiona deshacer si fue un error.'\n    )\n    const undoLabel = resolveText(\n      undoConfig.labelEs,\n      undoConfig.labelEn,\n      'Deshacer'\n    )\n    \n    return (\n      <div className=\"fixed inset-0 z-50 bg-black/50 flex items-center justify-center p-4\">\n        <div \n          ref={ref}\n          className={cn(\n            'bg-white rounded-lg shadow-lg border-2 border-green-200 p-6 max-w-md w-full',\n            className\n          )}\n          role=\"alertdialog\"\n          aria-labelledby=\"undo-title\"\n          aria-describedby=\"undo-description\"\n        >\n          <div className=\"flex items-start gap-4\">\n            <div className=\"flex-shrink-0\">\n              <CheckCircle2 className=\"h-6 w-6 text-green-600\" />\n            </div>\n            \n            <div className=\"flex-1 min-w-0\">\n              <h3 id=\"undo-title\" className=\"text-lg font-semibold text-gray-900 mb-2\">\n                ¡Acción completada!\n              </h3>\n              \n              <p id=\"undo-description\" className=\"text-sm text-gray-600 mb-4\">\n                {undoMessage}\n              </p>\n              \n              <div className=\"flex items-center justify-between\">\n                <button\n                  onClick={handleUndo}\n                  disabled={isUndoing}\n                  className={cn(\n                    'inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n                    'bg-red-600 text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500',\n                    'disabled:pointer-events-none disabled:opacity-50'\n                  )}\n                >\n                  {isUndoing ? (\n                    <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-white\" />\n                  ) : (\n                    <Undo2 className=\"h-4 w-4\" />\n                  )}\n                  {isUndoing ? 'Deshaciendo...' : undoLabel}\n                </button>\n                \n                <div className=\"text-sm text-gray-500\">\n                  Auto-cierre en {Math.ceil(undoTimeRemaining / 1000)}s\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n  \n  return (\n    <div \n      className={cn(\n        'fixed inset-0 z-50 bg-black/50 flex',\n        safeAccess(positionClasses, position, positionClasses.center),\n        overlayClassName\n      )}\n      onClick={closeOnOverlayClick ? () => onOpenChange?.(false) : undefined}\n    >\n      <div \n        ref={ref}\n        className={cn(\n          'bg-white rounded-lg shadow-xl border',\n          safeAccess(sizeClasses, size, sizeClasses.md),\n          currentVariant.borderColor,\n          'w-full overflow-hidden',\n          className\n        )}\n        onClick={(e) => e.stopPropagation()}\n        role={role}\n        aria-labelledby={ariaLabelledBy || 'dialog-title'}\n        aria-describedby={ariaDescribedBy || 'dialog-description'}\n        data-birhaus-component=\"dialog\"\n        data-variant={variant}\n      >\n        {/* Header */}\n        {(displayTitle || currentVariant.icon) && (\n          <div className={cn(\n            'px-6 py-4 border-b border-gray-200',\n            currentVariant.headerBg\n          )}>\n            <div className=\"flex items-center justify-between\">\n              <div className=\"flex items-center gap-3\">\n                {currentVariant.icon}\n                {displayTitle && (\n                  <h2 \n                    id={ariaLabelledBy || 'dialog-title'}\n                    className=\"text-lg font-semibold text-gray-900\"\n                  >\n                    {displayTitle}\n                  </h2>\n                )}\n              </div>\n              \n              {!persistent && (\n                <button\n                  onClick={() => onOpenChange?.(false)}\n                  className=\"text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-500 rounded p-1\"\n                  aria-label=\"Cerrar diálogo\"\n                >\n                  <X className=\"h-5 w-5\" />\n                </button>\n              )}\n            </div>\n          </div>\n        )}\n        \n        {/* Content */}\n        <div className=\"px-6 py-4\">\n          {displayDescription && (\n            <p \n              id={ariaDescribedBy || 'dialog-description'}\n              className=\"text-gray-600 mb-4\"\n            >\n              {displayDescription}\n            </p>\n          )}\n          \n          {children}\n        </div>\n        \n        {/* Actions */}\n        {(primaryAction || secondaryActions.length > 0) && (\n          <div className=\"px-6 py-4 bg-gray-50 border-t border-gray-200\">\n            <div className=\"flex items-center justify-end gap-3\">\n              {/* BIRHAUS Principle #3: One clear primary action */}\n              {secondaryActions.map((action) => (\n                <button\n                  key={action.id}\n                  onClick={() => handleAction(action)}\n                  disabled={action.disabled || action.loading}\n                  className={cn(\n                    'inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n                    'border border-gray-300 bg-white text-gray-700 hover:bg-gray-50',\n                    'focus:outline-none focus:ring-2 focus:ring-gray-500',\n                    'disabled:pointer-events-none disabled:opacity-50'\n                  )}\n                >\n                  {action.loading ? (\n                    <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-current\" />\n                  ) : action.icon}\n                  {action.labelEs || action.label}\n                </button>\n              ))}\n              \n              {primaryAction && (\n                <button\n                  onClick={() => handleAction(primaryAction)}\n                  disabled={primaryAction.disabled || primaryAction.loading}\n                  className={cn(\n                    'inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md',\n                    'focus:outline-none focus:ring-2 focus:ring-offset-2',\n                    'disabled:pointer-events-none disabled:opacity-50',\n                    primaryAction.variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500',\n                    primaryAction.variant === 'destructive' && 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500',\n                    (!primaryAction.variant || primaryAction.variant === 'secondary') && 'bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500'\n                  )}\n                >\n                  {primaryAction.loading ? (\n                    <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-current\" />\n                  ) : primaryAction.icon}\n                  {primaryAction.labelEs || primaryAction.label}\n                </button>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n})\n\nBirhausDialog.displayName = 'BirhausDialog'\n\n// BIRHAUS: Hook for managing dialog state with undo support\nexport function useBirhausDialog() {\n  const [open, setOpen] = useState(false)\n  const [undoActive, setUndoActive] = useState(false)\n  \n  const openDialog = () => setOpen(true)\n  const closeDialog = () => setOpen(false)\n  const activateUndo = () => setUndoActive(true)\n  const deactivateUndo = () => setUndoActive(false)\n  \n  return {\n    open,\n    undoActive,\n    openDialog,\n    closeDialog,\n    activateUndo,\n    deactivateUndo,\n    setOpen\n  }\n}\n\n// BIRHAUS: Helper to create dialog actions with Spanish-first labels\nexport function createBirhausDialogAction(\n  id: string,\n  labelEs: string,\n  onClick: () => void | Promise<void>,\n  options?: {\n    labelEn?: string\n    icon?: ReactNode\n    variant?: 'primary' | 'secondary' | 'destructive'\n    disabled?: boolean\n  }\n): BirhausDialogAction {\n  return {\n    id,\n    label: labelEs,\n    labelEs,\n    labelEn: options?.labelEn,\n    onClick,\n    icon: options?.icon,\n    variant: options?.variant || 'secondary',\n    disabled: options?.disabled || false,\n    loading: false\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, ReactNode, useState, useMemo } from 'react'\nimport { ChevronUp, ChevronDown, Search, Filter, MoreHorizontal, AlertTriangle } from 'lucide-react'\n\n/**\n * BIRHAUS Table Component\n * \n * Enhanced table implementing BIRHAUS Principle #1: Miller's Law (7±2)\n * \n * Features:\n * - Maximum 7 visible columns (cognitive load optimization)\n * - Progressive disclosure for additional columns\n * - Spanish-first labeling for financial data\n * - Sortable and filterable with cognitive load warnings\n * - Accessibility-first design (WCAG AA+)\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausTableColumn<T = any> {\n  id: string\n  header: string\n  headerEs?: string\n  headerEn?: string\n  accessor: keyof T | ((item: T) => any)\n  \n  // Column behavior\n  sortable?: boolean\n  filterable?: boolean\n  searchable?: boolean\n  \n  // Formatting\n  cell?: (value: any, item: T) => ReactNode\n  width?: string | number\n  align?: 'left' | 'center' | 'right'\n  \n  // Financial formatting\n  isCurrency?: boolean\n  isPercentage?: boolean\n  isDate?: boolean\n  \n  // Visibility (for progressive disclosure)\n  priority?: 'high' | 'medium' | 'low'\n  hideOnMobile?: boolean\n  \n  // Cognitive load hints\n  cognitiveWeight?: number // 1-10 scale\n}\n\nexport interface BirhausTableProps<T = any> {\n  // Data\n  data: T[]\n  columns: BirhausTableColumn<T>[]\n  \n  // BIRHAUS Principle #7: Bilingual by design\n  emptyMessage?: string\n  emptyMessageEs?: string\n  emptyMessageEn?: string\n  \n  loadingMessage?: string\n  loadingMessageEs?: string\n  loadingMessageEn?: string\n  \n  // Miller's Law enforcement\n  maxVisibleColumns?: number\n  showCognitiveWarning?: boolean\n  \n  // Functionality\n  sortable?: boolean\n  filterable?: boolean\n  searchable?: boolean\n  selectable?: boolean\n  \n  // State\n  loading?: boolean\n  selectedRows?: Set<string | number>\n  onRowSelect?: (id: string | number, selected: boolean) => void\n  onRowsSelect?: (ids: (string | number)[], selected: boolean) => void\n  \n  // Pagination\n  pagination?: {\n    page: number\n    pageSize: number\n    total: number\n    onPageChange: (page: number) => void\n    onPageSizeChange: (size: number) => void\n  }\n  \n  // Sorting\n  sortConfig?: {\n    key: string\n    direction: 'asc' | 'desc'\n  }\n  onSort?: (key: string, direction: 'asc' | 'desc') => void\n  \n  // Filtering\n  filters?: Record<string, any>\n  onFilter?: (filters: Record<string, any>) => void\n  \n  // Search\n  searchValue?: string\n  onSearch?: (value: string) => void\n  \n  // Row identification\n  getRowId?: (item: T, index: number) => string | number\n  \n  // Actions\n  rowActions?: Array<{\n    id: string\n    label: string\n    labelEs?: string\n    labelEn?: string\n    icon?: ReactNode\n    onClick: (item: T) => void\n    variant?: 'primary' | 'secondary' | 'destructive'\n    disabled?: (item: T) => boolean\n  }>\n  \n  // Styling\n  variant?: 'default' | 'striped' | 'bordered' | 'minimal'\n  size?: 'sm' | 'md' | 'lg'\n  className?: string\n}\n\nexport const BirhausTable = forwardRef<HTMLTableElement, BirhausTableProps>(({\n  // Data\n  data,\n  columns,\n  \n  // Messages (Spanish-first)\n  emptyMessage,\n  emptyMessageEs,\n  emptyMessageEn,\n  loadingMessage,\n  loadingMessageEs,\n  loadingMessageEn,\n  \n  // Miller's Law settings\n  maxVisibleColumns = 7,\n  showCognitiveWarning = true,\n  \n  // Functionality\n  sortable = true,\n  filterable = false,\n  searchable = false,\n  selectable = false,\n  \n  // State\n  loading = false,\n  selectedRows = new Set(),\n  onRowSelect,\n  onRowsSelect,\n  \n  // Pagination\n  pagination,\n  \n  // Sorting\n  sortConfig,\n  onSort,\n  \n  // Filtering  \n  filters = {},\n  onFilter,\n  \n  // Search\n  searchValue = '',\n  onSearch,\n  \n  // Row ID\n  getRowId = (item, index) => index,\n  \n  // Actions\n  rowActions = [],\n  \n  // Styling\n  variant = 'default',\n  size = 'md',\n  className\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [hiddenColumns, setHiddenColumns] = useState<Set<string>>(new Set())\n  const [searchTerm, setSearchTerm] = useState(searchValue)\n  const [localSortConfig, setLocalSortConfig] = useState(sortConfig)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayEmptyMessage = resolveText(\n    emptyMessageEs, \n    emptyMessageEn, \n    emptyMessage || 'No hay datos disponibles'\n  )\n  \n  const displayLoadingMessage = resolveText(\n    loadingMessageEs,\n    loadingMessageEn,\n    loadingMessage || 'Cargando datos...'\n  )\n  \n  // BIRHAUS: Calculate cognitive load and visible columns\n  const { visibleColumns, hiddenColumnCount, cognitiveLoad } = useMemo(() => {\n    const priorityOrder = { high: 1, medium: 2, low: 3 }\n    \n    // Sort columns by priority and cognitive weight\n    const sortedColumns = [...columns].sort((a, b) => {\n      const aPriority = priorityOrder[a.priority || 'medium']\n      const bPriority = priorityOrder[b.priority || 'medium']\n      if (aPriority !== bPriority) return aPriority - bPriority\n      \n      const aWeight = a.cognitiveWeight || 5\n      const bWeight = b.cognitiveWeight || 5\n      return aWeight - bWeight\n    })\n    \n    const visible = sortedColumns\n      .filter(col => !hiddenColumns.has(col.id))\n      .slice(0, maxVisibleColumns)\n    \n    const hidden = sortedColumns.length - visible.length\n    const totalCognitiveWeight = visible.reduce((sum, col) => sum + (col.cognitiveWeight || 5), 0)\n    const avgCognitiveWeight = totalCognitiveWeight / visible.length\n    \n    const load = visible.length > 7 ? 'high' : \n                 visible.length > 5 ? 'medium' : 'low'\n    \n    return {\n      visibleColumns: visible,\n      hiddenColumnCount: hidden,\n      cognitiveLoad: load,\n      avgCognitiveWeight\n    }\n  }, [columns, hiddenColumns, maxVisibleColumns])\n  \n  // BIRHAUS: Warn about cognitive overload\n  if (showCognitiveWarning && visibleColumns.length > 7) {\n    console.warn(`BIRHAUS Miller's Law Warning: Table shows ${visibleColumns.length} columns (recommended: max 7)`)\n  }\n  \n  // BIRHAUS: Handle sorting\n  const handleSort = (columnId: string) => {\n    const column = columns.find(col => col.id === columnId)\n    if (!column?.sortable) return\n    \n    const direction: 'asc' | 'desc' = localSortConfig?.key === columnId && localSortConfig.direction === 'asc' \n      ? 'desc' : 'asc'\n    \n    const newSortConfig = { key: columnId, direction }\n    setLocalSortConfig(newSortConfig)\n    onSort?.(columnId, direction)\n  }\n  \n  // BIRHAUS: Handle row selection\n  const handleRowSelect = (rowId: string | number, selected: boolean) => {\n    onRowSelect?.(rowId, selected)\n  }\n  \n  const handleSelectAll = (selected: boolean) => {\n    const allIds = data.map((item, index) => getRowId(item, index))\n    onRowsSelect?.(allIds, selected)\n  }\n  \n  // BIRHAUS: Get cell value\n  const getCellValue = (item: any, column: BirhausTableColumn) => {\n    if (typeof column.accessor === 'function') {\n      return column.accessor(item)\n    }\n    return item[column.accessor]\n  }\n  \n  // BIRHAUS: Format cell value\n  const formatCellValue = (value: any, column: BirhausTableColumn, item: any) => {\n    if (column.cell) {\n      return column.cell(value, item)\n    }\n    \n    if (column.isCurrency && typeof value === 'number') {\n      return new Intl.NumberFormat('es-PY', {\n        style: 'currency',\n        currency: 'PYG',\n        minimumFractionDigits: 0\n      }).format(value)\n    }\n    \n    if (column.isPercentage && typeof value === 'number') {\n      return `${(value * 100).toFixed(1)}%`\n    }\n    \n    if (column.isDate && value) {\n      return new Date(value).toLocaleDateString('es-ES')\n    }\n    \n    return value?.toString() || ''\n  }\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: 'text-xs',\n    md: 'text-sm',\n    lg: 'text-base'\n  }\n  \n  const variantClasses = {\n    default: 'border border-gray-200',\n    striped: 'border border-gray-200',\n    bordered: 'border-2 border-gray-300',\n    minimal: 'border-0'\n  }\n  \n  if (loading) {\n    return (\n      <div className=\"w-full\">\n        <div className=\"animate-pulse space-y-4\">\n          <div className=\"h-10 bg-gray-200 rounded\"></div>\n          {[...Array(5)].map((_, i) => (\n            <div key={i} className=\"h-8 bg-gray-100 rounded\"></div>\n          ))}\n        </div>\n        <p className=\"text-center text-gray-500 mt-4\">{displayLoadingMessage}</p>\n      </div>\n    )\n  }\n  \n  if (data.length === 0) {\n    return (\n      <div className=\"w-full text-center py-12\">\n        <p className=\"text-gray-500 text-lg\">{displayEmptyMessage}</p>\n      </div>\n    )\n  }\n  \n  return (\n    <div className=\"w-full space-y-4\">\n      {/* BIRHAUS: Cognitive load warning */}\n      {showCognitiveWarning && cognitiveLoad === 'high' && (\n        <div className=\"flex items-center gap-2 p-3 bg-yellow-50 border border-yellow-200 rounded-lg\">\n          <AlertTriangle className=\"h-4 w-4 text-yellow-600\" />\n          <span className=\"text-sm text-yellow-800\">\n            Mostrando {visibleColumns.length} columnas (máximo recomendado: 7). \n            {hiddenColumnCount > 0 && ` ${hiddenColumnCount} columnas ocultas.`}\n          </span>\n        </div>\n      )}\n      \n      {/* Table controls */}\n      {(searchable || filterable || hiddenColumnCount > 0) && (\n        <div className=\"flex items-center justify-between gap-4\">\n          {/* Search */}\n          {searchable && (\n            <div className=\"relative flex-1 max-w-sm\">\n              <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n              <input\n                type=\"text\"\n                value={searchTerm}\n                onChange={(e) => {\n                  setSearchTerm(e.target.value)\n                  onSearch?.(e.target.value)\n                }}\n                placeholder=\"Buscar...\"\n                className=\"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500\"\n              />\n            </div>\n          )}\n          \n          {/* Column visibility toggle */}\n          {hiddenColumnCount > 0 && (\n            <button\n              onClick={() => setHiddenColumns(new Set())}\n              className=\"inline-flex items-center gap-2 px-3 py-2 text-sm border border-gray-300 rounded-lg hover:bg-gray-50\"\n            >\n              <MoreHorizontal className=\"h-4 w-4\" />\n              Mostrar {hiddenColumnCount} columnas más\n            </button>\n          )}\n        </div>\n      )}\n      \n      {/* Table */}\n      <div className=\"overflow-x-auto rounded-lg border border-gray-200\">\n        <table \n          ref={ref}\n          className={cn(\n            'w-full table-auto',\n            sizeClasses[size],\n            variantClasses[variant],\n            className\n          )}\n          data-birhaus-component=\"table\"\n          data-cognitive-load={cognitiveLoad}\n          data-visible-columns={visibleColumns.length}\n        >\n          {/* Header */}\n          <thead className=\"bg-gray-50\">\n            <tr>\n              {selectable && (\n                <th className=\"px-4 py-3 text-left\">\n                  <input\n                    type=\"checkbox\"\n                    onChange={(e) => handleSelectAll(e.target.checked)}\n                    className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n                  />\n                </th>\n              )}\n              \n              {visibleColumns.map((column) => (\n                <th\n                  key={column.id}\n                  className={cn(\n                    'px-4 py-3 font-medium text-gray-900',\n                    column.align === 'center' && 'text-center',\n                    column.align === 'right' && 'text-right',\n                    column.sortable && 'cursor-pointer hover:bg-gray-100'\n                  )}\n                  style={{ width: column.width }}\n                  onClick={() => column.sortable && handleSort(column.id)}\n                >\n                  <div className=\"flex items-center gap-2\">\n                    <span>{column.headerEs || column.header}</span>\n                    {column.sortable && localSortConfig?.key === column.id && (\n                      localSortConfig.direction === 'asc' ? (\n                        <ChevronUp className=\"h-4 w-4\" />\n                      ) : (\n                        <ChevronDown className=\"h-4 w-4\" />\n                      )\n                    )}\n                  </div>\n                </th>\n              ))}\n              \n              {rowActions.length > 0 && (\n                <th className=\"px-4 py-3 text-right font-medium text-gray-900\">\n                  Acciones\n                </th>\n              )}\n            </tr>\n          </thead>\n          \n          {/* Body */}\n          <tbody className=\"divide-y divide-gray-200\">\n            {data.map((item, index) => {\n              const rowId = getRowId(item, index)\n              const isSelected = selectedRows.has(rowId)\n              \n              return (\n                <tr\n                  key={rowId}\n                  className={cn(\n                    'hover:bg-gray-50',\n                    variant === 'striped' && index % 2 === 1 && 'bg-gray-50',\n                    isSelected && 'bg-blue-50'\n                  )}\n                >\n                  {selectable && (\n                    <td className=\"px-4 py-3\">\n                      <input\n                        type=\"checkbox\"\n                        checked={isSelected}\n                        onChange={(e) => handleRowSelect(rowId, e.target.checked)}\n                        className=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n                      />\n                    </td>\n                  )}\n                  \n                  {visibleColumns.map((column) => {\n                    const value = getCellValue(item, column)\n                    const formattedValue = formatCellValue(value, column, item)\n                    \n                    return (\n                      <td\n                        key={column.id}\n                        className={cn(\n                          'px-4 py-3 text-gray-900',\n                          column.align === 'center' && 'text-center',\n                          column.align === 'right' && 'text-right',\n                          column.isCurrency && 'font-mono'\n                        )}\n                      >\n                        {formattedValue}\n                      </td>\n                    )\n                  })}\n                  \n                  {rowActions.length > 0 && (\n                    <td className=\"px-4 py-3 text-right\">\n                      <div className=\"flex items-center justify-end gap-2\">\n                        {rowActions.map((action) => (\n                          <button\n                            key={action.id}\n                            onClick={() => action.onClick(item)}\n                            disabled={action.disabled?.(item)}\n                            className={cn(\n                              'inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded',\n                              'focus:outline-none focus:ring-2 focus:ring-offset-1',\n                              'disabled:pointer-events-none disabled:opacity-50',\n                              action.variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500',\n                              action.variant === 'destructive' && 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500',\n                              (!action.variant || action.variant === 'secondary') && 'bg-gray-100 text-gray-700 hover:bg-gray-200 focus:ring-gray-500'\n                            )}\n                          >\n                            {action.icon}\n                            {action.labelEs || action.label}\n                          </button>\n                        ))}\n                      </div>\n                    </td>\n                  )}\n                </tr>\n              )\n            })}\n          </tbody>\n        </table>\n      </div>\n      \n      {/* Pagination */}\n      {pagination && (\n        <div className=\"flex items-center justify-between\">\n          <div className=\"text-sm text-gray-700\">\n            Mostrando {((pagination.page - 1) * pagination.pageSize) + 1} a{' '}\n            {Math.min(pagination.page * pagination.pageSize, pagination.total)} de{' '}\n            {pagination.total} resultados\n          </div>\n          \n          <div className=\"flex items-center gap-2\">\n            <button\n              onClick={() => pagination.onPageChange(pagination.page - 1)}\n              disabled={pagination.page === 1}\n              className=\"px-3 py-1 text-sm border border-gray-300 rounded hover:bg-gray-50 disabled:opacity-50\"\n            >\n              Anterior\n            </button>\n            \n            <span className=\"px-3 py-1 text-sm\">\n              {pagination.page}\n            </span>\n            \n            <button\n              onClick={() => pagination.onPageChange(pagination.page + 1)}\n              disabled={pagination.page * pagination.pageSize >= pagination.total}\n              className=\"px-3 py-1 text-sm border border-gray-300 rounded hover:bg-gray-50 disabled:opacity-50\"\n            >\n              Siguiente\n            </button>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausTable.displayName = 'BirhausTable'\n\n// BIRHAUS: Hook for managing table state\nexport function useBirhausTable<T>(initialData: T[] = []) {\n  const [data, setData] = useState<T[]>(initialData)\n  const [selectedRows, setSelectedRows] = useState<Set<string | number>>(new Set())\n  const [sortConfig, setSortConfig] = useState<{ key: string; direction: 'asc' | 'desc' } | undefined>()\n  const [filters, setFilters] = useState<Record<string, any>>({})\n  const [searchValue, setSearchValue] = useState('')\n  \n  const handleRowSelect = (id: string | number, selected: boolean) => {\n    const newSelected = new Set(selectedRows)\n    if (selected) {\n      newSelected.add(id)\n    } else {\n      newSelected.delete(id)\n    }\n    setSelectedRows(newSelected)\n  }\n  \n  const handleRowsSelect = (ids: (string | number)[], selected: boolean) => {\n    const newSelected = new Set(selectedRows)\n    ids.forEach(id => {\n      if (selected) {\n        newSelected.add(id)\n      } else {\n        newSelected.delete(id)\n      }\n    })\n    setSelectedRows(newSelected)\n  }\n  \n  const clearSelection = () => setSelectedRows(new Set())\n  \n  return {\n    data,\n    setData,\n    selectedRows,\n    setSelectedRows,\n    sortConfig,\n    setSortConfig,\n    filters,\n    setFilters,\n    searchValue,\n    setSearchValue,\n    handleRowSelect,\n    handleRowsSelect,\n    clearSelection\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, useState } from 'react'\nimport { Check, Minus } from 'lucide-react'\n\n/**\n * BIRHAUS Checkbox Component\n * \n * Enhanced checkbox with clear state indicators implementing BIRHAUS principles:\n * - Clear visual feedback for all states\n * - Spanish-first labeling\n * - Accessibility-first design (WCAG AA+)\n * - Consistent with design token system\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausCheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Enhanced states\n  indeterminate?: boolean\n  \n  // Styling variants\n  variant?: 'default' | 'success' | 'warning' | 'error'\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Layout\n  labelPosition?: 'right' | 'left'\n  \n  // State feedback\n  showStateIcon?: boolean\n  \n  // Error handling\n  error?: boolean\n  errorMessage?: string\n  errorMessageEs?: string\n  errorMessageEn?: string\n  \n  // Success feedback\n  success?: boolean\n  successMessage?: string\n  successMessageEs?: string\n  successMessageEn?: string\n  \n  // Styling\n  className?: string\n  labelClassName?: string\n}\n\nexport const BirhausCheckbox = forwardRef<HTMLInputElement, BirhausCheckboxProps>(({\n  // Content (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Enhanced states\n  indeterminate = false,\n  \n  // Styling\n  variant = 'default',\n  size = 'md',\n  labelPosition = 'right',\n  showStateIcon = true,\n  \n  // State feedback\n  error = false,\n  errorMessage,\n  errorMessageEs,\n  errorMessageEn,\n  success = false,\n  successMessage,\n  successMessageEs,\n  successMessageEn,\n  \n  // Standard props\n  checked,\n  disabled,\n  onChange,\n  className,\n  labelClassName,\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: Internal state for uncontrolled usage\n  const [internalChecked, setInternalChecked] = useState(checked || false)\n  \n  const isChecked = checked !== undefined ? checked : internalChecked\n  const isControlled = checked !== undefined\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayLabel = resolveText(labelEs, labelEn, label)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  const displayErrorMessage = resolveText(errorMessageEs, errorMessageEn, errorMessage)\n  const displaySuccessMessage = resolveText(successMessageEs, successMessageEn, successMessage)\n  \n  // BIRHAUS: Handle change\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    if (!disabled) {\n      const newChecked = event.target.checked\n      \n      if (!isControlled) {\n        setInternalChecked(newChecked)\n      }\n      \n      onChange?.(event)\n    }\n  }\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: {\n      checkbox: 'h-4 w-4',\n      icon: 'h-3 w-3',\n      label: 'text-sm',\n      description: 'text-xs'\n    },\n    md: {\n      checkbox: 'h-5 w-5',\n      icon: 'h-4 w-4',\n      label: 'text-base',\n      description: 'text-sm'\n    },\n    lg: {\n      checkbox: 'h-6 w-6',\n      icon: 'h-5 w-5',\n      label: 'text-lg',\n      description: 'text-base'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      border: 'border-gray-300',\n      checked: 'bg-blue-600 border-blue-600',\n      focus: 'focus:ring-blue-500'\n    },\n    success: {\n      border: 'border-green-300',\n      checked: 'bg-green-600 border-green-600',\n      focus: 'focus:ring-green-500'\n    },\n    warning: {\n      border: 'border-yellow-300',\n      checked: 'bg-yellow-600 border-yellow-600',\n      focus: 'focus:ring-yellow-500'\n    },\n    error: {\n      border: 'border-red-300',\n      checked: 'bg-red-600 border-red-600',\n      focus: 'focus:ring-red-500'\n    }\n  }\n  \n  const currentSize = sizeClasses[size]\n  const currentVariant = variantClasses[error ? 'error' : success ? 'success' : variant]\n  \n  const checkboxClasses = cn(\n    // Base styles\n    'relative rounded border-2 transition-colors duration-200',\n    'focus:outline-none focus:ring-2 focus:ring-offset-2',\n    \n    // Size\n    currentSize.checkbox,\n    \n    // State styles\n    currentVariant.focus,\n    \n    // Checked/unchecked styles\n    isChecked || indeterminate\n      ? currentVariant.checked\n      : cn('bg-white', currentVariant.border),\n    \n    // Disabled styles\n    disabled && 'opacity-50 cursor-not-allowed',\n    \n    // Interactive styles\n    !disabled && 'cursor-pointer hover:border-gray-400'\n  )\n  \n  const labelClasses = cn(\n    'font-medium text-gray-900',\n    currentSize.label,\n    disabled && 'text-gray-400',\n    labelClassName\n  )\n  \n  const containerClasses = cn(\n    'flex items-start gap-3',\n    labelPosition === 'left' && 'flex-row-reverse',\n    className\n  )\n  \n  return (\n    <div className=\"space-y-2\">\n      <label className={containerClasses}>\n        {/* Hidden native checkbox for accessibility */}\n        <input\n          ref={ref}\n          type=\"checkbox\"\n          checked={isChecked}\n          onChange={handleChange}\n          disabled={disabled}\n          className=\"sr-only\"\n          {...props}\n        />\n        \n        {/* Custom checkbox */}\n        <div className={checkboxClasses}>\n          {/* Check/indeterminate icon */}\n          {(isChecked || indeterminate) && showStateIcon && (\n            <div className=\"absolute inset-0 flex items-center justify-center\">\n              {indeterminate ? (\n                <Minus className={cn(currentSize.icon, 'text-white')} />\n              ) : (\n                <Check className={cn(currentSize.icon, 'text-white')} />\n              )}\n            </div>\n          )}\n        </div>\n        \n        {/* Label and description */}\n        {(displayLabel || displayDescription) && (\n          <div className=\"flex-1 min-w-0\">\n            {displayLabel && (\n              <div className={labelClasses}>\n                {displayLabel}\n              </div>\n            )}\n            \n            {displayDescription && (\n              <div className={cn(\n                'text-gray-600 mt-1',\n                currentSize.description,\n                disabled && 'text-gray-400'\n              )}>\n                {displayDescription}\n              </div>\n            )}\n          </div>\n        )}\n      </label>\n      \n      {/* Error message */}\n      {error && displayErrorMessage && (\n        <div className={cn(\n          'text-red-600 flex items-center gap-1',\n          currentSize.description\n        )}>\n          <span>{displayErrorMessage}</span>\n        </div>\n      )}\n      \n      {/* Success message */}\n      {success && displaySuccessMessage && (\n        <div className={cn(\n          'text-green-600 flex items-center gap-1',\n          currentSize.description\n        )}>\n          <span>{displaySuccessMessage}</span>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCheckbox.displayName = 'BirhausCheckbox'\n\n// BIRHAUS: Switch component variant\nexport interface BirhausSwitchProps extends Omit<BirhausCheckboxProps, 'indeterminate' | 'showStateIcon'> {\n  // Switch-specific props\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Visual indicators\n  showLabels?: boolean\n  onLabel?: string\n  onLabelEs?: string\n  onLabelEn?: string\n  offLabel?: string\n  offLabelEs?: string\n  offLabelEn?: string\n}\n\nexport const BirhausSwitch = forwardRef<HTMLInputElement, BirhausSwitchProps>(({\n  // Content (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Switch labels\n  showLabels = false,\n  onLabel = 'Sí',\n  onLabelEs = 'Sí',\n  onLabelEn = 'Yes',\n  offLabel = 'No',\n  offLabelEs = 'No',\n  offLabelEn = 'No',\n  \n  // Styling\n  variant = 'default',\n  size = 'md',\n  labelPosition = 'right',\n  \n  // State feedback\n  error = false,\n  errorMessage,\n  errorMessageEs,\n  errorMessageEn,\n  success = false,\n  successMessage,\n  successMessageEs,\n  successMessageEn,\n  \n  // Standard props\n  checked,\n  disabled,\n  onChange,\n  className,\n  labelClassName,\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: Internal state for uncontrolled usage\n  const [internalChecked, setInternalChecked] = useState(checked || false)\n  \n  const isChecked = checked !== undefined ? checked : internalChecked\n  const isControlled = checked !== undefined\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayLabel = resolveText(labelEs, labelEn, label)\n  const displayDescription = resolveText(descriptionEs, descriptionEn, description)\n  const displayErrorMessage = resolveText(errorMessageEs, errorMessageEn, errorMessage)\n  const displaySuccessMessage = resolveText(successMessageEs, successMessageEn, successMessage)\n  \n  const displayOnLabel = resolveText(onLabelEs, onLabelEn, onLabel)\n  const displayOffLabel = resolveText(offLabelEs, offLabelEn, offLabel)\n  \n  // BIRHAUS: Handle change\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    if (!disabled) {\n      const newChecked = event.target.checked\n      \n      if (!isControlled) {\n        setInternalChecked(newChecked)\n      }\n      \n      onChange?.(event)\n    }\n  }\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: {\n      track: 'h-5 w-9',\n      thumb: 'h-4 w-4',\n      translate: 'translate-x-4',\n      label: 'text-sm',\n      description: 'text-xs',\n      switchLabel: 'text-xs'\n    },\n    md: {\n      track: 'h-6 w-11',\n      thumb: 'h-5 w-5',\n      translate: 'translate-x-5',\n      label: 'text-base',\n      description: 'text-sm',\n      switchLabel: 'text-xs'\n    },\n    lg: {\n      track: 'h-7 w-13',\n      thumb: 'h-6 w-6',\n      translate: 'translate-x-6',\n      label: 'text-lg',\n      description: 'text-base',\n      switchLabel: 'text-sm'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      trackOff: 'bg-gray-200',\n      trackOn: 'bg-blue-600',\n      focus: 'focus:ring-blue-500'\n    },\n    success: {\n      trackOff: 'bg-gray-200',\n      trackOn: 'bg-green-600',\n      focus: 'focus:ring-green-500'\n    },\n    warning: {\n      trackOff: 'bg-gray-200',\n      trackOn: 'bg-yellow-600',\n      focus: 'focus:ring-yellow-500'\n    },\n    error: {\n      trackOff: 'bg-gray-200',\n      trackOn: 'bg-red-600',\n      focus: 'focus:ring-red-500'\n    }\n  }\n  \n  const currentSize = sizeClasses[size]\n  const currentVariant = variantClasses[error ? 'error' : success ? 'success' : variant]\n  \n  const containerClasses = cn(\n    'flex items-start gap-3',\n    labelPosition === 'left' && 'flex-row-reverse',\n    className\n  )\n  \n  const trackClasses = cn(\n    'relative inline-flex items-center rounded-full border-2 border-transparent transition-colors duration-200',\n    'focus:outline-none focus:ring-2 focus:ring-offset-2',\n    currentSize.track,\n    currentVariant.focus,\n    isChecked ? currentVariant.trackOn : currentVariant.trackOff,\n    disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'\n  )\n  \n  const thumbClasses = cn(\n    'inline-block bg-white rounded-full shadow-lg transform transition-transform duration-200',\n    currentSize.thumb,\n    isChecked ? currentSize.translate : 'translate-x-0'\n  )\n  \n  return (\n    <div className=\"space-y-2\">\n      <label className={containerClasses}>\n        {/* Hidden native checkbox for accessibility */}\n        <input\n          ref={ref}\n          type=\"checkbox\"\n          checked={isChecked}\n          onChange={handleChange}\n          disabled={disabled}\n          className=\"sr-only\"\n          role=\"switch\"\n          aria-checked={isChecked}\n          {...props}\n        />\n        \n        {/* Custom switch */}\n        <div className=\"flex items-center gap-2\">\n          {showLabels && (\n            <span className={cn(\n              currentSize.switchLabel,\n              'text-gray-600',\n              !isChecked && 'font-medium text-gray-900'\n            )}>\n              {displayOffLabel}\n            </span>\n          )}\n          \n          <div className={trackClasses}>\n            <div className={thumbClasses} />\n          </div>\n          \n          {showLabels && (\n            <span className={cn(\n              currentSize.switchLabel,\n              'text-gray-600',\n              isChecked && 'font-medium text-gray-900'\n            )}>\n              {displayOnLabel}\n            </span>\n          )}\n        </div>\n        \n        {/* Label and description */}\n        {(displayLabel || displayDescription) && (\n          <div className=\"flex-1 min-w-0\">\n            {displayLabel && (\n              <div className={cn(\n                'font-medium text-gray-900',\n                currentSize.label,\n                disabled && 'text-gray-400',\n                labelClassName\n              )}>\n                {displayLabel}\n              </div>\n            )}\n            \n            {displayDescription && (\n              <div className={cn(\n                'text-gray-600 mt-1',\n                currentSize.description,\n                disabled && 'text-gray-400'\n              )}>\n                {displayDescription}\n              </div>\n            )}\n          </div>\n        )}\n      </label>\n      \n      {/* Error message */}\n      {error && displayErrorMessage && (\n        <div className={cn(\n          'text-red-600 flex items-center gap-1',\n          currentSize.description\n        )}>\n          <span>{displayErrorMessage}</span>\n        </div>\n      )}\n      \n      {/* Success message */}\n      {success && displaySuccessMessage && (\n        <div className={cn(\n          'text-green-600 flex items-center gap-1',\n          currentSize.description\n        )}>\n          <span>{displaySuccessMessage}</span>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausSwitch.displayName = 'BirhausSwitch'\n\n// BIRHAUS: Hook for managing checkbox/switch state\nexport function useBirhausCheckbox(initialChecked = false) {\n  const [checked, setChecked] = useState(initialChecked)\n  const [error, setError] = useState(false)\n  const [success, setSuccess] = useState(false)\n  \n  const toggle = () => setChecked(prev => !prev)\n  const reset = () => {\n    setChecked(initialChecked)\n    setError(false)\n    setSuccess(false)\n  }\n  \n  return {\n    checked,\n    setChecked,\n    error,\n    setError,\n    success,\n    setSuccess,\n    toggle,\n    reset\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, ReactNode, useState, useMemo } from 'react'\nimport { AlertTriangle, ChevronDown } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Tabs Component\n * \n * Enhanced tabs implementing BIRHAUS 4-3-1 Rule:\n * - Maximum 4 tabs for optimal cognitive load\n * - Spanish-first labeling\n * - Progressive disclosure for additional tabs\n * - Accessibility-first design (WCAG AA+)\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausTabItem {\n  id: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  content: ReactNode\n  disabled?: boolean\n  icon?: ReactNode\n  badge?: string | number\n  cognitiveWeight?: number // 1-10 scale for tab complexity\n}\n\nexport interface BirhausTabsProps {\n  // Tab data\n  tabs: BirhausTabItem[]\n  \n  // State\n  activeTab?: string\n  onTabChange?: (tabId: string) => void\n  \n  // BIRHAUS 4-3-1 Rule enforcement\n  maxVisibleTabs?: number\n  showCognitiveWarning?: boolean\n  \n  // Layout variants\n  variant?: 'default' | 'pills' | 'underline' | 'bordered'\n  size?: 'sm' | 'md' | 'lg'\n  orientation?: 'horizontal' | 'vertical'\n  \n  // Behavior\n  activateOnHover?: boolean\n  lazy?: boolean // Lazy load tab content\n  \n  // Overflow handling\n  overflowBehavior?: 'dropdown' | 'scroll' | 'wrap'\n  \n  // Content layout\n  contentPadding?: boolean\n  \n  // Styling\n  className?: string\n  tabListClassName?: string\n  tabClassName?: string\n  contentClassName?: string\n}\n\nexport const BirhausTabs = forwardRef<HTMLDivElement, BirhausTabsProps>(({\n  // Data\n  tabs,\n  \n  // State\n  activeTab,\n  onTabChange,\n  \n  // BIRHAUS settings\n  maxVisibleTabs = 4,\n  showCognitiveWarning = true,\n  \n  // Layout\n  variant = 'default',\n  size = 'md',\n  orientation = 'horizontal',\n  \n  // Behavior\n  activateOnHover = false,\n  lazy = false,\n  \n  // Overflow\n  overflowBehavior = 'dropdown',\n  \n  // Content\n  contentPadding = true,\n  \n  // Styling\n  className,\n  tabListClassName,\n  tabClassName,\n  contentClassName\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [internalActiveTab, setInternalActiveTab] = useState(tabs[0]?.id || '')\n  const [showOverflowMenu, setShowOverflowMenu] = useState(false)\n  \n  const currentActiveTab = activeTab !== undefined ? activeTab : internalActiveTab\n  const isControlled = activeTab !== undefined\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  // BIRHAUS: Calculate visible and overflow tabs\n  const { visibleTabs, overflowTabs, cognitiveLoad } = useMemo(() => {\n    const enabledTabs = tabs.filter(tab => !tab.disabled)\n    \n    // Sort by cognitive weight (lower weight = higher priority)\n    const sortedTabs = [...enabledTabs].sort((a, b) => {\n      const aWeight = a.cognitiveWeight || 5\n      const bWeight = b.cognitiveWeight || 5\n      return aWeight - bWeight\n    })\n    \n    const visible = sortedTabs.slice(0, maxVisibleTabs)\n    const overflow = sortedTabs.slice(maxVisibleTabs)\n    \n    const load = visible.length > 4 ? 'high' : \n                 visible.length > 3 ? 'medium' : 'low'\n    \n    return {\n      visibleTabs: visible,\n      overflowTabs: overflow,\n      cognitiveLoad: load\n    }\n  }, [tabs, maxVisibleTabs])\n  \n  // BIRHAUS: Warn about cognitive overload\n  if (showCognitiveWarning && visibleTabs.length > 4) {\n    console.warn(`BIRHAUS 4-3-1 Rule Warning: Tabs show ${visibleTabs.length} items (recommended: max 4)`)\n  }\n  \n  // BIRHAUS: Handle tab change\n  const handleTabChange = (tabId: string) => {\n    const tab = tabs.find(t => t.id === tabId)\n    if (tab && !tab.disabled) {\n      if (!isControlled) {\n        setInternalActiveTab(tabId)\n      }\n      onTabChange?.(tabId)\n      setShowOverflowMenu(false)\n    }\n  }\n  \n  // BIRHAUS: Handle hover activation\n  const handleTabHover = (tabId: string) => {\n    if (activateOnHover) {\n      handleTabChange(tabId)\n    }\n  }\n  \n  // BIRHAUS: Get active tab content\n  const activeTabData = tabs.find(tab => tab.id === currentActiveTab)\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: {\n      tab: 'px-3 py-1.5 text-sm',\n      content: 'p-3',\n      badge: 'text-xs px-1.5 py-0.5'\n    },\n    md: {\n      tab: 'px-4 py-2 text-base',\n      content: 'p-4',\n      badge: 'text-xs px-2 py-1'\n    },\n    lg: {\n      tab: 'px-6 py-3 text-lg',\n      content: 'p-6',\n      badge: 'text-sm px-2.5 py-1'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      tabList: 'border-b border-gray-200',\n      tab: 'border-b-2 border-transparent hover:border-gray-300',\n      activeTab: 'border-blue-600 text-blue-600',\n      inactiveTab: 'text-gray-500 hover:text-gray-700'\n    },\n    pills: {\n      tabList: 'bg-gray-100 rounded-lg p-1',\n      tab: 'rounded-md transition-colors',\n      activeTab: 'bg-white text-gray-900 shadow-sm',\n      inactiveTab: 'text-gray-600 hover:text-gray-900 hover:bg-white/50'\n    },\n    underline: {\n      tabList: '',\n      tab: 'border-b-2 border-transparent',\n      activeTab: 'border-blue-600 text-blue-600',\n      inactiveTab: 'text-gray-500 hover:text-gray-700 hover:border-gray-300'\n    },\n    bordered: {\n      tabList: 'border border-gray-200 rounded-t-lg',\n      tab: 'border-r border-gray-200 last:border-r-0',\n      activeTab: 'bg-white text-gray-900 border-b-white',\n      inactiveTab: 'bg-gray-50 text-gray-600 hover:bg-gray-100'\n    }\n  }\n  \n  const orientationClasses = {\n    horizontal: {\n      container: 'w-full',\n      tabList: 'flex',\n      content: 'w-full'\n    },\n    vertical: {\n      container: 'flex gap-4',\n      tabList: 'flex flex-col min-w-48',\n      content: 'flex-1'\n    }\n  }\n  \n  const currentSize = safeAccess(sizeClasses, size, sizeClasses.md)\n  const currentVariant = safeAccess(variantClasses, variant, variantClasses.default)\n  const currentOrientation = safeAccess(orientationClasses, orientation, orientationClasses.horizontal)\n  \n  const renderTab = (tab: BirhausTabItem, isActive: boolean) => {\n    const displayLabel = resolveText(tab.labelEs, tab.labelEn, tab.label)\n    \n    return (\n      <button\n        key={tab.id}\n        onClick={() => handleTabChange(tab.id)}\n        onMouseEnter={() => handleTabHover(tab.id)}\n        disabled={tab.disabled}\n        className={cn(\n          // Base styles\n          'relative inline-flex items-center gap-2 font-medium transition-colors duration-200',\n          'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2',\n          \n          // Size\n          currentSize.tab,\n          \n          // Variant\n          currentVariant.tab,\n          \n          // State\n          isActive ? currentVariant.activeTab : currentVariant.inactiveTab,\n          \n          // Disabled\n          tab.disabled && 'opacity-50 cursor-not-allowed',\n          \n          // Custom classes\n          tabClassName\n        )}\n        role=\"tab\"\n        aria-selected={isActive}\n        aria-controls={`tabpanel-${tab.id}`}\n        id={`tab-${tab.id}`}\n        data-birhaus-component=\"tab\"\n        data-active={isActive}\n      >\n        {/* Icon */}\n        {tab.icon && (\n          <span className=\"flex-shrink-0\">\n            {tab.icon}\n          </span>\n        )}\n        \n        {/* Label */}\n        <span>{displayLabel}</span>\n        \n        {/* Badge */}\n        {tab.badge && (\n          <span className={cn(\n            'inline-flex items-center justify-center rounded-full bg-gray-200 text-gray-800',\n            currentSize.badge,\n            isActive && 'bg-blue-100 text-blue-800'\n          )}>\n            {tab.badge}\n          </span>\n        )}\n      </button>\n    )\n  }\n  \n  return (\n    <div \n      ref={ref}\n      className={cn(currentOrientation.container, className)}\n      data-birhaus-component=\"tabs\"\n      data-cognitive-load={cognitiveLoad}\n      data-orientation={orientation}\n    >\n      {/* BIRHAUS: Cognitive load warning */}\n      {showCognitiveWarning && cognitiveLoad === 'high' && (\n        <div className=\"flex items-center gap-2 p-3 mb-4 bg-yellow-50 border border-yellow-200 rounded-lg\">\n          <AlertTriangle className=\"h-4 w-4 text-yellow-600\" />\n          <span className=\"text-sm text-yellow-800\">\n            Mostrando {visibleTabs.length} pestañas (máximo recomendado: 4). \n            {overflowTabs.length > 0 && ` ${overflowTabs.length} pestañas en menú desplegable.`}\n          </span>\n        </div>\n      )}\n      \n      {/* Tab List */}\n      <div \n        className={cn(\n          currentOrientation.tabList,\n          currentVariant.tabList,\n          tabListClassName\n        )}\n        role=\"tablist\"\n        aria-orientation={orientation}\n      >\n        {/* Visible tabs */}\n        {visibleTabs.map(tab => renderTab(tab, tab.id === currentActiveTab))}\n        \n        {/* Overflow menu */}\n        {overflowTabs.length > 0 && overflowBehavior === 'dropdown' && (\n          <div className=\"relative\">\n            <button\n              onClick={() => setShowOverflowMenu(!showOverflowMenu)}\n              className={cn(\n                'inline-flex items-center gap-2 font-medium transition-colors duration-200',\n                'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2',\n                currentSize.tab,\n                currentVariant.tab,\n                currentVariant.inactiveTab\n              )}\n            >\n              <span>Más</span>\n              <ChevronDown className=\"h-4 w-4\" />\n            </button>\n            \n            {/* Dropdown menu */}\n            {showOverflowMenu && (\n              <div className=\"absolute top-full left-0 mt-1 w-48 bg-white border border-gray-200 rounded-lg shadow-lg z-10\">\n                {overflowTabs.map(tab => {\n                  const displayLabel = resolveText(tab.labelEs, tab.labelEn, tab.label)\n                  const isActive = tab.id === currentActiveTab\n                  \n                  return (\n                    <button\n                      key={tab.id}\n                      onClick={() => handleTabChange(tab.id)}\n                      disabled={tab.disabled}\n                      className={cn(\n                        'w-full flex items-center gap-2 px-4 py-2 text-left hover:bg-gray-50',\n                        'focus:outline-none focus:bg-gray-50',\n                        isActive && 'bg-blue-50 text-blue-600',\n                        tab.disabled && 'opacity-50 cursor-not-allowed'\n                      )}\n                    >\n                      {tab.icon}\n                      <span>{displayLabel}</span>\n                      {tab.badge && (\n                        <span className=\"ml-auto text-xs bg-gray-200 text-gray-800 px-1.5 py-0.5 rounded-full\">\n                          {tab.badge}\n                        </span>\n                      )}\n                    </button>\n                  )\n                })}\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n      \n      {/* Tab Content */}\n      <div \n        className={cn(\n          currentOrientation.content,\n          contentPadding && currentSize.content,\n          contentClassName\n        )}\n      >\n        {activeTabData && (\n          <div\n            role=\"tabpanel\"\n            id={`tabpanel-${activeTabData.id}`}\n            aria-labelledby={`tab-${activeTabData.id}`}\n            tabIndex={0}\n          >\n            {lazy ? (\n              // Lazy load: only render active tab content\n              activeTabData.content\n            ) : (\n              // Render all content but hide inactive\n              tabs.map(tab => (\n                <div\n                  key={tab.id}\n                  className={tab.id === currentActiveTab ? 'block' : 'hidden'}\n                  role=\"tabpanel\"\n                  id={`tabpanel-${tab.id}`}\n                  aria-labelledby={`tab-${tab.id}`}\n                  tabIndex={tab.id === currentActiveTab ? 0 : -1}\n                >\n                  {tab.content}\n                </div>\n              ))\n            )}\n          </div>\n        )}\n      </div>\n      \n      {/* Click overlay to close overflow menu */}\n      {showOverflowMenu && (\n        <div\n          className=\"fixed inset-0 z-0\"\n          onClick={() => setShowOverflowMenu(false)}\n        />\n      )}\n    </div>\n  )\n})\n\nBirhausTabs.displayName = 'BirhausTabs'\n\n// BIRHAUS: Individual Tab component for composable usage\nexport interface BirhausTabProps {\n  id: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  disabled?: boolean\n  icon?: ReactNode\n  badge?: string | number\n  cognitiveWeight?: number\n  children: ReactNode\n}\n\nexport const BirhausTab = ({ children }: BirhausTabProps) => {\n  return <>{children}</>\n}\n\nBirhausTab.displayName = 'BirhausTab'\n\n// BIRHAUS: Hook for managing tabs state\nexport function useBirhausTabs(initialActiveTab?: string) {\n  const [activeTab, setActiveTab] = useState(initialActiveTab || '')\n  const [tabHistory, setTabHistory] = useState<string[]>([])\n  \n  const changeTab = (tabId: string) => {\n    setTabHistory(prev => [...prev.filter(id => id !== tabId), activeTab].filter(Boolean))\n    setActiveTab(tabId)\n  }\n  \n  const goBack = () => {\n    if (tabHistory.length > 0) {\n      const previousTab = tabHistory[tabHistory.length - 1]\n      setTabHistory(prev => prev.slice(0, -1))\n      setActiveTab(previousTab)\n      return previousTab\n    }\n    return null\n  }\n  \n  const reset = (defaultTab: string) => {\n    setActiveTab(defaultTab)\n    setTabHistory([])\n  }\n  \n  return {\n    activeTab,\n    setActiveTab: changeTab,\n    tabHistory,\n    goBack,\n    reset\n  }\n}\n\n// BIRHAUS: Helper to create tab items with Spanish-first labels\nexport function createBirhausTabItem(\n  id: string,\n  labelEs: string,\n  content: ReactNode,\n  options?: {\n    labelEn?: string\n    icon?: ReactNode\n    badge?: string | number\n    disabled?: boolean\n    cognitiveWeight?: number\n  }\n): BirhausTabItem {\n  return {\n    id,\n    label: labelEs,\n    labelEs,\n    labelEn: options?.labelEn,\n    content,\n    icon: options?.icon,\n    badge: options?.badge,\n    disabled: options?.disabled || false,\n    cognitiveWeight: options?.cognitiveWeight || 5\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, useState, useRef, useEffect, useMemo } from 'react'\nimport { Search, ChevronDown, X, Check, AlertTriangle } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Combobox Component\n * \n * Enhanced combobox implementing BIRHAUS Principle #1: Miller's Law (7±2)\n * \n * Features:\n * - Maximum 7 visible options for cognitive load optimization\n * - Intelligent filtering and search\n * - Spanish-first labeling\n * - Progressive disclosure for large option sets\n * - Accessibility-first design (WCAG AA+)\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausComboboxOption {\n  value: string\n  label: string\n  labelEs?: string\n  labelEn?: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  disabled?: boolean\n  group?: string\n  icon?: React.ReactNode\n  searchTerms?: string[] // Additional terms for filtering\n}\n\nexport interface BirhausComboboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n  // Options\n  options: BirhausComboboxOption[]\n  \n  // Value handling\n  value?: string\n  onValueChange?: (value: string) => void\n  \n  // BIRHAUS Principle #7: Bilingual by design\n  placeholder?: string\n  placeholderEs?: string\n  placeholderEn?: string\n  \n  emptyMessage?: string\n  emptyMessageEs?: string\n  emptyMessageEn?: string\n  \n  searchPlaceholder?: string\n  searchPlaceholderEs?: string\n  searchPlaceholderEn?: string\n  \n  // Miller's Law enforcement\n  maxVisibleOptions?: number\n  showCognitiveWarning?: boolean\n  \n  // Behavior\n  searchable?: boolean\n  clearable?: boolean\n  disabled?: boolean\n  loading?: boolean\n  \n  // Filtering\n  filterFunction?: (option: BirhausComboboxOption, search: string) => boolean\n  \n  // Styling\n  variant?: 'default' | 'success' | 'warning' | 'error'\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Error handling\n  error?: boolean\n  errorMessage?: string\n  errorMessageEs?: string\n  errorMessageEn?: string\n  \n  // Validation\n  required?: boolean\n  \n  // Positioning\n  dropdownPosition?: 'bottom' | 'top' | 'auto'\n  \n  // Styling\n  className?: string\n  dropdownClassName?: string\n}\n\nexport const BirhausCombobox = forwardRef<HTMLInputElement, BirhausComboboxProps>(({\n  // Options\n  options,\n  \n  // Value\n  value,\n  onValueChange,\n  \n  // Content (Spanish-first)\n  placeholder,\n  placeholderEs,\n  placeholderEn,\n  emptyMessage,\n  emptyMessageEs,\n  emptyMessageEn,\n  searchPlaceholder,\n  searchPlaceholderEs,\n  searchPlaceholderEn,\n  \n  // Miller's Law settings\n  maxVisibleOptions = 7,\n  showCognitiveWarning = true,\n  \n  // Behavior\n  searchable = true,\n  clearable = true,\n  disabled = false,\n  loading = false,\n  \n  // Filtering\n  filterFunction,\n  \n  // Styling\n  variant = 'default',\n  size = 'md',\n  \n  // Error handling\n  error = false,\n  errorMessage,\n  errorMessageEs,\n  errorMessageEn,\n  \n  // Validation\n  required = false,\n  \n  // Positioning\n  dropdownPosition = 'auto',\n  \n  // Styling\n  className,\n  dropdownClassName,\n  \n  // Standard props\n  ...props\n}, ref) => {\n  \n  // BIRHAUS: State management\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchTerm, setSearchTerm] = useState('')\n  const [focusedIndex, setFocusedIndex] = useState(-1)\n  const [internalValue, setInternalValue] = useState(value || '')\n  \n  const currentValue = value !== undefined ? value : internalValue\n  const isControlled = value !== undefined\n  \n  // Refs\n  const containerRef = useRef<HTMLDivElement>(null)\n  const inputRef = useRef<HTMLInputElement>(null)\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const resolveText = (spanish?: string, english?: string, fallback?: string) => {\n    return spanish || english || fallback || ''\n  }\n  \n  const displayPlaceholder = resolveText(placeholderEs, placeholderEn, placeholder || 'Seleccionar opción...')\n  const displayEmptyMessage = resolveText(emptyMessageEs, emptyMessageEn, emptyMessage || 'No se encontraron opciones')\n  const displaySearchPlaceholder = resolveText(searchPlaceholderEs, searchPlaceholderEn, searchPlaceholder || 'Buscar...')\n  const displayErrorMessage = resolveText(errorMessageEs, errorMessageEn, errorMessage)\n  \n  // BIRHAUS: Default filter function\n  const defaultFilter = (option: BirhausComboboxOption, search: string) => {\n    const searchLower = search.toLowerCase()\n    const label = resolveText(option.labelEs, option.labelEn, option.label).toLowerCase()\n    const description = resolveText(option.descriptionEs, option.descriptionEn, option.description)?.toLowerCase() || ''\n    const additionalTerms = option.searchTerms?.join(' ').toLowerCase() || ''\n    \n    return label.includes(searchLower) || \n           description.includes(searchLower) || \n           additionalTerms.includes(searchLower)\n  }\n  \n  const filterFunc = filterFunction || defaultFilter\n  \n  // BIRHAUS: Filtered and visible options\n  const { filteredOptions, visibleOptions, hiddenCount, cognitiveLoad } = useMemo(() => {\n    const filtered = options.filter(option => \n      !option.disabled && \n      (searchTerm === '' || filterFunc(option, searchTerm))\n    )\n    \n    const visible = filtered.slice(0, maxVisibleOptions)\n    const hidden = filtered.length - visible.length\n    \n    const load = visible.length > 7 ? 'high' : \n                 visible.length > 5 ? 'medium' : 'low'\n    \n    return {\n      filteredOptions: filtered,\n      visibleOptions: visible,\n      hiddenCount: hidden,\n      cognitiveLoad: load\n    }\n  }, [options, searchTerm, maxVisibleOptions, filterFunc])\n  \n  // BIRHAUS: Warn about cognitive overload\n  if (showCognitiveWarning && visibleOptions.length > 7) {\n    console.warn(`BIRHAUS Miller's Law Warning: Combobox shows ${visibleOptions.length} options (recommended: max 7)`)\n  }\n  \n  // BIRHAUS: Get selected option\n  const selectedOption = options.find(option => option.value === currentValue)\n  \n  // BIRHAUS: Handle value change\n  const handleValueChange = (newValue: string) => {\n    if (!isControlled) {\n      setInternalValue(newValue)\n    }\n    onValueChange?.(newValue)\n    setIsOpen(false)\n    setSearchTerm('')\n    setFocusedIndex(-1)\n  }\n  \n  // BIRHAUS: Handle clear\n  const handleClear = () => {\n    handleValueChange('')\n  }\n  \n  // BIRHAUS: Handle keyboard navigation\n  const handleKeyDown = (event: React.KeyboardEvent) => {\n    if (disabled) return\n    \n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault()\n        if (!isOpen) {\n          setIsOpen(true)\n        } else {\n          setFocusedIndex(prev => \n            prev < visibleOptions.length - 1 ? prev + 1 : 0\n          )\n        }\n        break\n        \n      case 'ArrowUp':\n        event.preventDefault()\n        if (isOpen) {\n          setFocusedIndex(prev => \n            prev > 0 ? prev - 1 : visibleOptions.length - 1\n          )\n        }\n        break\n        \n      case 'Enter':\n        event.preventDefault()\n        if (isOpen && focusedIndex >= 0) {\n          const option = safeArrayAccess(visibleOptions, focusedIndex, null)\n          if (option) {\n            handleValueChange(option.value)\n          }\n        } else {\n          setIsOpen(!isOpen)\n        }\n        break\n        \n      case 'Escape':\n        setIsOpen(false)\n        setFocusedIndex(-1)\n        inputRef.current?.blur()\n        break\n        \n      case 'Tab':\n        setIsOpen(false)\n        break\n    }\n  }\n  \n  // BIRHAUS: Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n        setFocusedIndex(-1)\n      }\n    }\n    \n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n  \n  // BIRHAUS Principle #9: Consistency via tokens\n  const sizeClasses = {\n    sm: {\n      input: 'px-3 py-1.5 text-sm',\n      option: 'px-3 py-1.5 text-sm',\n      icon: 'h-4 w-4'\n    },\n    md: {\n      input: 'px-4 py-2 text-base',\n      option: 'px-4 py-2 text-base',\n      icon: 'h-5 w-5'\n    },\n    lg: {\n      input: 'px-5 py-3 text-lg',\n      option: 'px-5 py-3 text-lg',\n      icon: 'h-6 w-6'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      border: 'border-gray-300',\n      focus: 'focus:border-blue-500 focus:ring-blue-500'\n    },\n    success: {\n      border: 'border-green-300',\n      focus: 'focus:border-green-500 focus:ring-green-500'\n    },\n    warning: {\n      border: 'border-yellow-300',\n      focus: 'focus:border-yellow-500 focus:ring-yellow-500'\n    },\n    error: {\n      border: 'border-red-300',\n      focus: 'focus:border-red-500 focus:ring-red-500'\n    }\n  }\n  \n  const currentSize = safeAccess(sizeClasses, size, sizeClasses.md)\n  const currentVariant = safeAccess(variantClasses, error ? 'error' : variant, variantClasses.default)\n  \n  const inputClasses = cn(\n    // Base styles\n    'w-full rounded-lg border bg-white transition-colors duration-200',\n    'focus:outline-none focus:ring-2 focus:ring-offset-0',\n    \n    // Size\n    currentSize.input,\n    \n    // Variant\n    currentVariant.border,\n    currentVariant.focus,\n    \n    // State\n    disabled && 'bg-gray-50 text-gray-400 cursor-not-allowed',\n    \n    // Custom classes\n    className\n  )\n  \n  return (\n    <div className=\"space-y-2\">\n      {/* BIRHAUS: Cognitive load warning */}\n      {showCognitiveWarning && cognitiveLoad === 'high' && searchTerm && (\n        <div className=\"flex items-center gap-2 p-2 bg-yellow-50 border border-yellow-200 rounded\">\n          <AlertTriangle className=\"h-4 w-4 text-yellow-600\" />\n          <span className=\"text-xs text-yellow-800\">\n            Mostrando {visibleOptions.length} opciones (máximo recomendado: 7).\n            {hiddenCount > 0 && ` ${hiddenCount} opciones ocultas.`}\n          </span>\n        </div>\n      )}\n      \n      {/* Combobox container */}\n      <div ref={containerRef} className=\"relative\">\n        {/* Input */}\n        <div className=\"relative\">\n          <input\n            ref={inputRef}\n            type=\"text\"\n            value={searchable && isOpen ? searchTerm : (selectedOption ? resolveText(selectedOption.labelEs, selectedOption.labelEn, selectedOption.label) : '')}\n            onChange={(e) => {\n              if (searchable) {\n                setSearchTerm(e.target.value)\n                setIsOpen(true)\n                setFocusedIndex(-1)\n              }\n            }}\n            onFocus={() => !disabled && setIsOpen(true)}\n            onKeyDown={handleKeyDown}\n            placeholder={displayPlaceholder}\n            disabled={disabled}\n            required={required}\n            className={inputClasses}\n            role=\"combobox\"\n            aria-expanded={isOpen}\n            aria-haspopup=\"listbox\"\n            aria-owns=\"combobox-options\"\n            data-birhaus-component=\"combobox\"\n            data-cognitive-load={cognitiveLoad}\n            {...props}\n          />\n          \n          {/* Icons */}\n          <div className=\"absolute inset-y-0 right-0 flex items-center gap-1 pr-3\">\n            {loading && (\n              <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-600\" />\n            )}\n            \n            {clearable && currentValue && !loading && (\n              <button\n                onClick={handleClear}\n                disabled={disabled}\n                className=\"text-gray-400 hover:text-gray-600 disabled:opacity-50\"\n                aria-label=\"Limpiar selección\"\n              >\n                <X className={currentSize.icon} />\n              </button>\n            )}\n            \n            <button\n              onClick={() => !disabled && setIsOpen(!isOpen)}\n              disabled={disabled}\n              className=\"text-gray-400 hover:text-gray-600 disabled:opacity-50\"\n              aria-label={isOpen ? 'Cerrar opciones' : 'Abrir opciones'}\n            >\n              <ChevronDown className={cn(\n                currentSize.icon,\n                'transition-transform duration-200',\n                isOpen && 'transform rotate-180'\n              )} />\n            </button>\n          </div>\n        </div>\n        \n        {/* Dropdown */}\n        {isOpen && (\n          <div \n            ref={dropdownRef}\n            className={cn(\n              'absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-lg max-h-60 overflow-auto',\n              dropdownPosition === 'top' && 'bottom-full mb-1 mt-0',\n              dropdownClassName\n            )}\n            id=\"combobox-options\"\n            role=\"listbox\"\n          >\n            {visibleOptions.length === 0 ? (\n              <div className={cn(\n                'text-gray-500 text-center',\n                currentSize.option\n              )}>\n                {displayEmptyMessage}\n              </div>\n            ) : (\n              <>\n                {visibleOptions.map((option, index) => {\n                  const displayLabel = resolveText(option.labelEs, option.labelEn, option.label)\n                  const displayDescription = resolveText(option.descriptionEs, option.descriptionEn, option.description)\n                  const isSelected = option.value === currentValue\n                  const isFocused = index === focusedIndex\n                  \n                  return (\n                    <div\n                      key={option.value}\n                      onClick={() => handleValueChange(option.value)}\n                      className={cn(\n                        'cursor-pointer flex items-center gap-3 transition-colors duration-150',\n                        currentSize.option,\n                        \n                        // State styles\n                        isSelected && 'bg-blue-50 text-blue-700',\n                        isFocused && 'bg-gray-100',\n                        !isSelected && !isFocused && 'hover:bg-gray-50',\n                        \n                        // Group separation\n                        index > 0 && visibleOptions[index - 1]?.group !== option.group && 'border-t border-gray-100'\n                      )}\n                      role=\"option\"\n                      aria-selected={isSelected}\n                      data-value={option.value}\n                    >\n                      {/* Icon */}\n                      {option.icon && (\n                        <span className=\"flex-shrink-0 text-gray-400\">\n                          {option.icon}\n                        </span>\n                      )}\n                      \n                      {/* Content */}\n                      <div className=\"flex-1 min-w-0\">\n                        <div className=\"font-medium\">{displayLabel}</div>\n                        {displayDescription && (\n                          <div className=\"text-sm text-gray-500 truncate\">\n                            {displayDescription}\n                          </div>\n                        )}\n                      </div>\n                      \n                      {/* Selected indicator */}\n                      {isSelected && (\n                        <Check className=\"h-4 w-4 text-blue-600 flex-shrink-0\" />\n                      )}\n                    </div>\n                  )\n                })}\n                \n                {/* Show more indicator */}\n                {hiddenCount > 0 && (\n                  <div className={cn(\n                    'text-gray-500 text-center border-t border-gray-100 bg-gray-50',\n                    currentSize.option\n                  )}>\n                    +{hiddenCount} opciones más (refina la búsqueda)\n                  </div>\n                )}\n              </>\n            )}\n          </div>\n        )}\n      </div>\n      \n      {/* Error message */}\n      {error && displayErrorMessage && (\n        <div className=\"text-red-600 text-sm flex items-center gap-1\">\n          <span>{displayErrorMessage}</span>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCombobox.displayName = 'BirhausCombobox'\n\n// BIRHAUS: Hook for managing combobox state\nexport function useBirhausCombobox(initialValue = '') {\n  const [value, setValue] = useState(initialValue)\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchTerm, setSearchTerm] = useState('')\n  \n  const reset = () => {\n    setValue(initialValue)\n    setIsOpen(false)\n    setSearchTerm('')\n  }\n  \n  return {\n    value,\n    setValue,\n    isOpen,\n    setIsOpen,\n    searchTerm,\n    setSearchTerm,\n    reset\n  }\n}\n\n// BIRHAUS: Helper to create combobox options with Spanish-first labels\nexport function createBirhausComboboxOption(\n  value: string,\n  labelEs: string,\n  options?: {\n    labelEn?: string\n    descriptionEs?: string\n    descriptionEn?: string\n    disabled?: boolean\n    group?: string\n    icon?: React.ReactNode\n    searchTerms?: string[]\n  }\n): BirhausComboboxOption {\n  return {\n    value,\n    label: labelEs,\n    labelEs,\n    labelEn: options?.labelEn,\n    descriptionEs: options?.descriptionEs,\n    descriptionEn: options?.descriptionEn,\n    disabled: options?.disabled || false,\n    group: options?.group,\n    icon: options?.icon,\n    searchTerms: options?.searchTerms\n  }\n}\n\n// Components and utilities are exported via individual export declarations above","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useMemo, useCallback } from 'react'\nimport { ChevronLeft, ChevronRight, Calendar, X, RotateCcw } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Calendar Component\n * \n * Spanish-first date picker implementing all 10 BIRHAUS principles:\n * - Cognitive load reduction: Show 1 month, max 3 actions\n * - Spanish-first: Meses y días en español\n * - Undo functionality: 10-second undo for date changes\n * - Accessibility: WCAG AA+ keyboard navigation\n * - Performance: Optimized with React.memo and useMemo\n * - Progressive disclosure: Year/month selection on demand\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\n// Spanish date utilities following BIRHAUS Spanish-first principle\nconst MESES_ESPANOL = [\n  'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\n  'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\n]\n\nconst MESES_CORTOS_ESPANOL = [\n  'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',\n  'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'\n]\n\nconst DIAS_ESPANOL = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado']\nconst DIAS_CORTOS_ESPANOL = ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb']\n\ninterface UndoState {\n  previousDate: Date | null\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausCalendarProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // Date management\n  value?: Date | null\n  defaultValue?: Date | null\n  onChange?: (date: Date | null) => void\n  \n  // Validation\n  minDate?: Date\n  maxDate?: Date\n  disabledDates?: Date[]\n  disabledDaysOfWeek?: number[] // 0 = Sunday, 6 = Saturday\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  showTodayButton?: boolean\n  showClearButton?: boolean\n  showMonthYearSelector?: boolean\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  onUndo?: (previousDate: Date | null) => void\n  \n  // BIRHAUS Principle #1: Form serves flow\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'minimal' | 'inline'\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  describedBy?: string\n  describedByEs?: string\n  describedByEn?: string\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Format and locale\n  dateFormat?: 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY-MM-DD'\n  locale?: 'es' | 'en'\n  firstDayOfWeek?: 0 | 1 // 0 = Sunday, 1 = Monday\n  \n  // Enhanced functionality\n  placeholder?: string\n  placeholderEs?: string\n  placeholderEn?: string\n  disabled?: boolean\n  required?: boolean\n  \n  // Cognitive load tracking\n  cognitiveWeight?: number\n  trackInteraction?: boolean\n  \n  // Event handlers\n  onFocus?: () => void\n  onBlur?: () => void\n  onMonthChange?: (month: number, year: number) => void\n  onYearChange?: (year: number) => void\n}\n\nexport const BirhausCalendar = forwardRef<HTMLDivElement, BirhausCalendarProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Date management\n  value,\n  defaultValue,\n  onChange,\n  \n  // Validation\n  minDate,\n  maxDate,\n  disabledDates = [],\n  disabledDaysOfWeek = [],\n  \n  // Progressive disclosure\n  showTodayButton = true,\n  showClearButton = true,\n  showMonthYearSelector = false,\n  \n  // Undo functionality\n  enableUndo = true,\n  undoTimeoutMs = 10000,\n  onUndo,\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Accessibility\n  describedBy,\n  describedByEs,\n  describedByEn,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  \n  // Format and locale\n  dateFormat = 'DD/MM/YYYY',\n  locale = 'es',\n  firstDayOfWeek = 1, // Monday first (common in Latin America)\n  \n  // Enhanced functionality\n  placeholder,\n  placeholderEs,\n  placeholderEn,\n  disabled = false,\n  required = false,\n  \n  // Cognitive load\n  cognitiveWeight = 2,\n  trackInteraction = false,\n  \n  // Event handlers\n  onFocus,\n  onBlur,\n  onMonthChange,\n  onYearChange,\n  \n  ...props\n}, ref) => {\n  // State management\n  const [selectedDate, setSelectedDate] = useState<Date | null>(value || defaultValue || null)\n  const [currentMonth, setCurrentMonth] = useState<number>(() => \n    selectedDate?.getMonth() ?? new Date().getMonth()\n  )\n  const [currentYear, setCurrentYear] = useState<number>(() => \n    selectedDate?.getFullYear() ?? new Date().getFullYear()\n  )\n  const [isOpen, setIsOpen] = useState(false)\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousDate: null,\n    timeout: null,\n    isActive: false\n  })\n  \n  // Refs\n  const calendarRef = useRef<HTMLDivElement>(null)\n  const interactionStartTime = useRef<number>()\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, 'Seleccionar fecha')\n  const displayPlaceholder = getDisplayText(placeholder, placeholderEs, placeholderEn, 'DD/MM/AAAA')\n  const displayError = getDisplayText(error, errorEs, errorEn, '')\n  const displayDescribedBy = getDisplayText(describedBy, describedByEs, describedByEn, '')\n  \n  // Format date for display\n  const formatDate = useCallback((date: Date | null): string => {\n    if (!date) return ''\n    \n    const day = date.getDate().toString().padStart(2, '0')\n    const month = (date.getMonth() + 1).toString().padStart(2, '0')\n    const year = date.getFullYear().toString()\n    \n    switch (dateFormat) {\n      case 'MM/DD/YYYY':\n        return `${month}/${day}/${year}`\n      case 'YYYY-MM-DD':\n        return `${year}-${month}-${day}`\n      case 'DD/MM/YYYY':\n      default:\n        return `${day}/${month}/${year}`\n    }\n  }, [dateFormat])\n  \n  // Check if date is disabled\n  const isDateDisabled = useCallback((date: Date): boolean => {\n    if (disabled) return true\n    if (minDate && date < minDate) return true\n    if (maxDate && date > maxDate) return true\n    if (disabledDaysOfWeek.includes(date.getDay())) return true\n    if (disabledDates.some(disabledDate => \n      date.toDateString() === disabledDate.toDateString()\n    )) return true\n    return false\n  }, [disabled, minDate, maxDate, disabledDaysOfWeek, disabledDates])\n  \n  // Generate calendar days for current month\n  const calendarDays = useMemo(() => {\n    const firstDayOfMonth = new Date(currentYear, currentMonth, 1)\n    const lastDayOfMonth = new Date(currentYear, currentMonth + 1, 0)\n    const firstDayOfWeekInMonth = (firstDayOfMonth.getDay() - firstDayOfWeek + 7) % 7\n    \n    const days: (Date | null)[] = []\n    \n    // Add empty cells for days from previous month\n    for (let i = 0; i < firstDayOfWeekInMonth; i++) {\n      days.push(null)\n    }\n    \n    // Add days of current month\n    for (let day = 1; day <= lastDayOfMonth.getDate(); day++) {\n      days.push(new Date(currentYear, currentMonth, day))\n    }\n    \n    return days\n  }, [currentMonth, currentYear, firstDayOfWeek])\n  \n  // BIRHAUS Principle #5: Undo functionality\n  const handleDateChange = useCallback((newDate: Date | null) => {\n    if (enableUndo && selectedDate !== newDate) {\n      // Clear existing timeout\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      \n      // Set up new undo state\n      const timeout = setTimeout(() => {\n        setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n      }, undoTimeoutMs)\n      \n      setUndoState({\n        previousDate: selectedDate,\n        timeout,\n        isActive: true\n      })\n    }\n    \n    setSelectedDate(newDate)\n    onChange?.(newDate)\n    \n    // Track cognitive load if enabled\n    if (trackInteraction && interactionStartTime.current) {\n      const interactionTime = Date.now() - interactionStartTime.current\n      console.debug('[BIRHAUS] Calendar interaction time:', interactionTime, 'ms')\n    }\n  }, [selectedDate, enableUndo, undoTimeoutMs, onChange, trackInteraction])\n  \n  // Handle undo action\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setSelectedDate(undoState.previousDate)\n      onChange?.(undoState.previousDate)\n      onUndo?.(undoState.previousDate)\n      setUndoState({ previousDate: null, timeout: null, isActive: false })\n    }\n  }, [undoState, onChange, onUndo])\n  \n  // Navigation handlers\n  const navigateMonth = useCallback((direction: 'prev' | 'next') => {\n    let newMonth = currentMonth\n    let newYear = currentYear\n    \n    if (direction === 'prev') {\n      newMonth = currentMonth === 0 ? 11 : currentMonth - 1\n      newYear = currentMonth === 0 ? currentYear - 1 : currentYear\n    } else {\n      newMonth = currentMonth === 11 ? 0 : currentMonth + 1\n      newYear = currentMonth === 11 ? currentYear + 1 : currentYear\n    }\n    \n    setCurrentMonth(newMonth)\n    setCurrentYear(newYear)\n    onMonthChange?.(newMonth, newYear)\n    \n    if (newYear !== currentYear) {\n      onYearChange?.(newYear)\n    }\n  }, [currentMonth, currentYear, onMonthChange, onYearChange])\n  \n  // Quick actions\n  const handleToday = useCallback(() => {\n    const today = new Date()\n    setCurrentMonth(today.getMonth())\n    setCurrentYear(today.getFullYear())\n    handleDateChange(today)\n  }, [handleDateChange])\n  \n  const handleClear = useCallback(() => {\n    handleDateChange(null)\n  }, [handleDateChange])\n  \n  // Keyboard navigation\n  const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n    if (!isOpen) return\n    \n    switch (event.key) {\n      case 'Escape':\n        setIsOpen(false)\n        onBlur?.()\n        break\n      case 'Enter':\n        if (selectedDate) {\n          setIsOpen(false)\n          onBlur?.()\n        }\n        break\n      case 'ArrowLeft':\n        event.preventDefault()\n        navigateMonth('prev')\n        break\n      case 'ArrowRight':\n        event.preventDefault()\n        navigateMonth('next')\n        break\n    }\n  }, [isOpen, selectedDate, navigateMonth, onBlur])\n  \n  // Effect: Sync external value changes\n  useEffect(() => {\n    if (value !== undefined) {\n      setSelectedDate(value)\n      if (value) {\n        setCurrentMonth(value.getMonth())\n        setCurrentYear(value.getFullYear())\n      }\n    }\n  }, [value])\n  \n  // Effect: Track interaction start time\n  useEffect(() => {\n    if (isOpen && trackInteraction) {\n      interactionStartTime.current = Date.now()\n    }\n  }, [isOpen, trackInteraction])\n  \n  // Cleanup undo timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes based on BIRHAUS tokens\n  const sizeClasses = {\n    sm: 'text-sm p-2',\n    md: 'text-base p-3',\n    lg: 'text-lg p-4'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-200 rounded-lg shadow-md',\n    minimal: 'bg-transparent border-none',\n    inline: 'bg-gray-50 border border-gray-100 rounded-md'\n  }\n  \n  return (\n    <div \n      ref={ref}\n      className={cn(\n        'birhaus-calendar relative',\n        safeAccess(sizeClasses, size, sizeClasses.md),\n        disabled && 'opacity-50 cursor-not-allowed'\n      )}\n      onKeyDown={handleKeyDown}\n      {...props}\n    >\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n        </label>\n      )}\n      \n      {/* Input Display */}\n      <div \n        className={cn(\n          'flex items-center justify-between cursor-pointer',\n          'border rounded-md px-3 py-2 bg-white',\n          error || displayError ? 'border-red-300' : 'border-gray-300',\n          'hover:border-gray-400 focus-within:border-primary-600',\n          'transition-colors duration-200',\n          disabled && 'cursor-not-allowed'\n        )}\n        onClick={() => !disabled && setIsOpen(!isOpen)}\n        onFocus={onFocus}\n      >\n        <span className={cn(\n          selectedDate ? 'text-gray-900' : 'text-gray-500'\n        )}>\n          {selectedDate ? formatDate(selectedDate) : displayPlaceholder}\n        </span>\n        <Calendar className=\"h-4 w-4 text-gray-400\" />\n      </div>\n      \n      {/* Error Message */}\n      {displayError && (\n        <p className=\"mt-1 text-sm text-red-600\">\n          {displayError}\n        </p>\n      )}\n      \n      {/* Calendar Popup */}\n      {isOpen && (\n        <div className={cn(\n          'absolute top-full left-0 z-50 mt-2',\n          safeAccess(variantClasses, variant, variantClasses.default),\n          'w-80 max-w-sm'\n        )}>\n          {/* Header with Navigation */}\n          <div className=\"flex items-center justify-between p-4 border-b border-gray-200\">\n            <button\n              type=\"button\"\n              onClick={() => navigateMonth('prev')}\n              className=\"p-1 rounded hover:bg-gray-100 transition-colors\"\n              aria-label=\"Mes anterior\"\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n            </button>\n            \n            <div className=\"text-center\">\n              <div className=\"font-semibold text-gray-900\">\n                {safeArrayAccess(MESES_ESPANOL, currentMonth, 'Enero')} {currentYear}\n              </div>\n            </div>\n            \n            <button\n              type=\"button\"\n              onClick={() => navigateMonth('next')}\n              className=\"p-1 rounded hover:bg-gray-100 transition-colors\"\n              aria-label=\"Mes siguiente\"\n            >\n              <ChevronRight className=\"h-4 w-4\" />\n            </button>\n          </div>\n          \n          {/* Days of Week Header */}\n          <div className=\"grid grid-cols-7 gap-1 p-2 border-b border-gray-100\">\n            {DIAS_CORTOS_ESPANOL.slice(firstDayOfWeek).concat(\n              DIAS_CORTOS_ESPANOL.slice(0, firstDayOfWeek)\n            ).map((day, index) => (\n              <div key={index} className=\"text-xs font-medium text-gray-500 text-center p-2\">\n                {day}\n              </div>\n            ))}\n          </div>\n          \n          {/* Calendar Grid */}\n          <div className=\"grid grid-cols-7 gap-1 p-2\">\n            {calendarDays.map((date, index) => (\n              <button\n                key={index}\n                type=\"button\"\n                disabled={!date || isDateDisabled(date)}\n                onClick={() => date && !isDateDisabled(date) && handleDateChange(date)}\n                className={cn(\n                  'p-2 text-sm rounded transition-colors min-h-[36px]',\n                  'hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-primary-500',\n                  !date && 'cursor-default',\n                  date && isDateDisabled(date) && 'text-gray-400 cursor-not-allowed',\n                  date && !isDateDisabled(date) && 'text-gray-900 hover:bg-primary-50',\n                  date && selectedDate && date.toDateString() === selectedDate.toDateString() && \n                    'bg-primary-600 text-white hover:bg-primary-700',\n                  date && new Date().toDateString() === date.toDateString() && \n                    selectedDate?.toDateString() !== date.toDateString() &&\n                    'ring-1 ring-primary-600 text-primary-600'\n                )}\n                aria-label={date ? `Seleccionar ${date.getDate()} de ${MESES_ESPANOL[date.getMonth()]}` : undefined}\n              >\n                {date?.getDate()}\n              </button>\n            ))}\n          </div>\n          \n          {/* Quick Actions Footer - BIRHAUS: Max 3 actions */}\n          <div className=\"flex items-center justify-between p-4 border-t border-gray-200\">\n            <div className=\"flex space-x-2\">\n              {showTodayButton && (\n                <button\n                  type=\"button\"\n                  onClick={handleToday}\n                  className=\"px-3 py-1 text-sm text-primary-600 hover:text-primary-700 font-medium\"\n                >\n                  Hoy\n                </button>\n              )}\n              {showClearButton && selectedDate && (\n                <button\n                  type=\"button\"\n                  onClick={handleClear}\n                  className=\"px-3 py-1 text-sm text-gray-600 hover:text-gray-700 font-medium\"\n                >\n                  Limpiar\n                </button>\n              )}\n            </div>\n            \n            <button\n              type=\"button\"\n              onClick={() => setIsOpen(false)}\n              className=\"p-1 rounded hover:bg-gray-100 transition-colors\"\n              aria-label=\"Cerrar calendario\"\n            >\n              <X className=\"h-4 w-4\" />\n            </button>\n          </div>\n        </div>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"absolute bottom-full left-0 mb-2 bg-gray-800 text-white text-sm rounded-md p-3 shadow-lg z-50 flex items-center space-x-2\">\n          <span>Fecha cambiada a {formatDate(selectedDate)}</span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>Deshacer</span>\n          </button>\n        </div>\n      )}\n      \n      {/* Accessibility Description */}\n      {displayDescribedBy && (\n        <div id={displayDescribedBy} className=\"sr-only\">\n          {displayDescribedBy}\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCalendar.displayName = 'BirhausCalendar'\n\n// Hook for enhanced calendar functionality\nexport const useBirhausCalendar = (initialDate?: Date | null) => {\n  const [selectedDate, setSelectedDate] = useState<Date | null>(initialDate || null)\n  const [undoHistory, setUndoHistory] = useState<Date[]>([])\n  \n  const selectDate = useCallback((date: Date | null) => {\n    if (selectedDate) {\n      setUndoHistory(prev => [...prev.slice(-4), selectedDate]) // Keep last 5 for undo\n    }\n    setSelectedDate(date)\n  }, [selectedDate])\n  \n  const undoLastSelection = useCallback(() => {\n    if (undoHistory.length > 0) {\n      const previousDate = undoHistory[undoHistory.length - 1]\n      setSelectedDate(previousDate)\n      setUndoHistory(prev => prev.slice(0, -1))\n      return previousDate\n    }\n    return null\n  }, [undoHistory])\n  \n  const clearDate = useCallback(() => {\n    if (selectedDate) {\n      setUndoHistory(prev => [...prev.slice(-4), selectedDate])\n    }\n    setSelectedDate(null)\n  }, [selectedDate])\n  \n  return {\n    selectedDate,\n    selectDate,\n    clearDate,\n    undoLastSelection,\n    canUndo: undoHistory.length > 0,\n    undoHistory\n  }\n}\n\n// Utility functions for date operations\nexport const createBirhausDateRange = (start: Date, end: Date): Date[] => {\n  const dates: Date[] = []\n  const currentDate = new Date(start)\n  \n  while (currentDate <= end) {\n    dates.push(new Date(currentDate))\n    currentDate.setDate(currentDate.getDate() + 1)\n  }\n  \n  return dates\n}\n\nexport const getBirhausWeekdays = (exclude: number[] = []): number[] => {\n  return [1, 2, 3, 4, 5].filter(day => !exclude.includes(day)) // Monday to Friday\n}\n\nexport const getBirhausWeekends = (): number[] => {\n  return [0, 6] // Sunday and Saturday\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useCallback } from 'react'\nimport { AlertCircle, CheckCircle2, Info, RotateCcw } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Textarea Component\n * \n * Enhanced textarea implementing all 10 BIRHAUS principles:\n * - Spanish-first labeling and validation messages\n * - Progressive validation with cognitive load reduction\n * - Auto-save functionality with visual feedback\n * - Accessibility compliance (WCAG AA+)\n * - Character counting with Miller's Law guidance\n * - Undo functionality for large text changes\n * - Auto-resize option for better UX\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\ninterface UndoState {\n  previousValue: string\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausTextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'autoSave'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Spanish-first error patterns: \"Qué pasó + cómo resolver\"\n  solution?: string\n  solutionEs?: string\n  solutionEn?: string\n  \n  // BIRHAUS Principle #8: Performance is UX\n  autoSave?: boolean\n  autoSaveDelay?: number\n  onAutoSave?: (value: string) => Promise<void>\n  \n  // Progressive validation\n  validateOnChange?: boolean\n  validateOnBlur?: boolean\n  validationRules?: ValidationRule[]\n  \n  // BIRHAUS Principle #1: Form serves flow\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'filled' | 'minimal'\n  \n  // Character management (Miller's Law)\n  maxLength?: number\n  showCharacterCount?: boolean\n  characterCountThreshold?: number // Show warning when approaching limit\n  \n  // Auto-resize functionality\n  autoResize?: boolean\n  minRows?: number\n  maxRows?: number\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  undoThreshold?: number // Minimum chars changed to trigger undo\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  helpText?: string\n  helpTextEs?: string\n  helpTextEn?: string\n  \n  // Status indicators\n  loading?: boolean\n  success?: boolean\n  \n  // Cognitive load tracking\n  fieldPriority?: 'required' | 'optional' | 'progressive'\n  cognitiveWeight?: number\n  \n  // Locale\n  locale?: 'es' | 'en'\n}\n\nexport interface ValidationRule {\n  test: (value: string) => boolean\n  errorEs: string\n  errorEn: string\n  solution?: string\n  solutionEs?: string\n  solutionEn?: string\n}\n\nexport const BirhausTextarea = forwardRef<HTMLTextAreaElement, BirhausTextareaProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Validation\n  error,\n  errorEs: _errorEs,\n  errorEn: _errorEn,\n  solution,\n  solutionEs,\n  solutionEn,\n  \n  // Auto-save\n  autoSave = false,\n  autoSaveDelay = 2000,\n  onAutoSave,\n  \n  // Progressive validation\n  validateOnChange = false,\n  validateOnBlur = true,\n  validationRules = [],\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Character management\n  maxLength,\n  showCharacterCount = false,\n  characterCountThreshold = 0.8,\n  \n  // Auto-resize\n  autoResize = false,\n  minRows = 3,\n  maxRows = 10,\n  \n  // Undo functionality\n  enableUndo = true,\n  undoTimeoutMs = 15000,\n  undoThreshold = 20,\n  \n  // Accessibility\n  helpText,\n  helpTextEs,\n  helpTextEn,\n  \n  // Status\n  loading = false,\n  success = false,\n  \n  // Cognitive load\n  fieldPriority = 'optional',\n  cognitiveWeight: _cognitiveWeight = 2,\n  \n  // Locale\n  locale = 'es',\n  \n  // Standard props\n  value,\n  defaultValue,\n  onChange,\n  onBlur,\n  onFocus,\n  disabled = false,\n  required = false,\n  placeholder,\n  rows = minRows,\n  ...props\n}, _ref) => {\n  // State management\n  const [internalValue, setInternalValue] = useState<string>((value || defaultValue || '') as string)\n  const [isFocused, setIsFocused] = useState(false)\n  const [autoSaveStatus, setAutoSaveStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle')\n  const [validationError, setValidationError] = useState<string>('')\n  const [currentRows, setCurrentRows] = useState(rows)\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousValue: '',\n    timeout: null,\n    isActive: false\n  })\n  \n  // Refs\n  const textareaRef = useRef<HTMLTextAreaElement>(null)\n  const autoSaveTimeoutRef = useRef<NodeJS.Timeout>()\n  const lastSavedValueRef = useRef<string>(internalValue)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || validationError\n  const displaySolution = getDisplayText(solution, solutionEs, solutionEn, '')\n  const displayHelpText = getDisplayText(helpText, helpTextEs, helpTextEn, '')\n  \n  // Character count calculations\n  const characterCount = internalValue.length\n  const isApproachingLimit = maxLength && characterCount >= (maxLength * characterCountThreshold)\n  const isOverLimit = maxLength && characterCount > maxLength\n  \n  // Validation function\n  const validateValue = useCallback((val: string): string => {\n    for (const rule of validationRules) {\n      if (!rule.test(val)) {\n        return getDisplayText(\n          undefined,\n          rule.errorEs,\n          rule.errorEn,\n          rule.errorEs || 'Error de validación'\n        )\n      }\n    }\n    return ''\n  }, [validationRules, getDisplayText])\n  \n  // Auto-resize functionality\n  const updateRows = useCallback((textarea: HTMLTextAreaElement) => {\n    if (!autoResize) return\n    \n    // Reset height to auto to get the correct scrollHeight\n    textarea.style.height = 'auto'\n    const lineHeight = parseInt(getComputedStyle(textarea).lineHeight, 10) || 20\n    const newRows = Math.min(\n      Math.max(\n        Math.ceil(textarea.scrollHeight / lineHeight),\n        minRows\n      ),\n      maxRows\n    )\n    \n    setCurrentRows(newRows)\n  }, [autoResize, minRows, maxRows])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setInternalValue(undoState.previousValue)\n      onChange?.({ target: { value: undoState.previousValue } } as React.ChangeEvent<HTMLTextAreaElement>)\n      setUndoState({ previousValue: '', timeout: null, isActive: false })\n    }\n  }, [undoState, onChange])\n  \n  // Setup undo for significant changes\n  const setupUndo = useCallback((newValue: string, oldValue: string) => {\n    if (!enableUndo) return\n    \n    const charDifference = Math.abs(newValue.length - oldValue.length)\n    if (charDifference >= undoThreshold) {\n      // Clear existing timeout\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      \n      // Set up new undo state\n      const timeout = setTimeout(() => {\n        setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n      }, undoTimeoutMs)\n      \n      setUndoState({\n        previousValue: oldValue,\n        timeout,\n        isActive: true\n      })\n    }\n  }, [enableUndo, undoThreshold, undoTimeoutMs, undoState.timeout])\n  \n  // Handle input change\n  const handleChange = useCallback((event: React.ChangeEvent<HTMLTextAreaElement>) => {\n    const newValue = event.target.value\n    const oldValue = internalValue\n    \n    // Update value\n    setInternalValue(newValue)\n    \n    // Setup undo for significant changes\n    setupUndo(newValue, oldValue)\n    \n    // Auto-resize\n    if (autoResize && textareaRef.current) {\n      updateRows(textareaRef.current)\n    }\n    \n    // Progressive validation\n    if (validateOnChange) {\n      const errorMessage = validateValue(newValue)\n      setValidationError(errorMessage)\n    }\n    \n    // Auto-save setup\n    if (autoSave && onAutoSave) {\n      setAutoSaveStatus('idle')\n      if (autoSaveTimeoutRef.current) {\n        clearTimeout(autoSaveTimeoutRef.current)\n      }\n      \n      autoSaveTimeoutRef.current = setTimeout(async () => {\n        if (newValue !== lastSavedValueRef.current) {\n          setAutoSaveStatus('saving')\n          try {\n            await onAutoSave(newValue)\n            lastSavedValueRef.current = newValue\n            setAutoSaveStatus('saved')\n            // Clear saved status after 2 seconds\n            setTimeout(() => setAutoSaveStatus('idle'), 2000)\n          } catch {\n            setAutoSaveStatus('error')\n          }\n        }\n      }, autoSaveDelay)\n    }\n    \n    // Call parent onChange\n    onChange?.(event)\n  }, [\n    internalValue,\n    autoResize,\n    validateOnChange,\n    autoSave,\n    onAutoSave,\n    autoSaveDelay,\n    onChange,\n    setupUndo,\n    updateRows,\n    validateValue\n  ])\n  \n  // Handle blur\n  const handleBlur = useCallback((event: React.FocusEvent<HTMLTextAreaElement>) => {\n    setIsFocused(false)\n    \n    if (validateOnBlur) {\n      const errorMessage = validateValue(event.target.value)\n      setValidationError(errorMessage)\n    }\n    \n    onBlur?.(event)\n  }, [validateOnBlur, validateValue, onBlur])\n  \n  // Handle focus\n  const handleFocus = useCallback((event: React.FocusEvent<HTMLTextAreaElement>) => {\n    setIsFocused(true)\n    onFocus?.(event)\n  }, [onFocus])\n  \n  // Effect: Sync external value changes\n  useEffect(() => {\n    if (value !== undefined && value !== internalValue) {\n      setInternalValue(value as string)\n    }\n  }, [value, internalValue])\n  \n  // Effect: Initial auto-resize\n  useEffect(() => {\n    if (autoResize && textareaRef.current) {\n      updateRows(textareaRef.current)\n    }\n  }, [autoResize, updateRows])\n  \n  // Cleanup undo timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      if (autoSaveTimeoutRef.current) {\n        clearTimeout(autoSaveTimeoutRef.current)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes based on BIRHAUS tokens\n  const sizeClasses = {\n    sm: 'text-sm px-2 py-1',\n    md: 'text-base px-3 py-2',\n    lg: 'text-lg px-4 py-3'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-300',\n    filled: 'bg-gray-50 border border-gray-200',\n    minimal: 'bg-transparent border-b border-gray-300'\n  }\n  \n  // Status colors\n  const getStatusColor = () => {\n    if (displayError) return 'border-red-300 focus:border-red-500'\n    if (success) return 'border-green-300 focus:border-green-500'\n    if (isFocused) return 'border-primary-500'\n    return 'border-gray-300'\n  }\n  \n  return (\n    <div className={cn('birhaus-textarea', disabled && 'opacity-50')}>\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n          {fieldPriority === 'optional' && (\n            <span className=\"text-gray-400 ml-1 text-xs\">(opcional)</span>\n          )}\n        </label>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600 mb-2\">\n          {displayDescription}\n        </p>\n      )}\n      \n      {/* Textarea Container */}\n      <div className=\"relative\">\n        <textarea\n          ref={textareaRef}\n          value={internalValue}\n          onChange={handleChange}\n          onBlur={handleBlur}\n          onFocus={handleFocus}\n          rows={autoResize ? currentRows : rows}\n          maxLength={maxLength}\n          disabled={disabled || loading}\n          required={required}\n          placeholder={placeholder}\n          className={cn(\n            'w-full rounded-md transition-colors duration-200',\n            'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n            'resize-none', // Controlled by autoResize\n            safeAccess(sizeClasses, size, sizeClasses.md),\n            safeAccess(variantClasses, variant, variantClasses.default),\n            getStatusColor(),\n            isOverLimit ? 'border-red-500 text-red-600' : '',\n            disabled && 'cursor-not-allowed bg-gray-50'\n          )}\n          {...props}\n        />\n        \n        {/* Status Icons */}\n        <div className=\"absolute top-2 right-2 flex items-center space-x-1\">\n          {loading && (\n            <div className=\"animate-spin h-4 w-4 border-2 border-gray-300 border-t-primary-600 rounded-full\" />\n          )}\n          {success && <CheckCircle2 className=\"h-4 w-4 text-green-500\" />}\n          {displayError && <AlertCircle className=\"h-4 w-4 text-red-500\" />}\n          {autoSaveStatus === 'saving' && (\n            <div className=\"text-xs text-gray-500\">Guardando...</div>\n          )}\n          {autoSaveStatus === 'saved' && (\n            <div className=\"text-xs text-green-600\">Guardado</div>\n          )}\n          {autoSaveStatus === 'error' && (\n            <div className=\"text-xs text-red-600\">Error</div>\n          )}\n        </div>\n      </div>\n      \n      {/* Character Count */}\n      {(showCharacterCount || maxLength) && (\n        <div className=\"flex justify-between items-center mt-1\">\n          <div className=\"flex-1\">\n            {/* Error or Help Text */}\n            {displayError ? (\n              <div className=\"text-sm text-red-600\">\n                <div className=\"flex items-start space-x-1\">\n                  <AlertCircle className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n                  <div>\n                    <div>{displayError}</div>\n                    {displaySolution && (\n                      <div className=\"text-xs text-gray-600 mt-1\">\n                        💡 {displaySolution}\n                      </div>\n                    )}\n                  </div>\n                </div>\n              </div>\n            ) : displayHelpText ? (\n              <div className=\"text-sm text-gray-600 flex items-start space-x-1\">\n                <Info className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n                <span>{displayHelpText}</span>\n              </div>\n            ) : null}\n          </div>\n          \n          <div className={cn(\n            'text-sm flex-shrink-0 ml-2',\n            isOverLimit ? 'text-red-600 font-medium' :\n            isApproachingLimit ? 'text-orange-600' :\n            'text-gray-500'\n          )}>\n            {maxLength ? `${characterCount}/${maxLength}` : characterCount}\n          </div>\n        </div>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"mt-2 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>Texto modificado significativamente</span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>Deshacer</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausTextarea.displayName = 'BirhausTextarea'\n\n// Default validation rules for common use cases\nexport const birhausTextareaValidationRules = {\n  // Spanish-first validation rules\n  required: (): ValidationRule => ({\n    test: (value: string) => value.trim().length > 0,\n    errorEs: 'Este campo es requerido',\n    errorEn: 'This field is required',\n    solutionEs: 'Por favor ingresa algún texto',\n    solutionEn: 'Please enter some text'\n  }),\n  \n  minLength: (min: number): ValidationRule => ({\n    test: (value: string) => value.trim().length >= min,\n    errorEs: `Debe tener al menos ${min} caracteres`,\n    errorEn: `Must be at least ${min} characters`,\n    solutionEs: `Agrega caracteres adicionales`,\n    solutionEn: `Add additional characters`\n  }),\n  \n  maxWords: (max: number): ValidationRule => ({\n    test: (value: string) => value.trim().split(/\\s+/).length <= max,\n    errorEs: `Máximo ${max} palabras permitidas`,\n    errorEn: `Maximum ${max} words allowed`,\n    solutionEs: 'Reduce el texto para cumplir el límite',\n    solutionEn: 'Reduce text to meet the limit'\n  }),\n  \n  noSpecialChars: (): ValidationRule => ({\n    test: (value: string) => /^[a-zA-ZÀ-ÿ\\u00f1\\u00d1\\s.,!?]+$/.test(value),\n    errorEs: 'Solo se permiten letras, espacios y puntuación básica',\n    errorEn: 'Only letters, spaces and basic punctuation allowed',\n    solutionEs: 'Remueve caracteres especiales como @, #, $',\n    solutionEn: 'Remove special characters like @, #, $'\n  })\n}\n\n// Hook for enhanced textarea functionality\nexport const useBirhausTextarea = (initialValue: string = '') => {\n  const [value, setValue] = useState(initialValue)\n  const [history, setHistory] = useState<string[]>([initialValue])\n  const [historyIndex, setHistoryIndex] = useState(0)\n  \n  const updateValue = useCallback((newValue: string) => {\n    setValue(newValue)\n    const newHistory = history.slice(0, historyIndex + 1)\n    newHistory.push(newValue)\n    setHistory(newHistory.slice(-10)) // Keep last 10 states\n    setHistoryIndex(newHistory.length - 1)\n  }, [history, historyIndex])\n  \n  const undo = useCallback(() => {\n    if (historyIndex > 0) {\n      const newIndex = historyIndex - 1\n      setHistoryIndex(newIndex)\n      const value = safeArrayAccess(history, newIndex, '')\n      setValue(value)\n      return value\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const redo = useCallback(() => {\n    if (historyIndex < history.length - 1) {\n      const newIndex = historyIndex + 1\n      setHistoryIndex(newIndex)\n      const value = safeArrayAccess(history, newIndex, '')\n      setValue(value)\n      return value\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const canUndo = historyIndex > 0\n  const canRedo = historyIndex < history.length - 1\n  \n  return {\n    value,\n    setValue: updateValue,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    wordCount: value.trim().split(/\\s+/).filter(word => word.length > 0).length,\n    characterCount: value.length\n  }\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useCallback } from 'react'\nimport { DollarSign, AlertCircle, CheckCircle2, ArrowRightLeft, RotateCcw } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Currency Input Component\n * \n * Enhanced currency input for Paraguayan financial systems:\n * - Support for Guaraníes (₲) and USD ($)\n * - Automatic formatting with thousands separators\n * - Real-time currency conversion\n * - Spanish-first validation and error messages\n * - Min/max validation for financial controls\n * - Auto-save functionality for forms\n * - Undo functionality for large amount changes\n * - WCAG AA+ accessibility compliance\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\n// Currency configuration for Paraguay\nconst CURRENCIES = {\n  PYG: {\n    symbol: '₲',\n    name: 'Guaraníes',\n    nameEs: 'Guaraníes',\n    nameEn: 'Paraguayan Guaraní',\n    decimals: 0, // Guaraníes typically don't use decimals\n    thousandsSeparator: '.',\n    decimalSeparator: ',',\n    symbolPosition: 'before' as const\n  },\n  USD: {\n    symbol: '$',\n    name: 'Dólares',\n    nameEs: 'Dólares',\n    nameEn: 'US Dollars',\n    decimals: 2,\n    thousandsSeparator: ',',\n    decimalSeparator: '.',\n    symbolPosition: 'before' as const\n  }\n} as const\n\ntype CurrencyCode = keyof typeof CURRENCIES\n\ninterface UndoState {\n  previousValue: number | null\n  previousCurrency: CurrencyCode\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausCurrencyInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type' | 'defaultValue' | 'size' | 'autoSave'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Currency specific\n  value?: number | null\n  defaultValue?: number | null\n  onChange?: (value: number | null, currency: CurrencyCode) => void\n  \n  // Currency configuration\n  currency?: CurrencyCode\n  defaultCurrency?: CurrencyCode\n  allowCurrencySwitch?: boolean\n  showCurrencyName?: boolean\n  \n  // Conversion (for IPU Admin integration)\n  exchangeRate?: number // USD to PYG rate\n  showConversion?: boolean\n  onCurrencyChange?: (currency: CurrencyCode) => void\n  \n  // Validation\n  minValue?: number\n  maxValue?: number\n  requiredMessage?: string\n  requiredMessageEs?: string\n  requiredMessageEn?: string\n  \n  // BIRHAUS Principle #8: Performance is UX\n  autoSave?: boolean\n  autoSaveDelay?: number\n  onAutoSave?: (value: number | null, currency: CurrencyCode) => Promise<void>\n  \n  // BIRHAUS Principle #1: Form serves flow\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'filled' | 'minimal'\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  undoThreshold?: number // Minimum amount change to trigger undo\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  helpText?: string\n  helpTextEs?: string\n  helpTextEn?: string\n  \n  // Status indicators\n  loading?: boolean\n  success?: boolean\n  \n  // Cognitive load tracking\n  fieldPriority?: 'required' | 'optional' | 'progressive'\n  \n  // Locale\n  locale?: 'es' | 'en'\n}\n\nexport const BirhausCurrencyInput = forwardRef<HTMLInputElement, BirhausCurrencyInputProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  \n  // Currency values\n  value,\n  defaultValue,\n  onChange,\n  \n  // Currency configuration\n  currency = 'PYG',\n  defaultCurrency = 'PYG',\n  allowCurrencySwitch = true,\n  showCurrencyName = true,\n  \n  // Conversion\n  exchangeRate = 7300, // Default USD to PYG rate (approximate)\n  showConversion = true,\n  onCurrencyChange,\n  \n  // Validation\n  minValue,\n  maxValue,\n  requiredMessage,\n  requiredMessageEs,\n  requiredMessageEn,\n  \n  // Auto-save\n  autoSave = false,\n  autoSaveDelay = 2000,\n  onAutoSave,\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Undo functionality\n  enableUndo = true,\n  undoTimeoutMs = 10000,\n  undoThreshold = 100000, // 100k PYG or 15 USD threshold\n  \n  // Accessibility\n  helpText,\n  helpTextEs,\n  helpTextEn,\n  \n  // Status\n  loading = false,\n  success = false,\n  \n  // Cognitive load\n  fieldPriority = 'optional',\n  \n  // Locale\n  locale = 'es',\n  \n  // Standard props\n  disabled = false,\n  required = false,\n  placeholder,\n  ...props\n}, ref) => {\n  // State management\n  const [currentCurrency, setCurrentCurrency] = useState<CurrencyCode>(currency || defaultCurrency)\n  const [numericValue, setNumericValue] = useState<number | null>(value || defaultValue || null)\n  const [displayValue, setDisplayValue] = useState<string>('')\n  const [isFocused, setIsFocused] = useState(false)\n  const [autoSaveStatus, setAutoSaveStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle')\n  const [validationError, setValidationError] = useState<string>('')\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousValue: null,\n    previousCurrency: currentCurrency,\n    timeout: null,\n    isActive: false\n  })\n  \n  // Refs\n  const inputRef = useRef<HTMLInputElement>(null)\n  const autoSaveTimeoutRef = useRef<NodeJS.Timeout>()\n  \n  // Get current currency config\n  const currencyConfig = safeAccess(CURRENCIES, currentCurrency, CURRENCIES.PYG)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || validationError\n  const displayHelpText = getDisplayText(helpText, helpTextEs, helpTextEn, '')\n  const displayRequiredMessage = getDisplayText(requiredMessage, requiredMessageEs, requiredMessageEn, 'Este campo es requerido')\n  \n  // Format number according to currency\n  const formatCurrency = useCallback((amount: number | null, currencyCode: CurrencyCode): string => {\n    if (amount === null || amount === undefined) return ''\n    \n    const config = safeAccess(CURRENCIES, currencyCode, CURRENCIES.PYG)\n    const formattedNumber = new Intl.NumberFormat('es-PY', {\n      minimumFractionDigits: config.decimals,\n      maximumFractionDigits: config.decimals,\n      useGrouping: true\n    }).format(amount)\n    \n    return `${config.symbol} ${formattedNumber}`\n  }, [])\n  \n  // Parse input value to number\n  const parseInput = useCallback((input: string): number | null => {\n    if (!input || input.trim() === '') return null\n    \n    // Remove currency symbol and clean input\n    const cleaned = input\n      .replace(currencyConfig.symbol, '')\n      .replace(/\\s/g, '')\n      .replace(/[.,]/g, (match, offset, string) => {\n        // Determine if this is a decimal separator based on position\n        const afterMatch = string.slice(offset + 1)\n        const beforeMatch = string.slice(0, offset)\n        \n        // If there are exactly 2 digits after and it's the last occurrence, it's decimal\n        if (afterMatch.length === 2 && !afterMatch.includes('.') && !afterMatch.includes(',')) {\n          return '.'\n        }\n        // Otherwise it's a thousands separator\n        return ''\n      })\n    \n    const parsed = parseFloat(cleaned)\n    return isNaN(parsed) ? null : parsed\n  }, [currencyConfig.symbol])\n  \n  // Validate amount\n  const validateAmount = useCallback((amount: number | null): string => {\n    if (required && (amount === null || amount === undefined)) {\n      return displayRequiredMessage\n    }\n    \n    if (amount !== null) {\n      if (minValue !== undefined && amount < minValue) {\n        return `El monto mínimo es ${formatCurrency(minValue, currentCurrency)}`\n      }\n      \n      if (maxValue !== undefined && amount > maxValue) {\n        return `El monto máximo es ${formatCurrency(maxValue, currentCurrency)}`\n      }\n    }\n    \n    return ''\n  }, [required, minValue, maxValue, displayRequiredMessage, formatCurrency, currentCurrency])\n  \n  // Convert between currencies\n  const convertCurrency = useCallback((amount: number, fromCurrency: CurrencyCode, toCurrency: CurrencyCode): number => {\n    if (fromCurrency === toCurrency) return amount\n    \n    if (fromCurrency === 'USD' && toCurrency === 'PYG') {\n      return amount * exchangeRate\n    }\n    \n    if (fromCurrency === 'PYG' && toCurrency === 'USD') {\n      return amount / exchangeRate\n    }\n    \n    return amount\n  }, [exchangeRate])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setNumericValue(undoState.previousValue)\n      setCurrentCurrency(undoState.previousCurrency)\n      onChange?.(undoState.previousValue, undoState.previousCurrency)\n      setUndoState({ previousValue: null, previousCurrency: currentCurrency, timeout: null, isActive: false })\n    }\n  }, [undoState, onChange, currentCurrency])\n  \n  // Setup undo for significant changes\n  const setupUndo = useCallback((newValue: number | null, oldValue: number | null, newCurrency: CurrencyCode) => {\n    if (!enableUndo) return\n    \n    const difference = Math.abs((newValue || 0) - (oldValue || 0))\n    const threshold = currentCurrency === 'USD' ? undoThreshold / exchangeRate : undoThreshold\n    \n    if (difference >= threshold) {\n      // Clear existing timeout\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      \n      // Set up new undo state\n      const timeout = setTimeout(() => {\n        setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n      }, undoTimeoutMs)\n      \n      setUndoState({\n        previousValue: oldValue,\n        previousCurrency: currentCurrency,\n        timeout,\n        isActive: true\n      })\n    }\n  }, [enableUndo, undoThreshold, undoTimeoutMs, undoState.timeout, currentCurrency, exchangeRate])\n  \n  // Handle input change\n  const handleInputChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const inputValue = event.target.value\n    setDisplayValue(inputValue)\n    \n    const parsed = parseInput(inputValue)\n    const oldValue = numericValue\n    \n    setNumericValue(parsed)\n    \n    // Setup undo for significant changes\n    setupUndo(parsed, oldValue, currentCurrency)\n    \n    // Validation\n    const errorMessage = validateAmount(parsed)\n    setValidationError(errorMessage)\n    \n    // Auto-save setup\n    if (autoSave && onAutoSave && parsed !== null) {\n      setAutoSaveStatus('idle')\n      if (autoSaveTimeoutRef.current) {\n        clearTimeout(autoSaveTimeoutRef.current)\n      }\n      \n      autoSaveTimeoutRef.current = setTimeout(async () => {\n        setAutoSaveStatus('saving')\n        try {\n          await onAutoSave(parsed, currentCurrency)\n          setAutoSaveStatus('saved')\n          setTimeout(() => setAutoSaveStatus('idle'), 2000)\n        } catch {\n          setAutoSaveStatus('error')\n        }\n      }, autoSaveDelay)\n    }\n    \n    // Call parent onChange\n    onChange?.(parsed, currentCurrency)\n  }, [parseInput, numericValue, setupUndo, currentCurrency, validateAmount, autoSave, onAutoSave, autoSaveDelay, onChange])\n  \n  // Handle currency switch\n  const handleCurrencySwitch = useCallback(() => {\n    if (!allowCurrencySwitch) return\n    \n    const newCurrency: CurrencyCode = currentCurrency === 'PYG' ? 'USD' : 'PYG'\n    const oldValue = numericValue\n    \n    // Convert current value to new currency\n    let convertedValue = oldValue\n    if (oldValue !== null) {\n      convertedValue = convertCurrency(oldValue, currentCurrency, newCurrency)\n      setNumericValue(convertedValue)\n    }\n    \n    setCurrentCurrency(newCurrency)\n    onCurrencyChange?.(newCurrency)\n    onChange?.(convertedValue, newCurrency)\n    \n    // Update display value\n    if (convertedValue !== null) {\n      setDisplayValue(formatCurrency(convertedValue, newCurrency))\n    }\n  }, [allowCurrencySwitch, currentCurrency, numericValue, convertCurrency, onCurrencyChange, onChange, formatCurrency])\n  \n  // Handle focus\n  const handleFocus = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(true)\n    \n    // Show raw number when focused (easier editing)\n    if (numericValue !== null) {\n      setDisplayValue(numericValue.toString())\n    }\n  }, [numericValue])\n  \n  // Handle blur\n  const handleBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(false)\n    \n    // Format display value when blurred\n    if (numericValue !== null) {\n      setDisplayValue(formatCurrency(numericValue, currentCurrency))\n    }\n    \n    // Final validation\n    const errorMessage = validateAmount(numericValue)\n    setValidationError(errorMessage)\n  }, [numericValue, formatCurrency, currentCurrency, validateAmount])\n  \n  // Effect: Update display value when value changes externally\n  useEffect(() => {\n    if (value !== undefined && value !== numericValue) {\n      setNumericValue(value)\n      if (!isFocused) {\n        setDisplayValue(value !== null ? formatCurrency(value, currentCurrency) : '')\n      }\n    }\n  }, [value, numericValue, isFocused, formatCurrency, currentCurrency])\n  \n  // Effect: Update currency when currency prop changes\n  useEffect(() => {\n    if (currency && currency !== currentCurrency) {\n      setCurrentCurrency(currency)\n    }\n  }, [currency, currentCurrency])\n  \n  // Effect: Initial display value setup\n  useEffect(() => {\n    if (numericValue !== null && !isFocused) {\n      setDisplayValue(formatCurrency(numericValue, currentCurrency))\n    }\n  }, [numericValue, currentCurrency, formatCurrency, isFocused])\n  \n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      if (autoSaveTimeoutRef.current) {\n        clearTimeout(autoSaveTimeoutRef.current)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: 'text-sm px-2 py-1',\n    md: 'text-base px-3 py-2',\n    lg: 'text-lg px-4 py-3'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-300',\n    filled: 'bg-gray-50 border border-gray-200',\n    minimal: 'bg-transparent border-b border-gray-300'\n  }\n  \n  // Status colors\n  const getStatusColor = () => {\n    if (displayError) return 'border-red-300 focus:border-red-500'\n    if (success) return 'border-green-300 focus:border-green-500'\n    if (isFocused) return 'border-primary-500'\n    return 'border-gray-300'\n  }\n  \n  // Calculate conversion for display\n  const conversionAmount = numericValue !== null && showConversion ? \n    convertCurrency(numericValue, currentCurrency, currentCurrency === 'PYG' ? 'USD' : 'PYG') : null\n  \n  return (\n    <div className={cn('birhaus-currency-input', disabled && 'opacity-50')}>\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n          {fieldPriority === 'optional' && (\n            <span className=\"text-gray-400 ml-1 text-xs\">(opcional)</span>\n          )}\n        </label>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600 mb-2\">\n          {displayDescription}\n        </p>\n      )}\n      \n      {/* Input Container */}\n      <div className=\"relative\">\n        <div className={cn(\n          'flex items-center rounded-md transition-colors duration-200',\n          'focus-within:ring-2 focus-within:ring-primary-500 focus-within:ring-opacity-50',\n          safeAccess(variantClasses, variant, variantClasses.default),\n          getStatusColor(),\n          disabled && 'cursor-not-allowed bg-gray-50'\n        )}>\n          {/* Currency Symbol */}\n          <div className=\"flex items-center px-3 py-2 text-gray-600 border-r border-gray-300\">\n            <span className=\"font-medium\">{currencyConfig.symbol}</span>\n            {showCurrencyName && (\n              <span className=\"ml-1 text-xs text-gray-500\">\n                {currencyConfig.nameEs}\n              </span>\n            )}\n          </div>\n          \n          {/* Amount Input */}\n          <input\n            ref={ref}\n            type=\"text\"\n            value={displayValue}\n            onChange={handleInputChange}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            disabled={disabled || loading}\n            required={required}\n            placeholder={placeholder || `0${currencyConfig.decimals > 0 ? '.00' : ''}`}\n            className={cn(\n              'flex-1 border-none bg-transparent outline-none',\n              safeAccess(sizeClasses, size, sizeClasses.md),\n              'text-right font-mono',\n              disabled && 'cursor-not-allowed'\n            )}\n            {...props}\n          />\n          \n          {/* Currency Switch Button */}\n          {allowCurrencySwitch && (\n            <button\n              type=\"button\"\n              onClick={handleCurrencySwitch}\n              disabled={disabled}\n              className=\"px-2 py-1 text-gray-400 hover:text-gray-600 transition-colors\"\n              title=\"Cambiar moneda\"\n            >\n              <ArrowRightLeft className=\"h-4 w-4\" />\n            </button>\n          )}\n          \n          {/* Status Icons */}\n          <div className=\"flex items-center px-2\">\n            {loading && (\n              <div className=\"animate-spin h-4 w-4 border-2 border-gray-300 border-t-primary-600 rounded-full\" />\n            )}\n            {success && <CheckCircle2 className=\"h-4 w-4 text-green-500\" />}\n            {displayError && <AlertCircle className=\"h-4 w-4 text-red-500\" />}\n          </div>\n        </div>\n      </div>\n      \n      {/* Conversion Display */}\n      {showConversion && conversionAmount !== null && !isFocused && (\n        <div className=\"mt-1 text-sm text-gray-600\">\n          ≈ {formatCurrency(conversionAmount, currentCurrency === 'PYG' ? 'USD' : 'PYG')}\n        </div>\n      )}\n      \n      {/* Auto-save Status */}\n      {autoSave && autoSaveStatus !== 'idle' && (\n        <div className=\"mt-1 text-xs\">\n          {autoSaveStatus === 'saving' && <span className=\"text-gray-500\">Guardando...</span>}\n          {autoSaveStatus === 'saved' && <span className=\"text-green-600\">Guardado</span>}\n          {autoSaveStatus === 'error' && <span className=\"text-red-600\">Error al guardar</span>}\n        </div>\n      )}\n      \n      {/* Error Message */}\n      {displayError && (\n        <div className=\"mt-1 text-sm text-red-600 flex items-start space-x-1\">\n          <AlertCircle className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n          <span>{displayError}</span>\n        </div>\n      )}\n      \n      {/* Help Text */}\n      {!displayError && displayHelpText && (\n        <div className=\"mt-1 text-sm text-gray-600\">\n          {displayHelpText}\n        </div>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"mt-2 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>\n            Monto cambiado a {formatCurrency(numericValue, currentCurrency)}\n          </span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>Deshacer</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCurrencyInput.displayName = 'BirhausCurrencyInput'\n\n// Hook for currency management\nexport const useBirhausCurrency = (initialValue: number | null = null, initialCurrency: CurrencyCode = 'PYG') => {\n  const [amount, setAmount] = useState<number | null>(initialValue)\n  const [currency, setCurrency] = useState<CurrencyCode>(initialCurrency)\n  const [exchangeRate, setExchangeRate] = useState<number>(7300) // Default rate\n  \n  const convert = useCallback((value: number, fromCurrency: CurrencyCode, toCurrency: CurrencyCode): number => {\n    if (fromCurrency === toCurrency) return value\n    \n    if (fromCurrency === 'USD' && toCurrency === 'PYG') {\n      return value * exchangeRate\n    }\n    \n    if (fromCurrency === 'PYG' && toCurrency === 'USD') {\n      return value / exchangeRate\n    }\n    \n    return value\n  }, [exchangeRate])\n  \n  const getFormattedAmount = useCallback((currencyCode?: CurrencyCode): string => {\n    if (amount === null) return ''\n    const targetCurrency = currencyCode || currency\n    const config = safeAccess(CURRENCIES, targetCurrency, CURRENCIES.PYG)\n    \n    return new Intl.NumberFormat('es-PY', {\n      style: 'currency',\n      currency: targetCurrency === 'PYG' ? 'PYG' : 'USD',\n      minimumFractionDigits: config.decimals,\n      maximumFractionDigits: config.decimals\n    }).format(amount)\n  }, [amount, currency])\n  \n  const updateAmount = useCallback((newAmount: number | null, newCurrency?: CurrencyCode) => {\n    setAmount(newAmount)\n    if (newCurrency) {\n      setCurrency(newCurrency)\n    }\n  }, [])\n  \n  return {\n    amount,\n    currency,\n    exchangeRate,\n    setExchangeRate,\n    convert,\n    getFormattedAmount,\n    updateAmount,\n    amountInPYG: amount !== null ? convert(amount, currency, 'PYG') : null,\n    amountInUSD: amount !== null ? convert(amount, currency, 'USD') : null\n  }\n}\n\n// Utility functions for financial calculations\nexport const paraguayanCurrencyUtils = {\n  // Format number as Guaraníes\n  formatPYG: (amount: number): string => {\n    return new Intl.NumberFormat('es-PY', {\n      style: 'currency',\n      currency: 'PYG',\n      minimumFractionDigits: 0,\n      maximumFractionDigits: 0\n    }).format(amount)\n  },\n  \n  // Format number as USD\n  formatUSD: (amount: number): string => {\n    return new Intl.NumberFormat('es-PY', {\n      style: 'currency',\n      currency: 'USD',\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    }).format(amount)\n  },\n  \n  // Convert USD to PYG\n  usdToPyg: (usdAmount: number, rate: number = 7300): number => {\n    return Math.round(usdAmount * rate)\n  },\n  \n  // Convert PYG to USD\n  pygToUsd: (pygAmount: number, rate: number = 7300): number => {\n    return pygAmount / rate\n  },\n  \n  // Validate Paraguayan tax ID (RUC)\n  validateRUC: (ruc: string): boolean => {\n    const cleaned = ruc.replace(/\\D/g, '')\n    return cleaned.length >= 6 && cleaned.length <= 8\n  },\n  \n  // Calculate IVA (VAT) for Paraguay (10%)\n  calculateIVA: (amount: number): { baseAmount: number; ivaAmount: number; totalAmount: number } => {\n    const baseAmount = amount / 1.1\n    const ivaAmount = amount - baseAmount\n    return {\n      baseAmount: Math.round(baseAmount),\n      ivaAmount: Math.round(ivaAmount),\n      totalAmount: Math.round(amount)\n    }\n  }\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useCallback, createContext, useContext, ReactNode } from 'react'\nimport { X, CheckCircle2, AlertCircle, Info, AlertTriangle, RotateCcw } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Toast Notification System\n * \n * Spanish-first toast notifications implementing BIRHAUS principles:\n * - Max 3 toasts at once (cognitive load reduction)\n * - Spanish-first messages (\"Guardado exitosamente\")\n * - Undo support for destructive actions\n * - Auto-dismiss with countdown\n * - Accessibility announcements\n * - Performance optimized animations\n * - WCAG AA+ compliance\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info'\n\nexport interface BirhausToastData {\n  id: string\n  variant: ToastVariant\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  message?: string\n  messageEs?: string\n  messageEn?: string\n  duration?: number\n  persistent?: boolean\n  undoAction?: () => void | Promise<void>\n  undoLabel?: string\n  undoLabelEs?: string\n  undoLabelEn?: string\n  action?: {\n    label: string\n    labelEs?: string\n    labelEn?: string\n    onClick: () => void\n  }\n  onDismiss?: (id: string) => void\n  locale?: 'es' | 'en'\n}\n\ninterface ToastContextType {\n  toasts: BirhausToastData[]\n  addToast: (toast: Omit<BirhausToastData, 'id'>) => string\n  dismissToast: (id: string) => void\n  clearAllToasts: () => void\n  locale: 'es' | 'en'\n  setLocale: (locale: 'es' | 'en') => void\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null)\n\n// Toast Provider Component\nexport interface BirhausToastProviderProps {\n  children: ReactNode\n  maxToasts?: number\n  defaultLocale?: 'es' | 'en'\n  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\n}\n\nexport const BirhausToastProvider = ({\n  children,\n  maxToasts = 3, // BIRHAUS: Max 3 for cognitive load\n  defaultLocale = 'es',\n  position = 'top-right'\n}: BirhausToastProviderProps) => {\n  const [toasts, setToasts] = useState<BirhausToastData[]>([])\n  const [locale, setLocale] = useState<'es' | 'en'>(defaultLocale)\n  \n  const addToast = useCallback((toastData: Omit<BirhausToastData, 'id'>): string => {\n    const id = `toast-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n    const newToast: BirhausToastData = {\n      ...toastData,\n      id,\n      locale: toastData.locale || locale\n    }\n    \n    setToasts(current => {\n      let updated = [...current, newToast]\n      \n      // BIRHAUS: Enforce max toasts (cognitive load)\n      if (updated.length > maxToasts) {\n        // Remove oldest non-persistent toasts first\n        const persistentToasts = updated.filter(t => t.persistent)\n        const nonPersistentToasts = updated.filter(t => !t.persistent)\n        \n        if (nonPersistentToasts.length > maxToasts - persistentToasts.length) {\n          const keepCount = maxToasts - persistentToasts.length\n          updated = [\n            ...persistentToasts,\n            ...nonPersistentToasts.slice(-keepCount)\n          ]\n        }\n      }\n      \n      return updated\n    })\n    \n    return id\n  }, [locale, maxToasts])\n  \n  const dismissToast = useCallback((id: string) => {\n    setToasts(current => current.filter(toast => toast.id !== id))\n  }, [])\n  \n  const clearAllToasts = useCallback(() => {\n    setToasts([])\n  }, [])\n  \n  const contextValue: ToastContextType = {\n    toasts,\n    addToast,\n    dismissToast,\n    clearAllToasts,\n    locale,\n    setLocale\n  }\n  \n  // Position classes\n  const positionClasses = {\n    'top-right': 'top-4 right-4',\n    'top-left': 'top-4 left-4',\n    'bottom-right': 'bottom-4 right-4',\n    'bottom-left': 'bottom-4 left-4',\n    'top-center': 'top-4 left-1/2 transform -translate-x-1/2',\n    'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2'\n  }\n  \n  return (\n    <ToastContext.Provider value={contextValue}>\n      {children}\n      \n      {/* Toast Container */}\n      <div \n        className={cn(\n          'fixed z-50 pointer-events-none',\n          safeAccess(positionClasses, position, positionClasses['top-right'])\n        )}\n        aria-live=\"polite\"\n        aria-label=\"Notificaciones\"\n      >\n        <div className=\"flex flex-col space-y-2 w-80 max-w-sm\">\n          {toasts.map((toast) => (\n            <BirhausToast\n              key={toast.id}\n              toast={toast}\n              onDismiss={dismissToast}\n            />\n          ))}\n        </div>\n      </div>\n    </ToastContext.Provider>\n  )\n}\n\n// Individual Toast Component\ninterface BirhausToastProps {\n  toast: BirhausToastData\n  onDismiss: (id: string) => void\n}\n\nconst BirhausToast = ({ toast, onDismiss }: BirhausToastProps) => {\n  const [isVisible, setIsVisible] = useState(false)\n  const [timeRemaining, setTimeRemaining] = useState(toast.duration || 5000)\n  const [isPaused, setIsPaused] = useState(false)\n  const timeoutRef = useRef<NodeJS.Timeout>()\n  const intervalRef = useRef<NodeJS.Timeout>()\n  \n  // Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    const locale = toast.locale || 'es'\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [toast.locale])\n  \n  const displayTitle = getDisplayText(toast.title, toast.titleEs, toast.titleEn, '')\n  const displayMessage = getDisplayText(toast.message, toast.messageEs, toast.messageEn, '')\n  const displayUndoLabel = getDisplayText(toast.undoLabel, toast.undoLabelEs, toast.undoLabelEn, 'Deshacer')\n  const displayActionLabel = toast.action ? getDisplayText(\n    toast.action.label,\n    toast.action.labelEs,\n    toast.action.labelEn,\n    toast.action.label\n  ) : ''\n  \n  // Handle dismiss\n  const handleDismiss = useCallback(() => {\n    setIsVisible(false)\n    setTimeout(() => {\n      onDismiss(toast.id)\n      toast.onDismiss?.(toast.id)\n    }, 200) // Wait for exit animation\n  }, [onDismiss, toast.id, toast.onDismiss])\n  \n  // Handle undo action\n  const handleUndo = useCallback(async () => {\n    if (toast.undoAction) {\n      try {\n        await toast.undoAction()\n        handleDismiss()\n      } catch (error) {\n        console.error('Error executing undo action:', error)\n      }\n    }\n  }, [toast.undoAction, handleDismiss])\n  \n  // Auto-dismiss timer\n  useEffect(() => {\n    if (toast.persistent) return\n    \n    setIsVisible(true)\n    \n    const startTimer = () => {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current)\n      \n      timeoutRef.current = setTimeout(() => {\n        handleDismiss()\n      }, timeRemaining)\n    }\n    \n    const startCountdown = () => {\n      if (intervalRef.current) clearInterval(intervalRef.current)\n      \n      intervalRef.current = setInterval(() => {\n        setTimeRemaining(prev => {\n          const newTime = prev - 100\n          if (newTime <= 0) {\n            clearInterval(intervalRef.current!)\n            return 0\n          }\n          return newTime\n        })\n      }, 100)\n    }\n    \n    if (!isPaused) {\n      startTimer()\n      startCountdown()\n    }\n    \n    return () => {\n      if (timeoutRef.current) clearTimeout(timeoutRef.current)\n      if (intervalRef.current) clearInterval(intervalRef.current)\n    }\n  }, [toast.persistent, timeRemaining, isPaused, handleDismiss])\n  \n  // Show animation on mount\n  useEffect(() => {\n    const timer = setTimeout(() => setIsVisible(true), 50)\n    return () => clearTimeout(timer)\n  }, [])\n  \n  // Pause/resume on hover\n  const handleMouseEnter = useCallback(() => {\n    if (!toast.persistent) {\n      setIsPaused(true)\n      if (timeoutRef.current) clearTimeout(timeoutRef.current)\n      if (intervalRef.current) clearInterval(intervalRef.current)\n    }\n  }, [toast.persistent])\n  \n  const handleMouseLeave = useCallback(() => {\n    if (!toast.persistent) {\n      setIsPaused(false)\n    }\n  }, [toast.persistent])\n  \n  // Variant styles\n  const variantStyles = {\n    success: {\n      bg: 'bg-green-50 border-green-200',\n      icon: CheckCircle2,\n      iconColor: 'text-green-500',\n      titleColor: 'text-green-800',\n      messageColor: 'text-green-700',\n      progressColor: 'bg-green-500'\n    },\n    error: {\n      bg: 'bg-red-50 border-red-200',\n      icon: AlertCircle,\n      iconColor: 'text-red-500',\n      titleColor: 'text-red-800',\n      messageColor: 'text-red-700',\n      progressColor: 'bg-red-500'\n    },\n    warning: {\n      bg: 'bg-yellow-50 border-yellow-200',\n      icon: AlertTriangle,\n      iconColor: 'text-yellow-500',\n      titleColor: 'text-yellow-800',\n      messageColor: 'text-yellow-700',\n      progressColor: 'bg-yellow-500'\n    },\n    info: {\n      bg: 'bg-blue-50 border-blue-200',\n      icon: Info,\n      iconColor: 'text-blue-500',\n      titleColor: 'text-blue-800',\n      messageColor: 'text-blue-700',\n      progressColor: 'bg-blue-500'\n    }\n  }\n  \n  const variant = variantStyles[toast.variant]\n  const IconComponent = variant.icon\n  \n  // Progress percentage\n  const progressPercentage = toast.persistent ? 100 : \n    ((toast.duration || 5000) - timeRemaining) / (toast.duration || 5000) * 100\n  \n  return (\n    <div\n      className={cn(\n        'pointer-events-auto transform transition-all duration-200 ease-out',\n        'border rounded-lg shadow-lg max-w-sm w-full',\n        variant.bg,\n        isVisible ? 'translate-x-0 opacity-100' : 'translate-x-full opacity-0'\n      )}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      role=\"alert\"\n      aria-live=\"polite\"\n    >\n      {/* Progress Bar */}\n      {!toast.persistent && (\n        <div className=\"h-1 bg-gray-200 rounded-t-lg overflow-hidden\">\n          <div \n            className={cn('h-full transition-all duration-100 ease-linear', variant.progressColor)}\n            style={{ width: `${progressPercentage}%` }}\n          />\n        </div>\n      )}\n      \n      {/* Content */}\n      <div className=\"p-4\">\n        <div className=\"flex items-start space-x-3\">\n          {/* Icon */}\n          <div className=\"flex-shrink-0\">\n            <IconComponent className={cn('h-5 w-5', variant.iconColor)} />\n          </div>\n          \n          {/* Text Content */}\n          <div className=\"flex-1 min-w-0\">\n            {displayTitle && (\n              <h4 className={cn('text-sm font-medium', variant.titleColor)}>\n                {displayTitle}\n              </h4>\n            )}\n            {displayMessage && (\n              <p className={cn(\n                'text-sm mt-1',\n                variant.messageColor,\n                !displayTitle && 'font-medium'\n              )}>\n                {displayMessage}\n              </p>\n            )}\n            \n            {/* Actions */}\n            {(toast.undoAction || toast.action) && (\n              <div className=\"flex items-center space-x-2 mt-3\">\n                {toast.undoAction && (\n                  <button\n                    type=\"button\"\n                    onClick={handleUndo}\n                    className=\"inline-flex items-center space-x-1 text-sm font-medium text-gray-700 hover:text-gray-900 transition-colors\"\n                  >\n                    <RotateCcw className=\"h-3 w-3\" />\n                    <span>{displayUndoLabel}</span>\n                  </button>\n                )}\n                \n                {toast.action && (\n                  <button\n                    type=\"button\"\n                    onClick={toast.action.onClick}\n                    className={cn(\n                      'text-sm font-medium transition-colors',\n                      variant.titleColor,\n                      `hover:${variant.titleColor.replace('800', '900')}`\n                    )}\n                  >\n                    {displayActionLabel}\n                  </button>\n                )}\n              </div>\n            )}\n          </div>\n          \n          {/* Close Button */}\n          <button\n            type=\"button\"\n            onClick={handleDismiss}\n            className=\"flex-shrink-0 text-gray-400 hover:text-gray-600 transition-colors\"\n            aria-label=\"Cerrar notificación\"\n          >\n            <X className=\"h-4 w-4\" />\n          </button>\n        </div>\n      </div>\n    </div>\n  )\n}\n\n// Hook to use toast functionality\nexport const useBirhausToast = () => {\n  const context = useContext(ToastContext)\n  \n  if (!context) {\n    throw new Error('useBirhausToast must be used within a BirhausToastProvider')\n  }\n  \n  const { addToast, dismissToast, clearAllToasts, locale } = context\n  \n  // Convenience methods with Spanish-first defaults\n  const showSuccess = useCallback((\n    message: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    return addToast({\n      variant: 'success',\n      messageEs: message,\n      titleEs: 'Éxito',\n      titleEn: 'Success',\n      duration: 4000,\n      ...options\n    })\n  }, [addToast])\n  \n  const showError = useCallback((\n    message: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    return addToast({\n      variant: 'error',\n      messageEs: message,\n      titleEs: 'Error',\n      titleEn: 'Error',\n      duration: 6000,\n      persistent: true, // Errors should be persistent\n      ...options\n    })\n  }, [addToast])\n  \n  const showWarning = useCallback((\n    message: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    return addToast({\n      variant: 'warning',\n      messageEs: message,\n      titleEs: 'Advertencia',\n      titleEn: 'Warning',\n      duration: 5000,\n      ...options\n    })\n  }, [addToast])\n  \n  const showInfo = useCallback((\n    message: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    return addToast({\n      variant: 'info',\n      messageEs: message,\n      titleEs: 'Información',\n      titleEn: 'Information',\n      duration: 4000,\n      ...options\n    })\n  }, [addToast])\n  \n  // IPU Admin specific convenience methods\n  const showSaved = useCallback((\n    entity?: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    const message = entity ? `${entity} guardado exitosamente` : 'Guardado exitosamente'\n    return showSuccess(message, options)\n  }, [showSuccess])\n  \n  const showDeleted = useCallback((\n    entity?: string,\n    undoAction?: () => void,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    const message = entity ? `${entity} eliminado` : 'Elemento eliminado'\n    return addToast({\n      variant: 'success',\n      messageEs: message,\n      titleEs: 'Eliminado',\n      titleEn: 'Deleted',\n      duration: 8000, // Longer for undo actions\n      undoAction,\n      undoLabelEs: 'Deshacer',\n      undoLabelEn: 'Undo',\n      ...options\n    })\n  }, [addToast])\n  \n  const showPaymentSuccess = useCallback((\n    amount: string,\n    options?: Partial<Omit<BirhausToastData, 'id' | 'variant' | 'message'>>\n  ) => {\n    return showSuccess(`Pago de ${amount} procesado exitosamente`, {\n      titleEs: 'Pago Exitoso',\n      titleEn: 'Payment Successful',\n      ...options\n    })\n  }, [showSuccess])\n  \n  return {\n    // Core methods\n    addToast,\n    dismissToast,\n    clearAllToasts,\n    \n    // Convenience methods\n    showSuccess,\n    showError,\n    showWarning,\n    showInfo,\n    \n    // IPU Admin specific\n    showSaved,\n    showDeleted,\n    showPaymentSuccess,\n    \n    // Context\n    locale,\n    toasts: context.toasts\n  }\n}\n\n// Standalone Toast component for manual usage\nexport interface BirhausToastStandaloneProps extends Omit<BirhausToastData, 'id'> {\n  visible?: boolean\n  onClose?: () => void\n}\n\nexport const BirhausToastStandalone = forwardRef<HTMLDivElement, BirhausToastStandaloneProps>(({\n  visible = true,\n  onClose,\n  ...toastData\n}, ref) => {\n  const [internalVisible, setInternalVisible] = useState(visible)\n  \n  useEffect(() => {\n    setInternalVisible(visible)\n  }, [visible])\n  \n  const handleDismiss = useCallback(() => {\n    setInternalVisible(false)\n    setTimeout(() => {\n      onClose?.()\n    }, 200)\n  }, [onClose])\n  \n  if (!internalVisible) return null\n  \n  const mockToast: BirhausToastData = {\n    id: 'standalone',\n    ...toastData\n  }\n  \n  return (\n    <div ref={ref} className=\"w-80 max-w-sm\">\n      <BirhausToast\n        toast={mockToast}\n        onDismiss={handleDismiss}\n      />\n    </div>\n  )\n})\n\nBirhausToastStandalone.displayName = 'BirhausToastStandalone'\n\n// Common toast messages for IPU Admin\nexport const birhausToastMessages = {\n  // General CRUD operations\n  saved: {\n    es: 'Guardado exitosamente',\n    en: 'Saved successfully'\n  },\n  deleted: {\n    es: 'Eliminado exitosamente',\n    en: 'Deleted successfully'\n  },\n  updated: {\n    es: 'Actualizado exitosamente',\n    en: 'Updated successfully'\n  },\n  created: {\n    es: 'Creado exitosamente',\n    en: 'Created successfully'\n  },\n  \n  // Church/Member specific\n  memberAdded: {\n    es: 'Miembro agregado exitosamente',\n    en: 'Member added successfully'\n  },\n  memberUpdated: {\n    es: 'Información del miembro actualizada',\n    en: 'Member information updated'\n  },\n  memberDeleted: {\n    es: 'Miembro eliminado',\n    en: 'Member deleted'\n  },\n  \n  // Financial operations\n  donationRecorded: {\n    es: 'Donación registrada exitosamente',\n    en: 'Donation recorded successfully'\n  },\n  paymentProcessed: {\n    es: 'Pago procesado exitosamente',\n    en: 'Payment processed successfully'\n  },\n  receiptGenerated: {\n    es: 'Recibo generado exitosamente',\n    en: 'Receipt generated successfully'\n  },\n  \n  // Errors\n  saveError: {\n    es: 'Error al guardar. Intenta nuevamente.',\n    en: 'Error saving. Please try again.'\n  },\n  deleteError: {\n    es: 'Error al eliminar. Intenta nuevamente.',\n    en: 'Error deleting. Please try again.'\n  },\n  networkError: {\n    es: 'Error de conexión. Verifica tu internet.',\n    en: 'Connection error. Check your internet.'\n  },\n  validationError: {\n    es: 'Por favor corrige los errores en el formulario',\n    en: 'Please fix the errors in the form'\n  }\n}","'use client'\n\n/* eslint-disable max-lines-per-function, complexity */\n// Alert component requires comprehensive state management and conditional rendering\n\nimport { forwardRef, useState, useCallback, useEffect, ReactNode } from 'react'\nimport { X, CheckCircle2, AlertCircle, Info, AlertTriangle, ChevronDown, ChevronRight } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Alert Component\n * \n * Enhanced alert for inline feedback implementing BIRHAUS principles:\n * - Spanish-first messages and labels\n * - Progressive disclosure for detailed information\n * - Dismissible with memory (localStorage)\n * - Max 2 action buttons (cognitive load)\n * - Accessibility compliant (WCAG AA+)\n * - Icon support for visual clarity\n * - Auto-hide for temporary alerts\n * - Undo functionality for destructive actions\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport type AlertVariant = 'success' | 'error' | 'warning' | 'info'\n\nexport interface BirhausAlertAction {\n  label: string\n  labelEs?: string\n  labelEn?: string\n  onClick: () => void | Promise<void>\n  variant?: 'primary' | 'secondary'\n  loading?: boolean\n}\n\nexport interface BirhausAlertProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  message?: string\n  messageEs?: string\n  messageEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  details?: string\n  detailsEs?: string\n  detailsEn?: string\n  collapsible?: boolean\n  defaultExpanded?: boolean\n  \n  // Appearance and behavior\n  variant?: AlertVariant\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Dismissal\n  dismissible?: boolean\n  dismissKey?: string // For localStorage persistence\n  onDismiss?: () => void\n  autoHide?: boolean\n  autoHideDelay?: number\n  \n  // BIRHAUS Principle #3: Max 2 actions (cognitive load)\n  actions?: BirhausAlertAction[]\n  \n  // Icons\n  showIcon?: boolean\n  customIcon?: ReactNode\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  role?: 'alert' | 'alertdialog' | 'status'\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Standard props\n  className?: string\n  children?: ReactNode\n}\n\nexport const BirhausAlert = forwardRef<HTMLDivElement, BirhausAlertProps>(({\n  // Content (Spanish-first)\n  title,\n  titleEs,\n  titleEn,\n  message,\n  messageEs,\n  messageEn,\n  \n  // Progressive disclosure\n  details,\n  detailsEs,\n  detailsEn,\n  collapsible = false,\n  defaultExpanded = false,\n  \n  // Appearance\n  variant = 'info',\n  size = 'md',\n  \n  // Dismissal\n  dismissible = false,\n  dismissKey,\n  onDismiss,\n  autoHide = false,\n  autoHideDelay = 5000,\n  \n  // Actions (BIRHAUS: Max 2)\n  actions = [],\n  \n  // Icons\n  showIcon = true,\n  customIcon,\n  \n  // Accessibility\n  role = 'alert',\n  \n  // Locale\n  locale = 'es',\n  \n  // Standard props\n  className,\n  children,\n  ...props\n}, ref) => {\n  // State management\n  const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n  const [isDismissed, setIsDismissed] = useState(false)\n  const [actionLoading, setActionLoading] = useState<{ [key: number]: boolean }>({})\n  \n  // Check if alert was previously dismissed\n  const wasPreviouslyDismissed = dismissKey ? \n    typeof window !== 'undefined' && localStorage.getItem(`birhaus-alert-dismissed-${dismissKey}`) === 'true' : \n    false\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback?: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback || ''\n    }\n    return primary || english || spanish || fallback || ''\n  }, [locale])\n  \n  const displayTitle = getDisplayText(title, titleEs, titleEn)\n  const displayMessage = getDisplayText(message, messageEs, messageEn)\n  const displayDetails = getDisplayText(details, detailsEs, detailsEn)\n  \n  // Handle dismissal\n  const handleDismiss = useCallback(() => {\n    setIsDismissed(true)\n    \n    // Remember dismissal in localStorage\n    if (dismissKey && typeof window !== 'undefined') {\n      localStorage.setItem(`birhaus-alert-dismissed-${dismissKey}`, 'true')\n    }\n    \n    onDismiss?.()\n  }, [dismissKey, onDismiss])\n  \n  // Handle action clicks\n  const handleActionClick = useCallback(async (action: BirhausAlertAction, index: number) => {\n    setActionLoading(prev => ({ ...prev, [index]: true }))\n    \n    try {\n      await action.onClick()\n    } catch (error) {\n      console.error('Alert action error:', error)\n    } finally {\n      setActionLoading(prev => ({ ...prev, [index]: false }))\n    }\n  }, [])\n  \n  // Handle expansion toggle\n  const handleToggleExpansion = useCallback(() => {\n    setIsExpanded(prev => !prev)\n  }, [])\n  \n  // Auto-hide functionality\n  useEffect(() => {\n    if (autoHide && !isDismissed) {\n      const timer = setTimeout(() => {\n        handleDismiss()\n      }, autoHideDelay)\n      \n      return () => clearTimeout(timer)\n    }\n  }, [autoHide, autoHideDelay, isDismissed, handleDismiss])\n  \n  // Don't render if dismissed (either now or previously)\n  if (isDismissed || wasPreviouslyDismissed) {\n    return null\n  }\n  \n  // Variant configurations\n  const variantConfig = {\n    success: {\n      bg: 'bg-green-50 border-green-200',\n      icon: CheckCircle2,\n      iconColor: 'text-green-500',\n      titleColor: 'text-green-800',\n      messageColor: 'text-green-700',\n      actionPrimary: 'bg-green-600 hover:bg-green-700 text-white',\n      actionSecondary: 'text-green-700 hover:text-green-800 border-green-300'\n    },\n    error: {\n      bg: 'bg-red-50 border-red-200',\n      icon: AlertCircle,\n      iconColor: 'text-red-500',\n      titleColor: 'text-red-800',\n      messageColor: 'text-red-700',\n      actionPrimary: 'bg-red-600 hover:bg-red-700 text-white',\n      actionSecondary: 'text-red-700 hover:text-red-800 border-red-300'\n    },\n    warning: {\n      bg: 'bg-yellow-50 border-yellow-200',\n      icon: AlertTriangle,\n      iconColor: 'text-yellow-500',\n      titleColor: 'text-yellow-800',\n      messageColor: 'text-yellow-700',\n      actionPrimary: 'bg-yellow-600 hover:bg-yellow-700 text-white',\n      actionSecondary: 'text-yellow-700 hover:text-yellow-800 border-yellow-300'\n    },\n    info: {\n      bg: 'bg-blue-50 border-blue-200',\n      icon: Info,\n      iconColor: 'text-blue-500',\n      titleColor: 'text-blue-800',\n      messageColor: 'text-blue-700',\n      actionPrimary: 'bg-blue-600 hover:bg-blue-700 text-white',\n      actionSecondary: 'text-blue-700 hover:text-blue-800 border-blue-300'\n    }\n  }\n  \n  // Ensure variant is a valid key to prevent object injection\n  const validVariant = variant in variantConfig ? variant : 'info'\n  const config = safeAccess(variantConfig, validVariant, variantConfig.info)\n  const IconComponent = customIcon ? () => customIcon : config.icon\n  \n  // Size classes\n  const sizeClasses = {\n    sm: 'p-3 text-sm',\n    md: 'p-4 text-base',\n    lg: 'p-5 text-lg'\n  }\n  \n  // Ensure size is a valid key to prevent object injection\n  const validSize = size in sizeClasses ? size : 'md'\n  \n  // BIRHAUS: Limit to max 2 actions for cognitive load\n  const limitedActions = actions.slice(0, 2)\n  \n  return (\n    <div\n      ref={ref}\n      role={role}\n      aria-live={role === 'alert' ? 'polite' : undefined}\n      className={cn(\n        'birhaus-alert border rounded-lg transition-all duration-200',\n        config.bg,\n        safeAccess(sizeClasses, validSize, sizeClasses.md),\n        className\n      )}\n      {...props}\n    >\n      <div className=\"flex items-start space-x-3\">\n        {/* Icon */}\n        {showIcon && (\n          <div className=\"flex-shrink-0\">\n            <IconComponent className={cn('h-5 w-5', config.iconColor)} />\n          </div>\n        )}\n        \n        {/* Content */}\n        <div className=\"flex-1 min-w-0\">\n          {/* Header */}\n          <div className=\"flex items-start justify-between\">\n            <div className=\"flex-1\">\n              {/* Title */}\n              {displayTitle && (\n                <h3 className={cn('font-medium', config.titleColor)}>\n                  {displayTitle}\n                </h3>\n              )}\n              \n              {/* Message */}\n              {displayMessage && (\n                <p className={cn(\n                  'mt-1',\n                  config.messageColor,\n                  !displayTitle && 'font-medium'\n                )}>\n                  {displayMessage}\n                </p>\n              )}\n              \n              {/* Custom content */}\n              {children && (\n                <div className={cn('mt-2', config.messageColor)}>\n                  {children}\n                </div>\n              )}\n            </div>\n            \n            {/* Dismiss button */}\n            {dismissible && (\n              <button\n                type=\"button\"\n                onClick={handleDismiss}\n                className=\"flex-shrink-0 ml-3 text-gray-400 hover:text-gray-600 transition-colors\"\n                aria-label=\"Cerrar alerta\"\n              >\n                <X className=\"h-4 w-4\" />\n              </button>\n            )}\n          </div>\n          \n          {/* Collapsible details */}\n          {collapsible && displayDetails && (\n            <div className=\"mt-2\">\n              <button\n                type=\"button\"\n                onClick={handleToggleExpansion}\n                className={cn(\n                  'flex items-center space-x-1 text-sm font-medium transition-colors',\n                  config.titleColor,\n                  'hover:opacity-80'\n                )}\n                aria-expanded={isExpanded}\n                aria-controls={`details-${dismissKey || 'default'}`}\n              >\n                {isExpanded ? (\n                  <ChevronDown className=\"h-4 w-4\" />\n                ) : (\n                  <ChevronRight className=\"h-4 w-4\" />\n                )}\n                <span>{isExpanded ? 'Ocultar detalles' : 'Ver detalles'}</span>\n              </button>\n              \n              {isExpanded && (\n                <div\n                  id={`details-${dismissKey || 'default'}`}\n                  className={cn('mt-2 text-sm', config.messageColor)}\n                >\n                  {displayDetails}\n                </div>\n              )}\n            </div>\n          )}\n          \n          {/* Actions */}\n          {limitedActions.length > 0 && (\n            <div className=\"mt-3 flex flex-wrap items-center gap-2\">\n              {limitedActions.map((action, index) => {\n                const displayActionLabel = getDisplayText(\n                  action.label,\n                  action.labelEs,\n                  action.labelEn,\n                  action.label\n                )\n                // Safe array access with bounds checking\n                const isLoading = Array.isArray(actionLoading) \n                  ? safeArrayAccess(actionLoading, index, false)\n                  : false\n                const isPrimary = action.variant === 'primary' || index === 0\n                \n                return (\n                  <button\n                    key={index}\n                    type=\"button\"\n                    onClick={() => handleActionClick(action, index)}\n                    disabled={isLoading || action.loading}\n                    className={cn(\n                      'inline-flex items-center px-3 py-1.5 text-sm font-medium rounded-md',\n                      'transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed',\n                      isPrimary ? config.actionPrimary : cn(\n                        'border bg-transparent',\n                        config.actionSecondary\n                      )\n                    )}\n                  >\n                    {(isLoading || action.loading) && (\n                      <div className=\"animate-spin h-3 w-3 border border-current border-t-transparent rounded-full mr-2\" />\n                    )}\n                    {displayActionLabel}\n                  </button>\n                )\n              })}\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n})\n\nBirhausAlert.displayName = 'BirhausAlert'\n\n// Hook for managing alert state\nexport const useBirhausAlert = (dismissKey?: string) => {\n  const [isVisible, setIsVisible] = useState(true)\n  \n  const dismiss = useCallback(() => {\n    setIsVisible(false)\n    \n    if (dismissKey && typeof window !== 'undefined') {\n      localStorage.setItem(`birhaus-alert-dismissed-${dismissKey}`, 'true')\n    }\n  }, [dismissKey])\n  \n  const reset = useCallback(() => {\n    setIsVisible(true)\n    \n    if (dismissKey && typeof window !== 'undefined') {\n      localStorage.removeItem(`birhaus-alert-dismissed-${dismissKey}`)\n    }\n  }, [dismissKey])\n  \n  const wasDismissed = dismissKey && typeof window !== 'undefined' ? \n    localStorage.getItem(`birhaus-alert-dismissed-${dismissKey}`) === 'true' : \n    false\n  \n  return {\n    isVisible: isVisible && !wasDismissed,\n    dismiss,\n    reset,\n    wasDismissed\n  }\n}\n\n// Common alert configurations for IPU Admin\nexport const birhausAlertPresets = {\n  // Success alerts\n  memberSaved: {\n    variant: 'success' as const,\n    titleEs: 'Miembro Guardado',\n    titleEn: 'Member Saved',\n    messageEs: 'La información del miembro se guardó exitosamente.',\n    messageEn: 'Member information was saved successfully.'\n  },\n  \n  donationRecorded: {\n    variant: 'success' as const,\n    titleEs: 'Donación Registrada',\n    titleEn: 'Donation Recorded',\n    messageEs: 'La donación se registró exitosamente en el sistema.',\n    messageEn: 'The donation was successfully recorded in the system.'\n  },\n  \n  paymentProcessed: {\n    variant: 'success' as const,\n    titleEs: 'Pago Procesado',\n    titleEn: 'Payment Processed',\n    messageEs: 'El pago se procesó exitosamente.',\n    messageEn: 'The payment was processed successfully.'\n  },\n  \n  // Error alerts\n  saveError: {\n    variant: 'error' as const,\n    titleEs: 'Error al Guardar',\n    titleEn: 'Save Error',\n    messageEs: 'No se pudo guardar la información. Por favor intenta nuevamente.',\n    messageEn: 'Could not save information. Please try again.',\n    dismissible: true\n  },\n  \n  validationError: {\n    variant: 'error' as const,\n    titleEs: 'Errores en el Formulario',\n    titleEn: 'Form Errors',\n    messageEs: 'Por favor corrige los errores marcados en el formulario.',\n    messageEn: 'Please fix the errors marked in the form.',\n    dismissible: true\n  },\n  \n  networkError: {\n    variant: 'error' as const,\n    titleEs: 'Error de Conexión',\n    titleEn: 'Connection Error',\n    messageEs: 'No se pudo conectar con el servidor. Verifica tu conexión a internet.',\n    messageEn: 'Could not connect to server. Check your internet connection.',\n    dismissible: true\n  },\n  \n  // Warning alerts\n  unsavedChanges: {\n    variant: 'warning' as const,\n    titleEs: 'Cambios No Guardados',\n    titleEn: 'Unsaved Changes',\n    messageEs: 'Tienes cambios sin guardar que se perderán si sales de esta página.',\n    messageEn: 'You have unsaved changes that will be lost if you leave this page.',\n    actions: [\n      {\n        label: 'Guardar',\n        labelEs: 'Guardar',\n        labelEn: 'Save',\n        variant: 'primary' as const,\n        onClick: () => {}\n      },\n      {\n        label: 'Descartar',\n        labelEs: 'Descartar',\n        labelEn: 'Discard',\n        variant: 'secondary' as const,\n        onClick: () => {}\n      }\n    ]\n  },\n  \n  deleteConfirmation: {\n    variant: 'warning' as const,\n    titleEs: '¿Eliminar elemento?',\n    titleEn: 'Delete item?',\n    messageEs: 'Esta acción no se puede deshacer.',\n    messageEn: 'This action cannot be undone.',\n    actions: [\n      {\n        label: 'Eliminar',\n        labelEs: 'Eliminar',\n        labelEn: 'Delete',\n        variant: 'primary' as const,\n        onClick: () => {}\n      },\n      {\n        label: 'Cancelar',\n        labelEs: 'Cancelar',\n        labelEn: 'Cancel',\n        variant: 'secondary' as const,\n        onClick: () => {}\n      }\n    ]\n  },\n  \n  // Info alerts\n  backupReminder: {\n    variant: 'info' as const,\n    titleEs: 'Recordatorio de Respaldo',\n    titleEn: 'Backup Reminder',\n    messageEs: 'Se recomienda hacer un respaldo de los datos semanalmente.',\n    messageEn: 'It is recommended to backup data weekly.',\n    detailsEs: 'Ve a Configuración > Respaldos para crear un respaldo completo de todos los datos de la iglesia.',\n    detailsEn: 'Go to Settings > Backups to create a complete backup of all church data.',\n    collapsible: true,\n    dismissible: true,\n    dismissKey: 'backup-reminder-weekly'\n  },\n  \n  updateAvailable: {\n    variant: 'info' as const,\n    titleEs: 'Actualización Disponible',\n    titleEn: 'Update Available',\n    messageEs: 'Hay una nueva versión de IPU Admin disponible.',\n    messageEn: 'A new version of IPU Admin is available.',\n    actions: [\n      {\n        label: 'Actualizar',\n        labelEs: 'Actualizar',\n        labelEn: 'Update',\n        variant: 'primary' as const,\n        onClick: () => {}\n      },\n      {\n        label: 'Después',\n        labelEs: 'Después',\n        labelEn: 'Later',\n        variant: 'secondary' as const,\n        onClick: () => {}\n      }\n    ]\n  }\n}","'use client'\n\nimport { forwardRef, ReactNode, useCallback } from 'react'\nimport { FileText, Users, DollarSign, Calendar, Search, Plus, RefreshCw, AlertCircle } from 'lucide-react'\n\n/**\n * BIRHAUS Empty State Component\n * \n * Enhanced empty state for zero-data scenarios implementing BIRHAUS principles:\n * - Spanish-first messages (\"No hay miembros registrados\")\n * - Helpful action suggestions with max 2 actions (cognitive load)\n * - Appropriate icons for context\n * - Progressive disclosure for help information\n * - Accessibility compliant (WCAG AA+)\n * - IPU Admin specific presets for common scenarios\n * - Consistent visual hierarchy\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface BirhausEmptyStateAction {\n  label: string\n  labelEs?: string\n  labelEn?: string\n  onClick: () => void | Promise<void>\n  variant?: 'primary' | 'secondary'\n  icon?: ReactNode\n  loading?: boolean\n}\n\nexport interface BirhausEmptyStateProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  helpText?: string\n  helpTextEs?: string\n  helpTextEn?: string\n  showHelpText?: boolean\n  \n  // Visual elements\n  icon?: ReactNode\n  illustration?: ReactNode\n  size?: 'sm' | 'md' | 'lg'\n  \n  // BIRHAUS Principle #3: Max 2 actions (cognitive load)\n  actions?: BirhausEmptyStateAction[]\n  \n  // Predefined scenarios for IPU Admin\n  scenario?: 'members' | 'donations' | 'events' | 'search' | 'reports' | 'general'\n  \n  // State indicators\n  loading?: boolean\n  error?: boolean\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  role?: string\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Standard props\n  className?: string\n  children?: ReactNode\n}\n\nexport const BirhausEmptyState = forwardRef<HTMLDivElement, BirhausEmptyStateProps>(({\n  // Content (Spanish-first)\n  title,\n  titleEs,\n  titleEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Progressive disclosure\n  helpText,\n  helpTextEs,\n  helpTextEn,\n  showHelpText = false,\n  \n  // Visual elements\n  icon,\n  illustration,\n  size = 'md',\n  \n  // Actions (BIRHAUS: Max 2)\n  actions = [],\n  \n  // Predefined scenarios\n  scenario,\n  \n  // State\n  loading = false,\n  error = false,\n  \n  // Accessibility\n  role = 'region',\n  \n  // Locale\n  locale = 'es',\n  \n  // Standard props\n  className,\n  children,\n  ...props\n}, ref) => {\n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  // Predefined scenarios for IPU Admin\n  const scenarioConfig = {\n    members: {\n      icon: Users,\n      titleEs: 'No hay miembros registrados',\n      titleEn: 'No members registered',\n      descriptionEs: 'Comienza agregando el primer miembro de tu iglesia.',\n      descriptionEn: 'Start by adding the first member of your church.',\n      helpTextEs: 'Los miembros son el corazón de tu iglesia. Aquí podrás registrar información personal, historial de participación y roles ministeriales.',\n      helpTextEn: 'Members are the heart of your church. Here you can register personal information, participation history and ministerial roles.',\n      defaultActions: [\n        {\n          labelEs: 'Agregar Miembro',\n          labelEn: 'Add Member',\n          variant: 'primary' as const,\n          icon: <Plus className=\"h-4 w-4\" />\n        }\n      ]\n    },\n    donations: {\n      icon: DollarSign,\n      titleEs: 'No hay donaciones registradas',\n      titleEn: 'No donations recorded',\n      descriptionEs: 'Registra las primeras donaciones y ofrendas de tu iglesia.',\n      descriptionEn: 'Record the first donations and offerings from your church.',\n      helpTextEs: 'El registro de donaciones te permite mantener un control financiero transparente y generar recibos para los donantes.',\n      helpTextEn: 'Donation recording allows you to maintain transparent financial control and generate receipts for donors.',\n      defaultActions: [\n        {\n          labelEs: 'Registrar Donación',\n          labelEn: 'Record Donation',\n          variant: 'primary' as const,\n          icon: <Plus className=\"h-4 w-4\" />\n        }\n      ]\n    },\n    events: {\n      icon: Calendar,\n      titleEs: 'No hay eventos programados',\n      titleEn: 'No events scheduled',\n      descriptionEs: 'Crea el primer evento para tu congregación.',\n      descriptionEn: 'Create the first event for your congregation.',\n      helpTextEs: 'Los eventos te ayudan a organizar cultos, reuniones especiales, actividades sociales y programas ministeriales.',\n      helpTextEn: 'Events help you organize services, special meetings, social activities and ministerial programs.',\n      defaultActions: [\n        {\n          labelEs: 'Crear Evento',\n          labelEn: 'Create Event',\n          variant: 'primary' as const,\n          icon: <Plus className=\"h-4 w-4\" />\n        }\n      ]\n    },\n    search: {\n      icon: Search,\n      titleEs: 'No se encontraron resultados',\n      titleEn: 'No results found',\n      descriptionEs: 'Intenta con otros términos de búsqueda o verifica la ortografía.',\n      descriptionEn: 'Try different search terms or check spelling.',\n      helpTextEs: 'Puedes buscar por nombre, apellido, teléfono, email o cualquier información relacionada con los miembros.',\n      helpTextEn: 'You can search by name, surname, phone, email or any information related to members.',\n      defaultActions: [\n        {\n          labelEs: 'Limpiar Filtros',\n          labelEn: 'Clear Filters',\n          variant: 'secondary' as const,\n          icon: <RefreshCw className=\"h-4 w-4\" />\n        }\n      ]\n    },\n    reports: {\n      icon: FileText,\n      titleEs: 'No hay datos para el reporte',\n      titleEn: 'No data for report',\n      descriptionEs: 'No hay información suficiente para generar este reporte.',\n      descriptionEn: 'There is not enough information to generate this report.',\n      helpTextEs: 'Los reportes se generan automáticamente cuando tienes datos registrados en el sistema.',\n      helpTextEn: 'Reports are generated automatically when you have data registered in the system.',\n      defaultActions: [\n        {\n          labelEs: 'Cambiar Período',\n          labelEn: 'Change Period',\n          variant: 'secondary' as const,\n          icon: <Calendar className=\"h-4 w-4\" />\n        }\n      ]\n    },\n    general: {\n      icon: AlertCircle,\n      titleEs: 'No hay elementos',\n      titleEn: 'No items',\n      descriptionEs: 'No se encontraron elementos en esta sección.',\n      descriptionEn: 'No items found in this section.',\n      helpTextEs: 'Esta sección se poblará automáticamente cuando agregues contenido relevante.',\n      helpTextEn: 'This section will populate automatically when you add relevant content.',\n      defaultActions: []\n    }\n  }\n  \n  // Get configuration for scenario\n  const config = scenario ? scenarioConfig[scenario] : null\n  \n  // Resolve content with scenario fallbacks\n  const displayTitle = getDisplayText(\n    title,\n    titleEs || config?.titleEs,\n    titleEn || config?.titleEn,\n    config?.titleEs || 'Sin contenido'\n  )\n  \n  const displayDescription = getDisplayText(\n    description,\n    descriptionEs || config?.descriptionEs,\n    descriptionEn || config?.descriptionEn,\n    config?.descriptionEs || ''\n  )\n  \n  const displayHelpText = getDisplayText(\n    helpText,\n    helpTextEs || config?.helpTextEs,\n    helpTextEn || config?.helpTextEn,\n    config?.helpTextEs || ''\n  )\n  \n  // Use provided icon or scenario icon\n  const IconComponent = icon ? () => icon : config?.icon\n  \n  // Combine provided actions with scenario defaults\n  const allActions = [...actions, ...(config?.defaultActions || [])]\n  \n  // BIRHAUS: Limit to max 2 actions for cognitive load\n  const limitedActions = allActions.slice(0, 2)\n  \n  // Size classes\n  const sizeClasses = {\n    sm: {\n      container: 'py-8 px-4',\n      icon: 'h-8 w-8',\n      title: 'text-lg',\n      description: 'text-sm',\n      spacing: 'space-y-3'\n    },\n    md: {\n      container: 'py-12 px-6',\n      icon: 'h-12 w-12',\n      title: 'text-xl',\n      description: 'text-base',\n      spacing: 'space-y-4'\n    },\n    lg: {\n      container: 'py-16 px-8',\n      icon: 'h-16 w-16',\n      title: 'text-2xl',\n      description: 'text-lg',\n      spacing: 'space-y-6'\n    }\n  }\n  \n  const sizeConfig = sizeClasses[size]\n  \n  // Loading state\n  if (loading) {\n    return (\n      <div\n        ref={ref}\n        role={role}\n        className={cn(\n          'birhaus-empty-state flex flex-col items-center justify-center text-center',\n          sizeConfig.container,\n          sizeConfig.spacing,\n          className\n        )}\n        {...props}\n      >\n        <div className=\"animate-spin h-8 w-8 border-4 border-gray-200 border-t-primary-600 rounded-full\" />\n        <p className=\"text-gray-600\">\n          {locale === 'es' ? 'Cargando...' : 'Loading...'}\n        </p>\n      </div>\n    )\n  }\n  \n  // Error state\n  if (error) {\n    return (\n      <div\n        ref={ref}\n        role=\"alert\"\n        className={cn(\n          'birhaus-empty-state flex flex-col items-center justify-center text-center',\n          sizeConfig.container,\n          sizeConfig.spacing,\n          className\n        )}\n        {...props}\n      >\n        <AlertCircle className={cn('text-red-500', sizeConfig.icon)} />\n        <div>\n          <h3 className={cn('font-semibold text-red-800', sizeConfig.title)}>\n            {locale === 'es' ? 'Error al cargar' : 'Error loading'}\n          </h3>\n          <p className={cn('text-red-600 mt-1', sizeConfig.description)}>\n            {locale === 'es' \n              ? 'No se pudo cargar el contenido. Intenta nuevamente.' \n              : 'Could not load content. Please try again.'\n            }\n          </p>\n        </div>\n        <button\n          type=\"button\"\n          onClick={() => window.location.reload()}\n          className=\"inline-flex items-center space-x-2 px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-700 transition-colors\"\n        >\n          <RefreshCw className=\"h-4 w-4\" />\n          <span>{locale === 'es' ? 'Reintentar' : 'Retry'}</span>\n        </button>\n      </div>\n    )\n  }\n  \n  return (\n    <div\n      ref={ref}\n      role={role}\n      aria-label={displayTitle}\n      className={cn(\n        'birhaus-empty-state flex flex-col items-center justify-center text-center',\n        sizeConfig.container,\n        sizeConfig.spacing,\n        className\n      )}\n      {...props}\n    >\n      {/* Illustration or Icon */}\n      {illustration ? (\n        <div className=\"flex-shrink-0\">\n          {illustration}\n        </div>\n      ) : IconComponent ? (\n        <div className=\"flex-shrink-0\">\n          <IconComponent className={cn('text-gray-400', sizeConfig.icon)} />\n        </div>\n      ) : null}\n      \n      {/* Content */}\n      <div className=\"max-w-md mx-auto\">\n        {/* Title */}\n        <h3 className={cn('font-semibold text-gray-900', sizeConfig.title)}>\n          {displayTitle}\n        </h3>\n        \n        {/* Description */}\n        {displayDescription && (\n          <p className={cn('text-gray-600 mt-1', sizeConfig.description)}>\n            {displayDescription}\n          </p>\n        )}\n        \n        {/* Custom Content */}\n        {children && (\n          <div className=\"mt-2\">\n            {children}\n          </div>\n        )}\n      </div>\n      \n      {/* Actions */}\n      {limitedActions.length > 0 && (\n        <div className=\"flex flex-wrap items-center justify-center gap-3\">\n          {limitedActions.map((action, index) => {\n            const displayActionLabel = getDisplayText(\n              'label' in action ? action.label : '',\n              'labelEs' in action ? action.labelEs : '',\n              'labelEn' in action ? action.labelEn : '',\n              'label' in action ? action.label : 'Action'\n            )\n            const isPrimary = ('variant' in action ? action.variant : undefined) === 'primary' || index === 0\n            \n            return (\n              <button\n                key={index}\n                type=\"button\"\n                onClick={'onClick' in action ? action.onClick : () => {}}\n                disabled={'loading' in action ? action.loading : false}\n                className={cn(\n                  'inline-flex items-center space-x-2 px-4 py-2 text-sm font-medium rounded-md',\n                  'transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed',\n                  isPrimary ? \n                    'bg-primary-600 text-white hover:bg-primary-700' :\n                    'bg-white text-gray-700 border border-gray-300 hover:bg-gray-50'\n                )}\n              >\n                {('loading' in action ? action.loading : false) && (\n                  <div className=\"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full\" />\n                )}\n                {!('loading' in action ? action.loading : false) && ('icon' in action ? action.icon : null) && (\n                  <span>{'icon' in action ? action.icon : null}</span>\n                )}\n                <span>{displayActionLabel}</span>\n              </button>\n            )\n          })}\n        </div>\n      )}\n      \n      {/* Help Text */}\n      {(showHelpText || size === 'lg') && displayHelpText && (\n        <div className=\"max-w-lg mx-auto\">\n          <p className=\"text-sm text-gray-500 leading-relaxed\">\n            {displayHelpText}\n          </p>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausEmptyState.displayName = 'BirhausEmptyState'\n\n// Hook for managing empty state scenarios\nexport const useBirhausEmptyState = (\n  data: any[] | null | undefined,\n  loading: boolean = false,\n  error: Error | null = null\n) => {\n  const isEmpty = !loading && !error && (!data || data.length === 0)\n  const hasError = !loading && !!error\n  const isLoading = loading\n  \n  return {\n    isEmpty,\n    hasError,\n    isLoading,\n    showEmptyState: isEmpty || hasError || isLoading,\n    errorMessage: error?.message\n  }\n}\n\n// Common empty state configurations for IPU Admin\nexport const birhausEmptyStatePresets = {\n  // Members section\n  noMembers: {\n    scenario: 'members' as const,\n    actions: [\n      {\n        labelEs: 'Agregar Primer Miembro',\n        labelEn: 'Add First Member',\n        variant: 'primary' as const,\n        icon: <Plus className=\"h-4 w-4\" />,\n        onClick: () => console.log('Navigate to add member')\n      }\n    ]\n  },\n  \n  filteredMembers: {\n    scenario: 'search' as const,\n    titleEs: 'No se encontraron miembros',\n    titleEn: 'No members found',\n    descriptionEs: 'Intenta ajustar los filtros de búsqueda.',\n    descriptionEn: 'Try adjusting the search filters.',\n    actions: [\n      {\n        labelEs: 'Limpiar Filtros',\n        labelEn: 'Clear Filters',\n        variant: 'secondary' as const,\n        icon: <RefreshCw className=\"h-4 w-4\" />,\n        onClick: () => console.log('Clear filters')\n      }\n    ]\n  },\n  \n  // Donations section\n  noDonations: {\n    scenario: 'donations' as const,\n    actions: [\n      {\n        labelEs: 'Registrar Primera Donación',\n        labelEn: 'Record First Donation',\n        variant: 'primary' as const,\n        icon: <Plus className=\"h-4 w-4\" />,\n        onClick: () => console.log('Navigate to add donation')\n      }\n    ]\n  },\n  \n  monthlyDonations: {\n    scenario: 'reports' as const,\n    titleEs: 'No hay donaciones este mes',\n    titleEn: 'No donations this month',\n    descriptionEs: 'No se registraron donaciones en el período seleccionado.',\n    descriptionEn: 'No donations were recorded in the selected period.',\n    actions: [\n      {\n        labelEs: 'Ver Mes Anterior',\n        labelEn: 'View Previous Month',\n        variant: 'secondary' as const,\n        icon: <Calendar className=\"h-4 w-4\" />,\n        onClick: () => console.log('Change to previous month')\n      }\n    ]\n  },\n  \n  // Events section\n  noEvents: {\n    scenario: 'events' as const,\n    actions: [\n      {\n        labelEs: 'Crear Primer Evento',\n        labelEn: 'Create First Event',\n        variant: 'primary' as const,\n        icon: <Plus className=\"h-4 w-4\" />,\n        onClick: () => console.log('Navigate to create event')\n      }\n    ]\n  },\n  \n  upcomingEvents: {\n    scenario: 'events' as const,\n    titleEs: 'No hay eventos próximos',\n    titleEn: 'No upcoming events',\n    descriptionEs: 'No hay eventos programados para las próximas semanas.',\n    descriptionEn: 'No events scheduled for the coming weeks.',\n    actions: [\n      {\n        labelEs: 'Programar Evento',\n        labelEn: 'Schedule Event',\n        variant: 'primary' as const,\n        icon: <Plus className=\"h-4 w-4\" />,\n        onClick: () => console.log('Navigate to schedule event')\n      }\n    ]\n  },\n  \n  // Reports section\n  noReportData: {\n    scenario: 'reports' as const,\n    titleEs: 'Insuficientes datos para el reporte',\n    titleEn: 'Insufficient data for report',\n    descriptionEs: 'Necesitas más datos registrados para generar este reporte.',\n    descriptionEn: 'You need more data registered to generate this report.',\n    helpTextEs: 'Los reportes requieren al menos 30 días de datos para mostrar tendencias significativas.',\n    helpTextEn: 'Reports require at least 30 days of data to show meaningful trends.',\n    actions: [\n      {\n        labelEs: 'Ver Datos Disponibles',\n        labelEn: 'View Available Data',\n        variant: 'secondary' as const,\n        icon: <FileText className=\"h-4 w-4\" />,\n        onClick: () => console.log('Navigate to data overview')\n      }\n    ]\n  }\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useCallback } from 'react'\nimport { Calendar, ChevronDown, X, Check, RotateCcw } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Date Range Picker Component\n * \n * Enhanced date range picker implementing all 10 BIRHAUS principles:\n * - Spanish-first date formatting (DD/MM/YYYY)\n * - Progressive disclosure with presets and custom range\n * - Cognitive load reduction with max 30-day default ranges\n * - Accessibility compliance (WCAG AA+)\n * - Undo functionality for significant date changes\n * - Auto-validation for business rules\n * - IPU Admin specific presets for reports\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\n// Date utilities for Spanish-first formatting\nconst MESES_ESPANOL = [\n  'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\n  'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\n]\n\nconst DIAS_CORTOS_ESPANOL = ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb']\n\nexport interface DateRange {\n  start: Date | null\n  end: Date | null\n}\n\nexport interface PresetRange {\n  id: string\n  labelEs: string\n  labelEn: string\n  getValue: () => DateRange\n  isDefault?: boolean\n}\n\ninterface UndoState {\n  previousRange: DateRange\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausDateRangePickerProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Value management\n  value?: DateRange\n  defaultValue?: DateRange\n  onChange?: (range: DateRange) => void\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Validation\n  minDate?: Date\n  maxDate?: Date\n  maxRangeDays?: number // Max days in range (default 30)\n  \n  // Presets for IPU Admin\n  presets?: PresetRange[]\n  showPresets?: boolean\n  enableCustomRange?: boolean\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  required?: boolean\n  placeholder?: string\n  \n  // BIRHAUS Principle #8: Performance is UX\n  autoApply?: boolean // Apply immediately vs requiring confirmation\n  \n  // Cognitive load\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'minimal'\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  reportType?: 'financial' | 'membership' | 'events' | 'custom'\n}\n\nexport const BirhausDateRangePicker = forwardRef<HTMLDivElement, BirhausDateRangePickerProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Value\n  value,\n  defaultValue,\n  onChange,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  minDate,\n  maxDate,\n  maxRangeDays = 30,\n  \n  // Presets\n  presets,\n  showPresets = true,\n  enableCustomRange = true,\n  \n  // Undo\n  enableUndo = true,\n  undoTimeoutMs = 10000,\n  \n  // Basic props\n  disabled = false,\n  required = false,\n  placeholder,\n  autoApply = false,\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  reportType = 'custom'\n}, ref) => {\n  // State management\n  const [internalRange, setInternalRange] = useState<DateRange>(\n    value || defaultValue || { start: null, end: null }\n  )\n  const [isOpen, setIsOpen] = useState(false)\n  const [activePreset, setActivePreset] = useState<string>('')\n  const [customMode, setCustomMode] = useState(false)\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousRange: { start: null, end: null },\n    timeout: null,\n    isActive: false\n  })\n  const [validationError, setValidationError] = useState<string>('')\n  \n  // Refs\n  const containerRef = useRef<HTMLDivElement>(null)\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || errorEs || validationError\n  \n  // Default presets for IPU Admin\n  const getDefaultPresets = useCallback((): PresetRange[] => {\n    const today = new Date()\n    const startOfToday = new Date(today.getFullYear(), today.getMonth(), today.getDate())\n    \n    const basePresets: PresetRange[] = [\n      {\n        id: 'today',\n        labelEs: 'Hoy',\n        labelEn: 'Today',\n        getValue: () => ({\n          start: startOfToday,\n          end: startOfToday\n        })\n      },\n      {\n        id: 'week',\n        labelEs: 'Última semana',\n        labelEn: 'Last week',\n        getValue: () => {\n          const end = new Date(startOfToday)\n          const start = new Date(end)\n          start.setDate(start.getDate() - 6)\n          return { start, end }\n        },\n        isDefault: true\n      },\n      {\n        id: 'month',\n        labelEs: 'Último mes',\n        labelEn: 'Last month',\n        getValue: () => {\n          const end = new Date(startOfToday)\n          const start = new Date(end)\n          start.setDate(start.getDate() - 29)\n          return { start, end }\n        }\n      },\n      {\n        id: 'quarter',\n        labelEs: 'Último trimestre',\n        labelEn: 'Last quarter',\n        getValue: () => {\n          const end = new Date(startOfToday)\n          const start = new Date(end)\n          start.setDate(start.getDate() - 89)\n          return { start, end }\n        }\n      }\n    ]\n    \n    // Add report-specific presets\n    if (reportType === 'financial') {\n      basePresets.push({\n        id: 'fiscal_year',\n        labelEs: 'Año fiscal actual',\n        labelEn: 'Current fiscal year',\n        getValue: () => {\n          const end = new Date(startOfToday)\n          const start = new Date(end.getFullYear(), 0, 1) // January 1st\n          return { start, end }\n        }\n      })\n    }\n    \n    if (reportType === 'membership') {\n      basePresets.push({\n        id: 'year_to_date',\n        labelEs: 'Lo que va del año',\n        labelEn: 'Year to date',\n        getValue: () => {\n          const end = new Date(startOfToday)\n          const start = new Date(end.getFullYear(), 0, 1)\n          return { start, end }\n        }\n      })\n    }\n    \n    return basePresets\n  }, [reportType])\n  \n  const allPresets = presets || getDefaultPresets()\n  \n  // Format date for display (DD/MM/YYYY for Spanish)\n  const formatDate = useCallback((date: Date | null): string => {\n    if (!date) return ''\n    \n    if (locale === 'es') {\n      return date.toLocaleDateString('es-ES', {\n        day: '2-digit',\n        month: '2-digit', \n        year: 'numeric'\n      })\n    }\n    \n    return date.toLocaleDateString('en-US', {\n      month: 'short',\n      day: 'numeric',\n      year: 'numeric'\n    })\n  }, [locale])\n  \n  // Validation function\n  const validateRange = useCallback((range: DateRange): string => {\n    if (!range.start || !range.end) {\n      return locale === 'es' \n        ? 'Selecciona fechas de inicio y fin'\n        : 'Select start and end dates'\n    }\n    \n    if (range.start > range.end) {\n      return locale === 'es'\n        ? 'La fecha de inicio debe ser anterior a la fecha de fin'\n        : 'Start date must be before end date'\n    }\n    \n    if (minDate && range.start < minDate) {\n      return locale === 'es'\n        ? `La fecha de inicio no puede ser anterior a ${formatDate(minDate)}`\n        : `Start date cannot be before ${formatDate(minDate)}`\n    }\n    \n    if (maxDate && range.end > maxDate) {\n      return locale === 'es'\n        ? `La fecha de fin no puede ser posterior a ${formatDate(maxDate)}`\n        : `End date cannot be after ${formatDate(maxDate)}`\n    }\n    \n    const daysDiff = Math.ceil((range.end.getTime() - range.start.getTime()) / (1000 * 60 * 60 * 24))\n    if (daysDiff > maxRangeDays) {\n      return locale === 'es'\n        ? `El rango no puede exceder ${maxRangeDays} días`\n        : `Range cannot exceed ${maxRangeDays} days`\n    }\n    \n    return ''\n  }, [minDate, maxDate, maxRangeDays, formatDate, locale])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setInternalRange(undoState.previousRange)\n      onChange?.(undoState.previousRange)\n      setUndoState({ previousRange: { start: null, end: null }, timeout: null, isActive: false })\n    }\n  }, [undoState, onChange])\n  \n  // Setup undo for significant changes\n  const setupUndo = useCallback((newRange: DateRange, oldRange: DateRange) => {\n    if (!enableUndo) return\n    \n    // Check if this is a significant change (different dates)\n    const isSignificant = (\n      newRange.start?.getTime() !== oldRange.start?.getTime() ||\n      newRange.end?.getTime() !== oldRange.end?.getTime()\n    )\n    \n    if (isSignificant && (oldRange.start || oldRange.end)) {\n      // Clear existing timeout\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n      \n      // Set up new undo state\n      const timeout = setTimeout(() => {\n        setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n      }, undoTimeoutMs)\n      \n      setUndoState({\n        previousRange: oldRange,\n        timeout,\n        isActive: true\n      })\n    }\n  }, [enableUndo, undoTimeoutMs, undoState.timeout])\n  \n  // Handle preset selection\n  const handlePresetSelect = useCallback((preset: PresetRange) => {\n    const oldRange = { ...internalRange }\n    const newRange = preset.getValue()\n    \n    setInternalRange(newRange)\n    setActivePreset(preset.id)\n    setCustomMode(false)\n    setValidationError('')\n    \n    // Setup undo\n    setupUndo(newRange, oldRange)\n    \n    if (autoApply) {\n      onChange?.(newRange)\n      setIsOpen(false)\n    }\n  }, [internalRange, autoApply, onChange, setupUndo])\n  \n  // Handle custom range changes\n  const handleCustomRangeChange = useCallback((field: 'start' | 'end', date: Date | null) => {\n    const oldRange = { ...internalRange }\n    const newRange = { ...internalRange, [field]: date }\n    \n    setInternalRange(newRange)\n    setActivePreset('')\n    setCustomMode(true)\n    \n    // Validate\n    const errorMessage = validateRange(newRange)\n    setValidationError(errorMessage)\n    \n    // Setup undo if valid and complete\n    if (!errorMessage && newRange.start && newRange.end) {\n      setupUndo(newRange, oldRange)\n      \n      if (autoApply) {\n        onChange?.(newRange)\n      }\n    }\n  }, [internalRange, validateRange, setupUndo, autoApply, onChange])\n  \n  // Apply range (for non-auto apply mode)\n  const handleApply = useCallback(() => {\n    const errorMessage = validateRange(internalRange)\n    if (!errorMessage) {\n      onChange?.(internalRange)\n      setIsOpen(false)\n    } else {\n      setValidationError(errorMessage)\n    }\n  }, [internalRange, validateRange, onChange])\n  \n  // Display text for selected range\n  const getDisplayValue = useCallback((): string => {\n    if (!internalRange.start && !internalRange.end) {\n      return placeholder || (locale === 'es' ? 'Seleccionar rango de fechas' : 'Select date range')\n    }\n    \n    if (internalRange.start && internalRange.end) {\n      if (locale === 'es') {\n        return `${formatDate(internalRange.start)} - ${formatDate(internalRange.end)}`\n      }\n      return `${formatDate(internalRange.start)} to ${formatDate(internalRange.end)}`\n    }\n    \n    return locale === 'es' ? 'Rango incompleto' : 'Incomplete range'\n  }, [internalRange, formatDate, placeholder, locale])\n  \n  // Click outside handler\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n      }\n    }\n    \n    if (isOpen) {\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [isOpen])\n  \n  // Sync external value changes\n  useEffect(() => {\n    if (value && (\n      value.start?.getTime() !== internalRange.start?.getTime() ||\n      value.end?.getTime() !== internalRange.end?.getTime()\n    )) {\n      setInternalRange(value)\n    }\n  }, [value, internalRange])\n  \n  // Cleanup undo timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: 'text-sm px-2 py-1',\n    md: 'text-base px-3 py-2', \n    lg: 'text-lg px-4 py-3'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-300',\n    minimal: 'bg-transparent border-b border-gray-300'\n  }\n  \n  return (\n    <div ref={ref} className=\"birhaus-date-range-picker\">\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n        </label>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600 mb-2\">\n          {displayDescription}\n        </p>\n      )}\n      \n      {/* Main Input */}\n      <div ref={containerRef} className=\"relative\">\n        <button\n          type=\"button\"\n          onClick={() => setIsOpen(!isOpen)}\n          disabled={disabled}\n          className={cn(\n            'w-full flex items-center justify-between rounded-md transition-colors duration-200',\n            'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n            safeAccess(sizeClasses, size, sizeClasses.md),\n            safeAccess(variantClasses, variant, variantClasses.default),\n            displayError ? 'border-red-300 focus:border-red-500' : 'border-gray-300 focus:border-primary-500',\n            disabled && 'cursor-not-allowed bg-gray-50 text-gray-400'\n          )}\n        >\n          <div className=\"flex items-center space-x-2\">\n            <Calendar className=\"h-4 w-4 text-gray-400\" />\n            <span className={cn(\n              !internalRange.start && !internalRange.end && 'text-gray-400'\n            )}>\n              {getDisplayValue()}\n            </span>\n          </div>\n          <ChevronDown className={cn(\n            'h-4 w-4 text-gray-400 transition-transform duration-200',\n            isOpen && 'transform rotate-180'\n          )} />\n        </button>\n        \n        {/* Dropdown */}\n        {isOpen && (\n          <div\n            ref={dropdownRef}\n            className=\"absolute z-50 mt-1 w-full min-w-[320px] bg-white border border-gray-200 rounded-md shadow-lg\"\n          >\n            <div className=\"p-4\">\n              {/* Presets */}\n              {showPresets && allPresets.length > 0 && (\n                <div className=\"mb-4\">\n                  <h4 className=\"text-sm font-medium text-gray-700 mb-2\">\n                    {locale === 'es' ? 'Rangos predefinidos' : 'Quick ranges'}\n                  </h4>\n                  <div className=\"space-y-1\">\n                    {allPresets.map((preset) => (\n                      <button\n                        key={preset.id}\n                        type=\"button\"\n                        onClick={() => handlePresetSelect(preset)}\n                        className={cn(\n                          'w-full text-left px-3 py-2 text-sm rounded-md transition-colors',\n                          'hover:bg-gray-100',\n                          activePreset === preset.id\n                            ? 'bg-primary-50 text-primary-700 border border-primary-200'\n                            : 'text-gray-700'\n                        )}\n                      >\n                        {locale === 'es' ? preset.labelEs : preset.labelEn}\n                        {preset.isDefault && (\n                          <span className=\"ml-2 text-xs text-gray-500\">\n                            ({locale === 'es' ? 'recomendado' : 'recommended'})\n                          </span>\n                        )}\n                      </button>\n                    ))}\n                  </div>\n                </div>\n              )}\n              \n              {/* Custom Range */}\n              {enableCustomRange && (\n                <div className=\"border-t border-gray-200 pt-4\">\n                  <h4 className=\"text-sm font-medium text-gray-700 mb-2\">\n                    {locale === 'es' ? 'Rango personalizado' : 'Custom range'}\n                  </h4>\n                  <div className=\"grid grid-cols-2 gap-3\">\n                    <div>\n                      <label className=\"block text-xs text-gray-600 mb-1\">\n                        {locale === 'es' ? 'Desde' : 'From'}\n                      </label>\n                      <input\n                        type=\"date\"\n                        value={internalRange.start ? internalRange.start.toISOString().split('T')[0] : ''}\n                        onChange={(e) => handleCustomRangeChange('start', e.target.value ? new Date(e.target.value) : null)}\n                        className=\"w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:border-primary-500 focus:outline-none\"\n                      />\n                    </div>\n                    <div>\n                      <label className=\"block text-xs text-gray-600 mb-1\">\n                        {locale === 'es' ? 'Hasta' : 'To'}\n                      </label>\n                      <input\n                        type=\"date\"\n                        value={internalRange.end ? internalRange.end.toISOString().split('T')[0] : ''}\n                        onChange={(e) => handleCustomRangeChange('end', e.target.value ? new Date(e.target.value) : null)}\n                        className=\"w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:border-primary-500 focus:outline-none\"\n                      />\n                    </div>\n                  </div>\n                </div>\n              )}\n              \n              {/* Error Display */}\n              {displayError && (\n                <div className=\"mt-3 text-sm text-red-600 bg-red-50 p-2 rounded-md\">\n                  {displayError}\n                </div>\n              )}\n              \n              {/* Actions */}\n              {!autoApply && (\n                <div className=\"flex justify-between items-center mt-4 pt-3 border-t border-gray-200\">\n                  <button\n                    type=\"button\"\n                    onClick={() => setIsOpen(false)}\n                    className=\"px-3 py-1 text-sm text-gray-600 hover:text-gray-800\"\n                  >\n                    {locale === 'es' ? 'Cancelar' : 'Cancel'}\n                  </button>\n                  <button\n                    type=\"button\"\n                    onClick={handleApply}\n                    disabled={!!validationError}\n                    className={cn(\n                      'px-4 py-2 text-sm font-medium rounded-md',\n                      'bg-primary-600 text-white hover:bg-primary-700',\n                      'disabled:bg-gray-300 disabled:cursor-not-allowed',\n                      'flex items-center space-x-1'\n                    )}\n                  >\n                    <Check className=\"h-3 w-3\" />\n                    <span>{locale === 'es' ? 'Aplicar' : 'Apply'}</span>\n                  </button>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n      \n      {/* Error Message */}\n      {displayError && !isOpen && (\n        <p className=\"mt-1 text-sm text-red-600\">\n          {displayError}\n        </p>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"mt-2 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>\n            {locale === 'es' ? 'Rango de fechas cambiado' : 'Date range changed'}\n          </span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>{locale === 'es' ? 'Deshacer' : 'Undo'}</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausDateRangePicker.displayName = 'BirhausDateRangePicker'\n\n// Hook for enhanced date range functionality\nexport const useBirhausDateRange = (initialRange?: DateRange) => {\n  const [range, setRange] = useState<DateRange>(\n    initialRange || { start: null, end: null }\n  )\n  const [history, setHistory] = useState<DateRange[]>([range])\n  const [historyIndex, setHistoryIndex] = useState(0)\n  \n  const updateRange = useCallback((newRange: DateRange) => {\n    setRange(newRange)\n    const newHistory = history.slice(0, historyIndex + 1)\n    newHistory.push(newRange)\n    setHistory(newHistory.slice(-10)) // Keep last 10 states\n    setHistoryIndex(newHistory.length - 1)\n  }, [history, historyIndex])\n  \n  const undo = useCallback(() => {\n    if (historyIndex > 0) {\n      const newIndex = historyIndex - 1\n      setHistoryIndex(newIndex)\n      const range = safeArrayAccess(history, newIndex, null)\n      if (range) {\n        setRange(range)\n        return range\n      }\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const redo = useCallback(() => {\n    if (historyIndex < history.length - 1) {\n      const newIndex = historyIndex + 1\n      setHistoryIndex(newIndex)\n      const range = safeArrayAccess(history, newIndex, null)\n      if (range) {\n        setRange(range)\n        return range\n      }\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const getDaysBetween = useCallback(() => {\n    if (!range.start || !range.end) return 0\n    return Math.ceil((range.end.getTime() - range.start.getTime()) / (1000 * 60 * 60 * 24)) + 1\n  }, [range])\n  \n  const canUndo = historyIndex > 0\n  const canRedo = historyIndex < history.length - 1\n  \n  return {\n    range,\n    setRange: updateRange,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    daysBetween: getDaysBetween(),\n    isValid: range.start && range.end && range.start <= range.end\n  }\n}\n\n// IPU Admin specific date range presets\nexport const ipuAdminDatePresets = {\n  financial: (): PresetRange[] => [\n    {\n      id: 'current_month',\n      labelEs: 'Mes actual',\n      labelEn: 'Current month',\n      getValue: () => {\n        const now = new Date()\n        const start = new Date(now.getFullYear(), now.getMonth(), 1)\n        const end = new Date(now.getFullYear(), now.getMonth() + 1, 0)\n        return { start, end }\n      }\n    },\n    {\n      id: 'last_month',\n      labelEs: 'Mes anterior',\n      labelEn: 'Last month',\n      getValue: () => {\n        const now = new Date()\n        const start = new Date(now.getFullYear(), now.getMonth() - 1, 1)\n        const end = new Date(now.getFullYear(), now.getMonth(), 0)\n        return { start, end }\n      }\n    },\n    {\n      id: 'quarter',\n      labelEs: 'Trimestre actual',\n      labelEn: 'Current quarter',\n      getValue: () => {\n        const now = new Date()\n        const quarter = Math.floor(now.getMonth() / 3)\n        const start = new Date(now.getFullYear(), quarter * 3, 1)\n        const end = new Date(now.getFullYear(), (quarter + 1) * 3, 0)\n        return { start, end }\n      }\n    }\n  ],\n  \n  events: (): PresetRange[] => [\n    {\n      id: 'next_7_days',\n      labelEs: 'Próximos 7 días',\n      labelEn: 'Next 7 days',\n      getValue: () => {\n        const start = new Date()\n        const end = new Date()\n        end.setDate(end.getDate() + 6)\n        return { start, end }\n      }\n    },\n    {\n      id: 'next_30_days',\n      labelEs: 'Próximos 30 días',\n      labelEn: 'Next 30 days',\n      getValue: () => {\n        const start = new Date()\n        const end = new Date()\n        end.setDate(end.getDate() + 29)\n        return { start, end }\n      }\n    }\n  ]\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useRef, useCallback } from 'react'\nimport { Search, X, Clock, TrendingUp, Users, Calendar, DollarSign, RotateCcw } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Search Input Component\n * \n * Enhanced search input implementing all 10 BIRHAUS principles:\n * - Spanish-first placeholders and suggestions\n * - Progressive disclosure of search results (max 7 per Miller's Law)\n * - Auto-complete with cognitive load reduction\n * - Recent searches history (max 5)\n * - Accessibility compliance (WCAG AA+)\n * - Undo functionality for search history changes\n * - Performance optimized with debouncing\n * - IPU Admin specific search categories\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface SearchSuggestion {\n  id: string\n  text: string\n  category?: SearchCategory\n  icon?: React.ReactNode\n  metadata?: string\n}\n\nexport interface SearchCategory {\n  id: string\n  labelEs: string\n  labelEn: string\n  icon: React.ReactNode\n  color: string\n}\n\ninterface UndoState {\n  previousHistory: string[]\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausSearchInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // Placeholder (Spanish-first)\n  placeholderEs?: string\n  placeholderEn?: string\n  \n  // Search functionality\n  value?: string\n  defaultValue?: string\n  onSearch?: (query: string) => void\n  onSuggestionSelect?: (suggestion: SearchSuggestion) => void\n  \n  // Auto-complete\n  suggestions?: SearchSuggestion[]\n  loadingSuggestions?: boolean\n  maxSuggestions?: number // Default 7 (Miller's Law)\n  \n  // Search categories (IPU Admin)\n  categories?: SearchCategory[]\n  selectedCategory?: string\n  onCategoryChange?: (categoryId: string) => void\n  \n  // Recent searches\n  enableRecentSearches?: boolean\n  maxRecentSearches?: number // Default 5\n  recentSearches?: string[]\n  onRecentSearchesChange?: (searches: string[]) => void\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  \n  // BIRHAUS Principle #8: Performance is UX\n  debounceMs?: number\n  minQueryLength?: number\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  required?: boolean\n  \n  // Appearance\n  size?: 'sm' | 'md' | 'lg'\n  variant?: 'default' | 'minimal' | 'filled'\n  showIcon?: boolean\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  searchScope?: 'all' | 'members' | 'donations' | 'events' | 'reports'\n}\n\nexport const BirhausSearchInput = forwardRef<HTMLInputElement, BirhausSearchInputProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Placeholders\n  placeholder,\n  placeholderEs,\n  placeholderEn,\n  \n  // Value\n  value,\n  defaultValue,\n  onChange,\n  onSearch,\n  onSuggestionSelect,\n  \n  // Auto-complete\n  suggestions = [],\n  loadingSuggestions = false,\n  maxSuggestions = 7,\n  \n  // Categories\n  categories,\n  selectedCategory,\n  onCategoryChange,\n  \n  // Recent searches\n  enableRecentSearches = true,\n  maxRecentSearches = 5,\n  recentSearches = [],\n  onRecentSearchesChange,\n  \n  // Undo\n  enableUndo = true,\n  undoTimeoutMs = 10000,\n  \n  // Performance\n  debounceMs = 300,\n  minQueryLength = 2,\n  \n  // Basic props\n  disabled = false,\n  required = false,\n  \n  // Appearance\n  size = 'md',\n  variant = 'default',\n  showIcon = true,\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  searchScope = 'all',\n  \n  // Standard props\n  ...props\n}, ref) => {\n  // State management\n  const [internalValue, setInternalValue] = useState<string>(value || defaultValue || '')\n  const [isFocused, setIsFocused] = useState(false)\n  const [showDropdown, setShowDropdown] = useState(false)\n  const [internalRecentSearches, setInternalRecentSearches] = useState<string[]>(recentSearches)\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousHistory: [],\n    timeout: null,\n    isActive: false\n  })\n  \n  // Refs\n  const inputRef = useRef<HTMLInputElement>(null)\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  const debounceTimeoutRef = useRef<NodeJS.Timeout>()\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayPlaceholder = getDisplayText(\n    placeholder,\n    placeholderEs,\n    placeholderEn,\n    locale === 'es' ? 'Buscar...' : 'Search...'\n  )\n  \n  // Default categories for IPU Admin\n  const getDefaultCategories = useCallback((): SearchCategory[] => [\n    {\n      id: 'members',\n      labelEs: 'Miembros',\n      labelEn: 'Members',\n      icon: <Users className=\"h-4 w-4\" />,\n      color: 'blue'\n    },\n    {\n      id: 'donations',\n      labelEs: 'Donaciones',\n      labelEn: 'Donations',\n      icon: <DollarSign className=\"h-4 w-4\" />,\n      color: 'green'\n    },\n    {\n      id: 'events',\n      labelEs: 'Eventos',\n      labelEn: 'Events',\n      icon: <Calendar className=\"h-4 w-4\" />,\n      color: 'purple'\n    }\n  ], [])\n  \n  const allCategories = categories || getDefaultCategories()\n  \n  // Filter suggestions based on query and limits\n  const filteredSuggestions = useCallback(() => {\n    if (!internalValue || internalValue.length < minQueryLength) {\n      return []\n    }\n    \n    let filtered = suggestions.filter(suggestion =>\n      suggestion.text.toLowerCase().includes(internalValue.toLowerCase())\n    )\n    \n    // Filter by category if selected\n    if (selectedCategory) {\n      filtered = filtered.filter(suggestion => \n        suggestion.category?.id === selectedCategory\n      )\n    }\n    \n    return filtered.slice(0, maxSuggestions)\n  }, [suggestions, internalValue, minQueryLength, selectedCategory, maxSuggestions])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setInternalRecentSearches(undoState.previousHistory)\n      onRecentSearchesChange?.(undoState.previousHistory)\n      setUndoState({ previousHistory: [], timeout: null, isActive: false })\n    }\n  }, [undoState, onRecentSearchesChange])\n  \n  // Setup undo for search history changes\n  const setupUndo = useCallback((newHistory: string[], oldHistory: string[]) => {\n    if (!enableUndo || newHistory.length === oldHistory.length) return\n    \n    // Clear existing timeout\n    if (undoState.timeout) {\n      clearTimeout(undoState.timeout)\n    }\n    \n    // Set up new undo state\n    const timeout = setTimeout(() => {\n      setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n    }, undoTimeoutMs)\n    \n    setUndoState({\n      previousHistory: oldHistory,\n      timeout,\n      isActive: true\n    })\n  }, [enableUndo, undoTimeoutMs, undoState.timeout])\n  \n  // Add to recent searches\n  const addToRecentSearches = useCallback((query: string) => {\n    if (!query.trim() || !enableRecentSearches) return\n    \n    const oldHistory = [...internalRecentSearches]\n    const newHistory = [query, ...oldHistory.filter(item => item !== query)]\n      .slice(0, maxRecentSearches)\n    \n    setInternalRecentSearches(newHistory)\n    onRecentSearchesChange?.(newHistory)\n    \n    // Setup undo\n    setupUndo(newHistory, oldHistory)\n  }, [\n    internalRecentSearches,\n    enableRecentSearches,\n    maxRecentSearches,\n    onRecentSearchesChange,\n    setupUndo\n  ])\n  \n  // Clear recent searches\n  const clearRecentSearches = useCallback(() => {\n    const oldHistory = [...internalRecentSearches]\n    setInternalRecentSearches([])\n    onRecentSearchesChange?.([])\n    setupUndo([], oldHistory)\n  }, [internalRecentSearches, onRecentSearchesChange, setupUndo])\n  \n  // Handle input change with debouncing\n  const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = event.target.value\n    setInternalValue(newValue)\n    setShowDropdown(true)\n    \n    // Clear existing debounce\n    if (debounceTimeoutRef.current) {\n      clearTimeout(debounceTimeoutRef.current)\n    }\n    \n    // Debounced search callback\n    debounceTimeoutRef.current = setTimeout(() => {\n      if (newValue.length >= minQueryLength) {\n        onSearch?.(newValue)\n      }\n    }, debounceMs)\n    \n    // Call parent onChange\n    onChange?.(event)\n  }, [onChange, onSearch, debounceMs, minQueryLength])\n  \n  // Handle search submission\n  const handleSubmit = useCallback((query?: string) => {\n    const searchQuery = query || internalValue\n    if (searchQuery.trim()) {\n      addToRecentSearches(searchQuery.trim())\n      onSearch?.(searchQuery.trim())\n      setShowDropdown(false)\n    }\n  }, [internalValue, addToRecentSearches, onSearch])\n  \n  // Handle suggestion selection\n  const handleSuggestionSelect = useCallback((suggestion: SearchSuggestion) => {\n    setInternalValue(suggestion.text)\n    addToRecentSearches(suggestion.text)\n    onSuggestionSelect?.(suggestion)\n    setShowDropdown(false)\n    \n    // Focus back to input\n    inputRef.current?.focus()\n  }, [addToRecentSearches, onSuggestionSelect])\n  \n  // Handle recent search selection\n  const handleRecentSearchSelect = useCallback((query: string) => {\n    setInternalValue(query)\n    handleSubmit(query)\n  }, [handleSubmit])\n  \n  // Handle clear\n  const handleClear = useCallback(() => {\n    setInternalValue('')\n    setShowDropdown(false)\n    inputRef.current?.focus()\n    onChange?.({ target: { value: '' } } as React.ChangeEvent<HTMLInputElement>)\n  }, [onChange])\n  \n  // Handle focus\n  const handleFocus = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(true)\n    setShowDropdown(true)\n    props.onFocus?.(event)\n  }, [props])\n  \n  // Handle blur\n  const handleBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n    setIsFocused(false)\n    // Delay hiding dropdown to allow clicks on suggestions\n    setTimeout(() => setShowDropdown(false), 150)\n    props.onBlur?.(event)\n  }, [props])\n  \n  // Handle key navigation\n  const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'Enter') {\n      event.preventDefault()\n      handleSubmit()\n    } else if (event.key === 'Escape') {\n      setShowDropdown(false)\n      inputRef.current?.blur()\n    }\n    \n    props.onKeyDown?.(event)\n  }, [handleSubmit, props])\n  \n  // Click outside handler\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        inputRef.current &&\n        dropdownRef.current &&\n        !inputRef.current.contains(event.target as Node) &&\n        !dropdownRef.current.contains(event.target as Node)\n      ) {\n        setShowDropdown(false)\n      }\n    }\n    \n    if (showDropdown) {\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [showDropdown])\n  \n  // Sync external value changes\n  useEffect(() => {\n    if (value !== undefined && value !== internalValue) {\n      setInternalValue(value)\n    }\n  }, [value, internalValue])\n  \n  // Sync external recent searches\n  useEffect(() => {\n    if (recentSearches !== internalRecentSearches) {\n      setInternalRecentSearches(recentSearches)\n    }\n  }, [recentSearches, internalRecentSearches])\n  \n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (debounceTimeoutRef.current) {\n        clearTimeout(debounceTimeoutRef.current)\n      }\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: 'text-sm px-3 py-1.5',\n    md: 'text-base px-4 py-2',\n    lg: 'text-lg px-5 py-3'\n  }\n  \n  const variantClasses = {\n    default: 'bg-white border border-gray-300',\n    filled: 'bg-gray-50 border border-gray-200',\n    minimal: 'bg-transparent border-b border-gray-300'\n  }\n  \n  const iconSizes = {\n    sm: 'h-4 w-4',\n    md: 'h-5 w-5',\n    lg: 'h-6 w-6'\n  }\n  \n  // Calculate if we should show suggestions or recent searches\n  const shouldShowSuggestions = filteredSuggestions().length > 0\n  const shouldShowRecentSearches = !shouldShowSuggestions && \n    internalRecentSearches.length > 0 && \n    internalValue.length < minQueryLength\n  \n  return (\n    <div className=\"birhaus-search-input\">\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n        </label>\n      )}\n      \n      {/* Categories Filter */}\n      {allCategories.length > 0 && (\n        <div className=\"flex flex-wrap gap-1 mb-2\">\n          <button\n            type=\"button\"\n            onClick={() => onCategoryChange?.('')}\n            className={cn(\n              'px-3 py-1 text-xs rounded-full transition-colors',\n              !selectedCategory\n                ? 'bg-primary-100 text-primary-700 border border-primary-200'\n                : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\n            )}\n          >\n            {locale === 'es' ? 'Todas' : 'All'}\n          </button>\n          {allCategories.map((category) => (\n            <button\n              key={category.id}\n              type=\"button\"\n              onClick={() => onCategoryChange?.(category.id)}\n              className={cn(\n                'px-3 py-1 text-xs rounded-full transition-colors flex items-center space-x-1',\n                selectedCategory === category.id\n                  ? `bg-${category.color}-100 text-${category.color}-700 border border-${category.color}-200`\n                  : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\n              )}\n            >\n              {category.icon}\n              <span>{locale === 'es' ? category.labelEs : category.labelEn}</span>\n            </button>\n          ))}\n        </div>\n      )}\n      \n      {/* Search Input Container */}\n      <div className=\"relative\">\n        <div className=\"relative\">\n          {/* Search Icon */}\n          {showIcon && (\n            <div className=\"absolute left-3 top-1/2 transform -translate-y-1/2\">\n              <Search className={cn(safeAccess(iconSizes, size, iconSizes.md), 'text-gray-400')} />\n            </div>\n          )}\n          \n          {/* Input */}\n          <input\n            ref={inputRef}\n            type=\"text\"\n            value={internalValue}\n            onChange={handleChange}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            onKeyDown={handleKeyDown}\n            placeholder={displayPlaceholder}\n            disabled={disabled}\n            required={required}\n            className={cn(\n              'w-full rounded-md transition-colors duration-200',\n              'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n              safeAccess(sizeClasses, size, sizeClasses.md),\n              safeAccess(variantClasses, variant, variantClasses.default),\n              showIcon && 'pl-10',\n              internalValue && 'pr-10',\n              isFocused ? 'border-primary-500' : 'border-gray-300',\n              disabled && 'cursor-not-allowed bg-gray-50 text-gray-400'\n            )}\n            {...props}\n          />\n          \n          {/* Clear Button */}\n          {internalValue && !disabled && (\n            <button\n              type=\"button\"\n              onClick={handleClear}\n              className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n            >\n              <X className={safeAccess(iconSizes, size, iconSizes.md)} />\n            </button>\n          )}\n        </div>\n        \n        {/* Dropdown */}\n        {showDropdown && (isFocused || shouldShowSuggestions || shouldShowRecentSearches) && (\n          <div\n            ref={dropdownRef}\n            className=\"absolute z-50 mt-1 w-full bg-white border border-gray-200 rounded-md shadow-lg max-h-64 overflow-y-auto\"\n          >\n            {/* Loading State */}\n            {loadingSuggestions && (\n              <div className=\"p-3 text-center text-sm text-gray-500\">\n                <div className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-primary-600\"></div>\n                <span className=\"ml-2\">\n                  {locale === 'es' ? 'Buscando...' : 'Searching...'}\n                </span>\n              </div>\n            )}\n            \n            {/* Suggestions */}\n            {shouldShowSuggestions && !loadingSuggestions && (\n              <div>\n                <div className=\"p-2 border-b border-gray-100\">\n                  <h4 className=\"text-xs font-medium text-gray-500 uppercase tracking-wide\">\n                    {locale === 'es' ? 'Sugerencias' : 'Suggestions'}\n                  </h4>\n                </div>\n                {filteredSuggestions().map((suggestion) => (\n                  <button\n                    key={suggestion.id}\n                    type=\"button\"\n                    onClick={() => handleSuggestionSelect(suggestion)}\n                    className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-50 flex items-center justify-between\"\n                  >\n                    <div className=\"flex items-center space-x-2\">\n                      {suggestion.icon && (\n                        <span className=\"text-gray-400\">\n                          {suggestion.icon}\n                        </span>\n                      )}\n                      <span>{suggestion.text}</span>\n                    </div>\n                    {suggestion.metadata && (\n                      <span className=\"text-xs text-gray-400\">\n                        {suggestion.metadata}\n                      </span>\n                    )}\n                  </button>\n                ))}\n              </div>\n            )}\n            \n            {/* Recent Searches */}\n            {shouldShowRecentSearches && !loadingSuggestions && (\n              <div>\n                <div className=\"p-2 border-b border-gray-100 flex items-center justify-between\">\n                  <h4 className=\"text-xs font-medium text-gray-500 uppercase tracking-wide\">\n                    {locale === 'es' ? 'Búsquedas recientes' : 'Recent searches'}\n                  </h4>\n                  {internalRecentSearches.length > 0 && (\n                    <button\n                      type=\"button\"\n                      onClick={clearRecentSearches}\n                      className=\"text-xs text-gray-400 hover:text-gray-600\"\n                    >\n                      {locale === 'es' ? 'Limpiar' : 'Clear'}\n                    </button>\n                  )}\n                </div>\n                {internalRecentSearches.map((recentSearch, index) => (\n                  <button\n                    key={index}\n                    type=\"button\"\n                    onClick={() => handleRecentSearchSelect(recentSearch)}\n                    className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-50 flex items-center space-x-2\"\n                  >\n                    <Clock className=\"h-3 w-3 text-gray-400\" />\n                    <span>{recentSearch}</span>\n                  </button>\n                ))}\n              </div>\n            )}\n            \n            {/* No Results */}\n            {!loadingSuggestions && \n             !shouldShowSuggestions && \n             !shouldShowRecentSearches &&\n             internalValue.length >= minQueryLength && (\n              <div className=\"p-3 text-center text-sm text-gray-500\">\n                {locale === 'es' ? 'No se encontraron resultados' : 'No results found'}\n              </div>\n            )}\n            \n            {/* Hint */}\n            {!loadingSuggestions && \n             internalValue.length > 0 && \n             internalValue.length < minQueryLength && (\n              <div className=\"p-3 text-center text-xs text-gray-400\">\n                {locale === 'es' \n                  ? `Escribe al menos ${minQueryLength} caracteres para buscar`\n                  : `Type at least ${minQueryLength} characters to search`\n                }\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"mt-2 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>\n            {locale === 'es' ? 'Historial de búsqueda modificado' : 'Search history modified'}\n          </span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>{locale === 'es' ? 'Deshacer' : 'Undo'}</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausSearchInput.displayName = 'BirhausSearchInput'\n\n// Hook for enhanced search functionality\nexport const useBirhausSearch = (initialQuery: string = '') => {\n  const [query, setQuery] = useState(initialQuery)\n  const [recentSearches, setRecentSearches] = useState<string[]>([])\n  const [isLoading, setIsLoading] = useState(false)\n  const [suggestions, setSuggestions] = useState<SearchSuggestion[]>([])\n  \n  const addToHistory = useCallback((searchQuery: string) => {\n    if (!searchQuery.trim()) return\n    \n    setRecentSearches(prev => {\n      const newHistory = [searchQuery, ...prev.filter(item => item !== searchQuery)]\n      return newHistory.slice(0, 5) // Keep only 5 recent searches\n    })\n  }, [])\n  \n  const clearHistory = useCallback(() => {\n    setRecentSearches([])\n  }, [])\n  \n  const performSearch = useCallback(async (\n    searchQuery: string,\n    searchFn?: (query: string) => Promise<SearchSuggestion[]>\n  ) => {\n    if (!searchQuery.trim()) return\n    \n    setIsLoading(true)\n    addToHistory(searchQuery)\n    \n    if (searchFn) {\n      try {\n        const results = await searchFn(searchQuery)\n        setSuggestions(results)\n      } catch (error) {\n        console.error('Search error:', error)\n        setSuggestions([])\n      }\n    }\n    \n    setIsLoading(false)\n  }, [addToHistory])\n  \n  return {\n    query,\n    setQuery,\n    recentSearches,\n    setRecentSearches,\n    addToHistory,\n    clearHistory,\n    isLoading,\n    setIsLoading,\n    suggestions,\n    setSuggestions,\n    performSearch\n  }\n}\n\n// IPU Admin specific search suggestions\nexport const ipuAdminSearchCategories: SearchCategory[] = [\n  {\n    id: 'members',\n    labelEs: 'Miembros',\n    labelEn: 'Members',\n    icon: <Users className=\"h-4 w-4\" />,\n    color: 'blue'\n  },\n  {\n    id: 'donations',\n    labelEs: 'Donaciones',\n    labelEn: 'Donations',\n    icon: <DollarSign className=\"h-4 w-4\" />,\n    color: 'green'\n  },\n  {\n    id: 'events',\n    labelEs: 'Eventos',\n    labelEn: 'Events',\n    icon: <Calendar className=\"h-4 w-4\" />,\n    color: 'purple'\n  },\n  {\n    id: 'reports',\n    labelEs: 'Reportes',\n    labelEn: 'Reports',\n    icon: <TrendingUp className=\"h-4 w-4\" />,\n    color: 'orange'\n  }\n]\n\n// Helper function to create search suggestions for IPU Admin\nexport const createIPUAdminSuggestion = (\n  id: string,\n  text: string,\n  category: SearchCategory,\n  metadata?: string\n): SearchSuggestion => ({\n  id,\n  text,\n  category,\n  icon: category.icon,\n  metadata\n})","'use client'\n\nimport { forwardRef, useState, useCallback, useRef, useEffect } from 'react'\nimport { Upload, File, FileText, Image, X, Check, AlertCircle, RotateCcw } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS File Upload Component\n * \n * Enhanced file upload implementing all 10 BIRHAUS principles:\n * - Spanish-first status messages and validation\n * - Progressive disclosure of upload progress and validation\n * - Cognitive load reduction (max 3 files at once)\n * - Accessibility compliance (WCAG AA+)\n * - Undo functionality for file removals\n * - Auto-validation for file types and sizes\n * - Performance optimized with progress tracking\n * - IPU Admin specific file types (receipts, reports, photos)\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface FileItem {\n  id: string\n  file: File\n  preview?: string\n  progress: number\n  status: 'pending' | 'uploading' | 'completed' | 'error'\n  error?: string\n}\n\ninterface UndoState {\n  removedFile: FileItem\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\ninterface FileTypeConfig {\n  extensions: string[]\n  maxSize: number // in bytes\n  labelEs: string\n  labelEn: string\n  icon: React.ReactNode\n}\n\nexport interface BirhausFileUploadProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // File handling\n  files?: FileItem[]\n  defaultFiles?: FileItem[]\n  onChange?: (files: FileItem[]) => void\n  onUpload?: (file: File) => Promise<string> // Returns URL or ID\n  onRemove?: (fileId: string) => Promise<void>\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // File validation\n  acceptedTypes?: string[] // e.g., ['image/*', '.pdf', '.xlsx']\n  maxFileSize?: number // in bytes (default 10MB)\n  maxFiles?: number // default 3 (cognitive load reduction)\n  \n  // File type presets for IPU Admin\n  uploadType?: 'receipts' | 'reports' | 'photos' | 'documents' | 'custom'\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  required?: boolean\n  \n  // Appearance\n  variant?: 'default' | 'compact' | 'minimal'\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Drag and drop\n  enableDragDrop?: boolean\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Preview options\n  showPreview?: boolean\n  previewSize?: 'sm' | 'md' | 'lg'\n}\n\nexport const BirhausFileUpload = forwardRef<HTMLDivElement, BirhausFileUploadProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // File handling\n  files,\n  defaultFiles = [],\n  onChange,\n  onUpload,\n  onRemove,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  acceptedTypes,\n  maxFileSize = 10 * 1024 * 1024, // 10MB\n  maxFiles = 3,\n  \n  // Upload type\n  uploadType = 'documents',\n  \n  // Undo\n  enableUndo = true,\n  undoTimeoutMs = 10000,\n  \n  // Basic props\n  disabled = false,\n  required = false,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  \n  // Features\n  enableDragDrop = true,\n  \n  // Locale\n  locale = 'es',\n  \n  // Preview\n  showPreview = true,\n  previewSize = 'md'\n}, ref) => {\n  // State management\n  const [internalFiles, setInternalFiles] = useState<FileItem[]>(files || defaultFiles)\n  const [isDragOver, setIsDragOver] = useState(false)\n  const [undoState, setUndoState] = useState<UndoState | null>(null)\n  const [validationError, setValidationError] = useState<string>('')\n  \n  // Refs\n  const fileInputRef = useRef<HTMLInputElement>(null)\n  const dropZoneRef = useRef<HTMLDivElement>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || errorEs || validationError\n  \n  // File type configurations for IPU Admin\n  const getFileTypeConfig = useCallback((): FileTypeConfig => {\n    const configs: Record<string, FileTypeConfig> = {\n      receipts: {\n        extensions: ['.pdf', '.jpg', '.jpeg', '.png'],\n        maxSize: 5 * 1024 * 1024, // 5MB\n        labelEs: 'Recibos',\n        labelEn: 'Receipts',\n        icon: <FileText className=\"h-5 w-5\" />\n      },\n      reports: {\n        extensions: ['.pdf', '.xlsx', '.xls', '.csv'],\n        maxSize: 25 * 1024 * 1024, // 25MB\n        labelEs: 'Reportes',\n        labelEn: 'Reports',\n        icon: <File className=\"h-5 w-5\" />\n      },\n      photos: {\n        extensions: ['.jpg', '.jpeg', '.png', '.webp'],\n        maxSize: 10 * 1024 * 1024, // 10MB\n        labelEs: 'Fotos',\n        labelEn: 'Photos',\n        icon: <Image className=\"h-5 w-5\" />\n      },\n      documents: {\n        extensions: ['.pdf', '.doc', '.docx', '.txt'],\n        maxSize: 15 * 1024 * 1024, // 15MB\n        labelEs: 'Documentos',\n        labelEn: 'Documents',\n        icon: <FileText className=\"h-5 w-5\" />\n      },\n      custom: {\n        extensions: acceptedTypes || ['*'],\n        maxSize: maxFileSize,\n        labelEs: 'Archivos',\n        labelEn: 'Files',\n        icon: <File className=\"h-5 w-5\" />\n      }\n    }\n    \n    return safeAccess(configs, uploadType, configs.custom)\n  }, [uploadType, acceptedTypes, maxFileSize])\n  \n  const fileTypeConfig = getFileTypeConfig()\n  \n  // Generate unique ID for files\n  const generateFileId = useCallback(() => {\n    return Date.now().toString(36) + Math.random().toString(36).substr(2)\n  }, [])\n  \n  // Validate file\n  const validateFile = useCallback((file: File): string => {\n    // Check file size\n    if (file.size > fileTypeConfig.maxSize) {\n      const sizeMB = Math.round(fileTypeConfig.maxSize / 1024 / 1024)\n      return locale === 'es' \n        ? `El archivo es muy grande. Máximo ${sizeMB}MB permitido.`\n        : `File is too large. Maximum ${sizeMB}MB allowed.`\n    }\n    \n    // Check file type\n    if (fileTypeConfig.extensions[0] !== '*') {\n      const extension = '.' + file.name.split('.').pop()?.toLowerCase()\n      const isValidType = fileTypeConfig.extensions.some(ext => \n        ext === extension || file.type.match(ext.replace('*', '.*'))\n      )\n      \n      if (!isValidType) {\n        return locale === 'es'\n          ? `Tipo de archivo no permitido. Use: ${fileTypeConfig.extensions.join(', ')}`\n          : `File type not allowed. Use: ${fileTypeConfig.extensions.join(', ')}`\n      }\n    }\n    \n    // Check max files\n    if (internalFiles.length >= maxFiles) {\n      return locale === 'es'\n        ? `Máximo ${maxFiles} archivos permitidos`\n        : `Maximum ${maxFiles} files allowed`\n    }\n    \n    return ''\n  }, [fileTypeConfig, internalFiles.length, maxFiles, locale])\n  \n  // Create file preview\n  const createFilePreview = useCallback((file: File): Promise<string | undefined> => {\n    return new Promise((resolve) => {\n      if (file.type.startsWith('image/')) {\n        const reader = new FileReader()\n        reader.onload = (e) => resolve(e.target?.result as string)\n        reader.onerror = () => resolve(undefined)\n        reader.readAsDataURL(file)\n      } else {\n        resolve(undefined)\n      }\n    })\n  }, [])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState?.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      const restoredFiles = [...internalFiles, undoState.removedFile]\n      setInternalFiles(restoredFiles)\n      onChange?.(restoredFiles)\n      setUndoState(null)\n    }\n  }, [undoState, internalFiles, onChange])\n  \n  // Setup undo for file removal\n  const setupUndo = useCallback((removedFile: FileItem) => {\n    if (!enableUndo) return\n    \n    // Clear existing timeout\n    if (undoState?.timeout) {\n      clearTimeout(undoState.timeout)\n    }\n    \n    // Set up new undo state\n    const timeout = setTimeout(() => {\n      setUndoState(null)\n    }, undoTimeoutMs)\n    \n    setUndoState({\n      removedFile,\n      timeout,\n      isActive: true\n    })\n  }, [enableUndo, undoTimeoutMs, undoState?.timeout])\n  \n  // Add files\n  const addFiles = useCallback(async (fileList: FileList | File[]) => {\n    const filesArray = Array.from(fileList)\n    const newFiles: FileItem[] = []\n    \n    for (const file of filesArray) {\n      const validationResult = validateFile(file)\n      if (validationResult) {\n        setValidationError(validationResult)\n        return\n      }\n      \n      const preview = await createFilePreview(file)\n      const fileItem: FileItem = {\n        id: generateFileId(),\n        file,\n        preview,\n        progress: 0,\n        status: 'pending'\n      }\n      \n      newFiles.push(fileItem)\n    }\n    \n    if (newFiles.length > 0) {\n      const updatedFiles = [...internalFiles, ...newFiles]\n      setInternalFiles(updatedFiles)\n      onChange?.(updatedFiles)\n      setValidationError('')\n      \n      // Start upload if handler provided\n      if (onUpload) {\n        newFiles.forEach(fileItem => uploadFile(fileItem))\n      }\n    }\n  }, [internalFiles, onChange, validateFile, createFilePreview, generateFileId, onUpload])\n  \n  // Upload file\n  const uploadFile = useCallback(async (fileItem: FileItem) => {\n    if (!onUpload) return\n    \n    // Update status to uploading\n    setInternalFiles(prev => prev.map(f => \n      f.id === fileItem.id \n        ? { ...f, status: 'uploading' as const, progress: 0 }\n        : f\n    ))\n    \n    try {\n      // Simulate progress (replace with actual upload progress)\n      let progress = 0\n      const progressInterval = setInterval(() => {\n        progress += Math.random() * 30\n        if (progress >= 90) {\n          clearInterval(progressInterval)\n          progress = 90\n        }\n        \n        setInternalFiles(prev => prev.map(f => \n          f.id === fileItem.id ? { ...f, progress } : f\n        ))\n      }, 100)\n      \n      // Perform actual upload\n      const result = await onUpload(fileItem.file)\n      \n      clearInterval(progressInterval)\n      \n      // Update to completed\n      setInternalFiles(prev => prev.map(f => \n        f.id === fileItem.id \n          ? { ...f, status: 'completed' as const, progress: 100 }\n          : f\n      ))\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : 'Upload failed'\n      \n      setInternalFiles(prev => prev.map(f => \n        f.id === fileItem.id \n          ? { \n              ...f, \n              status: 'error' as const, \n              progress: 0,\n              error: errorMessage\n            }\n          : f\n      ))\n    }\n  }, [onUpload])\n  \n  // Remove file\n  const removeFile = useCallback(async (fileId: string) => {\n    const fileToRemove = internalFiles.find(f => f.id === fileId)\n    if (!fileToRemove) return\n    \n    const updatedFiles = internalFiles.filter(f => f.id !== fileId)\n    setInternalFiles(updatedFiles)\n    onChange?.(updatedFiles)\n    \n    // Setup undo\n    setupUndo(fileToRemove)\n    \n    // Call remove handler\n    if (onRemove) {\n      try {\n        await onRemove(fileId)\n      } catch (error) {\n        console.error('Failed to remove file:', error)\n      }\n    }\n  }, [internalFiles, onChange, setupUndo, onRemove])\n  \n  // Handle file input change\n  const handleFileInputChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const files = event.target.files\n    if (files) {\n      addFiles(files)\n    }\n    // Reset input value to allow selecting same file again\n    event.target.value = ''\n  }, [addFiles])\n  \n  // Handle drag and drop\n  const handleDragOver = useCallback((event: React.DragEvent) => {\n    event.preventDefault()\n    if (!disabled && enableDragDrop) {\n      setIsDragOver(true)\n    }\n  }, [disabled, enableDragDrop])\n  \n  const handleDragLeave = useCallback((event: React.DragEvent) => {\n    event.preventDefault()\n    if (!dropZoneRef.current?.contains(event.relatedTarget as Node)) {\n      setIsDragOver(false)\n    }\n  }, [])\n  \n  const handleDrop = useCallback((event: React.DragEvent) => {\n    event.preventDefault()\n    setIsDragOver(false)\n    \n    if (!disabled && enableDragDrop) {\n      const files = event.dataTransfer.files\n      if (files) {\n        addFiles(files)\n      }\n    }\n  }, [disabled, enableDragDrop, addFiles])\n  \n  // Get file icon\n  const getFileIcon = useCallback((file: File) => {\n    if (file.type.startsWith('image/')) {\n      return <Image className=\"h-4 w-4\" />\n    } else if (file.type === 'application/pdf') {\n      return <FileText className=\"h-4 w-4\" />\n    } else {\n      return <File className=\"h-4 w-4\" />\n    }\n  }, [])\n  \n  // Format file size\n  const formatFileSize = useCallback((bytes: number): string => {\n    if (bytes === 0) return '0 Bytes'\n    const k = 1024\n    const sizes = ['Bytes', 'KB', 'MB', 'GB']\n    const i = Math.floor(Math.log(bytes) / Math.log(k))\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + safeArrayAccess(sizes, i, 'Bytes')\n  }, [])\n  \n  // Sync external files\n  useEffect(() => {\n    if (files && files !== internalFiles) {\n      setInternalFiles(files)\n    }\n  }, [files, internalFiles])\n  \n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState?.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n    }\n  }, [undoState?.timeout])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: 'p-3',\n    md: 'p-4',\n    lg: 'p-6'\n  }\n  \n  const variantClasses = {\n    default: 'border-2 border-dashed border-gray-300',\n    compact: 'border border-gray-300 rounded-md',\n    minimal: 'border-b border-gray-300'\n  }\n  \n  return (\n    <div ref={ref} className=\"birhaus-file-upload\">\n      {/* Label */}\n      {displayLabel && (\n        <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n          {displayLabel}\n          {required && <span className=\"text-red-500 ml-1\">*</span>}\n        </label>\n      )}\n      \n      {/* Description */}\n      {displayDescription && (\n        <p className=\"text-sm text-gray-600 mb-2\">\n          {displayDescription}\n        </p>\n      )}\n      \n      {/* File Type Info */}\n      <div className=\"mb-3 text-sm text-gray-600\">\n        <div className=\"flex items-center space-x-2\">\n          {fileTypeConfig.icon}\n          <span>\n            {locale === 'es' ? fileTypeConfig.labelEs : fileTypeConfig.labelEn}\n          </span>\n          <span className=\"text-gray-400\">•</span>\n          <span>\n            {locale === 'es' ? 'Máximo' : 'Max'} {formatFileSize(fileTypeConfig.maxSize)}\n          </span>\n          <span className=\"text-gray-400\">•</span>\n          <span>\n            {locale === 'es' ? 'Hasta' : 'Up to'} {maxFiles} {locale === 'es' ? 'archivos' : 'files'}\n          </span>\n        </div>\n        {fileTypeConfig.extensions[0] !== '*' && (\n          <div className=\"mt-1 text-xs text-gray-500\">\n            {locale === 'es' ? 'Tipos permitidos' : 'Allowed types'}: {fileTypeConfig.extensions.join(', ')}\n          </div>\n        )}\n      </div>\n      \n      {/* Drop Zone */}\n      <div\n        ref={dropZoneRef}\n        onDragOver={handleDragOver}\n        onDragLeave={handleDragLeave}\n        onDrop={handleDrop}\n        className={cn(\n          'relative transition-all duration-200 rounded-lg',\n          safeAccess(sizeClasses, size, sizeClasses.md),\n          safeAccess(variantClasses, variant, variantClasses.default),\n          isDragOver && 'border-primary-500 bg-primary-50',\n          disabled && 'opacity-50 cursor-not-allowed',\n          displayError && 'border-red-300'\n        )}\n      >\n        {/* Upload Area */}\n        <div className=\"text-center\">\n          <Upload className={cn(\n            'mx-auto mb-2',\n            size === 'sm' ? 'h-6 w-6' : size === 'lg' ? 'h-10 w-10' : 'h-8 w-8',\n            isDragOver ? 'text-primary-500' : 'text-gray-400'\n          )} />\n          \n          <div className=\"space-y-1\">\n            <div className={cn(\n              'font-medium',\n              size === 'sm' ? 'text-sm' : 'text-base',\n              isDragOver ? 'text-primary-700' : 'text-gray-700'\n            )}>\n              {enableDragDrop ? (\n                locale === 'es' \n                  ? 'Arrastra archivos aquí o' \n                  : 'Drag files here or'\n              ) : (\n                locale === 'es'\n                  ? 'Selecciona archivos'\n                  : 'Select files'\n              )}\n              {enableDragDrop && (\n                <button\n                  type=\"button\"\n                  onClick={() => fileInputRef.current?.click()}\n                  disabled={disabled}\n                  className=\"ml-1 text-primary-600 hover:text-primary-700 underline\"\n                >\n                  {locale === 'es' ? 'busca en tu dispositivo' : 'browse'}\n                </button>\n              )}\n            </div>\n            \n            <div className=\"text-sm text-gray-500\">\n              {internalFiles.length > 0 && (\n                <span>\n                  {internalFiles.length} de {maxFiles} {locale === 'es' ? 'archivos' : 'files'}\n                </span>\n              )}\n            </div>\n          </div>\n        </div>\n        \n        {/* Hidden File Input */}\n        <input\n          ref={fileInputRef}\n          type=\"file\"\n          multiple={maxFiles > 1}\n          accept={fileTypeConfig.extensions.join(',')}\n          onChange={handleFileInputChange}\n          disabled={disabled}\n          className=\"hidden\"\n        />\n        \n        {/* Manual Upload Button for non-drag drop */}\n        {!enableDragDrop && (\n          <button\n            type=\"button\"\n            onClick={() => fileInputRef.current?.click()}\n            disabled={disabled}\n            className={cn(\n              'mt-2 w-full px-4 py-2 border border-gray-300 rounded-md text-sm font-medium',\n              'text-gray-700 bg-white hover:bg-gray-50',\n              'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n              'disabled:cursor-not-allowed disabled:bg-gray-50'\n            )}\n          >\n            {locale === 'es' ? 'Seleccionar archivos' : 'Select files'}\n          </button>\n        )}\n      </div>\n      \n      {/* File List */}\n      {internalFiles.length > 0 && (\n        <div className=\"mt-4 space-y-2\">\n          {internalFiles.map((fileItem) => (\n            <div\n              key={fileItem.id}\n              className=\"flex items-center space-x-3 p-3 bg-gray-50 rounded-lg\"\n            >\n              {/* File Icon/Preview */}\n              <div className=\"flex-shrink-0\">\n                {showPreview && fileItem.preview ? (\n                  <img\n                    src={fileItem.preview}\n                    alt={fileItem.file.name}\n                    className={cn(\n                      'rounded object-cover',\n                      previewSize === 'sm' ? 'h-8 w-8' :\n                      previewSize === 'lg' ? 'h-16 w-16' : 'h-12 w-12'\n                    )}\n                  />\n                ) : (\n                  <div className=\"text-gray-400\">\n                    {getFileIcon(fileItem.file)}\n                  </div>\n                )}\n              </div>\n              \n              {/* File Info */}\n              <div className=\"flex-1 min-w-0\">\n                <div className=\"flex items-center justify-between\">\n                  <p className=\"text-sm font-medium text-gray-900 truncate\">\n                    {fileItem.file.name}\n                  </p>\n                  <div className=\"flex items-center space-x-2\">\n                    {/* Status Icon */}\n                    {fileItem.status === 'completed' && (\n                      <Check className=\"h-4 w-4 text-green-500\" />\n                    )}\n                    {fileItem.status === 'error' && (\n                      <AlertCircle className=\"h-4 w-4 text-red-500\" />\n                    )}\n                    {fileItem.status === 'uploading' && (\n                      <div className=\"animate-spin h-4 w-4 border-2 border-gray-300 border-t-primary-600 rounded-full\" />\n                    )}\n                    \n                    {/* Remove Button */}\n                    <button\n                      type=\"button\"\n                      onClick={() => removeFile(fileItem.id)}\n                      disabled={disabled}\n                      className=\"text-gray-400 hover:text-red-500 transition-colors\"\n                    >\n                      <X className=\"h-4 w-4\" />\n                    </button>\n                  </div>\n                </div>\n                \n                <div className=\"flex items-center justify-between mt-1\">\n                  <p className=\"text-sm text-gray-500\">\n                    {formatFileSize(fileItem.file.size)}\n                  </p>\n                  \n                  {/* Progress or Status */}\n                  {fileItem.status === 'uploading' && (\n                    <div className=\"flex items-center space-x-2\">\n                      <div className=\"w-20 bg-gray-200 rounded-full h-1.5\">\n                        <div\n                          className=\"bg-primary-600 h-1.5 rounded-full transition-all duration-300\"\n                          style={{ width: `${fileItem.progress}%` }}\n                        />\n                      </div>\n                      <span className=\"text-xs text-gray-500\">\n                        {Math.round(fileItem.progress)}%\n                      </span>\n                    </div>\n                  )}\n                  \n                  {fileItem.status === 'completed' && (\n                    <span className=\"text-xs text-green-600\">\n                      {locale === 'es' ? 'Completado' : 'Completed'}\n                    </span>\n                  )}\n                  \n                  {fileItem.status === 'error' && (\n                    <span className=\"text-xs text-red-600\">\n                      {fileItem.error || (locale === 'es' ? 'Error' : 'Error')}\n                    </span>\n                  )}\n                </div>\n              </div>\n            </div>\n          ))}\n        </div>\n      )}\n      \n      {/* Error Display */}\n      {displayError && (\n        <div className=\"mt-2 text-sm text-red-600 flex items-start space-x-1\">\n          <AlertCircle className=\"h-4 w-4 mt-0.5 flex-shrink-0\" />\n          <span>{displayError}</span>\n        </div>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState?.isActive && (\n        <div className=\"mt-2 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>\n            {locale === 'es' \n              ? `Archivo \"${undoState.removedFile.file.name}\" eliminado`\n              : `File \"${undoState.removedFile.file.name}\" removed`\n            }\n          </span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>{locale === 'es' ? 'Deshacer' : 'Undo'}</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausFileUpload.displayName = 'BirhausFileUpload'\n\n// Hook for enhanced file upload functionality\nexport const useBirhausFileUpload = (maxFiles: number = 3) => {\n  const [files, setFiles] = useState<FileItem[]>([])\n  const [isUploading, setIsUploading] = useState(false)\n  \n  const addFiles = useCallback((newFiles: FileItem[]) => {\n    setFiles(prev => [...prev, ...newFiles].slice(0, maxFiles))\n  }, [maxFiles])\n  \n  const removeFile = useCallback((fileId: string) => {\n    setFiles(prev => prev.filter(f => f.id !== fileId))\n  }, [])\n  \n  const updateFileStatus = useCallback((fileId: string, updates: Partial<FileItem>) => {\n    setFiles(prev => prev.map(f => \n      f.id === fileId ? { ...f, ...updates } : f\n    ))\n  }, [])\n  \n  const uploadAll = useCallback(async (uploadFn: (file: File) => Promise<string>) => {\n    setIsUploading(true)\n    \n    const pendingFiles = files.filter(f => f.status === 'pending')\n    \n    for (const fileItem of pendingFiles) {\n      try {\n        updateFileStatus(fileItem.id, { status: 'uploading', progress: 0 })\n        await uploadFn(fileItem.file)\n        updateFileStatus(fileItem.id, { status: 'completed', progress: 100 })\n      } catch (error) {\n        updateFileStatus(fileItem.id, { \n          status: 'error', \n          error: error instanceof Error ? error.message : 'Upload failed' \n        })\n      }\n    }\n    \n    setIsUploading(false)\n  }, [files, updateFileStatus])\n  \n  const hasErrors = files.some(f => f.status === 'error')\n  const allCompleted = files.length > 0 && files.every(f => f.status === 'completed')\n  const totalProgress = files.length > 0 \n    ? files.reduce((acc, f) => acc + f.progress, 0) / files.length \n    : 0\n  \n  return {\n    files,\n    setFiles,\n    addFiles,\n    removeFile,\n    updateFileStatus,\n    uploadAll,\n    isUploading,\n    hasErrors,\n    allCompleted,\n    totalProgress\n  }\n}","'use client'\n\nimport { forwardRef, useState, useCallback, useMemo } from 'react'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, MoreHorizontal } from 'lucide-react'\n\n/**\n * BIRHAUS Pagination Component\n * \n * Enhanced pagination implementing all 10 BIRHAUS principles:\n * - Spanish-first labels and navigation text\n * - Progressive disclosure of page numbers (max 7 visible)\n * - Cognitive load reduction with clear navigation\n * - Accessibility compliance (WCAG AA+)\n * - Performance optimized rendering\n * - Mobile-friendly responsive design\n * - IPU Admin specific page size options\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface PaginationInfo {\n  currentPage: number\n  totalPages: number\n  totalItems: number\n  itemsPerPage: number\n  startItem: number\n  endItem: number\n}\n\nexport interface BirhausPaginationProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // Pagination data\n  currentPage: number\n  totalItems: number\n  itemsPerPage: number\n  onPageChange: (page: number) => void\n  \n  // Page size controls\n  pageSizeOptions?: number[]\n  onPageSizeChange?: (pageSize: number) => void\n  showPageSizeSelector?: boolean\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  maxVisiblePages?: number // Default 7 (Miller's Law)\n  showQuickJump?: boolean\n  showFirstLast?: boolean\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  \n  // Appearance\n  variant?: 'default' | 'minimal' | 'compact'\n  size?: 'sm' | 'md' | 'lg'\n  \n  // Labels customization\n  previousLabel?: string\n  nextLabel?: string\n  firstLabel?: string\n  lastLabel?: string\n  ofLabel?: string // \"of\" in \"Page 1 of 10\"\n  itemsLabel?: string // \"items\" in \"1-10 of 100 items\"\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Mobile optimization\n  mobileVariant?: 'compact' | 'minimal' | 'hidden'\n  \n  // IPU Admin specific\n  showItemsInfo?: boolean\n  showQuickActions?: boolean\n}\n\nexport const BirhausPagination = forwardRef<HTMLDivElement, BirhausPaginationProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Core pagination\n  currentPage,\n  totalItems,\n  itemsPerPage,\n  onPageChange,\n  \n  // Page size\n  pageSizeOptions = [10, 25, 50, 100],\n  onPageSizeChange,\n  showPageSizeSelector = true,\n  \n  // Progressive disclosure\n  maxVisiblePages = 7,\n  showQuickJump = false,\n  showFirstLast = true,\n  \n  // Basic props\n  disabled = false,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  \n  // Custom labels\n  previousLabel,\n  nextLabel,\n  firstLabel,\n  lastLabel,\n  ofLabel,\n  itemsLabel,\n  \n  // Locale\n  locale = 'es',\n  \n  // Mobile\n  mobileVariant = 'compact',\n  \n  // IPU Admin\n  showItemsInfo = true,\n  showQuickActions = false\n}, ref) => {\n  // Local state for quick jump\n  const [jumpToPage, setJumpToPage] = useState('')\n  const [showJumpInput, setShowJumpInput] = useState(false)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string,\n    english: string\n  ): string => {\n    if (primary) return primary\n    return locale === 'es' ? spanish : english\n  }, [locale])\n  \n  // Localized labels\n  const labels = useMemo(() => ({\n    previous: getDisplayText(previousLabel, 'Anterior', 'Previous'),\n    next: getDisplayText(nextLabel, 'Siguiente', 'Next'),\n    first: getDisplayText(firstLabel, 'Primera', 'First'),\n    last: getDisplayText(lastLabel, 'Última', 'Last'),\n    of: getDisplayText(ofLabel, 'de', 'of'),\n    items: getDisplayText(itemsLabel, 'elementos', 'items'),\n    page: locale === 'es' ? 'Página' : 'Page',\n    goTo: locale === 'es' ? 'Ir a página' : 'Go to page',\n    showing: locale === 'es' ? 'Mostrando' : 'Showing',\n    to: locale === 'es' ? 'a' : 'to',\n    itemsPerPage: locale === 'es' ? 'elementos por página' : 'items per page',\n    jump: locale === 'es' ? 'Saltar' : 'Jump'\n  }), [getDisplayText, previousLabel, nextLabel, firstLabel, lastLabel, ofLabel, itemsLabel, locale])\n  \n  // Calculate pagination info\n  const paginationInfo = useMemo((): PaginationInfo => {\n    const totalPages = Math.ceil(totalItems / itemsPerPage)\n    const startItem = (currentPage - 1) * itemsPerPage + 1\n    const endItem = Math.min(currentPage * itemsPerPage, totalItems)\n    \n    return {\n      currentPage,\n      totalPages,\n      totalItems,\n      itemsPerPage,\n      startItem,\n      endItem\n    }\n  }, [currentPage, totalItems, itemsPerPage])\n  \n  // Calculate visible page numbers (progressive disclosure)\n  const visiblePages = useMemo(() => {\n    const { totalPages } = paginationInfo\n    const maxPages = Math.min(maxVisiblePages, totalPages)\n    \n    if (totalPages <= maxPages) {\n      return Array.from({ length: totalPages }, (_, i) => i + 1)\n    }\n    \n    const halfMax = Math.floor(maxPages / 2)\n    let start = Math.max(1, currentPage - halfMax)\n    const end = Math.min(totalPages, start + maxPages - 1)\n    \n    // Adjust if we're near the end\n    if (end - start + 1 < maxPages) {\n      start = Math.max(1, end - maxPages + 1)\n    }\n    \n    const pages: (number | 'ellipsis')[] = []\n    \n    // Add first page and ellipsis if needed\n    if (start > 1) {\n      pages.push(1)\n      if (start > 2) {\n        pages.push('ellipsis')\n      }\n    }\n    \n    // Add visible pages\n    for (let i = start; i <= end; i++) {\n      pages.push(i)\n    }\n    \n    // Add ellipsis and last page if needed\n    if (end < totalPages) {\n      if (end < totalPages - 1) {\n        pages.push('ellipsis')\n      }\n      pages.push(totalPages)\n    }\n    \n    return pages\n  }, [paginationInfo, maxVisiblePages, currentPage])\n  \n  // Navigation handlers\n  const handlePageChange = useCallback((page: number) => {\n    if (disabled) return\n    \n    const { totalPages } = paginationInfo\n    const newPage = Math.max(1, Math.min(page, totalPages))\n    \n    if (newPage !== currentPage) {\n      onPageChange(newPage)\n    }\n  }, [disabled, paginationInfo, currentPage, onPageChange])\n  \n  const handlePrevious = useCallback(() => {\n    handlePageChange(currentPage - 1)\n  }, [handlePageChange, currentPage])\n  \n  const handleNext = useCallback(() => {\n    handlePageChange(currentPage + 1)\n  }, [handlePageChange, currentPage])\n  \n  const handleFirst = useCallback(() => {\n    handlePageChange(1)\n  }, [handlePageChange])\n  \n  const handleLast = useCallback(() => {\n    handlePageChange(paginationInfo.totalPages)\n  }, [handlePageChange, paginationInfo.totalPages])\n  \n  // Quick jump handler\n  const handleQuickJump = useCallback(() => {\n    const page = parseInt(jumpToPage, 10)\n    if (!isNaN(page)) {\n      handlePageChange(page)\n      setJumpToPage('')\n      setShowJumpInput(false)\n    }\n  }, [jumpToPage, handlePageChange])\n  \n  // Page size change handler\n  const handlePageSizeChange = useCallback((newPageSize: number) => {\n    if (onPageSizeChange) {\n      onPageSizeChange(newPageSize)\n      // Adjust current page if needed\n      const newTotalPages = Math.ceil(totalItems / newPageSize)\n      if (currentPage > newTotalPages) {\n        onPageChange(newTotalPages)\n      }\n    }\n  }, [onPageSizeChange, totalItems, currentPage, onPageChange])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: {\n      button: 'px-2 py-1 text-sm',\n      text: 'text-sm',\n      select: 'text-sm px-2 py-1'\n    },\n    md: {\n      button: 'px-3 py-2 text-sm',\n      text: 'text-sm',\n      select: 'text-sm px-3 py-2'\n    },\n    lg: {\n      button: 'px-4 py-2 text-base',\n      text: 'text-base',\n      select: 'text-base px-3 py-2'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      container: 'bg-white border border-gray-200 rounded-lg',\n      button: 'border border-gray-300 hover:bg-gray-50',\n      activePage: 'bg-primary-600 text-white border-primary-600',\n      inactivePage: 'text-gray-700 hover:bg-gray-50'\n    },\n    minimal: {\n      container: '',\n      button: 'hover:bg-gray-100',\n      activePage: 'bg-primary-100 text-primary-700',\n      inactivePage: 'text-gray-600 hover:bg-gray-100'\n    },\n    compact: {\n      container: 'bg-gray-50 rounded-md',\n      button: 'hover:bg-white hover:shadow-sm',\n      activePage: 'bg-primary-600 text-white',\n      inactivePage: 'text-gray-700 hover:bg-white'\n    }\n  }\n  \n  const currentSizeClasses = sizeClasses[size]\n  const currentVariantClasses = variantClasses[variant]\n  \n  // If no items, don't render\n  if (totalItems === 0) {\n    return null\n  }\n  \n  // Mobile view\n  const isMobile = typeof window !== 'undefined' && window.innerWidth < 768\n  \n  if (isMobile && mobileVariant === 'hidden') {\n    return null\n  }\n  \n  if (isMobile && mobileVariant === 'minimal') {\n    return (\n      <div ref={ref} className=\"birhaus-pagination\">\n        <div className=\"flex items-center justify-between\">\n          <button\n            onClick={handlePrevious}\n            disabled={disabled || currentPage === 1}\n            className={cn(\n              'flex items-center space-x-1 rounded-md transition-colors',\n              currentSizeClasses.button,\n              currentVariantClasses.button,\n              (disabled || currentPage === 1) && 'opacity-50 cursor-not-allowed'\n            )}\n          >\n            <ChevronLeft className=\"h-4 w-4\" />\n            <span>{labels.previous}</span>\n          </button>\n          \n          <span className={cn('font-medium', currentSizeClasses.text)}>\n            {currentPage} {labels.of} {paginationInfo.totalPages}\n          </span>\n          \n          <button\n            onClick={handleNext}\n            disabled={disabled || currentPage === paginationInfo.totalPages}\n            className={cn(\n              'flex items-center space-x-1 rounded-md transition-colors',\n              currentSizeClasses.button,\n              currentVariantClasses.button,\n              (disabled || currentPage === paginationInfo.totalPages) && 'opacity-50 cursor-not-allowed'\n            )}\n          >\n            <span>{labels.next}</span>\n            <ChevronRight className=\"h-4 w-4\" />\n          </button>\n        </div>\n      </div>\n    )\n  }\n  \n  if (isMobile && mobileVariant === 'compact') {\n    return (\n      <div ref={ref} className=\"birhaus-pagination\">\n        <div className={cn('p-3 space-y-3', currentVariantClasses.container)}>\n          {/* Items info */}\n          {showItemsInfo && (\n            <div className={cn('text-center', currentSizeClasses.text, 'text-gray-600')}>\n              {labels.showing} {paginationInfo.startItem}-{paginationInfo.endItem} {labels.of} {paginationInfo.totalItems} {labels.items}\n            </div>\n          )}\n          \n          {/* Navigation */}\n          <div className=\"flex items-center justify-between\">\n            <button\n              onClick={handlePrevious}\n              disabled={disabled || currentPage === 1}\n              className={cn(\n                'flex items-center space-x-1 rounded-md transition-colors',\n                currentSizeClasses.button,\n                currentVariantClasses.button,\n                (disabled || currentPage === 1) && 'opacity-50 cursor-not-allowed'\n              )}\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n              <span>{labels.previous}</span>\n            </button>\n            \n            <span className={cn('font-medium', currentSizeClasses.text)}>\n              {labels.page} {currentPage} {labels.of} {paginationInfo.totalPages}\n            </span>\n            \n            <button\n              onClick={handleNext}\n              disabled={disabled || currentPage === paginationInfo.totalPages}\n              className={cn(\n                'flex items-center space-x-1 rounded-md transition-colors',\n                currentSizeClasses.button,\n                currentVariantClasses.button,\n                (disabled || currentPage === paginationInfo.totalPages) && 'opacity-50 cursor-not-allowed'\n              )}\n            >\n              <span>{labels.next}</span>\n              <ChevronRight className=\"h-4 w-4\" />\n            </button>\n          </div>\n          \n          {/* Page size selector */}\n          {showPageSizeSelector && onPageSizeChange && pageSizeOptions.length > 1 && (\n            <div className=\"flex items-center justify-center space-x-2\">\n              <span className={cn(currentSizeClasses.text, 'text-gray-600')}>\n                {labels.itemsPerPage}:\n              </span>\n              <select\n                value={itemsPerPage}\n                onChange={(e) => handlePageSizeChange(parseInt(e.target.value, 10))}\n                disabled={disabled}\n                className={cn(\n                  'border border-gray-300 rounded-md bg-white',\n                  currentSizeClasses.select,\n                  'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n                  disabled && 'opacity-50 cursor-not-allowed'\n                )}\n              >\n                {pageSizeOptions.map((size) => (\n                  <option key={size} value={size}>\n                    {size}\n                  </option>\n                ))}\n              </select>\n            </div>\n          )}\n        </div>\n      </div>\n    )\n  }\n  \n  // Desktop view\n  return (\n    <div ref={ref} className=\"birhaus-pagination\">\n      <div className={cn('p-4 space-y-4', currentVariantClasses.container)}>\n        {/* Items info and page size selector */}\n        <div className=\"flex items-center justify-between\">\n          {/* Items info */}\n          {showItemsInfo && (\n            <div className={cn(currentSizeClasses.text, 'text-gray-600')}>\n              {labels.showing} <span className=\"font-medium\">{paginationInfo.startItem}</span> {labels.to} <span className=\"font-medium\">{paginationInfo.endItem}</span> {labels.of} <span className=\"font-medium\">{paginationInfo.totalItems}</span> {labels.items}\n            </div>\n          )}\n          \n          {/* Page size selector */}\n          {showPageSizeSelector && onPageSizeChange && pageSizeOptions.length > 1 && (\n            <div className=\"flex items-center space-x-2\">\n              <span className={cn(currentSizeClasses.text, 'text-gray-600')}>\n                {labels.itemsPerPage}:\n              </span>\n              <select\n                value={itemsPerPage}\n                onChange={(e) => handlePageSizeChange(parseInt(e.target.value, 10))}\n                disabled={disabled}\n                className={cn(\n                  'border border-gray-300 rounded-md bg-white',\n                  currentSizeClasses.select,\n                  'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n                  disabled && 'opacity-50 cursor-not-allowed'\n                )}\n              >\n                {pageSizeOptions.map((size) => (\n                  <option key={size} value={size}>\n                    {size}\n                  </option>\n                ))}\n              </select>\n            </div>\n          )}\n        </div>\n        \n        {/* Navigation */}\n        <div className=\"flex items-center justify-between\">\n          {/* Previous navigation */}\n          <div className=\"flex items-center space-x-1\">\n            {showFirstLast && (\n              <button\n                onClick={handleFirst}\n                disabled={disabled || currentPage === 1}\n                className={cn(\n                  'flex items-center space-x-1 rounded-md transition-colors',\n                  currentSizeClasses.button,\n                  currentVariantClasses.button,\n                  (disabled || currentPage === 1) && 'opacity-50 cursor-not-allowed'\n                )}\n                title={labels.first}\n              >\n                <ChevronsLeft className=\"h-4 w-4\" />\n                <span className=\"hidden sm:inline\">{labels.first}</span>\n              </button>\n            )}\n            \n            <button\n              onClick={handlePrevious}\n              disabled={disabled || currentPage === 1}\n              className={cn(\n                'flex items-center space-x-1 rounded-md transition-colors',\n                currentSizeClasses.button,\n                currentVariantClasses.button,\n                (disabled || currentPage === 1) && 'opacity-50 cursor-not-allowed'\n              )}\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n              <span>{labels.previous}</span>\n            </button>\n          </div>\n          \n          {/* Page numbers */}\n          <div className=\"flex items-center space-x-1\">\n            {visiblePages.map((page, index) => (\n              page === 'ellipsis' ? (\n                <div key={`ellipsis-${index}`} className=\"px-2\">\n                  <MoreHorizontal className=\"h-4 w-4 text-gray-400\" />\n                </div>\n              ) : (\n                <button\n                  key={page}\n                  onClick={() => handlePageChange(page)}\n                  disabled={disabled}\n                  className={cn(\n                    'rounded-md transition-colors font-medium',\n                    currentSizeClasses.button,\n                    page === currentPage\n                      ? currentVariantClasses.activePage\n                      : cn(currentVariantClasses.inactivePage, currentVariantClasses.button),\n                    disabled && 'opacity-50 cursor-not-allowed'\n                  )}\n                >\n                  {page}\n                </button>\n              )\n            ))}\n          </div>\n          \n          {/* Next navigation */}\n          <div className=\"flex items-center space-x-1\">\n            <button\n              onClick={handleNext}\n              disabled={disabled || currentPage === paginationInfo.totalPages}\n              className={cn(\n                'flex items-center space-x-1 rounded-md transition-colors',\n                currentSizeClasses.button,\n                currentVariantClasses.button,\n                (disabled || currentPage === paginationInfo.totalPages) && 'opacity-50 cursor-not-allowed'\n              )}\n            >\n              <span>{labels.next}</span>\n              <ChevronRight className=\"h-4 w-4\" />\n            </button>\n            \n            {showFirstLast && (\n              <button\n                onClick={handleLast}\n                disabled={disabled || currentPage === paginationInfo.totalPages}\n                className={cn(\n                  'flex items-center space-x-1 rounded-md transition-colors',\n                  currentSizeClasses.button,\n                  currentVariantClasses.button,\n                  (disabled || currentPage === paginationInfo.totalPages) && 'opacity-50 cursor-not-allowed'\n                )}\n                title={labels.last}\n              >\n                <span className=\"hidden sm:inline\">{labels.last}</span>\n                <ChevronsRight className=\"h-4 w-4\" />\n              </button>\n            )}\n          </div>\n        </div>\n        \n        {/* Quick jump */}\n        {showQuickJump && paginationInfo.totalPages > maxVisiblePages && (\n          <div className=\"flex items-center justify-center space-x-2\">\n            {!showJumpInput ? (\n              <button\n                onClick={() => setShowJumpInput(true)}\n                disabled={disabled}\n                className={cn(\n                  'text-primary-600 hover:text-primary-700 underline',\n                  currentSizeClasses.text,\n                  disabled && 'opacity-50 cursor-not-allowed'\n                )}\n              >\n                {labels.goTo}...\n              </button>\n            ) : (\n              <>\n                <span className={cn(currentSizeClasses.text, 'text-gray-600')}>\n                  {labels.goTo}:\n                </span>\n                <input\n                  type=\"number\"\n                  min=\"1\"\n                  max={paginationInfo.totalPages}\n                  value={jumpToPage}\n                  onChange={(e) => setJumpToPage(e.target.value)}\n                  onKeyDown={(e) => e.key === 'Enter' && handleQuickJump()}\n                  disabled={disabled}\n                  className={cn(\n                    'w-16 border border-gray-300 rounded-md text-center',\n                    currentSizeClasses.select,\n                    'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-opacity-50',\n                    disabled && 'opacity-50 cursor-not-allowed'\n                  )}\n                  placeholder=\"1\"\n                />\n                <button\n                  onClick={handleQuickJump}\n                  disabled={disabled || !jumpToPage}\n                  className={cn(\n                    'rounded-md transition-colors',\n                    currentSizeClasses.button,\n                    'bg-primary-600 text-white hover:bg-primary-700',\n                    (disabled || !jumpToPage) && 'opacity-50 cursor-not-allowed'\n                  )}\n                >\n                  {labels.jump}\n                </button>\n                <button\n                  onClick={() => {\n                    setShowJumpInput(false)\n                    setJumpToPage('')\n                  }}\n                  disabled={disabled}\n                  className={cn(\n                    'text-gray-400 hover:text-gray-600',\n                    currentSizeClasses.text,\n                    disabled && 'opacity-50 cursor-not-allowed'\n                  )}\n                >\n                  ×\n                </button>\n              </>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  )\n})\n\nBirhausPagination.displayName = 'BirhausPagination'\n\n// Hook for enhanced pagination functionality\nexport const useBirhausPagination = (\n  totalItems: number,\n  initialPageSize: number = 25\n) => {\n  const [currentPage, setCurrentPage] = useState(1)\n  const [pageSize, setPageSize] = useState(initialPageSize)\n  \n  const totalPages = Math.ceil(totalItems / pageSize)\n  const startIndex = (currentPage - 1) * pageSize\n  const endIndex = Math.min(startIndex + pageSize, totalItems)\n  \n  const handlePageChange = useCallback((page: number) => {\n    setCurrentPage(Math.max(1, Math.min(page, totalPages)))\n  }, [totalPages])\n  \n  const handlePageSizeChange = useCallback((newPageSize: number) => {\n    setPageSize(newPageSize)\n    // Adjust current page if needed\n    const newTotalPages = Math.ceil(totalItems / newPageSize)\n    if (currentPage > newTotalPages) {\n      setCurrentPage(newTotalPages)\n    }\n  }, [totalItems, currentPage])\n  \n  const reset = useCallback(() => {\n    setCurrentPage(1)\n  }, [])\n  \n  return {\n    currentPage,\n    pageSize,\n    totalPages,\n    startIndex,\n    endIndex,\n    handlePageChange,\n    handlePageSizeChange,\n    reset,\n    hasNextPage: currentPage < totalPages,\n    hasPreviousPage: currentPage > 1\n  }\n}\n\n// IPU Admin specific pagination configurations\nexport const ipuAdminPaginationConfig = {\n  members: {\n    defaultPageSize: 25,\n    pageSizeOptions: [10, 25, 50, 100],\n    showQuickJump: true\n  },\n  donations: {\n    defaultPageSize: 50,\n    pageSizeOptions: [25, 50, 100, 200],\n    showQuickJump: true\n  },\n  events: {\n    defaultPageSize: 10,\n    pageSizeOptions: [5, 10, 20, 50],\n    showQuickJump: false\n  },\n  reports: {\n    defaultPageSize: 20,\n    pageSizeOptions: [10, 20, 50],\n    showQuickJump: false\n  }\n}","'use client'\n\nimport { forwardRef, useState, useCallback, useMemo, useEffect } from 'react'\nimport { Check, Minus, Users, Shield, Calendar } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Checkbox Group Component\n * \n * Enhanced checkbox group implementing all 10 BIRHAUS principles:\n * - Spanish-first labels and descriptions\n * - Progressive disclosure with grouping and categorization\n * - Cognitive load reduction (max 7 items per group)\n * - Accessibility compliance (WCAG AA+)\n * - Select all/none functionality\n * - IPU Admin specific presets for permissions and ministries\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface CheckboxOption {\n  id: string\n  value: string\n  labelEs: string\n  labelEn: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  disabled?: boolean\n  icon?: React.ReactNode\n  category?: string\n}\n\nexport interface CheckboxCategory {\n  id: string\n  labelEs: string\n  labelEn: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  icon?: React.ReactNode\n  color?: string\n}\n\nexport interface BirhausCheckboxGroupProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Options and values\n  options: CheckboxOption[]\n  value?: string[]\n  defaultValue?: string[]\n  onChange?: (values: string[]) => void\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // Grouping and categorization\n  categories?: CheckboxCategory[]\n  showCategories?: boolean\n  maxItemsPerCategory?: number // Default 7 (Miller's Law)\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  required?: boolean\n  \n  // Select all functionality\n  showSelectAll?: boolean\n  selectAllLabelEs?: string\n  selectAllLabelEn?: string\n  \n  // Appearance\n  variant?: 'default' | 'cards' | 'minimal'\n  size?: 'sm' | 'md' | 'lg'\n  layout?: 'vertical' | 'horizontal' | 'grid'\n  \n  // Validation\n  minSelections?: number\n  maxSelections?: number\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  presetType?: 'permissions' | 'ministries' | 'roles' | 'custom'\n}\n\nexport const BirhausCheckboxGroup = forwardRef<HTMLDivElement, BirhausCheckboxGroupProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Options\n  options,\n  value,\n  defaultValue = [],\n  onChange,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  \n  // Grouping\n  categories,\n  showCategories = true,\n  maxItemsPerCategory = 7,\n  \n  // Basic props\n  disabled = false,\n  required = false,\n  \n  // Select all\n  showSelectAll = true,\n  selectAllLabelEs = 'Seleccionar todos',\n  selectAllLabelEn = 'Select all',\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  layout = 'vertical',\n  \n  // Validation\n  minSelections,\n  maxSelections,\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  presetType = 'custom'\n}, ref) => {\n  // State management\n  const [internalValue, setInternalValue] = useState<string[]>(value || defaultValue)\n  const [validationError, setValidationError] = useState<string>('')\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || errorEs || validationError\n  const selectAllLabel = getDisplayText(undefined, selectAllLabelEs, selectAllLabelEn, 'Select all')\n  \n  // Get default categories for IPU Admin\n  const getDefaultCategories = useCallback((): CheckboxCategory[] => {\n    const categoryConfigs: Record<string, CheckboxCategory[]> = {\n      permissions: [\n        {\n          id: 'admin',\n          labelEs: 'Administración',\n          labelEn: 'Administration',\n          descriptionEs: 'Permisos de administración del sistema',\n          descriptionEn: 'System administration permissions',\n          icon: <Shield className=\"h-4 w-4\" />,\n          color: 'red'\n        },\n        {\n          id: 'financial',\n          labelEs: 'Financiero',\n          labelEn: 'Financial',\n          descriptionEs: 'Gestión de donaciones y finanzas',\n          descriptionEn: 'Donations and financial management',\n          icon: <Users className=\"h-4 w-4\" />,\n          color: 'green'\n        },\n        {\n          id: 'events',\n          labelEs: 'Eventos',\n          labelEn: 'Events',\n          descriptionEs: 'Organización y gestión de eventos',\n          descriptionEn: 'Event organization and management',\n          icon: <Calendar className=\"h-4 w-4\" />,\n          color: 'blue'\n        }\n      ],\n      ministries: [\n        {\n          id: 'worship',\n          labelEs: 'Adoración',\n          labelEn: 'Worship',\n          descriptionEs: 'Ministerios de música y adoración',\n          descriptionEn: 'Music and worship ministries',\n          color: 'purple'\n        },\n        {\n          id: 'children',\n          labelEs: 'Niños',\n          labelEn: 'Children',\n          descriptionEs: 'Ministerios para niños y familias',\n          descriptionEn: 'Children and family ministries',\n          color: 'yellow'\n        },\n        {\n          id: 'youth',\n          labelEs: 'Jóvenes',\n          labelEn: 'Youth',\n          descriptionEs: 'Ministerios juveniles',\n          descriptionEn: 'Youth ministries',\n          color: 'indigo'\n        }\n      ],\n      roles: [\n        {\n          id: 'leadership',\n          labelEs: 'Liderazgo',\n          labelEn: 'Leadership',\n          descriptionEs: 'Roles de liderazgo y dirección',\n          descriptionEn: 'Leadership and direction roles',\n          color: 'orange'\n        },\n        {\n          id: 'service',\n          labelEs: 'Servicio',\n          labelEn: 'Service',\n          descriptionEs: 'Roles de servicio y apoyo',\n          descriptionEn: 'Service and support roles',\n          color: 'teal'\n        }\n      ]\n    }\n    \n    return safeAccess(categoryConfigs, presetType, [])\n  }, [presetType])\n  \n  const allCategories = categories || getDefaultCategories()\n  \n  // Group options by category\n  const groupedOptions = useMemo(() => {\n    if (!showCategories || allCategories.length === 0) {\n      return { uncategorized: options }\n    }\n    \n    const grouped: Record<string, CheckboxOption[]> = {}\n    const uncategorized: CheckboxOption[] = []\n    \n    // Initialize category groups\n    allCategories.forEach(category => {\n      grouped[category.id] = []\n    })\n    \n    // Group options\n    options.forEach(option => {\n      if (option.category && grouped[option.category]) {\n        // Limit items per category (Miller's Law)\n        if (grouped[option.category].length < maxItemsPerCategory) {\n          grouped[option.category].push(option)\n        }\n      } else {\n        uncategorized.push(option)\n      }\n    })\n    \n    // Add uncategorized if any\n    if (uncategorized.length > 0) {\n      grouped.uncategorized = uncategorized\n    }\n    \n    return grouped\n  }, [options, allCategories, showCategories, maxItemsPerCategory])\n  \n  // Validation function\n  const validateSelection = useCallback((values: string[]): string => {\n    if (required && values.length === 0) {\n      return locale === 'es'\n        ? 'Debe seleccionar al menos una opción'\n        : 'Must select at least one option'\n    }\n    \n    if (minSelections && values.length < minSelections) {\n      return locale === 'es'\n        ? `Debe seleccionar al menos ${minSelections} opciones`\n        : `Must select at least ${minSelections} options`\n    }\n    \n    if (maxSelections && values.length > maxSelections) {\n      return locale === 'es'\n        ? `Puede seleccionar máximo ${maxSelections} opciones`\n        : `Can select maximum ${maxSelections} options`\n    }\n    \n    return ''\n  }, [required, minSelections, maxSelections, locale])\n  \n  // Handle option change\n  const handleOptionChange = useCallback((optionValue: string, checked: boolean) => {\n    if (disabled) return\n    \n    let newValues: string[]\n    \n    if (checked) {\n      // Check max selections before adding\n      if (maxSelections && internalValue.length >= maxSelections) {\n        setValidationError(\n          locale === 'es'\n            ? `Máximo ${maxSelections} opciones permitidas`\n            : `Maximum ${maxSelections} options allowed`\n        )\n        return\n      }\n      newValues = [...internalValue, optionValue]\n    } else {\n      newValues = internalValue.filter(v => v !== optionValue)\n    }\n    \n    setInternalValue(newValues)\n    \n    // Validate\n    const errorMessage = validateSelection(newValues)\n    setValidationError(errorMessage)\n    \n    // Call parent onChange\n    onChange?.(newValues)\n  }, [internalValue, onChange, disabled, maxSelections, validateSelection, locale])\n  \n  // Handle select all for category\n  const handleSelectAllCategory = useCallback((categoryId: string, options: CheckboxOption[]) => {\n    if (disabled) return\n    \n    const categoryValues = options.filter(opt => !opt.disabled).map(opt => opt.value)\n    const areAllSelected = categoryValues.every(val => internalValue.includes(val))\n    \n    let newValues: string[]\n    \n    if (areAllSelected) {\n      // Deselect all in category\n      newValues = internalValue.filter(val => !categoryValues.includes(val))\n    } else {\n      // Select all in category (respect max selections)\n      const availableSlots = maxSelections ? maxSelections - internalValue.length : Infinity\n      const toAdd = categoryValues\n        .filter(val => !internalValue.includes(val))\n        .slice(0, availableSlots)\n      \n      newValues = [...internalValue, ...toAdd]\n      \n      if (maxSelections && toAdd.length < categoryValues.filter(val => !internalValue.includes(val)).length) {\n        setValidationError(\n          locale === 'es'\n            ? `Máximo ${maxSelections} opciones permitidas`\n            : `Maximum ${maxSelections} options allowed`\n        )\n      }\n    }\n    \n    setInternalValue(newValues)\n    \n    // Validate\n    const errorMessage = validateSelection(newValues)\n    if (!maxSelections || newValues.length <= maxSelections) {\n      setValidationError(errorMessage)\n    }\n    \n    onChange?.(newValues)\n  }, [internalValue, onChange, disabled, maxSelections, validateSelection, locale])\n  \n  // Handle select all (global)\n  const handleSelectAll = useCallback(() => {\n    if (disabled) return\n    \n    const allValues = options.filter(opt => !opt.disabled).map(opt => opt.value)\n    const areAllSelected = allValues.every(val => internalValue.includes(val))\n    \n    let newValues: string[]\n    \n    if (areAllSelected) {\n      newValues = []\n    } else {\n      // Respect max selections\n      newValues = maxSelections ? allValues.slice(0, maxSelections) : allValues\n    }\n    \n    setInternalValue(newValues)\n    \n    // Validate\n    const errorMessage = validateSelection(newValues)\n    setValidationError(errorMessage)\n    \n    onChange?.(newValues)\n  }, [options, internalValue, onChange, disabled, maxSelections, validateSelection])\n  \n  // Get category selection state\n  const getCategoryState = useCallback((categoryOptions: CheckboxOption[]) => {\n    const enabledOptions = categoryOptions.filter(opt => !opt.disabled)\n    const selectedCount = enabledOptions.filter(opt => internalValue.includes(opt.value)).length\n    \n    if (selectedCount === 0) return 'none'\n    if (selectedCount === enabledOptions.length) return 'all'\n    return 'partial'\n  }, [internalValue])\n  \n  // Sync external value changes\n  useEffect(() => {\n    if (value && value !== internalValue) {\n      setInternalValue(value)\n    }\n  }, [value, internalValue])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: {\n      checkbox: 'h-4 w-4',\n      text: 'text-sm',\n      description: 'text-xs'\n    },\n    md: {\n      checkbox: 'h-5 w-5',\n      text: 'text-base',\n      description: 'text-sm'\n    },\n    lg: {\n      checkbox: 'h-6 w-6',\n      text: 'text-lg',\n      description: 'text-base'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      container: 'space-y-3',\n      group: 'border border-gray-200 rounded-lg p-4',\n      option: 'flex items-start space-x-3'\n    },\n    cards: {\n      container: 'grid gap-3',\n      group: 'border border-gray-200 rounded-lg p-4 bg-gray-50',\n      option: 'flex items-start space-x-3 p-3 border border-gray-200 rounded-md bg-white hover:bg-gray-50'\n    },\n    minimal: {\n      container: 'space-y-2',\n      group: 'space-y-2',\n      option: 'flex items-start space-x-3'\n    }\n  }\n  \n  const layoutClasses = {\n    vertical: 'space-y-3',\n    horizontal: 'flex flex-wrap gap-6',\n    grid: 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3'\n  }\n  \n  const currentSizeClasses = safeAccess(sizeClasses, size, sizeClasses.md)\n  const currentVariantClasses = safeAccess(variantClasses, variant, variantClasses.default)\n  \n  // Render individual checkbox\n  const renderCheckbox = useCallback((option: CheckboxOption) => {\n    const isChecked = internalValue.includes(option.value)\n    const isDisabled = disabled || option.disabled\n    \n    const optionLabel = getDisplayText(\n      undefined,\n      option.labelEs,\n      option.labelEn,\n      option.value\n    )\n    \n    const optionDescription = getDisplayText(\n      option.description,\n      option.descriptionEs,\n      option.descriptionEn,\n      ''\n    )\n    \n    return (\n      <div\n        key={option.id}\n        className={cn(\n          currentVariantClasses.option,\n          isDisabled && 'opacity-50 cursor-not-allowed'\n        )}\n      >\n        <div className=\"relative\">\n          <input\n            type=\"checkbox\"\n            id={option.id}\n            checked={isChecked}\n            onChange={(e) => handleOptionChange(option.value, e.target.checked)}\n            disabled={isDisabled}\n            className=\"sr-only\"\n          />\n          <div\n            className={cn(\n              'border-2 rounded transition-colors duration-200 flex items-center justify-center',\n              currentSizeClasses.checkbox,\n              isChecked\n                ? 'bg-primary-600 border-primary-600 text-white'\n                : 'border-gray-300 bg-white',\n              !isDisabled && 'cursor-pointer hover:border-primary-400',\n              isDisabled && 'cursor-not-allowed'\n            )}\n            onClick={() => !isDisabled && handleOptionChange(option.value, !isChecked)}\n          >\n            {isChecked && <Check className=\"h-3 w-3\" />}\n          </div>\n        </div>\n        \n        <div className=\"flex-1\">\n          <label\n            htmlFor={option.id}\n            className={cn(\n              'font-medium cursor-pointer',\n              currentSizeClasses.text,\n              isDisabled ? 'cursor-not-allowed text-gray-400' : 'text-gray-900'\n            )}\n          >\n            <div className=\"flex items-center space-x-2\">\n              {option.icon && <span>{option.icon}</span>}\n              <span>{optionLabel}</span>\n            </div>\n          </label>\n          \n          {optionDescription && (\n            <p className={cn(\n              'text-gray-600 mt-1',\n              currentSizeClasses.description,\n              isDisabled && 'text-gray-400'\n            )}>\n              {optionDescription}\n            </p>\n          )}\n        </div>\n      </div>\n    )\n  }, [\n    internalValue,\n    disabled,\n    getDisplayText,\n    currentVariantClasses,\n    currentSizeClasses,\n    handleOptionChange\n  ])\n  \n  // Render category group\n  const renderCategoryGroup = useCallback((category: CheckboxCategory, categoryOptions: CheckboxOption[]) => {\n    const categoryState = getCategoryState(categoryOptions)\n    const categoryLabel = getDisplayText(\n      undefined,\n      category.labelEs,\n      category.labelEn,\n      category.id\n    )\n    const categoryDescription = getDisplayText(\n      category.description,\n      category.descriptionEs,\n      category.descriptionEn,\n      ''\n    )\n    \n    return (\n      <div key={category.id} className={currentVariantClasses.group}>\n        {/* Category Header */}\n        <div className=\"flex items-center justify-between mb-3\">\n          <div className=\"flex items-center space-x-2\">\n            {category.icon && <span>{category.icon}</span>}\n            <h3 className={cn('font-semibold', currentSizeClasses.text)}>\n              {categoryLabel}\n            </h3>\n            <span className={cn('text-gray-500', currentSizeClasses.description)}>\n              ({categoryOptions.filter(opt => internalValue.includes(opt.value)).length}/{categoryOptions.filter(opt => !opt.disabled).length})\n            </span>\n          </div>\n          \n          {/* Category Select All */}\n          {showSelectAll && categoryOptions.length > 1 && (\n            <button\n              type=\"button\"\n              onClick={() => handleSelectAllCategory(category.id, categoryOptions)}\n              disabled={disabled}\n              className={cn(\n                'text-primary-600 hover:text-primary-700 font-medium',\n                currentSizeClasses.description,\n                disabled && 'opacity-50 cursor-not-allowed'\n              )}\n            >\n              {categoryState === 'all' \n                ? (locale === 'es' ? 'Deseleccionar todos' : 'Deselect all')\n                : selectAllLabel\n              }\n            </button>\n          )}\n        </div>\n        \n        {/* Category Description */}\n        {categoryDescription && (\n          <p className={cn('text-gray-600 mb-3', currentSizeClasses.description)}>\n            {categoryDescription}\n          </p>\n        )}\n        \n        {/* Category Options */}\n        <div className={cn(\n          layout === 'grid' ? 'grid grid-cols-1 gap-2' : 'space-y-2'\n        )}>\n          {categoryOptions.map(renderCheckbox)}\n        </div>\n      </div>\n    )\n  }, [\n    getCategoryState,\n    getDisplayText,\n    currentVariantClasses,\n    currentSizeClasses,\n    internalValue,\n    showSelectAll,\n    handleSelectAllCategory,\n    disabled,\n    selectAllLabel,\n    locale,\n    layout,\n    renderCheckbox\n  ])\n  \n  return (\n    <div ref={ref} className=\"birhaus-checkbox-group\">\n      {/* Label */}\n      {displayLabel && (\n        <div className=\"mb-3\">\n          <h2 className={cn('font-semibold', currentSizeClasses.text)}>\n            {displayLabel}\n            {required && <span className=\"text-red-500 ml-1\">*</span>}\n          </h2>\n          \n          {displayDescription && (\n            <p className={cn('text-gray-600 mt-1', currentSizeClasses.description)}>\n              {displayDescription}\n            </p>\n          )}\n        </div>\n      )}\n      \n      {/* Global Select All */}\n      {showSelectAll && !showCategories && options.length > 1 && (\n        <div className=\"mb-4\">\n          <button\n            type=\"button\"\n            onClick={handleSelectAll}\n            disabled={disabled}\n            className={cn(\n              'text-primary-600 hover:text-primary-700 font-medium',\n              currentSizeClasses.text,\n              disabled && 'opacity-50 cursor-not-allowed'\n            )}\n          >\n            {internalValue.length === options.filter(opt => !opt.disabled).length\n              ? (locale === 'es' ? 'Deseleccionar todos' : 'Deselect all')\n              : selectAllLabel\n            }\n          </button>\n        </div>\n      )}\n      \n      {/* Options */}\n      <div className={cn(\n        currentVariantClasses.container,\n        layout !== 'vertical' && safeAccess(layoutClasses, layout, layoutClasses.vertical)\n      )}>\n        {showCategories && allCategories.length > 0 ? (\n          // Render by categories\n          <>\n            {allCategories.map(category => {\n              const categoryOptions = groupedOptions[category.id] || []\n              if (categoryOptions.length === 0) return null\n              return renderCategoryGroup(category, categoryOptions)\n            })}\n            \n            {/* Uncategorized options */}\n            {groupedOptions.uncategorized && groupedOptions.uncategorized.length > 0 && (\n              <div className={currentVariantClasses.group}>\n                <h3 className={cn('font-semibold mb-3', currentSizeClasses.text)}>\n                  {locale === 'es' ? 'Otros' : 'Other'}\n                </h3>\n                <div className={cn(\n                  layout === 'grid' ? 'grid grid-cols-1 gap-2' : 'space-y-2'\n                )}>\n                  {groupedOptions.uncategorized.map(renderCheckbox)}\n                </div>\n              </div>\n            )}\n          </>\n        ) : (\n          // Render all options without categories\n          <div className={cn(\n            layout === 'grid' ? 'grid grid-cols-1 sm:grid-cols-2 gap-3' : 'space-y-3'\n          )}>\n            {options.map(renderCheckbox)}\n          </div>\n        )}\n      </div>\n      \n      {/* Selection Summary */}\n      {(minSelections || maxSelections) && (\n        <div className={cn('mt-3 text-gray-600', currentSizeClasses.description)}>\n          {locale === 'es' ? 'Seleccionados' : 'Selected'}: {internalValue.length}\n          {maxSelections && ` / ${maxSelections}`}\n          {minSelections && ` (${locale === 'es' ? 'mínimo' : 'minimum'} ${minSelections})`}\n        </div>\n      )}\n      \n      {/* Error Display */}\n      {displayError && (\n        <div className={cn('mt-2 text-red-600', currentSizeClasses.description)}>\n          {displayError}\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausCheckboxGroup.displayName = 'BirhausCheckboxGroup'\n\n// Hook for enhanced checkbox group functionality\nexport const useBirhausCheckboxGroup = (options: CheckboxOption[], initialValues: string[] = []) => {\n  const [selectedValues, setSelectedValues] = useState<string[]>(initialValues)\n  \n  const selectAll = useCallback(() => {\n    const allValues = options.filter(opt => !opt.disabled).map(opt => opt.value)\n    setSelectedValues(allValues)\n  }, [options])\n  \n  const deselectAll = useCallback(() => {\n    setSelectedValues([])\n  }, [])\n  \n  const toggleOption = useCallback((value: string) => {\n    setSelectedValues(prev => \n      prev.includes(value) \n        ? prev.filter(v => v !== value)\n        : [...prev, value]\n    )\n  }, [])\n  \n  const isSelected = useCallback((value: string) => {\n    return selectedValues.includes(value)\n  }, [selectedValues])\n  \n  const getSelectedOptions = useCallback(() => {\n    return options.filter(opt => selectedValues.includes(opt.value))\n  }, [options, selectedValues])\n  \n  return {\n    selectedValues,\n    setSelectedValues,\n    selectAll,\n    deselectAll,\n    toggleOption,\n    isSelected,\n    getSelectedOptions,\n    selectedCount: selectedValues.length,\n    allSelected: options.filter(opt => !opt.disabled).every(opt => selectedValues.includes(opt.value)),\n    noneSelected: selectedValues.length === 0\n  }\n}\n\n// IPU Admin specific checkbox options\nexport const ipuAdminCheckboxOptions = {\n  permissions: (): CheckboxOption[] => [\n    // Admin permissions\n    {\n      id: 'admin_users',\n      value: 'admin.users',\n      labelEs: 'Gestionar usuarios',\n      labelEn: 'Manage users',\n      descriptionEs: 'Crear, editar y eliminar usuarios del sistema',\n      descriptionEn: 'Create, edit and delete system users',\n      category: 'admin',\n      icon: <Users className=\"h-4 w-4\" />\n    },\n    {\n      id: 'admin_settings',\n      value: 'admin.settings',\n      labelEs: 'Configuración del sistema',\n      labelEn: 'System settings',\n      descriptionEs: 'Modificar configuraciones globales',\n      descriptionEn: 'Modify global settings',\n      category: 'admin',\n      icon: <Shield className=\"h-4 w-4\" />\n    },\n    \n    // Financial permissions\n    {\n      id: 'financial_donations',\n      value: 'financial.donations',\n      labelEs: 'Gestionar donaciones',\n      labelEn: 'Manage donations',\n      descriptionEs: 'Registrar y modificar donaciones',\n      descriptionEn: 'Register and modify donations',\n      category: 'financial'\n    },\n    {\n      id: 'financial_reports',\n      value: 'financial.reports',\n      labelEs: 'Reportes financieros',\n      labelEn: 'Financial reports',\n      descriptionEs: 'Ver y generar reportes financieros',\n      descriptionEn: 'View and generate financial reports',\n      category: 'financial'\n    },\n    \n    // Event permissions\n    {\n      id: 'events_create',\n      value: 'events.create',\n      labelEs: 'Crear eventos',\n      labelEn: 'Create events',\n      descriptionEs: 'Organizar nuevos eventos de la iglesia',\n      descriptionEn: 'Organize new church events',\n      category: 'events',\n      icon: <Calendar className=\"h-4 w-4\" />\n    },\n    {\n      id: 'events_manage',\n      value: 'events.manage',\n      labelEs: 'Gestionar eventos',\n      labelEn: 'Manage events',\n      descriptionEs: 'Editar y administrar eventos existentes',\n      descriptionEn: 'Edit and manage existing events',\n      category: 'events'\n    }\n  ],\n  \n  ministries: (): CheckboxOption[] => [\n    // Worship\n    {\n      id: 'worship_music',\n      value: 'worship.music',\n      labelEs: 'Música',\n      labelEn: 'Music',\n      category: 'worship'\n    },\n    {\n      id: 'worship_sound',\n      value: 'worship.sound',\n      labelEs: 'Sonido',\n      labelEn: 'Sound',\n      category: 'worship'\n    },\n    \n    // Children\n    {\n      id: 'children_sunday_school',\n      value: 'children.sunday_school',\n      labelEs: 'Escuela dominical',\n      labelEn: 'Sunday school',\n      category: 'children'\n    },\n    {\n      id: 'children_nursery',\n      value: 'children.nursery',\n      labelEs: 'Guardería',\n      labelEn: 'Nursery',\n      category: 'children'\n    },\n    \n    // Youth\n    {\n      id: 'youth_groups',\n      value: 'youth.groups',\n      labelEs: 'Grupos juveniles',\n      labelEn: 'Youth groups',\n      category: 'youth'\n    },\n    {\n      id: 'youth_events',\n      value: 'youth.events',\n      labelEs: 'Eventos juveniles',\n      labelEn: 'Youth events',\n      category: 'youth'\n    }\n  ]\n}","'use client'\n\nimport { forwardRef, useState, useEffect, useCallback, useMemo } from 'react'\nimport { TrendingUp, Target, Calendar, DollarSign, Users, Award } from 'lucide-react'\n\n/**\n * BIRHAUS Progress Component\n * \n * Enhanced progress indicator implementing all 10 BIRHAUS principles:\n * - Spanish-first labels and milestone messages\n * - Progressive disclosure of detailed metrics\n * - Visual feedback with color coding and animations\n * - Accessibility compliance (WCAG AA+)\n * - Multiple progress types for different contexts\n * - IPU Admin specific presets for campaigns and goals\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface ProgressMilestone {\n  id: string\n  value: number // percentage or absolute value\n  labelEs: string\n  labelEn: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  icon?: React.ReactNode\n  color?: string\n  reached?: boolean\n}\n\nexport interface ProgressMetrics {\n  current: number\n  target: number\n  percentage: number\n  remaining: number\n  timeElapsed?: number // in days\n  timeRemaining?: number // in days\n  averagePerDay?: number\n}\n\nexport interface BirhausProgressProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Progress data\n  current: number\n  target: number\n  unit?: string // e.g., '₲', '$', 'personas', 'eventos'\n  \n  // Progress type\n  type?: 'linear' | 'circular' | 'stepped' | 'radial'\n  variant?: 'default' | 'success' | 'warning' | 'error' | 'gradient'\n  \n  // Milestones\n  milestones?: ProgressMilestone[]\n  showMilestones?: boolean\n  \n  // Time tracking\n  startDate?: Date\n  endDate?: Date\n  showTimeMetrics?: boolean\n  \n  // Visual options\n  size?: 'sm' | 'md' | 'lg' | 'xl'\n  showPercentage?: boolean\n  showValues?: boolean\n  showAnimation?: boolean\n  animationDuration?: number // in ms\n  \n  // Color thresholds\n  colorThresholds?: {\n    low: number // e.g., 25% = red\n    medium: number // e.g., 75% = yellow\n    high: number // e.g., 90% = green\n  }\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  ariaLabel?: string\n  ariaLabelEs?: string\n  ariaLabelEn?: string\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  progressType?: 'donation_goal' | 'membership_goal' | 'event_capacity' | 'fundraising' | 'custom'\n  campaignName?: string\n  \n  // Callbacks\n  onMilestoneReached?: (milestone: ProgressMilestone) => void\n  onTargetReached?: () => void\n}\n\nexport const BirhausProgress = forwardRef<HTMLDivElement, BirhausProgressProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Progress data\n  current,\n  target,\n  unit = '',\n  \n  // Appearance\n  type = 'linear',\n  variant = 'default',\n  \n  // Milestones\n  milestones = [],\n  showMilestones = true,\n  \n  // Time tracking\n  startDate,\n  endDate,\n  showTimeMetrics = false,\n  \n  // Visual options\n  size = 'md',\n  showPercentage = true,\n  showValues = true,\n  showAnimation = true,\n  animationDuration = 1000,\n  \n  // Color thresholds\n  colorThresholds = {\n    low: 25,\n    medium: 75,\n    high: 90\n  },\n  \n  // Accessibility\n  ariaLabel,\n  ariaLabelEs,\n  ariaLabelEn,\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  progressType = 'custom',\n  campaignName,\n  \n  // Callbacks\n  onMilestoneReached,\n  onTargetReached\n}, ref) => {\n  // State for animations\n  const [animatedProgress, setAnimatedProgress] = useState(0)\n  const [reachedMilestones, setReachedMilestones] = useState<string[]>([])\n  const [targetReached, setTargetReached] = useState(false)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayAriaLabel = getDisplayText(ariaLabel, ariaLabelEs, ariaLabelEn, 'Progress indicator')\n  \n  // Calculate progress metrics\n  const metrics = useMemo((): ProgressMetrics => {\n    const percentage = Math.min((current / target) * 100, 100)\n    const remaining = Math.max(target - current, 0)\n    \n    let timeElapsed: number | undefined\n    let timeRemaining: number | undefined\n    let averagePerDay: number | undefined\n    \n    if (startDate) {\n      const now = new Date()\n      timeElapsed = Math.floor((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))\n      \n      if (endDate) {\n        timeRemaining = Math.floor((endDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24))\n      }\n      \n      if (timeElapsed > 0) {\n        averagePerDay = current / timeElapsed\n      }\n    }\n    \n    return {\n      current,\n      target,\n      percentage,\n      remaining,\n      timeElapsed,\n      timeRemaining,\n      averagePerDay\n    }\n  }, [current, target, startDate, endDate])\n  \n  // Get default milestones for IPU Admin\n  const getDefaultMilestones = useCallback((): ProgressMilestone[] => {\n    const milestoneConfigs: Record<string, ProgressMilestone[]> = {\n      donation_goal: [\n        {\n          id: 'quarter',\n          value: 25,\n          labelEs: '¼ del objetivo',\n          labelEn: '¼ of goal',\n          descriptionEs: 'Primer cuarto alcanzado',\n          descriptionEn: 'First quarter reached',\n          icon: <TrendingUp className=\"h-4 w-4\" />,\n          color: 'blue'\n        },\n        {\n          id: 'half',\n          value: 50,\n          labelEs: 'Mitad del objetivo',\n          labelEn: 'Half of goal',\n          descriptionEs: '¡Vamos por la mitad!',\n          descriptionEn: 'Halfway there!',\n          icon: <Target className=\"h-4 w-4\" />,\n          color: 'yellow'\n        },\n        {\n          id: 'three_quarters',\n          value: 75,\n          labelEs: '¾ del objetivo',\n          labelEn: '¾ of goal',\n          descriptionEs: 'Muy cerca del objetivo',\n          descriptionEn: 'Very close to goal',\n          icon: <TrendingUp className=\"h-4 w-4\" />,\n          color: 'orange'\n        },\n        {\n          id: 'complete',\n          value: 100,\n          labelEs: 'Objetivo alcanzado',\n          labelEn: 'Goal reached',\n          descriptionEs: '¡Felicitaciones!',\n          descriptionEn: 'Congratulations!',\n          icon: <Award className=\"h-4 w-4\" />,\n          color: 'green'\n        }\n      ],\n      membership_goal: [\n        {\n          id: 'first_milestone',\n          value: 30,\n          labelEs: 'Primeros miembros',\n          labelEn: 'First members',\n          icon: <Users className=\"h-4 w-4\" />,\n          color: 'blue'\n        },\n        {\n          id: 'half_goal',\n          value: 50,\n          labelEs: 'Mitad del objetivo',\n          labelEn: 'Half of goal',\n          icon: <Users className=\"h-4 w-4\" />,\n          color: 'yellow'\n        },\n        {\n          id: 'complete',\n          value: 100,\n          labelEs: 'Meta de membresía alcanzada',\n          labelEn: 'Membership goal reached',\n          icon: <Award className=\"h-4 w-4\" />,\n          color: 'green'\n        }\n      ],\n      event_capacity: [\n        {\n          id: 'early_registration',\n          value: 25,\n          labelEs: 'Registro temprano',\n          labelEn: 'Early registration',\n          icon: <Calendar className=\"h-4 w-4\" />,\n          color: 'blue'\n        },\n        {\n          id: 'half_capacity',\n          value: 50,\n          labelEs: 'Media capacidad',\n          labelEn: 'Half capacity',\n          icon: <Users className=\"h-4 w-4\" />,\n          color: 'yellow'\n        },\n        {\n          id: 'near_full',\n          value: 80,\n          labelEs: 'Casi lleno',\n          labelEn: 'Nearly full',\n          icon: <TrendingUp className=\"h-4 w-4\" />,\n          color: 'orange'\n        },\n        {\n          id: 'full_capacity',\n          value: 100,\n          labelEs: 'Capacidad completa',\n          labelEn: 'Full capacity',\n          icon: <Award className=\"h-4 w-4\" />,\n          color: 'green'\n        }\n      ]\n    }\n    \n    return milestoneConfigs[progressType] || []\n  }, [progressType])\n  \n  const allMilestones = milestones.length > 0 ? milestones : getDefaultMilestones()\n  \n  // Determine progress color based on percentage\n  const getProgressColor = useCallback(() => {\n    if (variant !== 'default') return variant\n    \n    const { percentage } = metrics\n    \n    if (percentage >= colorThresholds.high) return 'success'\n    if (percentage >= colorThresholds.medium) return 'warning'\n    if (percentage >= colorThresholds.low) return 'error'\n    return 'error'\n  }, [metrics, variant, colorThresholds])\n  \n  const progressColor = getProgressColor()\n  \n  // Format numbers for display\n  const formatNumber = useCallback((num: number): string => {\n    if (unit === '₲' || unit === '$') {\n      return new Intl.NumberFormat(locale === 'es' ? 'es-PY' : 'en-US').format(num)\n    }\n    return num.toString()\n  }, [unit, locale])\n  \n  // Format time remaining\n  const formatTimeRemaining = useCallback((days: number): string => {\n    if (days <= 0) {\n      return locale === 'es' ? 'Tiempo vencido' : 'Time expired'\n    }\n    \n    if (days === 1) {\n      return locale === 'es' ? '1 día restante' : '1 day remaining'\n    }\n    \n    if (days < 30) {\n      return locale === 'es' ? `${days} días restantes` : `${days} days remaining`\n    }\n    \n    const months = Math.floor(days / 30)\n    const remainingDays = days % 30\n    \n    if (months === 1 && remainingDays === 0) {\n      return locale === 'es' ? '1 mes restante' : '1 month remaining'\n    }\n    \n    if (remainingDays === 0) {\n      return locale === 'es' ? `${months} meses restantes` : `${months} months remaining`\n    }\n    \n    return locale === 'es' \n      ? `${months} meses y ${remainingDays} días restantes`\n      : `${months} months and ${remainingDays} days remaining`\n  }, [locale])\n  \n  // Animation effect\n  useEffect(() => {\n    if (!showAnimation) {\n      setAnimatedProgress(metrics.percentage)\n      return\n    }\n    \n    const startTime = Date.now()\n    const startProgress = animatedProgress\n    const targetProgress = metrics.percentage\n    \n    const animate = () => {\n      const elapsed = Date.now() - startTime\n      const progress = Math.min(elapsed / animationDuration, 1)\n      \n      // Easing function\n      const easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3)\n      const currentProgress = startProgress + (targetProgress - startProgress) * easeOutCubic(progress)\n      \n      setAnimatedProgress(currentProgress)\n      \n      if (progress < 1) {\n        requestAnimationFrame(animate)\n      }\n    }\n    \n    requestAnimationFrame(animate)\n  }, [metrics.percentage, showAnimation, animationDuration])\n  \n  // Milestone and target reached effects\n  useEffect(() => {\n    // Check milestones\n    const newReachedMilestones = allMilestones\n      .filter(milestone => metrics.percentage >= milestone.value)\n      .map(milestone => milestone.id)\n    \n    const newlyReached = newReachedMilestones.filter(id => !reachedMilestones.includes(id))\n    \n    if (newlyReached.length > 0) {\n      setReachedMilestones(newReachedMilestones)\n      \n      // Call milestone callback for newly reached milestones\n      newlyReached.forEach(milestoneId => {\n        const milestone = allMilestones.find(m => m.id === milestoneId)\n        if (milestone && onMilestoneReached) {\n          onMilestoneReached(milestone)\n        }\n      })\n    }\n    \n    // Check target reached\n    if (metrics.percentage >= 100 && !targetReached) {\n      setTargetReached(true)\n      onTargetReached?.()\n    }\n  }, [metrics.percentage, allMilestones, reachedMilestones, targetReached, onMilestoneReached, onTargetReached])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: {\n      container: 'p-3',\n      bar: 'h-2',\n      circle: 'w-16 h-16',\n      text: 'text-sm',\n      label: 'text-xs'\n    },\n    md: {\n      container: 'p-4',\n      bar: 'h-3',\n      circle: 'w-24 h-24',\n      text: 'text-base',\n      label: 'text-sm'\n    },\n    lg: {\n      container: 'p-6',\n      bar: 'h-4',\n      circle: 'w-32 h-32',\n      text: 'text-lg',\n      label: 'text-base'\n    },\n    xl: {\n      container: 'p-8',\n      bar: 'h-6',\n      circle: 'w-40 h-40',\n      text: 'text-xl',\n      label: 'text-lg'\n    }\n  }\n  \n  const colorClasses = {\n    default: 'bg-gray-200',\n    success: 'bg-green-500',\n    warning: 'bg-yellow-500',\n    error: 'bg-red-500',\n    gradient: 'bg-gradient-to-r from-blue-500 to-green-500'\n  }\n  \n  const currentSizeClasses = sizeClasses[size]\n  \n  // Render linear progress bar\n  const renderLinearProgress = useCallback(() => (\n    <div className=\"w-full\">\n      <div className={cn('bg-gray-200 rounded-full overflow-hidden', currentSizeClasses.bar)}>\n        <div\n          className={cn(\n            'h-full transition-all duration-300 ease-out rounded-full',\n            colorClasses[progressColor]\n          )}\n          style={{ width: `${Math.min(animatedProgress, 100)}%` }}\n          role=\"progressbar\"\n          aria-valuenow={Math.round(animatedProgress)}\n          aria-valuemin={0}\n          aria-valuemax={100}\n          aria-label={displayAriaLabel}\n        />\n      </div>\n      \n      {/* Milestones */}\n      {showMilestones && allMilestones.length > 0 && (\n        <div className=\"relative mt-2\">\n          {allMilestones.map((milestone) => (\n            <div\n              key={milestone.id}\n              className=\"absolute transform -translate-x-1/2\"\n              style={{ left: `${milestone.value}%` }}\n            >\n              <div className={cn(\n                'w-2 h-2 rounded-full border-2 bg-white',\n                reachedMilestones.includes(milestone.id)\n                  ? 'border-green-500'\n                  : 'border-gray-300'\n              )} />\n              \n              {milestone.value <= animatedProgress && (\n                <div className=\"absolute top-4 left-1/2 transform -translate-x-1/2 whitespace-nowrap\">\n                  <div className={cn(\n                    'text-center',\n                    currentSizeClasses.label,\n                    'text-gray-600'\n                  )}>\n                    {getDisplayText(\n                      undefined,\n                      milestone.labelEs,\n                      milestone.labelEn,\n                      milestone.id\n                    )}\n                  </div>\n                </div>\n              )}\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  ), [\n    currentSizeClasses,\n    colorClasses,\n    progressColor,\n    animatedProgress,\n    displayAriaLabel,\n    showMilestones,\n    allMilestones,\n    reachedMilestones,\n    getDisplayText\n  ])\n  \n  // Render circular progress\n  const renderCircularProgress = useCallback(() => {\n    const radius = size === 'sm' ? 28 : size === 'lg' ? 58 : size === 'xl' ? 74 : 44\n    const circumference = 2 * Math.PI * radius\n    const strokeDashoffset = circumference - (animatedProgress / 100) * circumference\n    \n    return (\n      <div className=\"relative inline-flex items-center justify-center\">\n        <svg className={currentSizeClasses.circle} viewBox=\"0 0 120 120\">\n          {/* Background circle */}\n          <circle\n            cx=\"60\"\n            cy=\"60\"\n            r={radius}\n            fill=\"none\"\n            stroke=\"#e5e7eb\"\n            strokeWidth=\"8\"\n          />\n          {/* Progress circle */}\n          <circle\n            cx=\"60\"\n            cy=\"60\"\n            r={radius}\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"8\"\n            strokeLinecap=\"round\"\n            strokeDasharray={circumference}\n            strokeDashoffset={strokeDashoffset}\n            transform=\"rotate(-90 60 60)\"\n            className={cn(\n              'transition-all duration-300 ease-out',\n              progressColor === 'success' ? 'text-green-500' :\n              progressColor === 'warning' ? 'text-yellow-500' :\n              progressColor === 'error' ? 'text-red-500' :\n              'text-blue-500'\n            )}\n          />\n        </svg>\n        \n        {/* Center content */}\n        <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n          {showPercentage && (\n            <div className={cn('font-bold', currentSizeClasses.text)}>\n              {Math.round(animatedProgress)}%\n            </div>\n          )}\n          {showValues && (\n            <div className={cn('text-gray-600', currentSizeClasses.label)}>\n              {formatNumber(current)} / {formatNumber(target)}\n            </div>\n          )}\n        </div>\n      </div>\n    )\n  }, [\n    size,\n    currentSizeClasses,\n    animatedProgress,\n    progressColor,\n    showPercentage,\n    showValues,\n    formatNumber,\n    current,\n    target\n  ])\n  \n  return (\n    <div ref={ref} className={cn('birhaus-progress', currentSizeClasses.container)}>\n      {/* Header */}\n      <div className=\"mb-4\">\n        {/* Title */}\n        {(displayLabel || campaignName) && (\n          <div className=\"flex items-center justify-between mb-2\">\n            <h3 className={cn('font-semibold', currentSizeClasses.text)}>\n              {displayLabel || campaignName}\n            </h3>\n            \n            {showPercentage && type === 'linear' && (\n              <span className={cn('font-medium', currentSizeClasses.text)}>\n                {Math.round(animatedProgress)}%\n              </span>\n            )}\n          </div>\n        )}\n        \n        {/* Description */}\n        {displayDescription && (\n          <p className={cn('text-gray-600', currentSizeClasses.label)}>\n            {displayDescription}\n          </p>\n        )}\n        \n        {/* Values */}\n        {showValues && type === 'linear' && (\n          <div className=\"flex items-center justify-between mt-2\">\n            <span className={cn('text-gray-600', currentSizeClasses.label)}>\n              {unit}{formatNumber(current)} / {unit}{formatNumber(target)}\n            </span>\n            \n            {metrics.remaining > 0 && (\n              <span className={cn('text-gray-500', currentSizeClasses.label)}>\n                {locale === 'es' ? 'Faltan' : 'Remaining'}: {unit}{formatNumber(metrics.remaining)}\n              </span>\n            )}\n          </div>\n        )}\n      </div>\n      \n      {/* Progress Indicator */}\n      <div className=\"mb-4\">\n        {type === 'circular' ? renderCircularProgress() : renderLinearProgress()}\n      </div>\n      \n      {/* Time Metrics */}\n      {showTimeMetrics && (metrics.timeRemaining !== undefined || metrics.averagePerDay !== undefined) && (\n        <div className=\"space-y-2\">\n          {metrics.timeRemaining !== undefined && (\n            <div className={cn('text-gray-600', currentSizeClasses.label)}>\n              <Calendar className=\"inline h-4 w-4 mr-1\" />\n              {formatTimeRemaining(metrics.timeRemaining)}\n            </div>\n          )}\n          \n          {metrics.averagePerDay !== undefined && metrics.averagePerDay > 0 && (\n            <div className={cn('text-gray-600', currentSizeClasses.label)}>\n              <TrendingUp className=\"inline h-4 w-4 mr-1\" />\n              {locale === 'es' ? 'Promedio diario' : 'Daily average'}: {unit}{formatNumber(Math.round(metrics.averagePerDay))}\n            </div>\n          )}\n        </div>\n      )}\n      \n      {/* Reached Milestones */}\n      {showMilestones && reachedMilestones.length > 0 && (\n        <div className=\"mt-4\">\n          <h4 className={cn('font-medium mb-2', currentSizeClasses.label)}>\n            {locale === 'es' ? 'Hitos alcanzados' : 'Milestones reached'}\n          </h4>\n          <div className=\"space-y-1\">\n            {allMilestones\n              .filter(milestone => reachedMilestones.includes(milestone.id))\n              .map(milestone => (\n                <div key={milestone.id} className=\"flex items-center space-x-2\">\n                  {milestone.icon && (\n                    <span className=\"text-green-500\">{milestone.icon}</span>\n                  )}\n                  <span className={cn('text-green-700', currentSizeClasses.label)}>\n                    {getDisplayText(\n                      undefined,\n                      milestone.labelEs,\n                      milestone.labelEn,\n                      milestone.id\n                    )}\n                  </span>\n                </div>\n              ))}\n          </div>\n        </div>\n      )}\n      \n      {/* Target Reached Celebration */}\n      {targetReached && (\n        <div className=\"mt-4 p-3 bg-green-50 border border-green-200 rounded-md\">\n          <div className=\"flex items-center space-x-2 text-green-700\">\n            <Award className=\"h-5 w-5\" />\n            <span className={cn('font-medium', currentSizeClasses.text)}>\n              {locale === 'es' ? '¡Objetivo alcanzado!' : 'Goal reached!'}\n            </span>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausProgress.displayName = 'BirhausProgress'\n\n// Hook for enhanced progress functionality\nexport const useBirhausProgress = (target: number, initialValue: number = 0) => {\n  const [current, setCurrent] = useState(initialValue)\n  const [milestones, setMilestones] = useState<ProgressMilestone[]>([])\n  \n  const increment = useCallback((amount: number) => {\n    setCurrent(prev => Math.min(prev + amount, target))\n  }, [target])\n  \n  const decrement = useCallback((amount: number) => {\n    setCurrent(prev => Math.max(prev - amount, 0))\n  }, [])\n  \n  const setProgress = useCallback((value: number) => {\n    setCurrent(Math.max(0, Math.min(value, target)))\n  }, [target])\n  \n  const reset = useCallback(() => {\n    setCurrent(0)\n  }, [])\n  \n  const percentage = Math.min((current / target) * 100, 100)\n  const remaining = Math.max(target - current, 0)\n  const isComplete = current >= target\n  \n  return {\n    current,\n    setCurrent: setProgress,\n    increment,\n    decrement,\n    reset,\n    percentage,\n    remaining,\n    isComplete,\n    milestones,\n    setMilestones\n  }\n}\n\n// IPU Admin specific progress configurations\nexport const ipuAdminProgressPresets = {\n  donationGoal: (target: number, currency: string = '₲') => ({\n    type: 'linear' as const,\n    progressType: 'donation_goal' as const,\n    unit: currency,\n    showTimeMetrics: true,\n    showMilestones: true,\n    colorThresholds: {\n      low: 30,\n      medium: 70,\n      high: 90\n    }\n  }),\n  \n  membershipGoal: (target: number, locale: string = 'es') => ({\n    type: 'circular' as const,\n    progressType: 'membership_goal' as const,\n    unit: locale === 'es' ? ' personas' : ' people',\n    showMilestones: true,\n    colorThresholds: {\n      low: 25,\n      medium: 60,\n      high: 85\n    }\n  }),\n  \n  eventCapacity: (target: number, locale: string = 'es') => ({\n    type: 'linear' as const,\n    progressType: 'event_capacity' as const,\n    unit: locale === 'es' ? ' asistentes' : ' attendees',\n    showMilestones: true,\n    showTimeMetrics: false,\n    colorThresholds: {\n      low: 20,\n      medium: 50,\n      high: 80\n    }\n  })\n}","'use client'\n\nimport { forwardRef, useState, useCallback, useMemo, useEffect } from 'react'\nimport { Check, CreditCard, DollarSign, Calendar, Users, Shield } from 'lucide-react'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Radio Group Component\n * \n * Enhanced radio group implementing all 10 BIRHAUS principles:\n * - Spanish-first labels and descriptions\n * - Progressive disclosure with visual grouping\n * - Cognitive load reduction (max 5 options per group)\n * - Accessibility compliance (WCAG AA+)\n * - Visual feedback with icons and descriptions\n * - IPU Admin specific presets for forms\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\nexport interface RadioOption {\n  id: string\n  value: string\n  labelEs: string\n  labelEn: string\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  disabled?: boolean\n  icon?: React.ReactNode\n  badge?: string\n  badgeEs?: string\n  badgeEn?: string\n  recommended?: boolean\n}\n\nexport interface BirhausRadioGroupProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Options and values\n  options: RadioOption[]\n  value?: string\n  defaultValue?: string\n  onChange?: (value: string) => void\n  name: string // Required for radio groups\n  \n  // BIRHAUS Principle #2: Honest data\n  error?: string\n  errorEs?: string\n  errorEn?: string\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  required?: boolean\n  \n  // Appearance\n  variant?: 'default' | 'cards' | 'minimal' | 'buttons'\n  size?: 'sm' | 'md' | 'lg'\n  layout?: 'vertical' | 'horizontal' | 'grid'\n  \n  // Visual enhancements\n  showIcons?: boolean\n  showDescriptions?: boolean\n  showBadges?: boolean\n  highlightRecommended?: boolean\n  \n  // Validation\n  maxOptions?: number // Default 5 (cognitive load reduction)\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  presetType?: 'payment_methods' | 'member_status' | 'event_types' | 'donation_types' | 'custom'\n}\n\nexport const BirhausRadioGroup = forwardRef<HTMLDivElement, BirhausRadioGroupProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Options\n  options,\n  value,\n  defaultValue,\n  onChange,\n  name,\n  \n  // Validation\n  error,\n  errorEs,\n  errorEn,\n  \n  // Basic props\n  disabled = false,\n  required = false,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  layout = 'vertical',\n  \n  // Visual enhancements\n  showIcons = true,\n  showDescriptions = true,\n  showBadges = true,\n  highlightRecommended = true,\n  \n  // Validation\n  maxOptions = 5,\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  presetType = 'custom'\n}, ref) => {\n  // State management\n  const [internalValue, setInternalValue] = useState<string>(value || defaultValue || '')\n  const [validationError, setValidationError] = useState<string>('')\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  const displayError = error || errorEs || validationError\n  \n  // Get default options for IPU Admin\n  const getDefaultOptions = useCallback((): RadioOption[] => {\n    const optionConfigs: Record<string, RadioOption[]> = {\n      payment_methods: [\n        {\n          id: 'cash',\n          value: 'cash',\n          labelEs: 'Efectivo',\n          labelEn: 'Cash',\n          descriptionEs: 'Pago en efectivo en guaraníes',\n          descriptionEn: 'Cash payment in guaraníes',\n          icon: <DollarSign className=\"h-5 w-5\" />,\n          recommended: true\n        },\n        {\n          id: 'bank_transfer',\n          value: 'bank_transfer',\n          labelEs: 'Transferencia bancaria',\n          labelEn: 'Bank transfer',\n          descriptionEs: 'Transferencia desde cuenta bancaria',\n          descriptionEn: 'Transfer from bank account',\n          icon: <CreditCard className=\"h-5 w-5\" />\n        },\n        {\n          id: 'check',\n          value: 'check',\n          labelEs: 'Cheque',\n          labelEn: 'Check',\n          descriptionEs: 'Pago mediante cheque',\n          descriptionEn: 'Payment by check',\n          icon: <CreditCard className=\"h-5 w-5\" />\n        }\n      ],\n      \n      member_status: [\n        {\n          id: 'active',\n          value: 'active',\n          labelEs: 'Activo',\n          labelEn: 'Active',\n          descriptionEs: 'Miembro activo con participación regular',\n          descriptionEn: 'Active member with regular participation',\n          icon: <Users className=\"h-5 w-5\" />,\n          badgeEs: 'Activo',\n          badgeEn: 'Active',\n          recommended: true\n        },\n        {\n          id: 'inactive',\n          value: 'inactive',\n          labelEs: 'Inactivo',\n          labelEn: 'Inactive',\n          descriptionEs: 'Miembro temporalmente inactivo',\n          descriptionEn: 'Temporarily inactive member',\n          icon: <Users className=\"h-5 w-5\" />,\n          badgeEs: 'Inactivo',\n          badgeEn: 'Inactive'\n        },\n        {\n          id: 'visitor',\n          value: 'visitor',\n          labelEs: 'Visitante',\n          labelEn: 'Visitor',\n          descriptionEs: 'Persona visitante interesada',\n          descriptionEn: 'Interested visitor',\n          icon: <Users className=\"h-5 w-5\" />,\n          badgeEs: 'Visitante',\n          badgeEn: 'Visitor'\n        }\n      ],\n      \n      event_types: [\n        {\n          id: 'worship',\n          value: 'worship',\n          labelEs: 'Culto',\n          labelEn: 'Worship service',\n          descriptionEs: 'Servicio de adoración dominical',\n          descriptionEn: 'Sunday worship service',\n          icon: <Calendar className=\"h-5 w-5\" />\n        },\n        {\n          id: 'conference',\n          value: 'conference',\n          labelEs: 'Conferencia',\n          labelEn: 'Conference',\n          descriptionEs: 'Evento de conferencias especiales',\n          descriptionEn: 'Special conference event',\n          icon: <Calendar className=\"h-5 w-5\" />\n        },\n        {\n          id: 'youth',\n          value: 'youth',\n          labelEs: 'Juvenil',\n          labelEn: 'Youth event',\n          descriptionEs: 'Evento para jóvenes',\n          descriptionEn: 'Event for youth',\n          icon: <Users className=\"h-5 w-5\" />\n        },\n        {\n          id: 'children',\n          value: 'children',\n          labelEs: 'Niños',\n          labelEn: 'Children event',\n          descriptionEs: 'Evento para niños',\n          descriptionEn: 'Event for children',\n          icon: <Users className=\"h-5 w-5\" />\n        }\n      ],\n      \n      donation_types: [\n        {\n          id: 'tithe',\n          value: 'tithe',\n          labelEs: 'Diezmo',\n          labelEn: 'Tithe',\n          descriptionEs: 'Diezmo regular del 10%',\n          descriptionEn: 'Regular 10% tithe',\n          icon: <DollarSign className=\"h-5 w-5\" />,\n          recommended: true\n        },\n        {\n          id: 'offering',\n          value: 'offering',\n          labelEs: 'Ofrenda',\n          labelEn: 'Offering',\n          descriptionEs: 'Ofrenda voluntaria adicional',\n          descriptionEn: 'Additional voluntary offering',\n          icon: <DollarSign className=\"h-5 w-5\" />\n        },\n        {\n          id: 'special',\n          value: 'special',\n          labelEs: 'Donación especial',\n          labelEn: 'Special donation',\n          descriptionEs: 'Donación para proyecto específico',\n          descriptionEn: 'Donation for specific project',\n          icon: <DollarSign className=\"h-5 w-5\" />\n        }\n      ]\n    }\n    \n    return safeAccess(optionConfigs, presetType, [])\n  }, [presetType])\n  \n  // Limit options for cognitive load reduction\n  const processedOptions = useMemo(() => {\n    const allOptions = options.length > 0 ? options : getDefaultOptions()\n    return allOptions.slice(0, maxOptions)\n  }, [options, getDefaultOptions, maxOptions])\n  \n  // Validation function\n  const validateSelection = useCallback((selectedValue: string): string => {\n    if (required && !selectedValue) {\n      return locale === 'es'\n        ? 'Debe seleccionar una opción'\n        : 'Must select an option'\n    }\n    \n    const validOption = processedOptions.find(opt => opt.value === selectedValue)\n    if (selectedValue && !validOption) {\n      return locale === 'es'\n        ? 'Opción no válida'\n        : 'Invalid option'\n    }\n    \n    return ''\n  }, [required, processedOptions, locale])\n  \n  // Handle option change\n  const handleOptionChange = useCallback((optionValue: string) => {\n    if (disabled) return\n    \n    setInternalValue(optionValue)\n    \n    // Validate\n    const errorMessage = validateSelection(optionValue)\n    setValidationError(errorMessage)\n    \n    // Call parent onChange\n    onChange?.(optionValue)\n  }, [disabled, validateSelection, onChange])\n  \n  // Sync external value changes\n  useEffect(() => {\n    if (value !== undefined && value !== internalValue) {\n      setInternalValue(value)\n    }\n  }, [value, internalValue])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: {\n      radio: 'h-4 w-4',\n      text: 'text-sm',\n      description: 'text-xs',\n      badge: 'px-2 py-1 text-xs',\n      card: 'p-3'\n    },\n    md: {\n      radio: 'h-5 w-5',\n      text: 'text-base',\n      description: 'text-sm',\n      badge: 'px-3 py-1 text-sm',\n      card: 'p-4'\n    },\n    lg: {\n      radio: 'h-6 w-6',\n      text: 'text-lg',\n      description: 'text-base',\n      badge: 'px-4 py-2 text-base',\n      card: 'p-5'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      container: 'space-y-3',\n      option: 'flex items-start space-x-3',\n      radioContainer: 'relative'\n    },\n    cards: {\n      container: 'space-y-2',\n      option: 'border border-gray-200 rounded-lg hover:border-gray-300 transition-colors',\n      radioContainer: 'relative'\n    },\n    minimal: {\n      container: 'space-y-2',\n      option: 'flex items-start space-x-3',\n      radioContainer: 'relative'\n    },\n    buttons: {\n      container: 'grid gap-2',\n      option: 'relative',\n      radioContainer: 'w-full'\n    }\n  }\n  \n  const layoutClasses = {\n    vertical: 'space-y-3',\n    horizontal: 'flex flex-wrap gap-4',\n    grid: 'grid grid-cols-1 sm:grid-cols-2 gap-3'\n  }\n  \n  const currentSizeClasses = safeAccess(sizeClasses, size, sizeClasses.md)\n  const currentVariantClasses = safeAccess(variantClasses, variant, variantClasses.default)\n  \n  // Render individual radio option\n  const renderRadioOption = useCallback((option: RadioOption) => {\n    const isSelected = internalValue === option.value\n    const isDisabled = disabled || option.disabled\n    \n    const optionLabel = getDisplayText(\n      undefined,\n      option.labelEs,\n      option.labelEn,\n      option.value\n    )\n    \n    const optionDescription = getDisplayText(\n      option.description,\n      option.descriptionEs,\n      option.descriptionEn,\n      ''\n    )\n    \n    const optionBadge = getDisplayText(\n      option.badge,\n      option.badgeEs,\n      option.badgeEn,\n      ''\n    )\n    \n    if (variant === 'buttons') {\n      return (\n        <div key={option.id} className=\"relative\">\n          <input\n            type=\"radio\"\n            id={option.id}\n            name={name}\n            value={option.value}\n            checked={isSelected}\n            onChange={() => handleOptionChange(option.value)}\n            disabled={isDisabled}\n            className=\"sr-only\"\n          />\n          <label\n            htmlFor={option.id}\n            className={cn(\n              'block w-full border-2 rounded-lg transition-all duration-200 cursor-pointer',\n              currentSizeClasses.card,\n              isSelected\n                ? 'border-primary-500 bg-primary-50'\n                : 'border-gray-200 bg-white hover:border-gray-300 hover:bg-gray-50',\n              isDisabled && 'opacity-50 cursor-not-allowed',\n              option.recommended && highlightRecommended && !isSelected && 'border-yellow-300 bg-yellow-50'\n            )}\n          >\n            <div className=\"flex items-start justify-between\">\n              <div className=\"flex items-start space-x-3\">\n                {showIcons && option.icon && (\n                  <div className={cn(\n                    'mt-1',\n                    isSelected ? 'text-primary-600' : 'text-gray-400'\n                  )}>\n                    {option.icon}\n                  </div>\n                )}\n                \n                <div className=\"flex-1\">\n                  <div className=\"flex items-center space-x-2\">\n                    <span className={cn(\n                      'font-medium',\n                      currentSizeClasses.text,\n                      isSelected ? 'text-primary-900' : 'text-gray-900'\n                    )}>\n                      {optionLabel}\n                    </span>\n                    \n                    {option.recommended && highlightRecommended && (\n                      <span className={cn(\n                        'rounded-full bg-yellow-100 text-yellow-800 font-medium',\n                        currentSizeClasses.badge\n                      )}>\n                        {locale === 'es' ? 'Recomendado' : 'Recommended'}\n                      </span>\n                    )}\n                    \n                    {showBadges && optionBadge && (\n                      <span className={cn(\n                        'rounded-full bg-gray-100 text-gray-700',\n                        currentSizeClasses.badge\n                      )}>\n                        {optionBadge}\n                      </span>\n                    )}\n                  </div>\n                  \n                  {showDescriptions && optionDescription && (\n                    <p className={cn(\n                      'mt-1 text-gray-600',\n                      currentSizeClasses.description\n                    )}>\n                      {optionDescription}\n                    </p>\n                  )}\n                </div>\n              </div>\n              \n              {/* Selection indicator */}\n              <div className={cn(\n                'flex-shrink-0 rounded-full border-2 transition-all duration-200',\n                currentSizeClasses.radio,\n                isSelected\n                  ? 'border-primary-500 bg-primary-500'\n                  : 'border-gray-300 bg-white'\n              )}>\n                {isSelected && (\n                  <div className=\"w-full h-full flex items-center justify-center\">\n                    <div className=\"w-2 h-2 bg-white rounded-full\" />\n                  </div>\n                )}\n              </div>\n            </div>\n          </label>\n        </div>\n      )\n    }\n    \n    // Default, cards, and minimal variants\n    const baseClasses = variant === 'cards' \n      ? cn(currentVariantClasses.option, currentSizeClasses.card)\n      : currentVariantClasses.option\n    \n    return (\n      <div\n        key={option.id}\n        className={cn(\n          baseClasses,\n          isDisabled && 'opacity-50 cursor-not-allowed',\n          variant === 'cards' && isSelected && 'border-primary-200 bg-primary-50',\n          variant === 'cards' && option.recommended && highlightRecommended && !isSelected && 'border-yellow-200 bg-yellow-50'\n        )}\n      >\n        <div className={currentVariantClasses.radioContainer}>\n          <input\n            type=\"radio\"\n            id={option.id}\n            name={name}\n            value={option.value}\n            checked={isSelected}\n            onChange={() => handleOptionChange(option.value)}\n            disabled={isDisabled}\n            className=\"sr-only\"\n          />\n          <div\n            className={cn(\n              'border-2 rounded-full transition-colors duration-200 flex items-center justify-center cursor-pointer',\n              currentSizeClasses.radio,\n              isSelected\n                ? 'border-primary-500 bg-primary-500'\n                : 'border-gray-300 bg-white',\n              !isDisabled && 'hover:border-primary-400'\n            )}\n            onClick={() => !isDisabled && handleOptionChange(option.value)}\n          >\n            {isSelected && (\n              <div className=\"w-2 h-2 bg-white rounded-full\" />\n            )}\n          </div>\n        </div>\n        \n        <div className=\"flex-1\">\n          <label\n            htmlFor={option.id}\n            className={cn(\n              'cursor-pointer',\n              isDisabled && 'cursor-not-allowed'\n            )}\n          >\n            <div className=\"flex items-start justify-between\">\n              <div className=\"flex items-start space-x-2\">\n                {showIcons && option.icon && (\n                  <span className={cn(\n                    'mt-1',\n                    isSelected ? 'text-primary-600' : 'text-gray-400'\n                  )}>\n                    {option.icon}\n                  </span>\n                )}\n                \n                <div>\n                  <div className=\"flex items-center space-x-2\">\n                    <span className={cn(\n                      'font-medium',\n                      currentSizeClasses.text,\n                      isDisabled ? 'text-gray-400' : 'text-gray-900'\n                    )}>\n                      {optionLabel}\n                    </span>\n                    \n                    {option.recommended && highlightRecommended && (\n                      <span className={cn(\n                        'rounded-full bg-yellow-100 text-yellow-800 font-medium',\n                        currentSizeClasses.badge\n                      )}>\n                        {locale === 'es' ? 'Recomendado' : 'Recommended'}\n                      </span>\n                    )}\n                  </div>\n                  \n                  {showDescriptions && optionDescription && (\n                    <p className={cn(\n                      'mt-1 text-gray-600',\n                      currentSizeClasses.description,\n                      isDisabled && 'text-gray-400'\n                    )}>\n                      {optionDescription}\n                    </p>\n                  )}\n                </div>\n              </div>\n              \n              {showBadges && optionBadge && (\n                <span className={cn(\n                  'flex-shrink-0 rounded-full bg-gray-100 text-gray-700',\n                  currentSizeClasses.badge\n                )}>\n                  {optionBadge}\n                </span>\n              )}\n            </div>\n          </label>\n        </div>\n      </div>\n    )\n  }, [\n    internalValue,\n    disabled,\n    variant,\n    name,\n    handleOptionChange,\n    getDisplayText,\n    currentSizeClasses,\n    currentVariantClasses,\n    showIcons,\n    showDescriptions,\n    showBadges,\n    highlightRecommended,\n    locale\n  ])\n  \n  return (\n    <div ref={ref} className=\"birhaus-radio-group\">\n      {/* Label */}\n      {displayLabel && (\n        <div className=\"mb-3\">\n          <h3 className={cn('font-semibold', currentSizeClasses.text)}>\n            {displayLabel}\n            {required && <span className=\"text-red-500 ml-1\">*</span>}\n          </h3>\n          \n          {displayDescription && (\n            <p className={cn('text-gray-600 mt-1', currentSizeClasses.description)}>\n              {displayDescription}\n            </p>\n          )}\n        </div>\n      )}\n      \n      {/* Options */}\n      <div className={cn(\n        currentVariantClasses.container,\n        layout !== 'vertical' && safeAccess(layoutClasses, layout, layoutClasses.vertical),\n        variant === 'buttons' && layout === 'grid' && 'grid-cols-1 sm:grid-cols-2'\n      )}>\n        {processedOptions.map(renderRadioOption)}\n      </div>\n      \n      {/* Selection Info */}\n      {internalValue && (\n        <div className={cn('mt-3 text-gray-600', currentSizeClasses.description)}>\n          {locale === 'es' ? 'Seleccionado' : 'Selected'}: {\n            processedOptions.find(opt => opt.value === internalValue)?.labelEs ||\n            processedOptions.find(opt => opt.value === internalValue)?.labelEn ||\n            internalValue\n          }\n        </div>\n      )}\n      \n      {/* Error Display */}\n      {displayError && (\n        <div className={cn('mt-2 text-red-600', currentSizeClasses.description)}>\n          {displayError}\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausRadioGroup.displayName = 'BirhausRadioGroup'\n\n// Hook for enhanced radio group functionality\nexport const useBirhausRadioGroup = (options: RadioOption[], initialValue?: string) => {\n  const [selectedValue, setSelectedValue] = useState<string>(initialValue || '')\n  \n  const selectOption = useCallback((value: string) => {\n    setSelectedValue(value)\n  }, [])\n  \n  const clearSelection = useCallback(() => {\n    setSelectedValue('')\n  }, [])\n  \n  const getSelectedOption = useCallback(() => {\n    return options.find(opt => opt.value === selectedValue)\n  }, [options, selectedValue])\n  \n  const isSelected = useCallback((value: string) => {\n    return selectedValue === value\n  }, [selectedValue])\n  \n  const getNextOption = useCallback(() => {\n    const currentIndex = options.findIndex(opt => opt.value === selectedValue)\n    if (currentIndex === -1) return options[0]\n    return options[(currentIndex + 1) % options.length]\n  }, [options, selectedValue])\n  \n  const getPreviousOption = useCallback(() => {\n    const currentIndex = options.findIndex(opt => opt.value === selectedValue)\n    if (currentIndex === -1) return options[options.length - 1]\n    return options[currentIndex === 0 ? options.length - 1 : currentIndex - 1]\n  }, [options, selectedValue])\n  \n  return {\n    selectedValue,\n    setSelectedValue: selectOption,\n    clearSelection,\n    getSelectedOption,\n    isSelected,\n    getNextOption,\n    getPreviousOption,\n    hasSelection: !!selectedValue\n  }\n}\n\n// IPU Admin specific radio group configurations\nexport const ipuAdminRadioGroupPresets = {\n  paymentMethods: {\n    variant: 'cards' as const,\n    showIcons: true,\n    showDescriptions: true,\n    highlightRecommended: true,\n    presetType: 'payment_methods' as const\n  },\n  \n  memberStatus: {\n    variant: 'buttons' as const,\n    layout: 'horizontal' as const,\n    showBadges: true,\n    highlightRecommended: true,\n    presetType: 'member_status' as const\n  },\n  \n  eventTypes: {\n    variant: 'default' as const,\n    showIcons: true,\n    showDescriptions: true,\n    presetType: 'event_types' as const\n  },\n  \n  donationTypes: {\n    variant: 'cards' as const,\n    showIcons: true,\n    showDescriptions: true,\n    highlightRecommended: true,\n    presetType: 'donation_types' as const\n  }\n}","'use client'\n\nimport { forwardRef, useState, useCallback, useEffect } from 'react'\nimport { Check, X, Eye, EyeOff, Bell, BellOff, Shield, ShieldOff, RotateCcw } from 'lucide-react'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Toggle Component\n * \n * Enhanced toggle switch implementing all 10 BIRHAUS principles:\n * - Spanish-first labels and state descriptions\n * - Progressive disclosure of toggle state and effects\n * - Accessibility compliance (WCAG AA+)\n * - Undo functionality for critical settings\n * - Visual feedback with animations and state indicators\n * - IPU Admin specific presets for settings and permissions\n */\n\n// BIRHAUS: Utility function (self-contained)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ')\n}\n\ninterface ToggleState {\n  on: string\n  off: string\n}\n\ninterface UndoState {\n  previousValue: boolean\n  timeout: NodeJS.Timeout | null\n  isActive: boolean\n}\n\nexport interface BirhausToggleProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // BIRHAUS Principle #4: Progressive disclosure\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // State labels\n  onLabel?: string\n  onLabelEs?: string\n  onLabelEn?: string\n  offLabel?: string\n  offLabelEs?: string\n  offLabelEn?: string\n  \n  // State descriptions\n  onDescription?: string\n  onDescriptionEs?: string\n  onDescriptionEn?: string\n  offDescription?: string\n  offDescriptionEs?: string\n  offDescriptionEn?: string\n  \n  // Value management\n  checked?: boolean\n  defaultChecked?: boolean\n  onChange?: (checked: boolean) => void\n  \n  // BIRHAUS Principle #2: Honest data\n  confirmationRequired?: boolean\n  confirmationMessageEs?: string\n  confirmationMessageEn?: string\n  \n  // BIRHAUS Principle #5: Undo over confirm\n  enableUndo?: boolean\n  undoTimeoutMs?: number\n  criticalAction?: boolean // Shows longer undo timeout for critical settings\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  disabled?: boolean\n  \n  // Appearance\n  variant?: 'default' | 'success' | 'warning' | 'danger'\n  size?: 'sm' | 'md' | 'lg'\n  showStateLabels?: boolean\n  showStateIcons?: boolean\n  \n  // Animation\n  animationDuration?: number // in ms\n  \n  // Visual feedback\n  loading?: boolean\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // IPU Admin specific\n  settingType?: 'privacy' | 'notifications' | 'permissions' | 'visibility' | 'security' | 'custom'\n  \n  // Async handling\n  onAsyncChange?: (checked: boolean) => Promise<void>\n}\n\nexport const BirhausToggle = forwardRef<HTMLButtonElement, BirhausToggleProps>(({\n  // Labels (Spanish-first)\n  label,\n  labelEs,\n  labelEn,\n  \n  // Description\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // State labels\n  onLabel,\n  onLabelEs,\n  onLabelEn,\n  offLabel,\n  offLabelEs,\n  offLabelEn,\n  \n  // State descriptions\n  onDescription,\n  onDescriptionEs,\n  onDescriptionEn,\n  offDescription,\n  offDescriptionEs,\n  offDescriptionEn,\n  \n  // Value\n  checked,\n  defaultChecked = false,\n  onChange,\n  \n  // Confirmation\n  confirmationRequired = false,\n  confirmationMessageEs,\n  confirmationMessageEn,\n  \n  // Undo\n  enableUndo = false,\n  undoTimeoutMs = 10000,\n  criticalAction = false,\n  \n  // Basic props\n  disabled = false,\n  \n  // Appearance\n  variant = 'default',\n  size = 'md',\n  showStateLabels = true,\n  showStateIcons = false,\n  \n  // Animation\n  animationDuration = 200,\n  \n  // Visual feedback\n  loading = false,\n  \n  // Locale\n  locale = 'es',\n  \n  // IPU Admin\n  settingType = 'custom',\n  \n  // Async\n  onAsyncChange\n}, ref) => {\n  // State management\n  const [internalChecked, setInternalChecked] = useState<boolean>(checked ?? defaultChecked)\n  const [isAnimating, setIsAnimating] = useState(false)\n  const [undoState, setUndoState] = useState<UndoState>({\n    previousValue: false,\n    timeout: null,\n    isActive: false\n  })\n  const [isLoading, setIsLoading] = useState(false)\n  const [showConfirmation, setShowConfirmation] = useState(false)\n  const [pendingValue, setPendingValue] = useState<boolean | null>(null)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n  \n  const displayLabel = getDisplayText(label, labelEs, labelEn, '')\n  const displayDescription = getDisplayText(description, descriptionEs, descriptionEn, '')\n  \n  // Get default state labels based on setting type\n  const getDefaultStateLabels = useCallback((): ToggleState => {\n    const stateConfigs: Record<string, ToggleState> = {\n      privacy: {\n        on: locale === 'es' ? 'Privado' : 'Private',\n        off: locale === 'es' ? 'Público' : 'Public'\n      },\n      notifications: {\n        on: locale === 'es' ? 'Activado' : 'Enabled',\n        off: locale === 'es' ? 'Desactivado' : 'Disabled'\n      },\n      permissions: {\n        on: locale === 'es' ? 'Permitido' : 'Allowed',\n        off: locale === 'es' ? 'Bloqueado' : 'Blocked'\n      },\n      visibility: {\n        on: locale === 'es' ? 'Visible' : 'Visible',\n        off: locale === 'es' ? 'Oculto' : 'Hidden'\n      },\n      security: {\n        on: locale === 'es' ? 'Seguro' : 'Secure',\n        off: locale === 'es' ? 'Básico' : 'Basic'\n      },\n      custom: {\n        on: locale === 'es' ? 'Sí' : 'Yes',\n        off: locale === 'es' ? 'No' : 'No'\n      }\n    }\n    \n    return safeAccess(stateConfigs, settingType, stateConfigs.custom)\n  }, [settingType, locale])\n  \n  const defaultStateLabels = getDefaultStateLabels()\n  \n  const currentOnLabel = getDisplayText(onLabel, onLabelEs, onLabelEn, defaultStateLabels.on)\n  const currentOffLabel = getDisplayText(offLabel, offLabelEs, offLabelEn, defaultStateLabels.off)\n  \n  const currentOnDescription = getDisplayText(onDescription, onDescriptionEs, onDescriptionEn, '')\n  const currentOffDescription = getDisplayText(offDescription, offDescriptionEs, offDescriptionEn, '')\n  \n  const confirmationMessage = getDisplayText(\n    undefined,\n    confirmationMessageEs,\n    confirmationMessageEn,\n    locale === 'es' \n      ? '¿Está seguro de cambiar esta configuración?'\n      : 'Are you sure you want to change this setting?'\n  )\n  \n  // Get state icon\n  const getStateIcon = useCallback((isOn: boolean) => {\n    const iconConfigs: Record<string, { on: React.ReactNode; off: React.ReactNode }> = {\n      privacy: {\n        on: <EyeOff className=\"h-4 w-4\" />,\n        off: <Eye className=\"h-4 w-4\" />\n      },\n      notifications: {\n        on: <Bell className=\"h-4 w-4\" />,\n        off: <BellOff className=\"h-4 w-4\" />\n      },\n      permissions: {\n        on: <Shield className=\"h-4 w-4\" />,\n        off: <ShieldOff className=\"h-4 w-4\" />\n      },\n      visibility: {\n        on: <Eye className=\"h-4 w-4\" />,\n        off: <EyeOff className=\"h-4 w-4\" />\n      },\n      security: {\n        on: <Shield className=\"h-4 w-4\" />,\n        off: <ShieldOff className=\"h-4 w-4\" />\n      },\n      custom: {\n        on: <Check className=\"h-4 w-4\" />,\n        off: <X className=\"h-4 w-4\" />\n      }\n    }\n    \n    const config = safeAccess(iconConfigs, settingType, iconConfigs.custom)\n    return isOn ? config.on : config.off\n  }, [settingType])\n  \n  // Handle undo functionality\n  const handleUndo = useCallback(() => {\n    if (undoState.isActive && undoState.timeout) {\n      clearTimeout(undoState.timeout)\n      setInternalChecked(undoState.previousValue)\n      onChange?.(undoState.previousValue)\n      setUndoState({ previousValue: false, timeout: null, isActive: false })\n    }\n  }, [undoState, onChange])\n  \n  // Setup undo for changes\n  const setupUndo = useCallback((newValue: boolean, oldValue: boolean) => {\n    if (!enableUndo) return\n    \n    // Clear existing timeout\n    if (undoState.timeout) {\n      clearTimeout(undoState.timeout)\n    }\n    \n    // Set up new undo state\n    const timeoutDuration = criticalAction ? undoTimeoutMs * 2 : undoTimeoutMs\n    const timeout = setTimeout(() => {\n      setUndoState(prev => ({ ...prev, isActive: false, timeout: null }))\n    }, timeoutDuration)\n    \n    setUndoState({\n      previousValue: oldValue,\n      timeout,\n      isActive: true\n    })\n  }, [enableUndo, undoTimeoutMs, criticalAction, undoState.timeout])\n  \n  // Handle confirmation\n  const handleConfirmation = useCallback((value: boolean) => {\n    setShowConfirmation(false)\n    setPendingValue(null)\n    \n    const oldValue = internalChecked\n    setInternalChecked(value)\n    \n    // Setup undo\n    setupUndo(value, oldValue)\n    \n    // Handle async change\n    if (onAsyncChange) {\n      setIsLoading(true)\n      onAsyncChange(value)\n        .finally(() => setIsLoading(false))\n    }\n    \n    onChange?.(value)\n  }, [internalChecked, setupUndo, onAsyncChange, onChange])\n  \n  // Handle toggle\n  const handleToggle = useCallback(() => {\n    if (disabled || isLoading) return\n    \n    const newValue = !internalChecked\n    \n    // Show confirmation if required\n    if (confirmationRequired) {\n      setPendingValue(newValue)\n      setShowConfirmation(true)\n      return\n    }\n    \n    // Trigger animation\n    setIsAnimating(true)\n    setTimeout(() => setIsAnimating(false), animationDuration)\n    \n    const oldValue = internalChecked\n    setInternalChecked(newValue)\n    \n    // Setup undo\n    setupUndo(newValue, oldValue)\n    \n    // Handle async change\n    if (onAsyncChange) {\n      setIsLoading(true)\n      onAsyncChange(newValue)\n        .finally(() => setIsLoading(false))\n    }\n    \n    onChange?.(newValue)\n  }, [\n    disabled,\n    isLoading,\n    internalChecked,\n    confirmationRequired,\n    animationDuration,\n    setupUndo,\n    onAsyncChange,\n    onChange\n  ])\n  \n  // Sync external value changes\n  useEffect(() => {\n    if (checked !== undefined && checked !== internalChecked) {\n      setInternalChecked(checked)\n    }\n  }, [checked, internalChecked])\n  \n  // Cleanup undo timeout on unmount\n  useEffect(() => {\n    return () => {\n      if (undoState.timeout) {\n        clearTimeout(undoState.timeout)\n      }\n    }\n  }, [undoState.timeout])\n  \n  // Style classes\n  const sizeClasses = {\n    sm: {\n      toggle: 'w-8 h-4',\n      thumb: 'w-3 h-3',\n      text: 'text-sm',\n      description: 'text-xs'\n    },\n    md: {\n      toggle: 'w-11 h-6',\n      thumb: 'w-5 h-5',\n      text: 'text-base',\n      description: 'text-sm'\n    },\n    lg: {\n      toggle: 'w-14 h-8',\n      thumb: 'w-6 h-6',\n      text: 'text-lg',\n      description: 'text-base'\n    }\n  }\n  \n  const variantClasses = {\n    default: {\n      on: 'bg-primary-600',\n      off: 'bg-gray-200'\n    },\n    success: {\n      on: 'bg-green-600',\n      off: 'bg-gray-200'\n    },\n    warning: {\n      on: 'bg-yellow-600',\n      off: 'bg-gray-200'\n    },\n    danger: {\n      on: 'bg-red-600',\n      off: 'bg-gray-200'\n    }\n  }\n  \n  const currentSizeClasses = safeAccess(sizeClasses, size, sizeClasses.md)\n  const currentVariantClasses = safeAccess(variantClasses, variant, variantClasses.default)\n  \n  const currentStateLabel = internalChecked ? currentOnLabel : currentOffLabel\n  const currentStateDescription = internalChecked ? currentOnDescription : currentOffDescription\n  \n  return (\n    <div className=\"birhaus-toggle\">\n      {/* Main Toggle Container */}\n      <div className=\"flex items-start space-x-3\">\n        {/* Toggle Switch */}\n        <button\n          ref={ref}\n          type=\"button\"\n          role=\"switch\"\n          aria-checked={internalChecked}\n          aria-labelledby={displayLabel ? 'toggle-label' : undefined}\n          aria-describedby={displayDescription ? 'toggle-description' : undefined}\n          onClick={handleToggle}\n          disabled={disabled || isLoading}\n          className={cn(\n            'relative inline-flex items-center rounded-full transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',\n            currentSizeClasses.toggle,\n            internalChecked ? currentVariantClasses.on : currentVariantClasses.off,\n            (disabled || isLoading) && 'opacity-50 cursor-not-allowed',\n            !disabled && !isLoading && 'cursor-pointer',\n            isAnimating && 'scale-95'\n          )}\n        >\n          {/* Thumb */}\n          <span\n            className={cn(\n              'inline-block rounded-full bg-white shadow-sm transform transition-transform duration-200',\n              currentSizeClasses.thumb,\n              internalChecked \n                ? size === 'sm' ? 'translate-x-4' : size === 'lg' ? 'translate-x-6' : 'translate-x-5'\n                : 'translate-x-0.5'\n            )}\n          >\n            {/* Loading Spinner */}\n            {(isLoading || loading) && (\n              <div className=\"absolute inset-0 flex items-center justify-center\">\n                <div className=\"animate-spin rounded-full h-3 w-3 border border-gray-300 border-t-primary-600\" />\n              </div>\n            )}\n            \n            {/* State Icon */}\n            {showStateIcons && !isLoading && !loading && (\n              <div className=\"absolute inset-0 flex items-center justify-center text-gray-600\">\n                {getStateIcon(internalChecked)}\n              </div>\n            )}\n          </span>\n        </button>\n        \n        {/* Labels and Description */}\n        <div className=\"flex-1\">\n          {/* Main Label */}\n          {displayLabel && (\n            <div id=\"toggle-label\" className={cn('font-medium', currentSizeClasses.text)}>\n              {displayLabel}\n              {criticalAction && (\n                <span className=\"ml-2 text-xs text-orange-600 font-normal\">\n                  ({locale === 'es' ? 'Crítico' : 'Critical'})\n                </span>\n              )}\n            </div>\n          )}\n          \n          {/* State Label */}\n          {showStateLabels && (\n            <div className={cn(\n              'font-medium mt-1',\n              currentSizeClasses.description,\n              internalChecked ? 'text-green-700' : 'text-gray-600'\n            )}>\n              {currentStateLabel}\n            </div>\n          )}\n          \n          {/* Main Description */}\n          {displayDescription && (\n            <p id=\"toggle-description\" className={cn(\n              'text-gray-600 mt-1',\n              currentSizeClasses.description\n            )}>\n              {displayDescription}\n            </p>\n          )}\n          \n          {/* State Description */}\n          {currentStateDescription && (\n            <p className={cn(\n              'text-gray-500 mt-1',\n              currentSizeClasses.description\n            )}>\n              {currentStateDescription}\n            </p>\n          )}\n        </div>\n      </div>\n      \n      {/* Confirmation Dialog */}\n      {showConfirmation && pendingValue !== null && (\n        <div className=\"mt-3 p-3 bg-yellow-50 border border-yellow-200 rounded-md\">\n          <p className={cn('text-yellow-800 mb-3', currentSizeClasses.description)}>\n            {confirmationMessage}\n          </p>\n          <div className=\"flex space-x-2\">\n            <button\n              type=\"button\"\n              onClick={() => handleConfirmation(pendingValue)}\n              className={cn(\n                'px-3 py-1 bg-yellow-600 text-white rounded-md hover:bg-yellow-700 transition-colors',\n                currentSizeClasses.description\n              )}\n            >\n              {locale === 'es' ? 'Confirmar' : 'Confirm'}\n            </button>\n            <button\n              type=\"button\"\n              onClick={() => {\n                setShowConfirmation(false)\n                setPendingValue(null)\n              }}\n              className={cn(\n                'px-3 py-1 bg-gray-200 text-gray-700 rounded-md hover:bg-gray-300 transition-colors',\n                currentSizeClasses.description\n              )}\n            >\n              {locale === 'es' ? 'Cancelar' : 'Cancel'}\n            </button>\n          </div>\n        </div>\n      )}\n      \n      {/* Undo Notification */}\n      {undoState.isActive && (\n        <div className=\"mt-3 bg-gray-800 text-white text-sm rounded-md p-3 flex items-center justify-between\">\n          <span>\n            {locale === 'es' \n              ? `Configuración cambiada a \"${currentStateLabel}\"`\n              : `Setting changed to \"${currentStateLabel}\"`\n            }\n            {criticalAction && (\n              <span className=\"ml-2 text-orange-300\">\n                ({locale === 'es' ? 'Configuración crítica' : 'Critical setting'})\n              </span>\n            )}\n          </span>\n          <button\n            type=\"button\"\n            onClick={handleUndo}\n            className=\"flex items-center space-x-1 text-primary-200 hover:text-primary-100 font-medium\"\n          >\n            <RotateCcw className=\"h-3 w-3\" />\n            <span>{locale === 'es' ? 'Deshacer' : 'Undo'}</span>\n          </button>\n        </div>\n      )}\n    </div>\n  )\n})\n\nBirhausToggle.displayName = 'BirhausToggle'\n\n// Hook for enhanced toggle functionality\nexport const useBirhausToggle = (initialValue: boolean = false) => {\n  const [isOn, setIsOn] = useState(initialValue)\n  const [history, setHistory] = useState<boolean[]>([initialValue])\n  const [historyIndex, setHistoryIndex] = useState(0)\n  \n  const toggle = useCallback(() => {\n    const newValue = !isOn\n    setIsOn(newValue)\n    \n    // Add to history\n    const newHistory = history.slice(0, historyIndex + 1)\n    newHistory.push(newValue)\n    setHistory(newHistory.slice(-10)) // Keep last 10 states\n    setHistoryIndex(newHistory.length - 1)\n  }, [isOn, history, historyIndex])\n  \n  const turnOn = useCallback(() => {\n    if (!isOn) toggle()\n  }, [isOn, toggle])\n  \n  const turnOff = useCallback(() => {\n    if (isOn) toggle()\n  }, [isOn, toggle])\n  \n  const setValue = useCallback((value: boolean) => {\n    if (value !== isOn) {\n      setIsOn(value)\n      \n      // Add to history\n      const newHistory = history.slice(0, historyIndex + 1)\n      newHistory.push(value)\n      setHistory(newHistory.slice(-10))\n      setHistoryIndex(newHistory.length - 1)\n    }\n  }, [isOn, history, historyIndex])\n  \n  const undo = useCallback(() => {\n    if (historyIndex > 0) {\n      const newIndex = historyIndex - 1\n      setHistoryIndex(newIndex)\n      const value = safeArrayAccess(history, newIndex, false)\n      setIsOn(value)\n      return value\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const redo = useCallback(() => {\n    if (historyIndex < history.length - 1) {\n      const newIndex = historyIndex + 1\n      setHistoryIndex(newIndex)\n      const value = safeArrayAccess(history, newIndex, false)\n      setIsOn(value)\n      return value\n    }\n    return null\n  }, [history, historyIndex])\n  \n  const canUndo = historyIndex > 0\n  const canRedo = historyIndex < history.length - 1\n  \n  return {\n    isOn,\n    toggle,\n    turnOn,\n    turnOff,\n    setValue,\n    undo,\n    redo,\n    canUndo,\n    canRedo\n  }\n}\n\n// IPU Admin specific toggle configurations\nexport const ipuAdminTogglePresets = {\n  memberVisibility: {\n    settingType: 'visibility' as const,\n    onLabelEs: 'Visible en directorio',\n    onLabelEn: 'Visible in directory',\n    offLabelEs: 'Oculto del directorio',\n    offLabelEn: 'Hidden from directory',\n    showStateLabels: true,\n    enableUndo: true\n  },\n  \n  donationNotifications: {\n    settingType: 'notifications' as const,\n    onLabelEs: 'Notificaciones activadas',\n    onLabelEn: 'Notifications enabled',\n    offLabelEs: 'Notificaciones desactivadas',\n    offLabelEn: 'Notifications disabled',\n    showStateIcons: true,\n    enableUndo: true\n  },\n  \n  dataPrivacy: {\n    settingType: 'privacy' as const,\n    variant: 'danger' as const,\n    onLabelEs: 'Datos privados',\n    onLabelEn: 'Private data',\n    offLabelEs: 'Datos públicos',\n    offLabelEn: 'Public data',\n    confirmationRequired: true,\n    criticalAction: true,\n    enableUndo: true\n  },\n  \n  adminPermissions: {\n    settingType: 'permissions' as const,\n    variant: 'warning' as const,\n    onLabelEs: 'Permisos de administrador',\n    onLabelEn: 'Administrator permissions',\n    offLabelEs: 'Permisos básicos',\n    offLabelEn: 'Basic permissions',\n    confirmationRequired: true,\n    criticalAction: true,\n    enableUndo: true,\n    showStateIcons: true\n  },\n  \n  securityMode: {\n    settingType: 'security' as const,\n    variant: 'success' as const,\n    onLabelEs: 'Modo seguro activado',\n    onLabelEn: 'Secure mode enabled',\n    offLabelEs: 'Modo básico',\n    offLabelEn: 'Basic mode',\n    showStateLabels: true,\n    showStateIcons: true,\n    enableUndo: true\n  }\n}","'use client'\n\nimport React, { useState, useMemo, useCallback } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport {\n  ChevronUp,\n  ChevronDown,\n  ChevronsUpDown,\n  ChevronLeft,\n  ChevronRight,\n  Search,\n  FileX,\n  AlertCircle\n} from 'lucide-react'\nimport { cn } from '../../utils/cn'\n// Note: These imports will be resolved to actual components in production\n// and to mocks during testing via vitest configuration\nimport { BirhausButton } from '../BirhausButton'\nimport { BirhausInput } from '../BirhausInput' \nimport { BirhausCheckbox } from '../BirhausCheckbox'\nimport { BirhausEmptyState } from '../BirhausEmptyState'\nimport type { \n  BirhausDataTableProps, \n  BirhausTableColumn, \n  BirhausBulkAction, \n  SortDirection,\n  PaginationInfo \n} from './types'\n\n/**\n * BirhausDataTable - Advanced data table component with BIRHAUS principles\n * \n * Features:\n * - Spanish-first labels with English fallbacks\n * - Miller's Law compliance (max 7±2 items in pagination)\n * - Cognitive load reduction through progressive disclosure\n * - Accessibility-first design (WCAG AA+)\n * - Undo-over-confirm patterns (no confirmation dialogs)\n */\nexport function BirhausDataTable<T extends Record<string, any>>({\n  // Data\n  data,\n  columns = [],\n  keyField,\n  \n  // States\n  loading = false,\n  error = null,\n  \n  // Search\n  searchPlaceholderEs = \"Buscar...\",\n  searchPlaceholderEn = \"Search...\",\n  globalSearch = true,\n  onSearch,\n  \n  // Pagination\n  totalCount,\n  pageSize = 10,\n  currentPage = 1,\n  onPageChange,\n  pageSizeOptions = [10, 25, 50, 100],\n  onPageSizeChange,\n  \n  // Selection\n  selectable = false,\n  selectedItems = [],\n  onSelectionChange,\n  bulkActions = [],\n  \n  // Actions\n  onRowClick,\n  rowActions,\n  \n  // Export\n  exportable = false,\n  onExport,\n  \n  // Styling & Labels\n  className,\n  rowClassName,\n  emptyMessageEs = \"No se encontraron resultados\",\n  emptyMessageEn = \"No results found\",\n  emptyIcon: EmptyIcon = FileX,\n  locale = 'es'\n}: BirhausDataTableProps<T>) {\n  // BIRHAUS Principle: Defensive programming with safe defaults\n  const safeColumns = useMemo(() => {\n    if (!columns || !Array.isArray(columns)) return []\n    return columns\n  }, [columns])\n  \n  const [sortColumn, setSortColumn] = useState<string | null>(null)\n  const [sortDirection, setSortDirection] = useState<SortDirection>(null)\n  const [localSearchTerm, setLocalSearchTerm] = useState('')\n\n  // BIRHAUS Principle: Miller's Law - Limit pagination to 7±2 pages max\n  const totalPages = totalCount ? Math.ceil(totalCount / pageSize) : 1\n  const showPagination = totalCount && totalCount > pageSize\n  const maxVisiblePages = Math.min(7, totalPages) // Miller's Law compliance\n\n  // Handle sorting with BIRHAUS undo pattern\n  const handleSort = useCallback((columnKey: string) => {\n    if (sortColumn === columnKey) {\n      if (sortDirection === null) {\n        setSortDirection('asc')\n      } else if (sortDirection === 'asc') {\n        setSortDirection('desc')\n      } else {\n        // BIRHAUS: Clear sort instead of showing confirmation\n        setSortDirection(null)\n        setSortColumn(null)\n        return\n      }\n    } else {\n      setSortColumn(columnKey)\n      setSortDirection('asc')\n    }\n  }, [sortColumn, sortDirection])\n\n  // Sort data with nested key support\n  const sortedData = useMemo(() => {\n    if (!data || !Array.isArray(data)) return []\n    if (!sortColumn || !sortDirection) return data\n\n    return [...data].sort((a, b) => {\n      const aValue = sortColumn.includes('.')\n        ? sortColumn.split('.').reduce((obj, key) => obj?.[key], a)\n        : a[sortColumn]\n      const bValue = sortColumn.includes('.')\n        ? sortColumn.split('.').reduce((obj, key) => obj?.[key], b)\n        : b[sortColumn]\n\n      if (aValue === null || aValue === undefined) return 1\n      if (bValue === null || bValue === undefined) return -1\n\n      if (aValue < bValue) return sortDirection === 'asc' ? -1 : 1\n      if (aValue > bValue) return sortDirection === 'asc' ? 1 : -1\n      return 0\n    })\n  }, [data, sortColumn, sortDirection])\n\n  // Filter data locally if no external search handler\n  const filteredData = useMemo(() => {\n    if (!globalSearch || onSearch || !localSearchTerm) return sortedData\n\n    const searchableColumns = safeColumns.filter(col => col.searchable !== false)\n    const term = localSearchTerm.toLowerCase()\n\n    return sortedData.filter(item => {\n      return searchableColumns.some(col => {\n        const value = col.key.includes('.')\n          ? col.key.split('.').reduce((obj, key) => obj?.[key], item)\n          : item[col.key]\n        \n        return value?.toString().toLowerCase().includes(term)\n      })\n    })\n  }, [sortedData, localSearchTerm, globalSearch, onSearch, safeColumns])\n\n  // Selection handlers with BIRHAUS undo patterns\n  const isAllSelected = selectable && selectedItems.length === filteredData.length && filteredData.length > 0\n  const isPartiallySelected = selectable && selectedItems.length > 0 && selectedItems.length < filteredData.length\n\n  const handleSelectAll = useCallback(() => {\n    if (isAllSelected) {\n      onSelectionChange?.([])\n    } else {\n      onSelectionChange?.(filteredData)\n    }\n  }, [isAllSelected, filteredData, onSelectionChange])\n\n  const handleSelectItem = useCallback((item: T) => {\n    const isSelected = selectedItems.some(\n      selected => selected[keyField] === item[keyField]\n    )\n    \n    if (isSelected) {\n      onSelectionChange?.(\n        selectedItems.filter(selected => selected[keyField] !== item[keyField])\n      )\n    } else {\n      onSelectionChange?.([...selectedItems, item])\n    }\n  }, [selectedItems, keyField, onSelectionChange])\n\n  // Render sort icon with BIRHAUS color scheme\n  const SortIcon = ({ columnKey }: { columnKey: string }) => {\n    if (sortColumn !== columnKey) {\n      return <ChevronsUpDown className=\"w-4 h-4 text-gray-400\" />\n    }\n    if (sortDirection === 'asc') {\n      return <ChevronUp className=\"w-4 h-4 text-blue-600\" />\n    }\n    return <ChevronDown className=\"w-4 h-4 text-blue-600\" />\n  }\n\n  // Get localized labels\n  const getLabel = (es: string, en?: string) => {\n    return locale === 'es' ? es : (en || es)\n  }\n\n  // BIRHAUS Principle: Defensive error handling\n  if (safeColumns.length === 0) {\n    console.error('BirhausDataTable: columns prop is required and must be a non-empty array')\n    return (\n      <div className=\"p-8 text-center text-gray-500 border border-gray-200 rounded-lg\">\n        <AlertCircle className=\"h-12 w-12 mx-auto mb-4 text-gray-400\" />\n        <p className=\"text-lg font-medium\">\n          {getLabel('Error de configuración', 'Configuration error')}\n        </p>\n        <p className=\"text-sm mt-2\">\n          {getLabel('No se pudieron cargar las columnas de la tabla', 'Could not load table columns')}\n        </p>\n      </div>\n    )\n  }\n\n  // Loading state with skeleton\n  if (loading) {\n    return (\n      <div className=\"space-y-4\">\n        <div className=\"animate-pulse\">\n          <div className=\"h-10 bg-gray-200 rounded mb-4\" />\n          <div className=\"border border-gray-200 rounded-lg\">\n            {Array.from({ length: pageSize }).map((_, i) => (\n              <div key={i} className=\"border-b border-gray-200 last:border-b-0 p-4\">\n                <div className=\"flex space-x-4\">\n                  {safeColumns.map((col, j) => (\n                    <div key={j} className=\"h-4 bg-gray-200 rounded flex-1\" />\n                  ))}\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <BirhausEmptyState\n        titleEs=\"Error al cargar datos\"\n        titleEn=\"Error loading data\"\n        descriptionEs={error}\n        descriptionEn={error}\n        icon={<AlertCircle className=\"w-12 h-12\" />}\n        error={true}\n      />\n    )\n  }\n\n  return (\n    <div className={cn(\"space-y-4\", className)}>\n      {/* Header Actions */}\n      <div className=\"flex flex-col sm:flex-row gap-4\">\n        {/* Search */}\n        {globalSearch && (\n          <div className=\"relative flex-1 max-w-md\">\n            <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 w-5 h-5\" />\n            <BirhausInput\n              type=\"text\"\n              placeholder={locale === 'es' ? searchPlaceholderEs : searchPlaceholderEn}\n              value={localSearchTerm}\n              onChange={(e) => {\n                setLocalSearchTerm(e.target.value)\n                onSearch?.(e.target.value)\n              }}\n              className=\"pl-10\"\n            />\n          </div>\n        )}\n\n        {/* Legacy bulk actions - now handled by BulkActionBar when integrated */}\n        {selectable && selectedItems.length > 0 && bulkActions.length > 0 && (\n          <div className=\"flex items-center gap-2\">\n            <span className=\"text-sm text-gray-600\">\n              {selectedItems.length} {getLabel(\n                selectedItems.length === 1 ? 'seleccionado' : 'seleccionados',\n                selectedItems.length === 1 ? 'selected' : 'selected'\n              )}\n            </span>\n            {bulkActions.slice(0, 2).map((action, index) => (\n              <BirhausButton\n                key={index}\n                variant={action.variant || 'secondary'}\n                size=\"sm\"\n                onClick={() => action.onClick(selectedItems)}\n              >\n                {action.icon && <action.icon className=\"w-4 h-4 mr-1\" />}\n                {getLabel(action.labelEs, action.labelEn)}\n              </BirhausButton>\n            ))}\n            {bulkActions.length > 2 && (\n              <span className=\"text-sm text-gray-500\">\n                +{bulkActions.length - 2} {getLabel('más', 'more')}\n              </span>\n            )}\n          </div>\n        )}\n\n        {/* Export functionality placeholder */}\n        {exportable && onExport && (\n          <BirhausButton\n            variant=\"secondary\"\n            size=\"sm\"\n            onClick={() => onExport('csv', { data: filteredData, columns: safeColumns })}\n          >\n            {getLabel('Exportar', 'Export')}\n          </BirhausButton>\n        )}\n      </div>\n\n      {/* Table */}\n      <div className=\"overflow-x-auto rounded-lg border border-gray-200\">\n        <table className=\"w-full\">\n          <thead className=\"bg-gray-50\">\n            <tr className=\"border-b border-gray-200\">\n              {selectable && (\n                <th className=\"w-12 px-4 py-3\">\n                  <BirhausCheckbox\n                    checked={isAllSelected}\n                    indeterminate={isPartiallySelected}\n                    onChange={handleSelectAll}\n                    aria-label={getLabel('Seleccionar todos', 'Select all')}\n                  />\n                </th>\n              )}\n              {safeColumns.map((column) => (\n                <th\n                  key={column.key}\n                  className={cn(\n                    \"px-4 py-3 text-left text-sm font-medium text-gray-700\",\n                    column.sortable && \"cursor-pointer hover:bg-gray-100 transition-colors\",\n                    column.headerClassName\n                  )}\n                  style={{ width: column.width }}\n                  onClick={() => column.sortable && handleSort(column.key)}\n                >\n                  <div className=\"flex items-center gap-1\">\n                    {getLabel(column.labelEs, column.labelEn)}\n                    {column.sortable && <SortIcon columnKey={column.key} />}\n                  </div>\n                </th>\n              ))}\n              {rowActions && (\n                <th className=\"w-12 px-4 py-3\">\n                  <span className=\"sr-only\">{getLabel('Acciones', 'Actions')}</span>\n                </th>\n              )}\n            </tr>\n          </thead>\n          <tbody className=\"divide-y divide-gray-200 bg-white\">\n            {filteredData.length === 0 ? (\n              <tr>\n                <td\n                  colSpan={safeColumns.length + (selectable ? 1 : 0) + (rowActions ? 1 : 0)}\n                  className=\"px-4 py-12 text-center\"\n                >\n                  <BirhausEmptyState\n                    icon={<EmptyIcon className=\"w-12 h-12\" />}\n                    titleEs={emptyMessageEs}\n                    titleEn={emptyMessageEn}\n                    size=\"sm\"\n                  />\n                </td>\n              </tr>\n            ) : (\n              filteredData.map((item, index) => {\n                const isSelected = selectedItems.some(\n                  selected => selected[keyField] === item[keyField]\n                )\n                \n                return (\n                  <tr\n                    key={item[keyField]}\n                    onClick={() => onRowClick?.(item)}\n                    className={cn(\n                      \"hover:bg-gray-50 transition-colors\",\n                      onRowClick && \"cursor-pointer\",\n                      isSelected && \"bg-blue-50\",\n                      rowClassName?.(item, index)\n                    )}\n                  >\n                    {selectable && (\n                      <td className=\"w-12 px-4 py-3\">\n                        <BirhausCheckbox\n                          checked={isSelected}\n                          onChange={() => handleSelectItem(item)}\n                          onClick={(e) => e.stopPropagation()}\n                          aria-label={getLabel(\n                            `Seleccionar fila ${index + 1}`,\n                            `Select row ${index + 1}`\n                          )}\n                        />\n                      </td>\n                    )}\n                    {safeColumns.map((column) => (\n                      <td\n                        key={column.key}\n                        className={cn(\"px-4 py-3 text-sm\", column.className)}\n                      >\n                        {column.render\n                          ? column.render(item, index)\n                          : column.key.includes('.')\n                            ? column.key.split('.').reduce((obj, key) => obj?.[key], item)\n                            : item[column.key]\n                        }\n                      </td>\n                    ))}\n                    {rowActions && (\n                      <td className=\"w-12 px-4 py-3\">\n                        <div onClick={(e) => e.stopPropagation()}>\n                          {rowActions(item)}\n                        </div>\n                      </td>\n                    )}\n                  </tr>\n                )\n              })\n            )}\n          </tbody>\n        </table>\n      </div>\n\n      {/* Pagination - BIRHAUS Miller's Law compliant */}\n      {showPagination && (\n        <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\n          <div className=\"flex items-center gap-2\">\n            <span className=\"text-sm text-gray-600\">\n              {getLabel(\n                `Mostrando ${((currentPage - 1) * pageSize) + 1} - ${Math.min(currentPage * pageSize, totalCount || 0)} de ${totalCount}`,\n                `Showing ${((currentPage - 1) * pageSize) + 1} - ${Math.min(currentPage * pageSize, totalCount || 0)} of ${totalCount}`\n              )}\n            </span>\n            {onPageSizeChange && (\n              <select\n                value={pageSize}\n                onChange={(e) => onPageSizeChange(Number(e.target.value))}\n                className=\"ml-2 px-2 py-1 text-sm border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500\"\n              >\n                {pageSizeOptions.map(size => (\n                  <option key={size} value={size}>\n                    {size} {getLabel('por página', 'per page')}\n                  </option>\n                ))}\n              </select>\n            )}\n          </div>\n          \n          <div className=\"flex items-center gap-2\">\n            <BirhausButton\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={() => onPageChange?.(currentPage - 1)}\n              disabled={currentPage === 1}\n            >\n              <ChevronLeft className=\"w-4 h-4\" />\n              {getLabel('Anterior', 'Previous')}\n            </BirhausButton>\n            \n            {/* BIRHAUS: Miller's Law - Max 7±2 page buttons */}\n            <div className=\"flex items-center gap-1\">\n              {Array.from({ length: maxVisiblePages }, (_, i) => {\n                let pageNum\n                if (totalPages <= maxVisiblePages) {\n                  pageNum = i + 1\n                } else if (currentPage <= 3) {\n                  pageNum = i + 1\n                } else if (currentPage >= totalPages - 2) {\n                  pageNum = totalPages - maxVisiblePages + 1 + i\n                } else {\n                  pageNum = currentPage - 2 + i\n                }\n                \n                return (\n                  <BirhausButton\n                    key={pageNum}\n                    variant={pageNum === currentPage ? 'primary' : 'ghost'}\n                    size=\"sm\"\n                    onClick={() => onPageChange?.(pageNum)}\n                    className=\"min-w-[32px]\"\n                  >\n                    {pageNum}\n                  </BirhausButton>\n                )\n              })}\n            </div>\n            \n            <BirhausButton\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={() => onPageChange?.(currentPage + 1)}\n              disabled={currentPage === totalPages}\n            >\n              {getLabel('Siguiente', 'Next')}\n              <ChevronRight className=\"w-4 h-4\" />\n            </BirhausButton>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\n// Hook for managing table state\nexport function useBirhausDataTable<T extends Record<string, any>>(initialData: T[] = []) {\n  const [data, setData] = useState<T[]>(initialData)\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  const [selectedItems, setSelectedItems] = useState<T[]>([])\n  const [currentPage, setCurrentPage] = useState(1)\n  const [pageSize, setPageSize] = useState(10)\n  const [searchTerm, setSearchTerm] = useState('')\n  \n  const resetSelection = useCallback(() => {\n    setSelectedItems([])\n  }, [])\n  \n  const resetPagination = useCallback(() => {\n    setCurrentPage(1)\n  }, [])\n  \n  return {\n    // Data state\n    data,\n    setData,\n    loading,\n    setLoading,\n    error,\n    setError,\n    \n    // Selection state\n    selectedItems,\n    setSelectedItems,\n    resetSelection,\n    \n    // Pagination state\n    currentPage,\n    setCurrentPage,\n    pageSize,\n    setPageSize,\n    resetPagination,\n    \n    // Search state\n    searchTerm,\n    setSearchTerm,\n    \n    // Computed values\n    totalCount: data.length,\n    hasSelection: selectedItems.length > 0,\n    paginationInfo: {\n      currentPage,\n      pageSize,\n      totalCount: data.length,\n      totalPages: Math.ceil(data.length / pageSize),\n      hasNextPage: currentPage < Math.ceil(data.length / pageSize),\n      hasPreviousPage: currentPage > 1\n    } as PaginationInfo\n  }\n}\n\nexport { BirhausDataTable as default }","import type { \n  BirhausTableColumn, \n  BirhausBulkAction, \n  DataTableMetrics,\n  TableConfigFactory \n} from './types'\n\n/**\n * BIRHAUS DataTable Utilities\n * Cognitive load validation and configuration helpers\n */\n\n// BIRHAUS validation constants\nconst MILLER_LAW_MAX_COLUMNS = 7\nconst COGNITIVE_LOAD_THRESHOLDS = {\n  LOW: 5,\n  MEDIUM: 7,\n  HIGH: 10\n}\nconst BIRHAUS_4_3_1_MAX_ACTIONS = 4\n\n/**\n * Validates cognitive load based on BIRHAUS principles\n */\nexport function validateCognitiveLoad<T>(\n  columns: BirhausTableColumn<T>[],\n  bulkActions: BirhausBulkAction<T>[] = []\n): DataTableMetrics {\n  const columnsCount = columns.length\n  const bulkActionsCount = bulkActions.length\n  \n  // Calculate total cognitive load\n  const totalLoad = columnsCount + bulkActionsCount\n  \n  let cognitiveLoad: 'low' | 'medium' | 'high' = 'low'\n  if (totalLoad > COGNITIVE_LOAD_THRESHOLDS.HIGH) {\n    cognitiveLoad = 'high'\n  } else if (totalLoad > COGNITIVE_LOAD_THRESHOLDS.MEDIUM) {\n    cognitiveLoad = 'medium'\n  }\n  \n  // Log warnings for BIRHAUS violations\n  if (columnsCount > MILLER_LAW_MAX_COLUMNS) {\n    console.warn(\n      `BIRHAUS DataTable: ${columnsCount} columns exceed Miller's Law recommendation of ${MILLER_LAW_MAX_COLUMNS}. ` +\n      'Consider grouping columns or using progressive disclosure.'\n    )\n  }\n  \n  if (bulkActionsCount > BIRHAUS_4_3_1_MAX_ACTIONS) {\n    console.warn(\n      `BIRHAUS DataTable: ${bulkActionsCount} bulk actions exceed 4-3-1 rule of ${BIRHAUS_4_3_1_MAX_ACTIONS}. ` +\n      'Consider consolidating actions or using a dropdown menu.'\n    )\n  }\n  \n  return {\n    columnsCount,\n    rowsPerPage: 10, // Default from component\n    bulkActionsCount,\n    cognitiveLoad\n  }\n}\n\n/**\n * Factory function to create BIRHAUS-compliant table columns\n */\nexport function createBirhausTableColumn<T>(\n  key: string,\n  labelEs: string,\n  labelEn?: string,\n  options: Partial<Omit<BirhausTableColumn<T>, 'key' | 'labelEs' | 'labelEn'>> = {}\n): BirhausTableColumn<T> {\n  return {\n    key,\n    labelEs,\n    labelEn: labelEn || labelEs,\n    sortable: true,\n    searchable: true,\n    ...options\n  }\n}\n\n/**\n * Factory function to create BIRHAUS-compliant bulk actions\n */\nexport function createBirhausBulkAction<T>(\n  labelEs: string,\n  onClick: (items: T[]) => void | Promise<void>,\n  labelEn?: string,\n  options: Partial<Omit<BirhausBulkAction<T>, 'labelEs' | 'labelEn' | 'onClick'>> = {}\n): BirhausBulkAction<T> {\n  return {\n    labelEs,\n    labelEn: labelEn || labelEs,\n    onClick,\n    variant: 'secondary',\n    ...options\n  }\n}\n\n/**\n * Creates a complete table configuration factory\n */\nexport function createTableConfigFactory<T>(): TableConfigFactory<T> {\n  return {\n    createColumn: (config) => createBirhausTableColumn(\n      config.key,\n      config.labelEs,\n      config.labelEn,\n      config\n    ),\n    createBulkAction: (config) => createBirhausBulkAction(\n      config.labelEs,\n      config.onClick,\n      config.labelEn,\n      config\n    ),\n    validateCognitiveLoad\n  }\n}\n\n/**\n * Utility to sort data with nested key support\n */\nexport function sortDataByColumn<T>(\n  data: T[],\n  columnKey: string,\n  direction: 'asc' | 'desc'\n): T[] {\n  return [...data].sort((a, b) => {\n    const aValue = columnKey.includes('.')\n      ? columnKey.split('.').reduce((obj: any, key) => obj?.[key], a)\n      : (a as any)[columnKey]\n    const bValue = columnKey.includes('.')\n      ? columnKey.split('.').reduce((obj: any, key) => obj?.[key], b)\n      : (b as any)[columnKey]\n\n    if (aValue === null || aValue === undefined) return 1\n    if (bValue === null || bValue === undefined) return -1\n\n    if (aValue < bValue) return direction === 'asc' ? -1 : 1\n    if (aValue > bValue) return direction === 'asc' ? 1 : -1\n    return 0\n  })\n}\n\n/**\n * Filter data based on search term and searchable columns\n */\nexport function filterDataBySearch<T>(\n  data: T[],\n  searchTerm: string,\n  columns: BirhausTableColumn<T>[]\n): T[] {\n  if (!searchTerm) return data\n  \n  const searchableColumns = columns.filter(col => col.searchable !== false)\n  const term = searchTerm.toLowerCase()\n\n  return data.filter(item => {\n    return searchableColumns.some(col => {\n      const value = col.key.includes('.')\n        ? col.key.split('.').reduce((obj: any, key) => obj?.[key], item)\n        : (item as any)[col.key]\n      \n      return value?.toString().toLowerCase().includes(term)\n    })\n  })\n}\n\n/**\n * Calculate pagination info\n */\nexport function calculatePagination(\n  totalCount: number,\n  currentPage: number,\n  pageSize: number\n) {\n  const totalPages = Math.ceil(totalCount / pageSize)\n  \n  return {\n    currentPage,\n    pageSize,\n    totalCount,\n    totalPages,\n    hasNextPage: currentPage < totalPages,\n    hasPreviousPage: currentPage > 1,\n    startIndex: (currentPage - 1) * pageSize,\n    endIndex: Math.min(currentPage * pageSize - 1, totalCount - 1)\n  }\n}\n\n/**\n * BIRHAUS-compliant page range calculation (Miller's Law)\n */\nexport function calculateVisiblePages(\n  currentPage: number,\n  totalPages: number,\n  maxVisible: number = 7\n): number[] {\n  const actualMax = Math.min(maxVisible, totalPages)\n  \n  if (totalPages <= actualMax) {\n    return Array.from({ length: totalPages }, (_, i) => i + 1)\n  }\n  \n  const halfVisible = Math.floor(actualMax / 2)\n  let start = currentPage - halfVisible\n  let end = currentPage + halfVisible\n  \n  if (start < 1) {\n    start = 1\n    end = actualMax\n  } else if (end > totalPages) {\n    start = totalPages - actualMax + 1\n    end = totalPages\n  }\n  \n  return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n}\n\n/**\n * Export data formatting utilities\n */\nexport function formatDataForExport<T>(\n  data: T[],\n  columns: BirhausTableColumn<T>[],\n  format: 'csv' | 'json' = 'csv'\n) {\n  if (format === 'json') {\n    return JSON.stringify(data, null, 2)\n  }\n  \n  // CSV format\n  const headers = columns.map(col => col.labelEs).join(',')\n  const rows = data.map(item => \n    columns.map(col => {\n      const value = col.key.includes('.')\n        ? col.key.split('.').reduce((obj: any, key) => obj?.[key], item)\n        : (item as any)[col.key]\n      \n      // Escape CSV values\n      const stringValue = String(value || '')\n      return stringValue.includes(',') || stringValue.includes('\"') || stringValue.includes('\\n')\n        ? `\"${stringValue.replace(/\"/g, '\"\"')}\"` \n        : stringValue\n    }).join(',')\n  ).join('\\n')\n  \n  return `${headers}\\n${rows}`\n}\n\n// Pre-configured column types for common use cases\nexport const commonColumnTypes = {\n  text: (key: string, labelEs: string, labelEn?: string) =>\n    createBirhausTableColumn(key, labelEs, labelEn),\n    \n  number: (key: string, labelEs: string, labelEn?: string) =>\n    createBirhausTableColumn(key, labelEs, labelEn, {\n      className: 'text-right font-mono'\n    }),\n    \n  date: (key: string, labelEs: string, labelEn?: string) =>\n    createBirhausTableColumn(key, labelEs, labelEn, {\n      render: (item: any, index) => {\n        const value = item[key]\n        if (!value) return '-'\n        return new Date(value).toLocaleDateString('es-PY')\n      }\n    }),\n    \n  currency: (key: string, labelEs: string, labelEn?: string) =>\n    createBirhausTableColumn(key, labelEs, labelEn, {\n      className: 'text-right font-mono',\n      render: (item: any, index) => {\n        const value = item[key]\n        if (!value && value !== 0) return '-'\n        return new Intl.NumberFormat('es-PY', {\n          style: 'currency',\n          currency: 'PYG',\n          minimumFractionDigits: 0\n        }).format(value)\n      }\n    }),\n    \n  boolean: (key: string, labelEs: string, labelEn?: string) =>\n    createBirhausTableColumn(key, labelEs, labelEn, {\n      className: 'text-center',\n      render: (item: any, index) => {\n        const value = item[key]\n        return value ? '✅' : '❌'\n      }\n    })\n}","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport { Search, X, Check, Loader2, Users, ChevronDown, ChevronUp, AlertTriangle } from 'lucide-react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { BirhausInput } from '../BirhausInput'\nimport { BirhausButton } from '../BirhausButton'\nimport { BirhausEmptyState } from '../BirhausEmptyState'\nimport { BirhausBadge } from '../BirhausBadge'\nimport { BirhausCheckbox } from '../BirhausCheckbox'\n\nexport interface BirhausSearchableListProps<T> {\n  // Core data props\n  items: T[]\n  getItemKey: (item: T) => string\n  renderItem?: (item: T, isSelected: boolean) => React.ReactNode\n  \n  // Search configuration\n  searchKeys?: (keyof T)[]\n  searchPlaceholderEs?: string\n  searchPlaceholderEn?: string\n  debounceMs?: number\n  \n  // Selection props\n  onSelect?: (item: T) => void\n  onMultiSelect?: (items: T[]) => void\n  multiSelect?: boolean\n  selectedItems?: T[]\n  maxSelectable?: number\n  showSelectedCount?: boolean\n  showSelectAll?: boolean\n  \n  // Display configuration\n  height?: number | string\n  virtualize?: boolean\n  itemHeight?: number\n  loading?: boolean\n  \n  // Grouping and sorting\n  groupBy?: (item: T) => string\n  sortBy?: (a: T, b: T) => number\n  \n  // Styling\n  className?: string\n  listClassName?: string\n  searchClassName?: string\n  \n  // BIRHAUS-specific props\n  emptyMessageEs?: string\n  emptyMessageEn?: string\n  emptySearchMessageEs?: string\n  emptySearchMessageEn?: string\n  showCognitiveWarning?: boolean\n  cognitiveMode?: 'strict' | 'warning' | 'disabled'\n  \n  // Spanish-first labels\n  selectAllLabelEs?: string\n  selectAllLabelEn?: string\n  selectedCountLabelEs?: string\n  selectedCountLabelEn?: string\n  maxSelectionLabelEs?: string\n  maxSelectionLabelEn?: string\n}\n\nexport function BirhausSearchableList<T>({\n  items,\n  getItemKey,\n  renderItem,\n  searchKeys = [],\n  searchPlaceholderEs = 'Buscar...',\n  searchPlaceholderEn = 'Search...',\n  debounceMs = 300,\n  onSelect,\n  onMultiSelect,\n  multiSelect = false,\n  selectedItems = [],\n  maxSelectable,\n  showSelectedCount = true,\n  showSelectAll = true,\n  height = 400,\n  virtualize = true,\n  itemHeight = 60,\n  loading = false,\n  groupBy,\n  sortBy,\n  className,\n  listClassName,\n  searchClassName,\n  emptyMessageEs = 'No hay elementos',\n  emptyMessageEn = 'No items found',\n  emptySearchMessageEs = 'No se encontraron resultados',\n  emptySearchMessageEn = 'No search results found',\n  showCognitiveWarning = false,\n  cognitiveMode = 'warning',\n  selectAllLabelEs = 'Seleccionar todos',\n  selectAllLabelEn = 'Select all',\n  selectedCountLabelEs = '{selected} de {total} seleccionados',\n  selectedCountLabelEn = '{selected} of {total} selected',\n  maxSelectionLabelEs = 'máx: {max}',\n  maxSelectionLabelEn = 'max: {max}'\n}: BirhausSearchableListProps<T>) {\n  const [searchTerm, setSearchTerm] = React.useState('')\n  const [debouncedSearchTerm, setDebouncedSearchTerm] = React.useState('')\n  const [selectedKeys, setSelectedKeys] = React.useState<Set<string>>(\n    new Set(selectedItems.map(getItemKey))\n  )\n  const [expandedGroups, setExpandedGroups] = React.useState<Set<string>>(new Set())\n  \n  const listRef = React.useRef<HTMLDivElement>(null)\n  const searchInputRef = React.useRef<HTMLInputElement>(null)\n\n  // BIRHAUS: Cognitive load warnings\n  const shouldShowCognitiveWarning = React.useMemo(() => {\n    if (cognitiveMode === 'disabled') return false\n    \n    const hasHighItemCount = items.length > 100\n    const hasHighMaxSelection = maxSelectable && maxSelectable > 7\n    const needsVirtualization = items.length > 20 && !virtualize\n    \n    return showCognitiveWarning || hasHighItemCount || hasHighMaxSelection || needsVirtualization\n  }, [items.length, maxSelectable, virtualize, showCognitiveWarning, cognitiveMode])\n\n  // BIRHAUS: Auto-enable search for large lists\n  const shouldAutoSearch = items.length > 20\n\n  // BIRHAUS: Warn about max selections exceeding Miller's Law\n  React.useEffect(() => {\n    if (cognitiveMode === 'strict' && maxSelectable && maxSelectable > 7) {\n      console.warn('BIRHAUS: maxSelectable > 7 may cause cognitive overload. Consider grouping or progressive disclosure.')\n    }\n  }, [maxSelectable, cognitiveMode])\n\n  // Debounce search term\n  React.useEffect(() => {\n    const timer = setTimeout(() => {\n      setDebouncedSearchTerm(searchTerm)\n    }, debounceMs)\n\n    return () => clearTimeout(timer)\n  }, [searchTerm, debounceMs])\n\n  // Update selected keys when selectedItems prop changes\n  React.useEffect(() => {\n    setSelectedKeys(new Set(selectedItems.map(getItemKey)))\n  }, [selectedItems, getItemKey])\n\n  // Filter items based on search\n  const filteredItems = React.useMemo(() => {\n    if (!debouncedSearchTerm) return items\n\n    const searchLower = debouncedSearchTerm.toLowerCase()\n    \n    return items.filter(item => {\n      if (searchKeys.length === 0) {\n        // Search all string properties if no keys specified\n        return Object.values(item as any).some(value => \n          String(value).toLowerCase().includes(searchLower)\n        )\n      }\n      \n      return searchKeys.some(key => {\n        const value = item[key]\n        return String(value).toLowerCase().includes(searchLower)\n      })\n    })\n  }, [items, debouncedSearchTerm, searchKeys])\n\n  // Sort items if sortBy is provided\n  const sortedItems = React.useMemo(() => {\n    if (!sortBy) return filteredItems\n    return [...filteredItems].sort(sortBy)\n  }, [filteredItems, sortBy])\n\n  // Group items if groupBy is provided\n  const groupedItems = React.useMemo(() => {\n    if (!groupBy) return null\n\n    const groups = new Map<string, T[]>()\n    \n    sortedItems.forEach(item => {\n      const group = groupBy(item)\n      if (!groups.has(group)) {\n        groups.set(group, [])\n      }\n      groups.get(group)!.push(item)\n    })\n\n    // BIRHAUS: Auto-expand if fewer than 7 groups\n    if (cognitiveMode !== 'disabled' && groups.size <= 7 && expandedGroups.size === 0) {\n      setExpandedGroups(new Set(groups.keys()))\n    }\n\n    return groups\n  }, [sortedItems, groupBy, cognitiveMode, expandedGroups.size])\n\n  // Get flat list of items for virtualization\n  const flatItems = React.useMemo(() => {\n    if (!groupedItems) return sortedItems\n\n    const items: (T | { isGroup: true; name: string })[] = []\n    \n    groupedItems.forEach((groupItems, groupName) => {\n      items.push({ isGroup: true, name: groupName } as any)\n      if (expandedGroups.has(groupName) || !virtualize) {\n        items.push(...groupItems)\n      }\n    })\n\n    return items\n  }, [sortedItems, groupedItems, expandedGroups, virtualize])\n\n  // Virtual list setup\n  const shouldVirtualizeList = virtualize && flatItems.length > 20\n  const virtualizer = useVirtualizer({\n    count: flatItems.length,\n    getScrollElement: () => listRef.current,\n    estimateSize: () => itemHeight,\n    overscan: 5,\n    enabled: shouldVirtualizeList\n  })\n\n  const handleItemClick = (item: T) => {\n    const key = getItemKey(item)\n\n    if (multiSelect) {\n      const newSelected = new Set(selectedKeys)\n      \n      if (newSelected.has(key)) {\n        newSelected.delete(key)\n      } else {\n        if (maxSelectable && newSelected.size >= maxSelectable) {\n          // BIRHAUS: Show cognitive warning instead of silent failure\n          if (cognitiveMode === 'strict') {\n            console.warn(`BIRHAUS: Maximum ${maxSelectable} selections reached`)\n          }\n          return\n        }\n        newSelected.add(key)\n      }\n\n      setSelectedKeys(newSelected)\n      \n      const selectedItemsList = items.filter(item => \n        newSelected.has(getItemKey(item))\n      )\n      onMultiSelect?.(selectedItemsList)\n    } else {\n      onSelect?.(item)\n    }\n  }\n\n  const handleSelectAll = () => {\n    if (selectedKeys.size === flatItems.filter(item => !(item as any).isGroup).length) {\n      // Deselect all\n      setSelectedKeys(new Set())\n      onMultiSelect?.([])\n    } else {\n      // Select all (up to max)\n      const allKeys = flatItems\n        .filter(item => !(item as any).isGroup)\n        .slice(0, maxSelectable)\n        .map(item => getItemKey(item as T))\n      \n      setSelectedKeys(new Set(allKeys))\n      \n      const selectedItemsList = items.filter(item => \n        allKeys.includes(getItemKey(item))\n      )\n      onMultiSelect?.(selectedItemsList)\n    }\n  }\n\n  const toggleGroup = (groupName: string) => {\n    const newExpanded = new Set(expandedGroups)\n    if (newExpanded.has(groupName)) {\n      newExpanded.delete(groupName)\n    } else {\n      newExpanded.add(groupName)\n    }\n    setExpandedGroups(newExpanded)\n  }\n\n  const renderListItem = (item: T | { isGroup: true; name: string }, virtualRow?: any) => {\n    if ((item as any).isGroup) {\n      const groupName = (item as any).name\n      const isExpanded = expandedGroups.has(groupName)\n      \n      return (\n        <div\n          key={groupName}\n          className=\"sticky top-0 z-10 bg-gray-50 border-b border-gray-200 px-4 py-2\"\n          style={virtualRow ? {\n            height: `${virtualRow.size}px`,\n            transform: `translateY(${virtualRow.start}px)`\n          } : undefined}\n        >\n          <button\n            onClick={() => toggleGroup(groupName)}\n            className=\"flex items-center justify-between w-full text-left\"\n          >\n            <span className=\"font-medium text-gray-700\">{groupName}</span>\n            {isExpanded ? <ChevronUp className=\"w-4 h-4\" /> : <ChevronDown className=\"w-4 h-4\" />}\n          </button>\n        </div>\n      )\n    }\n\n    const key = getItemKey(item as T)\n    const isSelected = selectedKeys.has(key)\n\n    return (\n      <motion.div\n        key={key}\n        initial={{ opacity: 0, y: 10 }}\n        animate={{ opacity: 1, y: 0 }}\n        exit={{ opacity: 0, y: -10 }}\n        className={cn(\n          'px-4 py-3 cursor-pointer transition-colors duration-150',\n          'hover:bg-gray-50 border-b border-gray-100',\n          isSelected && 'bg-blue-50 hover:bg-blue-100',\n          virtualRow && 'absolute top-0 left-0 w-full'\n        )}\n        style={virtualRow ? {\n          height: `${virtualRow.size}px`,\n          transform: `translateY(${virtualRow.start}px)`\n        } : undefined}\n        onClick={() => handleItemClick(item as T)}\n      >\n        <div className=\"flex items-center gap-3\">\n          {multiSelect && (\n            <BirhausCheckbox\n              checked={isSelected}\n              onChange={() => {}}\n              className=\"pointer-events-none\"\n            />\n          )}\n          \n          {renderItem ? (\n            renderItem(item as T, isSelected)\n          ) : (\n            <div className=\"flex-1\">\n              <div className=\"font-medium text-gray-900\">\n                {String((item as any).name || (item as any).title || (item as any).label || key)}\n              </div>\n            </div>\n          )}\n\n          {!multiSelect && isSelected && (\n            <Check className=\"w-5 h-5 text-blue-600 ml-auto\" />\n          )}\n        </div>\n      </motion.div>\n    )\n  }\n\n  const selectedCount = selectedKeys.size\n  const totalCount = flatItems.filter(item => !(item as any).isGroup).length\n  const selectedCountText = selectedCountLabelEs\n    .replace('{selected}', selectedCount.toString())\n    .replace('{total}', totalCount.toString())\n\n  return (\n    <div className={cn('flex flex-col', className)}>\n      {/* BIRHAUS: Cognitive Load Warning */}\n      {shouldShowCognitiveWarning && cognitiveMode !== 'disabled' && (\n        <div className=\"mb-4 p-3 bg-amber-50 border border-amber-200 rounded-lg flex items-start gap-3\">\n          <AlertTriangle className=\"w-5 h-5 text-amber-600 flex-shrink-0 mt-0.5\" />\n          <div className=\"text-sm text-amber-800\">\n            <p className=\"font-medium mb-1\">Advertencia de carga cognitiva</p>\n            <p>\n              Esta lista tiene {items.length} elementos. Para una experiencia óptima:\n              {items.length > 100 && ' • Use la búsqueda para filtrar'}\n              {maxSelectable && maxSelectable > 7 && ' • Limite las selecciones múltiples'}\n              {!virtualize && items.length > 20 && ' • Habilite la virtualización'}\n            </p>\n          </div>\n        </div>\n      )}\n\n      {/* Search Header */}\n      <div className={cn('mb-4 space-y-3', searchClassName)}>\n        <div className=\"relative\">\n          <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 w-5 h-5\" />\n          <input\n            ref={searchInputRef}\n            type=\"text\"\n            value={searchTerm}\n            onChange={(e) => setSearchTerm(e.target.value)}\n            placeholder={searchPlaceholderEs}\n            className={cn(\n              'w-full pl-10 pr-10 py-2.5 rounded-lg border border-gray-200',\n              'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent',\n              'placeholder:text-gray-400 text-sm'\n            )}\n          />\n          {searchTerm && (\n            <button\n              onClick={() => {\n                setSearchTerm('')\n                searchInputRef.current?.focus()\n              }}\n              className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n            >\n              <X className=\"w-4 h-4\" />\n            </button>\n          )}\n        </div>\n\n        {/* Selection Controls */}\n        {multiSelect && (showSelectedCount || showSelectAll) && (\n          <div className=\"flex items-center justify-between text-sm\">\n            {showSelectedCount && (\n              <span className=\"text-gray-600\">\n                {selectedCountText}\n                {maxSelectable && ` (${maxSelectionLabelEs.replace('{max}', maxSelectable.toString())})`}\n              </span>\n            )}\n            \n            {showSelectAll && !maxSelectable && (\n              <button\n                onClick={handleSelectAll}\n                className=\"text-blue-600 hover:text-blue-700 font-medium\"\n              >\n                {selectedKeys.size === totalCount\n                  ? 'Deseleccionar todos'\n                  : selectAllLabelEs}\n              </button>\n            )}\n          </div>\n        )}\n      </div>\n\n      {/* List Container */}\n      <div\n        ref={listRef}\n        className={cn(\n          'rounded-lg border border-gray-200 bg-white overflow-auto',\n          listClassName\n        )}\n        style={{ height }}\n      >\n        {loading ? (\n          <div className=\"flex items-center justify-center h-full\">\n            <Loader2 className=\"w-6 h-6 animate-spin text-gray-400\" />\n          </div>\n        ) : flatItems.length === 0 ? (\n          <BirhausEmptyState\n            icon={<Users className=\"w-12 h-12\" />}\n            titleEs={searchTerm ? emptySearchMessageEs : emptyMessageEs}\n            titleEn={searchTerm ? emptySearchMessageEn : emptyMessageEn}\n            descriptionEs={searchTerm ? 'Intenta con otros términos de búsqueda' : undefined}\n            descriptionEn={searchTerm ? 'Try different search terms' : undefined}\n            className=\"py-12\"\n          />\n        ) : shouldVirtualizeList ? (\n          <div\n            style={{\n              height: `${virtualizer.getTotalSize()}px`,\n              width: '100%',\n              position: 'relative'\n            }}\n          >\n            {virtualizer.getVirtualItems().map(virtualRow => (\n              renderListItem(flatItems[virtualRow.index], virtualRow)\n            ))}\n          </div>\n        ) : (\n          <AnimatePresence mode=\"popLayout\">\n            {flatItems.map(item => renderListItem(item))}\n          </AnimatePresence>\n        )}\n      </div>\n\n      {/* Selected Items Pills (BIRHAUS: Limited to 5 for cognitive load) */}\n      {multiSelect && selectedKeys.size > 0 && (\n        <div className=\"mt-4 flex flex-wrap gap-2\">\n          {Array.from(selectedKeys).slice(0, 5).map(key => {\n            const item = items.find(i => getItemKey(i) === key)\n            if (!item) return null\n            \n            return (\n              <BirhausBadge\n                key={key}\n                variant=\"default\"\n                className=\"pl-2 pr-1 py-1\"\n              >\n                <span className=\"text-xs\">\n                  {String((item as any).name || (item as any).title || (item as any).label || key)}\n                </span>\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation()\n                    handleItemClick(item)\n                  }}\n                  className=\"ml-1 hover:text-red-600\"\n                >\n                  <X className=\"w-3 h-3\" />\n                </button>\n              </BirhausBadge>\n            )\n          })}\n          {selectedKeys.size > 5 && (\n            <BirhausBadge variant=\"default\" className=\"text-xs\">\n              +{selectedKeys.size - 5} más\n            </BirhausBadge>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}","import { \n  BirhausSearchableListValidation, \n  BirhausSearchableListCognitiveWarning,\n  BirhausSearchableListMetrics,\n  BirhausSearchableListProps\n} from './types'\n\n/**\n * BIRHAUS Utility Functions for Searchable List\n * Implements Miller's Law (7±2) and cognitive load principles\n */\n\n/**\n * Validates if the list configuration complies with Miller's Law\n */\nexport function validateMillersLawCompliance<T>(\n  items: T[],\n  maxSelectable?: number,\n  groupCount?: number\n): BirhausSearchableListValidation {\n  const warnings: BirhausSearchableListCognitiveWarning[] = []\n  const recommendations: string[] = []\n  let cognitiveLoadScore = 10 // Start with perfect score\n\n  // Check item count\n  if (items.length > 100) {\n    warnings.push({\n      type: 'high_item_count',\n      message: `Lista con ${items.length} elementos puede causar sobrecarga cognitiva`,\n      recommendation: 'Considere habilitar virtualización y búsqueda'\n    })\n    recommendations.push('Habilitar virtualización automática')\n    recommendations.push('Implementar búsqueda con debounce')\n    cognitiveLoadScore -= 2\n  }\n\n  // Check max selectable (Miller's Law: 7±2)\n  if (maxSelectable && maxSelectable > 9) {\n    warnings.push({\n      type: 'high_selection_limit',\n      message: `Límite de ${maxSelectable} selecciones excede la Ley de Miller`,\n      recommendation: 'Reducir a máximo 7-9 selecciones o implementar agrupación'\n    })\n    recommendations.push('Reducir maxSelectable a 7')\n    recommendations.push('Implementar selección por grupos')\n    cognitiveLoadScore -= 3\n  }\n\n  // Check group count\n  if (groupCount && groupCount > 7) {\n    warnings.push({\n      type: 'high_item_count',\n      message: `${groupCount} grupos exceden el límite cognitivo óptimo`,\n      recommendation: 'Considere sub-agrupación o colapsar grupos por defecto'\n    })\n    recommendations.push('Colapsar grupos inicialmente')\n    recommendations.push('Implementar sub-categorías')\n    cognitiveLoadScore -= 2\n  }\n\n  // Check if virtualization is needed\n  if (items.length > 20) {\n    recommendations.push('Habilitar virtualización para mejor rendimiento')\n    if (items.length > 50) {\n      cognitiveLoadScore -= 1\n    }\n  }\n\n  // Check if search should be auto-enabled\n  if (items.length > 20) {\n    recommendations.push('Habilitar búsqueda automáticamente')\n  }\n\n  const isMillersLawCompliant = warnings.length === 0 && cognitiveLoadScore >= 7\n\n  return {\n    isMillersLawCompliant,\n    cognitiveLoadScore: Math.max(1, cognitiveLoadScore),\n    warnings,\n    recommendations\n  }\n}\n\n/**\n * Calculate cognitive load metrics for the list\n */\nexport function calculateCognitiveMetrics<T>(\n  items: T[],\n  filteredItems: T[],\n  selectedItems: T[],\n  groups: Map<string, T[]> | null,\n  isVirtualized: boolean,\n  searchActive: boolean\n): BirhausSearchableListMetrics {\n  const groupCount = groups?.size || 0\n  \n  // Calculate cognitive score based on multiple factors\n  let cognitiveScore = 10\n  \n  // Penalize for large item counts\n  if (items.length > 100) cognitiveScore -= 2\n  else if (items.length > 50) cognitiveScore -= 1\n  \n  // Penalize for too many selections\n  if (selectedItems.length > 7) cognitiveScore -= 2\n  else if (selectedItems.length > 5) cognitiveScore -= 1\n  \n  // Penalize for too many groups\n  if (groupCount > 7) cognitiveScore -= 2\n  else if (groupCount > 5) cognitiveScore -= 1\n  \n  // Reward for good practices\n  if (isVirtualized && items.length > 20) cognitiveScore += 1\n  if (searchActive && items.length > 20) cognitiveScore += 1\n  if (groupCount > 0 && groupCount <= 7) cognitiveScore += 1\n  \n  return {\n    totalItems: items.length,\n    filteredItems: filteredItems.length,\n    selectedItems: selectedItems.length,\n    groups: groupCount,\n    isVirtualized,\n    searchActive,\n    cognitiveScore: Math.max(1, Math.min(10, cognitiveScore))\n  }\n}\n\n/**\n * Auto-configure list based on data size and BIRHAUS principles\n */\nexport function autoConfigureForCognitiveLoad<T>(\n  items: T[],\n  currentProps: Partial<BirhausSearchableListProps<T>>\n): Partial<BirhausSearchableListProps<T>> {\n  const optimizedProps: Partial<BirhausSearchableListProps<T>> = { ...currentProps }\n  \n  // Auto-enable virtualization for large lists\n  if (items.length > 20 && currentProps.virtualize !== false) {\n    optimizedProps.virtualize = true\n  }\n  \n  // Auto-enable search for medium-large lists\n  if (items.length > 10 && !currentProps.searchKeys) {\n    // Enable search for all fields if no specific keys provided\n    optimizedProps.searchKeys = []\n  }\n  \n  // Set cognitive warnings for large lists\n  if (items.length > 50 || (currentProps.maxSelectable && currentProps.maxSelectable > 7)) {\n    optimizedProps.showCognitiveWarning = true\n  }\n  \n  // Limit max selectable based on Miller's Law\n  if (!currentProps.maxSelectable) {\n    if (items.length > 100) optimizedProps.maxSelectable = 5\n    else if (items.length > 50) optimizedProps.maxSelectable = 7\n    else optimizedProps.maxSelectable = 9\n  }\n  \n  // Auto-configure debounce based on list size\n  if (!currentProps.debounceMs) {\n    if (items.length > 1000) optimizedProps.debounceMs = 500\n    else if (items.length > 100) optimizedProps.debounceMs = 300\n    else optimizedProps.debounceMs = 150\n  }\n  \n  return optimizedProps\n}\n\n/**\n * Filter items based on search term and keys\n */\nexport function filterItems<T>(\n  items: T[],\n  searchTerm: string,\n  searchKeys: (keyof T)[] = []\n): T[] {\n  if (!searchTerm.trim()) return items\n  \n  const searchLower = searchTerm.toLowerCase().trim()\n  \n  return items.filter(item => {\n    if (searchKeys.length === 0) {\n      // Search all string/number properties\n      return Object.values(item as any).some(value => {\n        if (value == null) return false\n        return String(value).toLowerCase().includes(searchLower)\n      })\n    }\n    \n    // Search specific keys only\n    return searchKeys.some(key => {\n      const value = item[key]\n      if (value == null) return false\n      return String(value).toLowerCase().includes(searchLower)\n    })\n  })\n}\n\n/**\n * Group items by a grouping function\n */\nexport function groupItems<T>(\n  items: T[],\n  groupBy: (item: T) => string\n): Map<string, T[]> {\n  const groups = new Map<string, T[]>()\n  \n  items.forEach(item => {\n    const group = groupBy(item)\n    if (!groups.has(group)) {\n      groups.set(group, [])\n    }\n    groups.get(group)!.push(item)\n  })\n  \n  // Sort groups by name for consistency\n  return new Map([...groups.entries()].sort(([a], [b]) => a.localeCompare(b)))\n}\n\n/**\n * Get display name for an item (fallback chain)\n */\nexport function getItemDisplayName<T>(item: T, key: string): string {\n  const itemAny = item as any\n  \n  // Try common display properties in order of preference\n  const candidates = [\n    itemAny.name,\n    itemAny.title, \n    itemAny.label,\n    itemAny.displayName,\n    itemAny.text,\n    key\n  ]\n  \n  return candidates.find(candidate => \n    candidate != null && String(candidate).trim() !== ''\n  ) || key\n}\n\n/**\n * Debounce function for search input\n */\nexport function createDebounce<T extends (...args: any[]) => any>(\n  func: T,\n  delay: number\n): (...args: Parameters<T>) => void {\n  let timeoutId: NodeJS.Timeout\n  \n  return (...args: Parameters<T>) => {\n    clearTimeout(timeoutId)\n    timeoutId = setTimeout(() => func(...args), delay)\n  }\n}\n\n/**\n * BIRHAUS presets for common use cases\n */\nexport const BirhausSearchableListPresets = {\n  students: {\n    searchKeys: ['name', 'email', 'studentId'] as any,\n    maxSelectable: 7,\n    showCognitiveWarning: true,\n    cognitiveMode: 'warning' as const,\n    searchPlaceholderEs: 'Buscar estudiantes...',\n    searchPlaceholderEn: 'Search students...',\n    emptyMessageEs: 'No hay estudiantes',\n    emptyMessageEn: 'No students found',\n    itemHeight: 72\n  },\n  \n  churches: {\n    searchKeys: ['name', 'region', 'pastor'] as any,\n    groupBy: (item: any) => item.region || 'Sin región',\n    maxSelectable: 5,\n    showCognitiveWarning: true,\n    cognitiveMode: 'strict' as const,\n    searchPlaceholderEs: 'Buscar iglesias...',\n    searchPlaceholderEn: 'Search churches...',\n    emptyMessageEs: 'No hay iglesias',\n    emptyMessageEn: 'No churches found',\n    itemHeight: 80\n  },\n  \n  employees: {\n    searchKeys: ['name', 'email', 'department', 'position'] as any,\n    groupBy: (item: any) => item.department || 'Sin departamento',\n    maxSelectable: 6,\n    showCognitiveWarning: true,\n    cognitiveMode: 'warning' as const,\n    searchPlaceholderEs: 'Buscar empleados...',\n    searchPlaceholderEn: 'Search employees...',\n    emptyMessageEs: 'No hay empleados',\n    emptyMessageEn: 'No employees found',\n    itemHeight: 76\n  },\n  \n  transactions: {\n    searchKeys: ['description', 'reference', 'amount'] as any,\n    maxSelectable: 10,\n    virtualize: true,\n    showCognitiveWarning: false,\n    cognitiveMode: 'disabled' as const,\n    searchPlaceholderEs: 'Buscar transacciones...',\n    searchPlaceholderEn: 'Search transactions...',\n    emptyMessageEs: 'No hay transacciones',\n    emptyMessageEn: 'No transactions found',\n    itemHeight: 68\n  },\n  \n  inventory: {\n    searchKeys: ['name', 'sku', 'category', 'supplier'] as any,\n    groupBy: (item: any) => item.category || 'Sin categoría',\n    maxSelectable: 8,\n    showCognitiveWarning: true,\n    cognitiveMode: 'warning' as const,\n    searchPlaceholderEs: 'Buscar productos...',\n    searchPlaceholderEn: 'Search products...',\n    emptyMessageEs: 'No hay productos',\n    emptyMessageEn: 'No products found',\n    itemHeight: 84\n  }\n} as const","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport { LucideIcon, MoreVertical, ChevronRight, Copy, Edit, Trash2, ExternalLink, AlertTriangle } from 'lucide-react'\nimport { motion } from 'framer-motion'\nimport { BirhausButton } from '../BirhausButton'\nimport { BirhausBadge } from '../BirhausBadge'\n\n// BIRHAUS-specific interfaces\ninterface BirhausResourceCardAvatar {\n  src?: string\n  initials?: string\n  icon?: LucideIcon\n  fallbackColor?: 'default' | 'blue' | 'green' | 'purple' | 'orange' | 'pink'\n}\n\ninterface BirhausResourceCardStatus {\n  labelEs: string\n  labelEn: string\n  variant?: 'default' | 'success' | 'warning' | 'error' | 'info'\n}\n\ninterface BirhausResourceCardBadge {\n  labelEs: string\n  labelEn: string\n  variant?: 'default' | 'success' | 'warning' | 'error' | 'info'\n}\n\ninterface BirhausResourceCardInfo {\n  labelEs: string\n  labelEn: string\n  value: string | number\n  icon?: LucideIcon\n  highlight?: boolean\n  format?: 'text' | 'number' | 'currency' | 'date' | 'phone' | 'email'\n}\n\ninterface BirhausResourceCardAction {\n  keyEs: string\n  keyEn: string\n  labelEs: string\n  labelEn: string\n  onClick: () => void\n  icon?: LucideIcon\n  variant?: 'primary' | 'secondary' | 'ghost' | 'destructive'\n  condition?: (data: any) => boolean\n  divider?: boolean\n}\n\nexport interface BirhausResourceCardProps {\n  // Core Properties\n  id: string\n  titleEs: string\n  titleEn: string\n  subtitleEs?: string\n  subtitleEn?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  avatar?: BirhausResourceCardAvatar\n  \n  // Status and Metadata\n  status?: BirhausResourceCardStatus\n  badges?: BirhausResourceCardBadge[]\n  \n  // Information Sections\n  primaryInfo?: BirhausResourceCardInfo[]\n  secondaryInfo?: BirhausResourceCardInfo[]\n  \n  // Actions\n  primaryAction?: BirhausResourceCardAction\n  menuActions?: BirhausResourceCardAction[]\n  onCardClick?: () => void\n  \n  // Visual Options\n  variant?: 'default' | 'elevated' | 'interactive' | 'compact'\n  layout?: 'vertical' | 'horizontal'\n  showAvatar?: boolean\n  \n  // BIRHAUS-specific props\n  maxPrimaryInfo?: number // Miller's Law enforcement\n  maxSecondaryInfo?: number\n  maxMenuActions?: number\n  showCognitiveWarning?: boolean\n  cognitiveMode?: 'strict' | 'warning' | 'disabled'\n  \n  // Styling\n  className?: string\n  \n  // Accessibility\n  'aria-label'?: string\n  'aria-describedby'?: string\n  role?: string\n  \n  // Data context (for conditional actions)\n  data?: any\n}\n\nexport function BirhausResourceCard({\n  id,\n  titleEs,\n  titleEn,\n  subtitleEs,\n  subtitleEn,\n  descriptionEs,\n  descriptionEn,\n  avatar,\n  status,\n  badges = [],\n  primaryInfo = [],\n  secondaryInfo = [],\n  primaryAction,\n  menuActions = [],\n  onCardClick,\n  variant = 'default',\n  layout = 'vertical',\n  showAvatar = true,\n  maxPrimaryInfo = 6,\n  maxSecondaryInfo = 8,\n  maxMenuActions = 5,\n  showCognitiveWarning = false,\n  cognitiveMode = 'warning',\n  className,\n  'aria-label': ariaLabel,\n  'aria-describedby': ariaDescribedBy,\n  role,\n  data,\n  ...props\n}: BirhausResourceCardProps) {\n  const [isHovered, setIsHovered] = React.useState(false)\n  const isClickable = !!onCardClick\n\n  // BIRHAUS: Cognitive load validation\n  const cognitiveWarnings = React.useMemo(() => {\n    if (cognitiveMode === 'disabled') return []\n    \n    const warnings: string[] = []\n    \n    if (primaryInfo.length > maxPrimaryInfo) {\n      warnings.push(`Información primaria excede límite (${primaryInfo.length}/${maxPrimaryInfo})`)\n    }\n    if (secondaryInfo.length > maxSecondaryInfo) {\n      warnings.push(`Información secundaria excede límite (${secondaryInfo.length}/${maxSecondaryInfo})`)\n    }\n    if (menuActions.length > maxMenuActions) {\n      warnings.push(`Acciones de menú exceden límite (${menuActions.length}/${maxMenuActions})`)\n    }\n    if (badges.length > 4) {\n      warnings.push(`Badges exceden límite recomendado (${badges.length}/4)`)\n    }\n    \n    return warnings\n  }, [primaryInfo.length, secondaryInfo.length, menuActions.length, badges.length, maxPrimaryInfo, maxSecondaryInfo, maxMenuActions, cognitiveMode])\n\n  // BIRHAUS: Console warnings in strict mode\n  React.useEffect(() => {\n    if (cognitiveMode === 'strict' && cognitiveWarnings.length > 0) {\n      console.warn('BIRHAUS ResourceCard: Cognitive load issues detected:', cognitiveWarnings)\n    }\n  }, [cognitiveWarnings, cognitiveMode])\n\n  const shouldShowCognitiveWarning = showCognitiveWarning || (cognitiveWarnings.length > 0 && cognitiveMode !== 'disabled')\n  \n  const variantClasses = {\n    default: 'bg-white border-gray-200',\n    elevated: 'bg-white border-gray-200 shadow-md',\n    interactive: 'bg-white border-gray-200 hover:shadow-lg transition-shadow cursor-pointer',\n    compact: 'bg-gray-50 border-gray-100'\n  }\n\n  const avatarColors = {\n    default: 'from-gray-600 to-gray-700',\n    blue: 'from-blue-600 to-blue-700',\n    green: 'from-green-600 to-green-700',\n    purple: 'from-purple-600 to-purple-700',\n    orange: 'from-orange-600 to-orange-700',\n    pink: 'from-pink-600 to-pink-700'\n  }\n  \n  const formatValue = (value: string | number, format?: BirhausResourceCardInfo['format']) => {\n    if (!format || format === 'text') return value\n    \n    switch (format) {\n      case 'number':\n        return typeof value === 'number' ? value.toLocaleString('es-PY') : value\n      case 'currency':\n        return typeof value === 'number' \n          ? new Intl.NumberFormat('es-PY', { style: 'currency', currency: 'PYG' }).format(value)\n          : value\n      case 'date':\n        return typeof value === 'string' \n          ? new Date(value).toLocaleDateString('es-PY')\n          : value\n      case 'phone':\n        return typeof value === 'string' && value.startsWith('+') ? value : `+595 ${value}`\n      case 'email':\n        return value\n      default:\n        return value\n    }\n  }\n  \n  const renderAvatar = () => {\n    if (!showAvatar || !avatar) return null\n    \n    const AvatarIcon = avatar.icon\n    const colorClass = avatarColors[avatar.fallbackColor || 'default']\n    \n    return (\n      <div className={cn(\n        'flex-shrink-0 rounded-full flex items-center justify-center text-white',\n        `bg-gradient-to-br ${colorClass}`,\n        layout === 'horizontal' ? 'w-16 h-16' : 'w-12 h-12'\n      )}>\n        {avatar.src ? (\n          <img\n            src={avatar.src}\n            alt={titleEs}\n            className=\"w-full h-full rounded-full object-cover\"\n          />\n        ) : AvatarIcon ? (\n          <AvatarIcon className={layout === 'horizontal' ? 'w-8 h-8' : 'w-6 h-6'} />\n        ) : (\n          <span className={cn(\n            'font-semibold',\n            layout === 'horizontal' ? 'text-lg' : 'text-sm'\n          )}>\n            {avatar.initials || titleEs.split(' ').map(n => n[0]).join('').slice(0, 2)}\n          </span>\n        )}\n      </div>\n    )\n  }\n  \n  const renderHeader = () => (\n    <div className={cn(\n      'flex items-start gap-4',\n      layout === 'horizontal' && 'flex-1'\n    )}>\n      {renderAvatar()}\n      \n      <div className=\"flex-1 min-w-0\">\n        <div className=\"flex items-start justify-between gap-2\">\n          <div className=\"flex-1 min-w-0\">\n            <h3 className={cn(\n              'font-semibold text-gray-900 truncate',\n              variant === 'compact' ? 'text-sm' : 'text-base'\n            )}>\n              {titleEs}\n            </h3>\n            {subtitleEs && (\n              <p className=\"text-sm text-gray-600 truncate mt-0.5\">{subtitleEs}</p>\n            )}\n          </div>\n          \n          {/* Status Badge */}\n          {status && (\n            <BirhausBadge \n              variant={status.variant || 'default'}\n              className=\"flex-shrink-0\"\n            >\n              {status.labelEs}\n            </BirhausBadge>\n          )}\n        </div>\n        \n        {/* Description */}\n        {descriptionEs && layout === 'vertical' && (\n          <p className=\"text-sm text-gray-600 mt-2 line-clamp-2\">{descriptionEs}</p>\n        )}\n        \n        {/* Additional Badges (BIRHAUS: Limited to 4) */}\n        {badges.length > 0 && (\n          <div className=\"flex flex-wrap gap-2 mt-2\">\n            {badges.slice(0, 4).map((badge, index) => (\n              <BirhausBadge \n                key={index}\n                variant={badge.variant || 'default'}\n                className=\"text-xs\"\n              >\n                {badge.labelEs}\n              </BirhausBadge>\n            ))}\n            {badges.length > 4 && (\n              <BirhausBadge variant=\"default\" className=\"text-xs\">\n                +{badges.length - 4} más\n              </BirhausBadge>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  )\n  \n  const renderInfo = () => {\n    const displayPrimaryInfo = primaryInfo.slice(0, maxPrimaryInfo)\n    const displaySecondaryInfo = secondaryInfo.slice(0, maxSecondaryInfo)\n    \n    if (displayPrimaryInfo.length === 0 && displaySecondaryInfo.length === 0) return null\n    \n    return (\n      <div className={cn(\n        'space-y-3',\n        layout === 'horizontal' && 'flex gap-6 space-y-0'\n      )}>\n        {/* Primary Info */}\n        {displayPrimaryInfo.length > 0 && (\n          <div className={cn(\n            'grid gap-2',\n            displayPrimaryInfo.length > 2 ? 'grid-cols-2' : 'grid-cols-1',\n            layout === 'horizontal' && 'flex gap-4 flex-1'\n          )}>\n            {displayPrimaryInfo.map((info, index) => {\n              const InfoIcon = info.icon\n              return (\n                <div \n                  key={index}\n                  className={cn(\n                    'flex items-center gap-2',\n                    info.highlight && 'text-blue-600 font-medium'\n                  )}\n                >\n                  {InfoIcon && <InfoIcon className=\"w-4 h-4 text-gray-400\" />}\n                  <div className=\"text-sm\">\n                    <span className=\"text-gray-600\">{info.labelEs}:</span>\n                    <span className=\"ml-1 font-medium\">\n                      {formatValue(info.value, info.format)}\n                    </span>\n                  </div>\n                </div>\n              )\n            })}\n          </div>\n        )}\n        \n        {/* Secondary Info */}\n        {displaySecondaryInfo.length > 0 && (\n          <div className={cn(\n            'pt-3 border-t border-gray-100',\n            layout === 'horizontal' && 'border-t-0 border-l pl-6'\n          )}>\n            <div className=\"grid grid-cols-1 gap-1.5\">\n              {displaySecondaryInfo.map((info, index) => {\n                const InfoIcon = info.icon\n                return (\n                  <div key={index} className=\"flex items-center gap-2 text-sm\">\n                    {InfoIcon && <InfoIcon className=\"w-3.5 h-3.5 text-gray-400\" />}\n                    <span className=\"text-gray-500\">{info.labelEs}:</span>\n                    <span className=\"text-gray-700\">{formatValue(info.value, info.format)}</span>\n                  </div>\n                )\n              })}\n            </div>\n          </div>\n        )}\n        \n        {/* Truncation indicators */}\n        {primaryInfo.length > maxPrimaryInfo && (\n          <div className=\"text-xs text-gray-500 italic\">\n            +{primaryInfo.length - maxPrimaryInfo} campos adicionales\n          </div>\n        )}\n        {secondaryInfo.length > maxSecondaryInfo && (\n          <div className=\"text-xs text-gray-500 italic\">\n            +{secondaryInfo.length - maxSecondaryInfo} detalles adicionales\n          </div>\n        )}\n      </div>\n    )\n  }\n  \n  const renderActions = () => {\n    const displayMenuActions = menuActions.slice(0, maxMenuActions)\n    \n    if (!primaryAction && displayMenuActions.length === 0) return null\n    \n    return (\n      <div className={cn(\n        'flex items-center gap-2',\n        layout === 'horizontal' ? 'ml-auto pl-4' : 'pt-4 border-t border-gray-100'\n      )}>\n        {primaryAction && (\n          <BirhausButton\n            onClick={(e) => {\n              e.stopPropagation()\n              primaryAction.onClick()\n            }}\n            variant={primaryAction.variant || 'primary'}\n            size=\"sm\"\n            className=\"flex-1\"\n          >\n            {primaryAction.icon && <primaryAction.icon className=\"w-4 h-4 mr-1.5\" />}\n            {primaryAction.labelEs}\n          </BirhausButton>\n        )}\n        \n        {displayMenuActions.length > 0 && (\n          <div className=\"relative group\">\n            <button\n              onClick={(e) => e.stopPropagation()}\n              className={cn(\n                'p-2 rounded-lg transition-colors',\n                'hover:bg-gray-100 text-gray-600 hover:text-gray-900'\n              )}\n              aria-label=\"Más acciones\"\n            >\n              <MoreVertical className=\"w-4 h-4\" />\n            </button>\n            \n            {/* Simple dropdown menu - in real implementation would use a proper dropdown */}\n            <div className=\"absolute right-0 top-full mt-1 w-48 bg-white rounded-lg shadow-lg border border-gray-200 z-10 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all\">\n              {displayMenuActions.map((action, index) => {\n                const ActionIcon = action.icon\n                const shouldShow = !action.condition || action.condition(data)\n                \n                if (!shouldShow) return null\n                \n                return (\n                  <React.Fragment key={index}>\n                    {action.divider && index > 0 && <div className=\"border-t border-gray-100\" />}\n                    <button\n                      onClick={(e) => {\n                        e.stopPropagation()\n                        action.onClick()\n                      }}\n                      className={cn(\n                        'w-full text-left px-3 py-2 text-sm hover:bg-gray-50 first:rounded-t-lg last:rounded-b-lg',\n                        action.variant === 'destructive' && 'text-red-600 hover:text-red-700 hover:bg-red-50'\n                      )}\n                    >\n                      <div className=\"flex items-center gap-2\">\n                        {ActionIcon && <ActionIcon className=\"w-4 h-4\" />}\n                        {action.labelEs}\n                      </div>\n                    </button>\n                  </React.Fragment>\n                )\n              })}\n              \n              {menuActions.length > maxMenuActions && (\n                <div className=\"px-3 py-2 text-xs text-gray-500 border-t border-gray-100\">\n                  +{menuActions.length - maxMenuActions} acciones más\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n    )\n  }\n\n  const cardContent = (\n    <>\n      {/* BIRHAUS: Cognitive Load Warning */}\n      {shouldShowCognitiveWarning && cognitiveMode !== 'disabled' && (\n        <div className=\"mb-4 p-3 bg-amber-50 border border-amber-200 rounded-lg flex items-start gap-2\">\n          <AlertTriangle className=\"w-4 h-4 text-amber-600 flex-shrink-0 mt-0.5\" />\n          <div className=\"text-xs text-amber-800\">\n            <p className=\"font-medium mb-1\">Advertencia cognitiva</p>\n            <ul className=\"space-y-1\">\n              {cognitiveWarnings.map((warning, index) => (\n                <li key={index}>• {warning}</li>\n              ))}\n            </ul>\n          </div>\n        </div>\n      )}\n\n      {layout === 'vertical' ? (\n        <div className=\"space-y-4\">\n          {renderHeader()}\n          {renderInfo()}\n          {renderActions()}\n        </div>\n      ) : (\n        <div className=\"flex items-start gap-4\">\n          {renderHeader()}\n          {renderInfo()}\n          {renderActions()}\n        </div>\n      )}\n    </>\n  )\n  \n  const cardClasses = cn(\n    'rounded-xl border p-6 transition-all duration-200',\n    variantClasses[variant],\n    isClickable && 'cursor-pointer',\n    isHovered && variant === 'interactive' && 'scale-[1.02]',\n    className\n  )\n  \n  if (isClickable) {\n    return (\n      <motion.div\n        whileHover={{ y: variant === 'interactive' ? -2 : 0 }}\n        onHoverStart={() => setIsHovered(true)}\n        onHoverEnd={() => setIsHovered(false)}\n        onClick={onCardClick}\n        className={cardClasses}\n        aria-label={ariaLabel || `Tarjeta de ${titleEs}`}\n        aria-describedby={ariaDescribedBy}\n        role={role || 'button'}\n        {...props}\n      >\n        {cardContent}\n        {variant === 'interactive' && (\n          <ChevronRight className={cn(\n            'absolute right-6 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400',\n            'transition-transform duration-200',\n            isHovered && 'translate-x-1'\n          )} />\n        )}\n      </motion.div>\n    )\n  }\n  \n  return (\n    <div \n      className={cardClasses}\n      aria-label={ariaLabel || `Información de ${titleEs}`}\n      aria-describedby={ariaDescribedBy}\n      role={role}\n      {...props}\n    >\n      {cardContent}\n    </div>\n  )\n}\n\n// Pre-configured templates for common entity types with BIRHAUS principles\nexport const BirhausResourceCardTemplates = {\n  Student: (props: Partial<BirhausResourceCardProps>) => ({\n    showAvatar: true,\n    layout: 'vertical' as const,\n    variant: 'elevated' as const,\n    maxPrimaryInfo: 4, // Miller's Law compliance\n    maxSecondaryInfo: 6,\n    maxMenuActions: 4,\n    cognitiveMode: 'warning' as const,\n    menuActions: [\n      { \n        keyEs: 'profile', keyEn: 'profile',\n        labelEs: 'Ver perfil', labelEn: 'View profile',\n        icon: ExternalLink, onClick: () => {} \n      },\n      { \n        keyEs: 'edit', keyEn: 'edit',\n        labelEs: 'Editar', labelEn: 'Edit',\n        icon: Edit, onClick: () => {} \n      },\n      { \n        keyEs: 'copy', keyEn: 'copy',\n        labelEs: 'Copiar ID', labelEn: 'Copy ID',\n        icon: Copy, onClick: () => {} \n      },\n      { \n        keyEs: 'delete', keyEn: 'delete',\n        labelEs: 'Eliminar', labelEn: 'Delete',\n        icon: Trash2, variant: 'destructive' as const, divider: true, onClick: () => {} \n      }\n    ],\n    ...props\n  }),\n  \n  Employee: (props: Partial<BirhausResourceCardProps>) => ({\n    showAvatar: true,\n    layout: 'horizontal' as const,\n    variant: 'default' as const,\n    maxPrimaryInfo: 5,\n    maxSecondaryInfo: 7,\n    maxMenuActions: 3,\n    cognitiveMode: 'warning' as const,\n    menuActions: [\n      { \n        keyEs: 'schedule', keyEn: 'schedule',\n        labelEs: 'Ver horario', labelEn: 'View schedule',\n        icon: ExternalLink, onClick: () => {} \n      },\n      { \n        keyEs: 'edit', keyEn: 'edit',\n        labelEs: 'Editar', labelEn: 'Edit',\n        icon: Edit, onClick: () => {} \n      },\n      { \n        keyEs: 'access', keyEn: 'access',\n        labelEs: 'Gestionar acceso', labelEn: 'Manage access',\n        icon: ExternalLink, onClick: () => {} \n      }\n    ],\n    ...props\n  }),\n  \n  Course: (props: Partial<BirhausResourceCardProps>) => ({\n    showAvatar: false,\n    layout: 'vertical' as const,\n    variant: 'interactive' as const,\n    maxPrimaryInfo: 5,\n    maxSecondaryInfo: 5,\n    maxMenuActions: 3,\n    cognitiveMode: 'warning' as const,\n    primaryAction: {\n      keyEs: 'details', keyEn: 'details',\n      labelEs: 'Ver detalles', labelEn: 'View details',\n      onClick: () => {},\n      variant: 'secondary' as const\n    },\n    ...props\n  }),\n  \n  Contract: (props: Partial<BirhausResourceCardProps>) => ({\n    showAvatar: false,\n    layout: 'horizontal' as const,\n    variant: 'compact' as const,\n    maxPrimaryInfo: 4,\n    maxSecondaryInfo: 4,\n    maxMenuActions: 2,\n    cognitiveMode: 'strict' as const,\n    menuActions: [\n      { \n        keyEs: 'payments', keyEn: 'payments',\n        labelEs: 'Ver pagos', labelEn: 'View payments',\n        icon: ExternalLink, onClick: () => {} \n      },\n      { \n        keyEs: 'print', keyEn: 'print',\n        labelEs: 'Imprimir', labelEn: 'Print',\n        icon: ExternalLink, onClick: () => {} \n      }\n    ],\n    ...props\n  })\n} as const","'use client'\n\nimport React, { useState, useCallback, useMemo, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport {\n  X,\n  CheckSquare,\n  Square,\n  AlertTriangle,\n  Loader2,\n  Undo2,\n  Check\n} from 'lucide-react'\nimport { cn } from '../../utils/cn'\nimport { BirhausButton } from '../BirhausButton'\nimport type { \n  BirhausBulkActionBarProps,\n  BirhausBulkAction,\n  BulkActionState,\n  ProgressInfo,\n  UndoAction\n} from './types'\n\n/**\n * BirhausBulkActionBar - Advanced bulk action component with BIRHAUS principles\n * \n * Features:\n * - Spanish-first labels with English fallbacks\n * - Miller's Law compliance (max 4 bulk actions per bar)\n * - 4-3-1 cognitive rule (4 nav items max, 3 contextual, 1 primary)\n * - Undo-over-confirm patterns (no confirmation dialogs)\n * - Progress tracking for batch operations\n * - Accessibility-first design (WCAG AA+)\n */\nexport function BirhausBulkActionBar<T = any>({\n  // Selection state\n  selectedCount = 0,\n  totalCount,\n  selectedItems = [],\n  isAllSelected = false,\n  \n  // Actions\n  actions = [],\n  onSelectAll,\n  onClearSelection,\n  \n  // Positioning\n  position = 'bottom',\n  sticky = false,\n  \n  // Progress tracking\n  showProgress = false,\n  progressInfo,\n  onCancelOperation,\n  \n  // Undo system\n  undoActions = [],\n  onUndo,\n  \n  // Localization\n  locale = 'es',\n  \n  // Styling\n  className,\n  \n  // Animation\n  disableAnimation = false,\n  \n  // Accessibility\n  ariaLabel,\n  ariaLiveRegion = 'polite',\n  \n  // Custom content\n  customContent,\n  \n  // Validation\n  onValidateAction,\n  \n  // Event handlers\n  onActionStart,\n  onActionComplete,\n  onActionError\n}: BirhausBulkActionBarProps<T>) {\n  \n  const [actionState, setActionState] = useState<BulkActionState>('idle')\n  const [executingAction, setExecutingAction] = useState<string | null>(null)\n  const [recentUndo, setRecentUndo] = useState<UndoAction | null>(null)\n  const [mounted, setMounted] = useState(false)\n  \n  // BIRHAUS Principle: Miller's Law validation\n  const validatedActions = useMemo(() => {\n    if (actions.length > 4) {\n      console.warn('BIRHAUS Warning: BulkActionBar has more than 4 actions, violating Miller\\'s Law. Consider grouping actions or using progressive disclosure.')\n    }\n    return actions.slice(0, 4) // Enforce hard limit\n  }, [actions])\n  \n  // Mount detection for portal rendering\n  useEffect(() => {\n    setMounted(true)\n    return () => setMounted(false)\n  }, [])\n  \n  // Get localized text\n  const getLabel = useCallback((es: string, en?: string) => {\n    return locale === 'es' ? es : (en || es)\n  }, [locale])\n  \n  // Handle action execution with BIRHAUS undo patterns\n  const handleAction = useCallback(async (action: BirhausBulkAction<T>) => {\n    if (action.disabled || actionState === 'executing') return\n    \n    // BIRHAUS Principle: Validation before execution\n    if (onValidateAction) {\n      const validation = await onValidateAction(action, selectedItems)\n      if (!validation.valid) {\n        console.warn('Action validation failed:', validation.message)\n        return\n      }\n    }\n    \n    setActionState('executing')\n    setExecutingAction(action.id)\n    onActionStart?.(action, selectedItems)\n    \n    try {\n      // Execute the action\n      const result = await action.onClick(selectedItems)\n      \n      // BIRHAUS Principle: Undo-over-confirm - create undo action if supported\n      if (action.undoable && result?.undoAction) {\n        setRecentUndo({\n          id: `undo-${action.id}-${Date.now()}`,\n          labelEs: `Deshacer ${action.labelEs.toLowerCase()}`,\n          labelEn: `Undo ${(action.labelEn || action.labelEs).toLowerCase()}`,\n          action: result.undoAction,\n          timeout: action.undoTimeout || 10000\n        })\n        \n        // Auto-hide undo after timeout\n        setTimeout(() => {\n          setRecentUndo(null)\n        }, action.undoTimeout || 10000)\n      }\n      \n      setActionState('completed')\n      onActionComplete?.(action, selectedItems, result)\n      \n      // Auto-reset state after brief success indication\n      setTimeout(() => {\n        if (action.clearSelectionOnComplete !== false) {\n          onClearSelection?.()\n        }\n        setActionState('idle')\n        setExecutingAction(null)\n      }, 1000)\n      \n    } catch (error) {\n      console.error('Bulk action error:', error)\n      setActionState('error')\n      onActionError?.(action, selectedItems, error as Error)\n      \n      // Reset state after error display\n      setTimeout(() => {\n        setActionState('idle')\n        setExecutingAction(null)\n      }, 3000)\n    }\n  }, [actionState, onValidateAction, selectedItems, onActionStart, onActionComplete, onActionError, onClearSelection])\n  \n  // Handle undo action\n  const handleUndo = useCallback(async () => {\n    if (!recentUndo || !onUndo) return\n    \n    try {\n      await onUndo(recentUndo)\n      setRecentUndo(null)\n    } catch (error) {\n      console.error('Undo action error:', error)\n    }\n  }, [recentUndo, onUndo])\n  \n  // Render individual action button\n  const renderActionButton = (action: BirhausBulkAction<T>) => {\n    const isExecuting = executingAction === action.id\n    const isCompleted = actionState === 'completed' && executingAction === action.id\n    const isError = actionState === 'error' && executingAction === action.id\n    \n    return (\n      <BirhausButton\n        key={action.id}\n        variant={action.variant || 'secondary'}\n        size=\"sm\"\n        onClick={() => handleAction(action)}\n        disabled={\n          action.disabled || \n          (actionState === 'executing' && !isExecuting) ||\n          selectedCount === 0\n        }\n        className={cn(\n          \"transition-all duration-200\",\n          isCompleted && \"bg-green-50 border-green-200 text-green-700\",\n          isError && \"bg-red-50 border-red-200 text-red-700\"\n        )}\n        data-birhaus-bulk-action={action.id}\n      >\n        {isExecuting && <Loader2 className=\"w-4 h-4 mr-1.5 animate-spin\" />}\n        {isCompleted && <Check className=\"w-4 h-4 mr-1.5\" />}\n        {isError && <AlertTriangle className=\"w-4 h-4 mr-1.5\" />}\n        {!isExecuting && !isCompleted && !isError && action.icon && (\n          <action.icon className=\"w-4 h-4 mr-1.5\" />\n        )}\n        {getLabel(action.labelEs, action.labelEn)}\n      </BirhausButton>\n    )\n  }\n  \n  // Don't render if no items selected (unless showing progress)\n  if (!mounted || (selectedCount === 0 && !showProgress && !recentUndo)) return null\n  \n  const content = (\n    <div\n      role=\"region\"\n      aria-label={ariaLabel || getLabel(\n        `Acciones masivas: ${selectedCount} elementos seleccionados`,\n        `Bulk actions: ${selectedCount} items selected`\n      )}\n      aria-live={ariaLiveRegion}\n    >\n      <AnimatePresence>\n        {(selectedCount > 0 || showProgress || recentUndo) && (\n          <motion.div\n            initial={disableAnimation ? {} : { \n              y: position === 'bottom' ? 100 : -100, \n              opacity: 0 \n            }}\n            animate={{ y: 0, opacity: 1 }}\n            exit={disableAnimation ? {} : { \n              y: position === 'bottom' ? 100 : -100, \n              opacity: 0 \n            }}\n            transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n            className={cn(\n              \"fixed left-0 right-0 z-50 px-4\",\n              position === 'bottom' ? 'bottom-4' : 'top-20',\n              sticky && \"sticky\",\n              className\n            )}\n          >\n            <div className=\"max-w-6xl mx-auto\">\n              <div className=\"bg-white rounded-xl shadow-lg border border-gray-200 backdrop-blur-sm bg-white/95\">\n                {/* Progress bar if showing progress */}\n                {showProgress && progressInfo && (\n                  <div className=\"px-6 pt-4\">\n                    <div className=\"flex items-center justify-between mb-2\">\n                      <span className=\"text-sm text-gray-600\">\n                        {getLabel(\n                          `Procesando ${progressInfo.current} de ${progressInfo.total}...`,\n                          `Processing ${progressInfo.current} of ${progressInfo.total}...`\n                        )}\n                      </span>\n                      {onCancelOperation && (\n                        <BirhausButton\n                          variant=\"ghost\"\n                          size=\"xs\"\n                          onClick={onCancelOperation}\n                        >\n                          {getLabel('Cancelar', 'Cancel')}\n                        </BirhausButton>\n                      )}\n                    </div>\n                    <div className=\"w-full bg-gray-200 rounded-full h-2\">\n                      <div \n                        className=\"bg-blue-600 h-2 rounded-full transition-all duration-300\"\n                        style={{ width: `${(progressInfo.current / progressInfo.total) * 100}%` }}\n                      />\n                    </div>\n                  </div>\n                )}\n                \n                <div className=\"flex items-center justify-between p-4\">\n                  {/* Left side - Selection info */}\n                  <div className=\"flex items-center gap-4\">\n                    {/* Close button */}\n                    <button\n                      onClick={onClearSelection}\n                      className=\"p-1.5 hover:bg-gray-100 rounded-lg transition-colors\"\n                      aria-label={getLabel('Limpiar selección', 'Clear selection')}\n                      disabled={actionState === 'executing'}\n                    >\n                      <X className=\"w-5 h-5 text-gray-500\" />\n                    </button>\n\n                    {/* Selection toggle */}\n                    <div className=\"flex items-center gap-3\">\n                      <button\n                        onClick={isAllSelected ? onClearSelection : onSelectAll}\n                        className=\"flex items-center gap-2 text-sm font-medium text-gray-700 hover:text-gray-900 transition-colors\"\n                        disabled={actionState === 'executing'}\n                      >\n                        {isAllSelected ? (\n                          <CheckSquare className=\"w-4 h-4 text-blue-600\" />\n                        ) : (\n                          <Square className=\"w-4 h-4\" />\n                        )}\n                        <span>\n                          {selectedCount} {getLabel(\n                            selectedCount === 1 ? 'seleccionado' : 'seleccionados',\n                            selectedCount === 1 ? 'selected' : 'selected'\n                          )}\n                          {totalCount && ` ${getLabel('de', 'of')} ${totalCount}`}\n                        </span>\n                      </button>\n\n                      {/* Select all button */}\n                      {totalCount && selectedCount < totalCount && onSelectAll && (\n                        <button\n                          onClick={onSelectAll}\n                          className=\"text-sm text-blue-600 hover:text-blue-700 font-medium transition-colors\"\n                          disabled={actionState === 'executing'}\n                        >\n                          {getLabel('Seleccionar todos', 'Select all')}\n                        </button>\n                      )}\n                    </div>\n                  </div>\n\n                  {/* Right side - Actions */}\n                  <div className=\"flex items-center gap-2\">\n                    {customContent}\n                    \n                    {/* Undo button */}\n                    {recentUndo && (\n                      <BirhausButton\n                        variant=\"secondary\"\n                        size=\"sm\"\n                        onClick={handleUndo}\n                        className=\"bg-yellow-50 border-yellow-200 text-yellow-800 hover:bg-yellow-100\"\n                      >\n                        <Undo2 className=\"w-4 h-4 mr-1.5\" />\n                        {getLabel(recentUndo.labelEs, recentUndo.labelEn)}\n                      </BirhausButton>\n                    )}\n                    \n                    {/* Bulk action buttons */}\n                    {validatedActions.map(renderActionButton)}\n                  </div>\n                </div>\n              </div>\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  )\n\n  // Portal render for better z-index management\n  if (typeof window !== 'undefined' && document.body && !sticky) {\n    return createPortal(content, document.body)\n  }\n\n  return content\n}\n\nexport default BirhausBulkActionBar","'use client'\n\nimport { useState, useCallback, useMemo, useRef } from 'react'\nimport type { \n  UseBulkSelectionReturn, \n  UseBulkSelectionOptions \n} from './types'\nimport { safeAccess } from '../../utils/security'\n\n/**\n * useBulkSelection - Hook for managing bulk selection with BIRHAUS principles\n * \n * Features:\n * - Miller's Law compliance (max selection limits)\n * - Undo/redo support for selection operations\n * - Range selection for efficiency\n * - Filter-based selection\n * - Persistent selection across data changes\n */\n/* eslint-disable @typescript-eslint/no-explicit-any, max-lines-per-function */\n// Bulk selection requires flexible data handling and comprehensive selection logic\nexport function useBulkSelection<T extends Record<string, any>>(\n  options: UseBulkSelectionOptions = {}\n): UseBulkSelectionReturn<T> {\n  const {\n    maxSelection = Number.MAX_SAFE_INTEGER,\n    persistSelection: _persistSelection = false,\n    keyField = 'id'\n  } = options\n\n  const [selectedItems, setSelectedItems] = useState<T[]>([])\n  \n  // BIRHAUS Principle: Undo/redo support for selection operations\n  const selectionHistory = useRef<T[][]>([])\n  const historyIndex = useRef(-1)\n  \n  // Helper function to add to history\n  const addToHistory = useCallback((newSelection: T[]) => {\n    // Remove any future history if we're not at the end\n    selectionHistory.current = selectionHistory.current.slice(0, historyIndex.current + 1)\n    \n    // Add new state\n    selectionHistory.current.push([...newSelection])\n    historyIndex.current = selectionHistory.current.length - 1\n    \n    // Limit history size for performance (Miller's Law: keep it manageable)\n    if (selectionHistory.current.length > 50) {\n      selectionHistory.current = selectionHistory.current.slice(-25)\n      historyIndex.current = selectionHistory.current.length - 1\n    }\n  }, [])\n\n  // Update selection with history tracking\n  const updateSelection = useCallback((newSelection: T[]) => {\n    const currentSelectionJson = JSON.stringify(selectedItems.map(item => safeAccess(item, String(keyField), '')).sort())\n    const newSelectionJson = JSON.stringify(newSelection.map(item => safeAccess(item, String(keyField), '')).sort())\n    \n    // Only add to history if selection actually changed\n    if (currentSelectionJson !== newSelectionJson) {\n      addToHistory(selectedItems) // Save current state before changing\n      setSelectedItems(newSelection)\n    }\n  }, [selectedItems, keyField, addToHistory])\n\n  const selectItem = useCallback((item: T) => {\n    setSelectedItems(prev => {\n      const exists = prev.some(i => safeAccess(i, String(keyField), '') === safeAccess(item, String(keyField), ''))\n      if (exists) return prev\n      \n      // BIRHAUS Principle: Miller's Law - limit selection size for cognitive load\n      if (prev.length >= maxSelection) {\n        console.warn(`BIRHAUS Warning: Maximum selection limit (${maxSelection}) reached. Consider pagination or filtering.`)\n        return prev\n      }\n      \n      const newSelection = [...prev, item]\n      addToHistory(prev)\n      return newSelection\n    })\n  }, [maxSelection, keyField, addToHistory])\n\n  const deselectItem = useCallback((itemId: string | number) => {\n    setSelectedItems(prev => {\n      const newSelection = prev.filter(item => safeAccess(item, String(keyField), '') !== itemId)\n      if (newSelection.length !== prev.length) {\n        addToHistory(prev)\n      }\n      return newSelection\n    })\n  }, [keyField, addToHistory])\n\n  const selectAll = useCallback((items: T[]) => {\n    // BIRHAUS Principle: Miller's Law compliance\n    const limitedItems = items.slice(0, maxSelection)\n    if (items.length > maxSelection) {\n      console.warn(`BIRHAUS Warning: Selecting only first ${maxSelection} items due to cognitive load limits.`)\n    }\n    \n    updateSelection(limitedItems)\n  }, [maxSelection, updateSelection])\n\n  const clearSelection = useCallback(() => {\n    updateSelection([])\n  }, [updateSelection])\n\n  const isSelected = useCallback((itemId: string | number) => {\n    return selectedItems.some(item => safeAccess(item, String(keyField), '') === itemId)\n  }, [selectedItems, keyField])\n\n  const toggleSelection = useCallback((item: T) => {\n    const itemId = safeAccess(item, String(keyField), '')\n    if (isSelected(itemId)) {\n      deselectItem(itemId)\n    } else {\n      selectItem(item)\n    }\n  }, [isSelected, selectItem, deselectItem, keyField])\n\n  const isAllSelected = useCallback((totalItems: T[]) => {\n    if (totalItems.length === 0) return false\n    \n    const effectiveTotal = Math.min(totalItems.length, maxSelection)\n    return selectedItems.length === effectiveTotal && \n           totalItems.slice(0, effectiveTotal).every(item => isSelected(safeAccess(item, String(keyField), '')))\n  }, [selectedItems.length, maxSelection, isSelected, keyField])\n\n  const getSelectionStats = useCallback(() => {\n    return {\n      selected: selectedItems.length,\n      total: selectedItems.length, // This would be passed from parent component\n      percentage: 0, // Would be calculated by parent\n      isMaxReached: selectedItems.length >= maxSelection\n    }\n  }, [selectedItems.length, maxSelection])\n\n  // BIRHAUS Enhancement: Range selection for efficiency\n  const selectRange = useCallback((startIndex: number, endIndex: number, items: T[]) => {\n    const start = Math.min(startIndex, endIndex)\n    const end = Math.max(startIndex, endIndex)\n    const rangeItems = items.slice(start, end + 1)\n    \n    // Merge with existing selection (avoid duplicates)\n    const existingIds = new Set(selectedItems.map(item => safeAccess(item, String(keyField), '')))\n    const newItems = rangeItems.filter(item => !existingIds.has(safeAccess(item, String(keyField), '')))\n    \n    const combined = [...selectedItems, ...newItems]\n    const limited = combined.slice(0, maxSelection)\n    \n    updateSelection(limited)\n  }, [selectedItems, keyField, maxSelection, updateSelection])\n\n  // BIRHAUS Enhancement: Filter-based selection\n  const selectByFilter = useCallback((predicate: (item: T) => boolean, items: T[]) => {\n    const filteredItems = items.filter(predicate)\n    const existingIds = new Set(selectedItems.map(item => safeAccess(item, String(keyField), '')))\n    const newItems = filteredItems.filter(item => !existingIds.has(safeAccess(item, String(keyField), '')))\n    \n    const combined = [...selectedItems, ...newItems]\n    const limited = combined.slice(0, maxSelection)\n    \n    updateSelection(limited)\n  }, [selectedItems, keyField, maxSelection, updateSelection])\n\n  // BIRHAUS Principle: Undo/redo support\n  const undo = useCallback(() => {\n    if (historyIndex.current > 0) {\n      historyIndex.current--\n      const previousSelection = selectionHistory.current[historyIndex.current]\n      setSelectedItems([...previousSelection])\n    }\n  }, [])\n\n  const redo = useCallback(() => {\n    if (historyIndex.current < selectionHistory.current.length - 1) {\n      historyIndex.current++\n      const nextSelection = selectionHistory.current[historyIndex.current]\n      setSelectedItems([...nextSelection])\n    }\n  }, [])\n\n  const canUndo = useMemo(() => {\n    return historyIndex.current > 0\n  }, [selectedItems]) // Depend on selectedItems to trigger recalculation\n\n  const canRedo = useMemo(() => {\n    return historyIndex.current < selectionHistory.current.length - 1\n  }, [selectedItems]) // Depend on selectedItems to trigger recalculation\n\n  return {\n    selectedItems,\n    selectedCount: selectedItems.length,\n    selectItem,\n    deselectItem,\n    selectAll,\n    clearSelection,\n    isSelected,\n    toggleSelection,\n    isAllSelected,\n    getSelectionStats,\n    selectRange,\n    selectByFilter,\n    undo,\n    redo,\n    canUndo,\n    canRedo\n  }\n}\n\n/**\n * useBulkOperations - Hook for managing bulk operations with progress tracking\n */\nexport function useBulkOperations<T>() {\n  const [isExecuting, setIsExecuting] = useState(false)\n  const [progress, setProgress] = useState({ current: 0, total: 0 })\n  const [error, setError] = useState<Error | null>(null)\n  const [cancelled, setCancelled] = useState(false)\n  \n  const executeWithProgress = useCallback(async (\n    items: T[],\n    operation: (item: T, index: number) => Promise<void>,\n    options: {\n      batchSize?: number\n      onProgress?: (current: number, total: number) => void\n      onError?: (error: Error, item: T, index: number) => void\n    } = {}\n  ) => {\n    const { batchSize = 10, onProgress, onError } = options\n    \n    setIsExecuting(true)\n    setProgress({ current: 0, total: items.length })\n    setError(null)\n    setCancelled(false)\n    \n    try {\n      // Process items in batches to prevent UI blocking\n      for (let i = 0; i < items.length; i += batchSize) {\n        if (cancelled) break\n        \n        const batch = items.slice(i, Math.min(i + batchSize, items.length))\n        \n        await Promise.allSettled(\n          batch.map(async (item, batchIndex) => {\n            const globalIndex = i + batchIndex\n            try {\n              await operation(item, globalIndex)\n              \n              setProgress(prev => {\n                const newCurrent = prev.current + 1\n                onProgress?.(newCurrent, prev.total)\n                return { ...prev, current: newCurrent }\n              })\n            } catch (err) {\n              const error = err instanceof Error ? err : new Error(String(err))\n              onError?.(error, item, globalIndex)\n              setError(error)\n            }\n          })\n        )\n        \n        // Small delay between batches to allow UI updates\n        await new Promise(resolve => setTimeout(resolve, 10))\n      }\n    } finally {\n      setIsExecuting(false)\n      if (!cancelled) {\n        setProgress({ current: 0, total: 0 })\n      }\n    }\n  }, [cancelled])\n  \n  const cancel = useCallback(() => {\n    setCancelled(true)\n  }, [])\n  \n  const reset = useCallback(() => {\n    setIsExecuting(false)\n    setProgress({ current: 0, total: 0 })\n    setError(null)\n    setCancelled(false)\n  }, [])\n  \n  return {\n    isExecuting,\n    progress,\n    error,\n    cancelled,\n    executeWithProgress,\n    cancel,\n    reset\n  }\n}\n\n/**\n * useBulkActionValidation - Hook for validating bulk actions according to BIRHAUS principles\n */\nexport function useBulkActionValidation<T>() {\n  const validateMillersLaw = useCallback((actionsCount: number) => {\n    return actionsCount <= 4 // BIRHAUS Miller's Law limit\n  }, [])\n  \n  const validateSpanishFirst = useCallback((actions: Array<{ labelEs?: string; labelEn?: string }>) => {\n    return actions.every(action => action.labelEs && action.labelEs.length > 0)\n  }, [])\n  \n  const validateSelectionSize = useCallback((selectedCount: number, maxRecommended = 100) => {\n    if (selectedCount === 0) {\n      return { valid: false, message: 'No items selected' }\n    }\n    \n    if (selectedCount > maxRecommended) {\n      return { \n        valid: false, \n        message: `Selection too large (${selectedCount} items). Consider filtering or pagination.` \n      }\n    }\n    \n    return { valid: true }\n  }, [])\n  \n  return {\n    validateMillersLaw,\n    validateSpanishFirst,\n    validateSelectionSize\n  }\n}","import {\n  FileDown,\n  Trash2,\n  Archive,\n  Mail,\n  Tag,\n  CheckCircle,\n  XCircle,\n  RefreshCw,\n  Download,\n  Copy,\n  Edit,\n  Eye,\n  Users,\n  Star,\n  Heart,\n  Flag,\n  Shield\n} from 'lucide-react'\nimport type { BirhausBulkAction } from './types'\n\n/**\n * BIRHAUS Bulk Action Presets\n * Pre-configured actions following BIRHAUS principles\n * - Spanish-first labels\n * - Undo-over-confirm patterns\n * - Miller's Law compliance\n * - Accessibility-first design\n */\n\n/**\n * Export action with format options\n */\nexport const createExportAction = <T>(\n  onExport: (items: T[], format?: string) => Promise<void>,\n  options: {\n    formats?: ('csv' | 'xlsx' | 'json' | 'pdf')[]\n    defaultFormat?: string\n  } = {}\n): BirhausBulkAction<T> => ({\n  id: 'export',\n  labelEs: 'Exportar',\n  labelEn: 'Export',\n  icon: FileDown,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onExport(items, options.defaultFormat || 'csv')\n    return {} // Return empty object to satisfy type requirements\n  },\n  undoable: false, // Export is not undoable\n  minItems: 1,\n  validate: (items) => ({\n    valid: items.length > 0,\n    message: items.length === 0 ? 'Selecciona al menos un elemento para exportar' : undefined\n  })\n})\n\n/**\n * Delete action with undo support (BIRHAUS undo-over-confirm)\n */\nexport const createDeleteAction = <T>(\n  onDelete: (items: T[]) => Promise<{ undoAction: () => Promise<void> }>,\n  count?: number\n): BirhausBulkAction<T> => ({\n  id: 'delete',\n  labelEs: 'Eliminar',\n  labelEn: 'Delete',\n  icon: Trash2,\n  variant: 'destructive',\n  onClick: onDelete,\n  undoable: true,\n  undoTimeout: 10000, // 10 seconds to undo\n  clearSelectionOnComplete: true,\n  minItems: 1,\n  validate: (items) => ({\n    valid: items.length > 0,\n    message: items.length === 0 ? 'Selecciona elementos para eliminar' : undefined\n  })\n})\n\n/**\n * Archive action with undo support\n */\nexport const createArchiveAction = <T>(\n  onArchive: (items: T[]) => Promise<{ undoAction?: () => Promise<void> }>,\n  options: { undoable?: boolean } = {}\n): BirhausBulkAction<T> => ({\n  id: 'archive',\n  labelEs: 'Archivar',\n  labelEn: 'Archive',\n  icon: Archive,\n  variant: 'secondary',\n  onClick: onArchive,\n  undoable: options.undoable,\n  undoTimeout: 15000, // 15 seconds for archive operations\n  minItems: 1\n})\n\n/**\n * Email/notification action\n */\nexport const createEmailAction = <T>(\n  onEmail: (items: T[]) => Promise<void>,\n  options: { \n    label?: { es: string; en?: string }\n    template?: string \n  } = {}\n): BirhausBulkAction<T> => ({\n  id: 'email',\n  labelEs: options.label?.es || 'Enviar Email',\n  labelEn: options.label?.en || 'Send Email',\n  icon: Mail,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onEmail(items)\n    return {}\n  },\n  undoable: false,\n  minItems: 1,\n  maxItems: 50, // Limit for email sending\n  validate: (items) => ({\n    valid: items.length > 0 && items.length <= 50,\n    message: items.length === 0 \n      ? 'Selecciona destinatarios para el email'\n      : items.length > 50 \n        ? 'Máximo 50 destinatarios por email'\n        : undefined\n  })\n})\n\n/**\n * Tag/label action\n */\nexport const createTagAction = <T>(\n  onTag: (items: T[], tag?: string) => Promise<void>,\n  tag?: string\n): BirhausBulkAction<T> => ({\n  id: `tag-${tag || 'generic'}`,\n  labelEs: tag ? `Etiquetar como \"${tag}\"` : 'Etiquetar',\n  labelEn: tag ? `Tag as \"${tag}\"` : 'Tag',\n  icon: Tag,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onTag(items, tag)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 8000,\n  minItems: 1\n})\n\n/**\n * Approve action\n */\nexport const createApproveAction = <T>(\n  onApprove: (items: T[]) => Promise<{ undoAction?: () => Promise<void> }>\n): BirhausBulkAction<T> => ({\n  id: 'approve',\n  labelEs: 'Aprobar',\n  labelEn: 'Approve',\n  icon: CheckCircle,\n  variant: 'primary',\n  onClick: onApprove,\n  undoable: true,\n  undoTimeout: 12000,\n  minItems: 1\n})\n\n/**\n * Reject action\n */\nexport const createRejectAction = <T>(\n  onReject: (items: T[]) => Promise<{ undoAction?: () => Promise<void> }>\n): BirhausBulkAction<T> => ({\n  id: 'reject',\n  labelEs: 'Rechazar',\n  labelEn: 'Reject',\n  icon: XCircle,\n  variant: 'destructive',\n  onClick: onReject,\n  undoable: true,\n  undoTimeout: 12000,\n  minItems: 1\n})\n\n/**\n * Status update action\n */\nexport const createStatusUpdateAction = <T>(\n  onUpdateStatus: (items: T[], status: string) => Promise<{ undoAction?: () => Promise<void> }>,\n  status: string,\n  statusLabel?: { es: string; en?: string }\n): BirhausBulkAction<T> => ({\n  id: `status-${status}`,\n  labelEs: statusLabel?.es || `Cambiar a ${status}`,\n  labelEn: statusLabel?.en || `Change to ${status}`,\n  icon: RefreshCw,\n  variant: 'secondary',\n  onClick: (items) => onUpdateStatus(items, status),\n  undoable: true,\n  undoTimeout: 10000,\n  minItems: 1\n})\n\n/**\n * Download action\n */\nexport const createDownloadAction = <T>(\n  onDownload: (items: T[]) => Promise<void>\n): BirhausBulkAction<T> => ({\n  id: 'download',\n  labelEs: 'Descargar',\n  labelEn: 'Download',\n  icon: Download,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onDownload(items)\n    return {}\n  },\n  undoable: false,\n  minItems: 1,\n  maxItems: 20 // Limit concurrent downloads\n})\n\n/**\n * Copy action\n */\nexport const createCopyAction = <T>(\n  onCopy: (items: T[]) => Promise<void>\n): BirhausBulkAction<T> => ({\n  id: 'copy',\n  labelEs: 'Copiar',\n  labelEn: 'Copy',\n  icon: Copy,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onCopy(items)\n    return {}\n  },\n  undoable: false, // Copy doesn't modify original data\n  minItems: 1\n})\n\n/**\n * Edit action\n */\nexport const createEditAction = <T>(\n  onEdit: (items: T[]) => Promise<void>,\n  options: { \n    singleOnly?: boolean \n    maxItems?: number \n  } = {}\n): BirhausBulkAction<T> => ({\n  id: 'edit',\n  labelEs: 'Editar',\n  labelEn: 'Edit',\n  icon: Edit,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onEdit(items)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 15000,\n  minItems: 1,\n  maxItems: options.singleOnly ? 1 : (options.maxItems || 10),\n  validate: (items) => {\n    if (options.singleOnly && items.length > 1) {\n      return {\n        valid: false,\n        message: 'Solo se puede editar un elemento a la vez'\n      }\n    }\n    return { valid: items.length > 0 }\n  }\n})\n\n/**\n * Assign action (for user/group assignments)\n */\nexport const createAssignAction = <T>(\n  onAssign: (items: T[], assignee?: string) => Promise<void>,\n  assignee?: string\n): BirhausBulkAction<T> => ({\n  id: `assign-${assignee || 'generic'}`,\n  labelEs: assignee ? `Asignar a ${assignee}` : 'Asignar',\n  labelEn: assignee ? `Assign to ${assignee}` : 'Assign',\n  icon: Users,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onAssign(items, assignee)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 10000,\n  minItems: 1\n})\n\n/**\n * Favorite/star action\n */\nexport const createFavoriteAction = <T>(\n  onFavorite: (items: T[], favorite: boolean) => void | Promise<void>,\n  isFavorite = true\n): BirhausBulkAction<T> => ({\n  id: isFavorite ? 'favorite' : 'unfavorite',\n  labelEs: isFavorite ? 'Marcar como favorito' : 'Quitar de favoritos',\n  labelEn: isFavorite ? 'Add to favorites' : 'Remove from favorites',\n  icon: isFavorite ? Star : Star,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onFavorite(items, isFavorite)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 8000,\n  minItems: 1\n})\n\n/**\n * Hide/show visibility action\n */\nexport const createVisibilityAction = <T>(\n  onToggleVisibility: (items: T[], visible: boolean) => void | Promise<void>,\n  makeVisible = true\n): BirhausBulkAction<T> => ({\n  id: makeVisible ? 'show' : 'hide',\n  labelEs: makeVisible ? 'Mostrar' : 'Ocultar',\n  labelEn: makeVisible ? 'Show' : 'Hide',\n  icon: makeVisible ? Eye : Eye,\n  variant: 'secondary',\n  onClick: async (items) => {\n    await onToggleVisibility(items, makeVisible)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 10000,\n  minItems: 1\n})\n\n/**\n * Priority action\n */\nexport const createPriorityAction = <T>(\n  onSetPriority: (items: T[], priority: 'high' | 'medium' | 'low') => void | Promise<void>,\n  priority: 'high' | 'medium' | 'low'\n): BirhausBulkAction<T> => {\n  const priorityLabels = {\n    high: { es: 'Alta prioridad', en: 'High priority' },\n    medium: { es: 'Prioridad media', en: 'Medium priority' },\n    low: { es: 'Baja prioridad', en: 'Low priority' }\n  }\n\n  return {\n    id: `priority-${priority}`,\n    labelEs: priorityLabels[priority].es,\n    labelEn: priorityLabels[priority].en,\n    icon: Flag,\n    variant: priority === 'high' ? 'primary' : 'secondary',\n    onClick: async (items) => {\n    await onSetPriority(items, priority)\n    return {}\n  },\n    undoable: true,\n    undoTimeout: 10000,\n    minItems: 1\n  }\n}\n\n/**\n * Permission action (for access control)\n */\nexport const createPermissionAction = <T>(\n  onUpdatePermissions: (items: T[], permission: string, grant: boolean) => void | Promise<void>,\n  permission: string,\n  grant = true\n): BirhausBulkAction<T> => ({\n  id: `permission-${permission}-${grant ? 'grant' : 'revoke'}`,\n  labelEs: grant ? `Otorgar ${permission}` : `Revocar ${permission}`,\n  labelEn: grant ? `Grant ${permission}` : `Revoke ${permission}`,\n  icon: Shield,\n  variant: grant ? 'primary' : 'destructive',\n  onClick: async (items) => {\n    await onUpdatePermissions(items, permission, grant)\n    return {}\n  },\n  undoable: true,\n  undoTimeout: 15000, // Longer timeout for security changes\n  minItems: 1\n})\n\n\n/**\n * Collection of all presets implementing BulkActionPresets interface\n */\nexport const BulkActionPresets = {\n  export: createExportAction,\n  delete: createDeleteAction,\n  archive: createArchiveAction,\n  email: createEmailAction,\n  tag: createTagAction,\n  approve: createApproveAction,\n  reject: createRejectAction,\n  updateStatus: createStatusUpdateAction\n}\n\n/**\n * Extended presets for additional functionality\n */\nexport const ExtendedBulkActionPresets = {\n  ...BulkActionPresets,\n  download: createDownloadAction,\n  copy: createCopyAction,\n  edit: createEditAction,\n  assign: createAssignAction,\n  favorite: createFavoriteAction,\n  visibility: createVisibilityAction,\n  priority: createPriorityAction,\n  permission: createPermissionAction\n}\n\n/**\n * Factory function for creating custom bulk action configurations\n */\nexport function createBulkActionConfig<T>() {\n  return {\n    createAction: (config: Omit<BirhausBulkAction<T>, 'id'> & { id: string }): BirhausBulkAction<T> => ({\n      ...config,\n      // Ensure Spanish-first principle\n      labelEs: config.labelEs || config.id,\n      // Add default validation if none provided\n      validate: config.validate || ((items) => ({\n        valid: items.length > 0,\n        message: items.length === 0 ? 'Selecciona elementos para continuar' : undefined\n      }))\n    }),\n    \n    createPresetAction: (preset: keyof typeof ExtendedBulkActionPresets, ...args: any[]): BirhausBulkAction<T> => {\n      const presetFunc = ExtendedBulkActionPresets[preset]\n      return (presetFunc as any)(...args)\n    },\n    \n    validateCognitiveLoad: (actions: BirhausBulkAction<T>[]) => ({\n      actionsCount: actions.length,\n      cognitiveLoad: actions.length <= 2 ? 'low' as const : \n                     actions.length <= 4 ? 'medium' as const : \n                     'high' as const,\n      violates431Rule: actions.length > 4,\n      spanishCoverage: actions.filter(a => a.labelEs && a.labelEs.length > 0).length / actions.length * 100,\n      hasUndoPatterns: actions.some(a => a.undoable),\n      accessibilityScore: 85 // Base score, could be calculated based on various factors\n    }),\n    \n    validateBirhausCompliance: (actions: BirhausBulkAction<T>[]) => ({\n      millersLaw: actions.length <= 4,\n      spanishFirst: actions.every(a => a.labelEs && a.labelEs.length > 0),\n      undoPatterns: actions.some(a => a.undoable),\n      accessibility: actions.every(a => a.labelEs || a.labelEn), // Basic check\n      cognitiveLoad: actions.length <= 2 ? 'low' as const : \n                     actions.length <= 4 ? 'medium' as const : \n                     'high' as const\n    })\n  }\n}","'use client'\n\nimport React from 'react'\nimport { cn } from '../../utils/cn'\nimport { \n  CheckCircle, \n  XCircle, \n  Clock, \n  AlertCircle, \n  CircleDashed,\n  PauseCircle,\n  PlayCircle,\n  RefreshCw,\n  Zap,\n  Archive,\n  UserCheck,\n  UserX,\n  DollarSign,\n  Calendar,\n  BookOpen,\n  GraduationCap,\n  Shield,\n  Star,\n  Info\n} from 'lucide-react'\nimport type { \n  BirhausStatusBadgeProps, \n  StatusType, \n  StatusConfig, \n  StatusCategory \n} from './types'\n\n/**\n * BIRHAUS Status Badge - Comprehensive status display component\n * \n * Features:\n * - Spanish-first status labels with English fallbacks\n * - Multiple context types (student, payment, course, etc.)\n * - Accessibility-first design with proper ARIA labels\n * - Consistent visual hierarchy following BIRHAUS principles\n * - Cognitive load reduction through clear iconography\n */\n\n// BIRHAUS-compliant status configurations with Spanish-first labels\nconst statusConfigs: Record<StatusType, StatusConfig> = {\n  // Student statuses\n  active: {\n    labelEs: 'Activo',\n    labelEn: 'Active',\n    icon: CheckCircle,\n    className: 'bg-emerald-100 text-emerald-800 border-emerald-200',\n    iconClassName: 'text-emerald-600'\n  },\n  inactive: {\n    labelEs: 'Inactivo',\n    labelEn: 'Inactive', \n    icon: XCircle,\n    className: 'bg-gray-100 text-gray-800 border-gray-200',\n    iconClassName: 'text-gray-600'\n  },\n  graduated: {\n    labelEs: 'Graduado',\n    labelEn: 'Graduated',\n    icon: GraduationCap,\n    className: 'bg-purple-100 text-purple-800 border-purple-200',\n    iconClassName: 'text-purple-600'\n  },\n  suspended: {\n    labelEs: 'Suspendido',\n    labelEn: 'Suspended',\n    icon: PauseCircle,\n    className: 'bg-orange-100 text-orange-800 border-orange-200',\n    iconClassName: 'text-orange-600'\n  },\n  pending: {\n    labelEs: 'Pendiente',\n    labelEn: 'Pending',\n    icon: Clock,\n    className: 'bg-yellow-100 text-yellow-800 border-yellow-200',\n    iconClassName: 'text-yellow-600'\n  },\n  \n  // Payment statuses\n  paid: {\n    labelEs: 'Pagado',\n    labelEn: 'Paid',\n    icon: CheckCircle,\n    className: 'bg-emerald-100 text-emerald-800 border-emerald-200',\n    iconClassName: 'text-emerald-600'\n  },\n  overdue: {\n    labelEs: 'Vencido',\n    labelEn: 'Overdue',\n    icon: AlertCircle,\n    className: 'bg-red-100 text-red-800 border-red-200',\n    iconClassName: 'text-red-600'\n  },\n  partial: {\n    labelEs: 'Parcial',\n    labelEn: 'Partial',\n    icon: CircleDashed,\n    className: 'bg-blue-100 text-blue-800 border-blue-200',\n    iconClassName: 'text-blue-600'\n  },\n  refunded: {\n    labelEs: 'Reembolsado',\n    labelEn: 'Refunded',\n    icon: RefreshCw,\n    className: 'bg-gray-100 text-gray-800 border-gray-200',\n    iconClassName: 'text-gray-600'\n  },\n  \n  // Course statuses\n  completed: {\n    labelEs: 'Completado',\n    labelEn: 'Completed',\n    icon: CheckCircle,\n    className: 'bg-emerald-100 text-emerald-800 border-emerald-200',\n    iconClassName: 'text-emerald-600'\n  },\n  upcoming: {\n    labelEs: 'Próximo',\n    labelEn: 'Upcoming',\n    icon: Calendar,\n    className: 'bg-blue-100 text-blue-800 border-blue-200',\n    iconClassName: 'text-blue-600'\n  },\n  cancelled: {\n    labelEs: 'Cancelado',\n    labelEn: 'Cancelled',\n    icon: XCircle,\n    className: 'bg-red-100 text-red-800 border-red-200',\n    iconClassName: 'text-red-600'\n  },\n  draft: {\n    labelEs: 'Borrador',\n    labelEn: 'Draft',\n    icon: Archive,\n    className: 'bg-gray-100 text-gray-800 border-gray-200',\n    iconClassName: 'text-gray-600'\n  },\n  \n  // Contract statuses\n  expired: {\n    labelEs: 'Expirado',\n    labelEn: 'Expired',\n    icon: Clock,\n    className: 'bg-red-100 text-red-800 border-red-200',\n    iconClassName: 'text-red-600'\n  },\n  \n  // Attendance statuses\n  present: {\n    labelEs: 'Presente',\n    labelEn: 'Present',\n    icon: UserCheck,\n    className: 'bg-emerald-100 text-emerald-800 border-emerald-200',\n    iconClassName: 'text-emerald-600'\n  },\n  absent: {\n    labelEs: 'Ausente',\n    labelEn: 'Absent',\n    icon: UserX,\n    className: 'bg-red-100 text-red-800 border-red-200',\n    iconClassName: 'text-red-600'\n  },\n  late: {\n    labelEs: 'Tarde',\n    labelEn: 'Late',\n    icon: Clock,\n    className: 'bg-orange-100 text-orange-800 border-orange-200',\n    iconClassName: 'text-orange-600'\n  },\n  excused: {\n    labelEs: 'Justificado',\n    labelEn: 'Excused',\n    icon: Shield,\n    className: 'bg-blue-100 text-blue-800 border-blue-200',\n    iconClassName: 'text-blue-600'\n  },\n  holiday: {\n    labelEs: 'Feriado',\n    labelEn: 'Holiday',\n    icon: Star,\n    className: 'bg-purple-100 text-purple-800 border-purple-200',\n    iconClassName: 'text-purple-600'\n  },\n  \n  // Generic statuses\n  success: {\n    labelEs: 'Éxito',\n    labelEn: 'Success',\n    icon: CheckCircle,\n    className: 'bg-emerald-100 text-emerald-800 border-emerald-200',\n    iconClassName: 'text-emerald-600'\n  },\n  error: {\n    labelEs: 'Error',\n    labelEn: 'Error',\n    icon: XCircle,\n    className: 'bg-red-100 text-red-800 border-red-200',\n    iconClassName: 'text-red-600'\n  },\n  warning: {\n    labelEs: 'Advertencia',\n    labelEn: 'Warning',\n    icon: AlertCircle,\n    className: 'bg-amber-100 text-amber-800 border-amber-200',\n    iconClassName: 'text-amber-600'\n  },\n  info: {\n    labelEs: 'Información',\n    labelEn: 'Info',\n    icon: Info,\n    className: 'bg-blue-100 text-blue-800 border-blue-200',\n    iconClassName: 'text-blue-600'\n  },\n  default: {\n    labelEs: 'Estado',\n    labelEn: 'Status',\n    icon: CircleDashed,\n    className: 'bg-gray-100 text-gray-800 border-gray-200',\n    iconClassName: 'text-gray-600'\n  }\n}\n\nexport function BirhausStatusBadge({\n  status,\n  labelEs,\n  labelEn,\n  size = 'sm',\n  variant = 'soft',\n  showIcon = true,\n  className,\n  onClick,\n  locale = 'es'\n}: BirhausStatusBadgeProps) {\n  // BIRHAUS Principle: Defensive programming\n  if (!status || typeof status !== 'string') {\n    console.warn(`BIRHAUS StatusBadge: Invalid status value: ${status}`)\n    status = 'default' as StatusType\n  }\n  \n  const config = statusConfigs[status] || statusConfigs.default\n  const Icon = config.icon\n  \n  // BIRHAUS Spanish-first label selection\n  const displayLabel = locale === 'es' \n    ? (labelEs || config.labelEs)\n    : (labelEn || labelEs || config.labelEn || config.labelEs)\n\n  // Size classes following BIRHAUS 8pt grid system\n  const sizeClasses = {\n    xs: 'px-2 py-0.5 text-xs',\n    sm: 'px-2.5 py-1 text-sm',\n    md: 'px-3 py-1.5 text-sm',\n    lg: 'px-4 py-2 text-base'\n  }\n\n  const iconSizes = {\n    xs: 'w-3 h-3',\n    sm: 'w-3.5 h-3.5', \n    md: 'w-4 h-4',\n    lg: 'w-5 h-5'\n  }\n\n  // Variant classes with BIRHAUS accessibility considerations\n  const variantClasses = {\n    solid: config.className.replace(/bg-\\w+-100/, 'bg-current').replace(/text-\\w+-800/, 'text-white'),\n    soft: config.className,\n    outline: `bg-transparent border ${config.className.split(' ')[1]} ${config.className.split(' ')[2]}`,\n    ghost: `bg-transparent ${config.className.split(' ')[1]}`\n  }\n\n  return (\n    <span\n      role={onClick ? 'button' : 'status'}\n      tabIndex={onClick ? 0 : undefined}\n      onClick={onClick}\n      onKeyDown={onClick ? (e) => {\n        if (e.key === 'Enter' || e.key === ' ') {\n          e.preventDefault()\n          onClick()\n        }\n      } : undefined}\n      aria-label={displayLabel}\n      className={cn(\n        'inline-flex items-center gap-1.5 font-medium rounded-full border',\n        'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n        sizeClasses[size],\n        variantClasses[variant],\n        onClick && 'cursor-pointer hover:opacity-80 transition-opacity focus:opacity-80',\n        className\n      )}\n    >\n      {showIcon && (\n        <Icon \n          className={cn(iconSizes[size], config.iconClassName)} \n          aria-hidden=\"true\"\n        />\n      )}\n      <span className=\"truncate\">{displayLabel}</span>\n    </span>\n  )\n}\n\n// BIRHAUS specialized components for different contexts\nexport function BirhausStudentStatusBadge({ \n  status, \n  ...props \n}: Omit<BirhausStatusBadgeProps, 'status'> & { \n  status: Extract<StatusType, 'active' | 'inactive' | 'graduated' | 'suspended' | 'pending'>\n}) {\n  return <BirhausStatusBadge status={status} {...props} />\n}\n\nexport function BirhausPaymentStatusBadge({ \n  status, \n  amount,\n  currency = 'PYG',\n  ...props \n}: Omit<BirhausStatusBadgeProps, 'status'> & { \n  status: Extract<StatusType, 'paid' | 'pending' | 'overdue' | 'partial' | 'refunded'>\n  amount?: number\n  currency?: string\n}) {\n  // Enhanced label with amount for paid status\n  const enhancedLabelEs = props.labelEs || (\n    amount && status === 'paid' \n      ? `Pagado - ${new Intl.NumberFormat('es-PY', { \n          style: 'currency', \n          currency,\n          minimumFractionDigits: 0 \n        }).format(amount)}`\n      : undefined\n  )\n\n  const enhancedLabelEn = props.labelEn || (\n    amount && status === 'paid'\n      ? `Paid - ${new Intl.NumberFormat('en-US', {\n          style: 'currency',\n          currency,\n          minimumFractionDigits: 0\n        }).format(amount)}`\n      : undefined\n  )\n  \n  return (\n    <BirhausStatusBadge \n      status={status} \n      labelEs={enhancedLabelEs}\n      labelEn={enhancedLabelEn}\n      {...props} \n    />\n  )\n}\n\nexport function BirhausCourseStatusBadge({ \n  status, \n  ...props \n}: Omit<BirhausStatusBadgeProps, 'status'> & { \n  status: Extract<StatusType, 'active' | 'completed' | 'upcoming' | 'cancelled' | 'draft'>\n}) {\n  return <BirhausStatusBadge status={status} {...props} />\n}\n\nexport function BirhausContractStatusBadge({ \n  status, \n  ...props \n}: Omit<BirhausStatusBadgeProps, 'status'> & { \n  status: Extract<StatusType, 'active' | 'expired' | 'cancelled' | 'pending' | 'suspended'>\n}) {\n  return <BirhausStatusBadge status={status} {...props} />\n}\n\nexport function BirhausAttendanceStatusBadge({ \n  status, \n  ...props \n}: Omit<BirhausStatusBadgeProps, 'status'> & { \n  status: Extract<StatusType, 'present' | 'absent' | 'late' | 'excused' | 'holiday'>\n}) {\n  return <BirhausStatusBadge status={status} {...props} />\n}\n\n// BIRHAUS Group component for displaying multiple statuses\nexport function BirhausStatusGroup({ \n  children, \n  className,\n  orientation = 'horizontal',\n  spacing = 'normal'\n}: {\n  children: React.ReactNode\n  className?: string\n  orientation?: 'horizontal' | 'vertical'\n  spacing?: 'tight' | 'normal' | 'loose'\n}) {\n  const spacingClasses = {\n    tight: 'gap-1',\n    normal: 'gap-2', \n    loose: 'gap-4'\n  }\n  \n  return (\n    <div className={cn(\n      'flex',\n      orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n      spacingClasses[spacing],\n      className\n    )}>\n      {children}\n    </div>\n  )\n}\n\n// Utility functions for status management\nexport function getBirhausStatusColor(status: StatusType): {\n  bg: string\n  text: string\n  border: string\n} {\n  const config = statusConfigs[status] || statusConfigs.default\n  const classes = config.className.split(' ')\n  \n  return {\n    bg: classes.find(c => c.startsWith('bg-')) || 'bg-gray-100',\n    text: classes.find(c => c.startsWith('text-')) || 'text-gray-800',\n    border: classes.find(c => c.startsWith('border-')) || 'border-gray-200'\n  }\n}\n\nexport function getBirhausStatusIcon(status: StatusType) {\n  const config = statusConfigs[status] || statusConfigs.default\n  return config.icon\n}\n\nexport function getBirhausStatusLabel(status: StatusType, locale: 'es' | 'en' = 'es'): string {\n  const config = statusConfigs[status] || statusConfigs.default\n  return locale === 'es' ? config.labelEs : (config.labelEn || config.labelEs)\n}\n\n// BIRHAUS Status category helpers for cognitive load reduction\nexport function getStatusCategory(status: StatusType): StatusCategory {\n  const studentStatuses: StatusType[] = ['active', 'inactive', 'graduated', 'suspended', 'pending']\n  const paymentStatuses: StatusType[] = ['paid', 'overdue', 'partial', 'refunded', 'pending']\n  const courseStatuses: StatusType[] = ['active', 'completed', 'upcoming', 'cancelled', 'draft']\n  const attendanceStatuses: StatusType[] = ['present', 'absent', 'late', 'excused', 'holiday']\n  const contractStatuses: StatusType[] = ['active', 'expired', 'cancelled', 'pending', 'suspended']\n  \n  if (studentStatuses.includes(status)) return 'student'\n  if (paymentStatuses.includes(status)) return 'payment'\n  if (courseStatuses.includes(status)) return 'course'\n  if (attendanceStatuses.includes(status)) return 'attendance'\n  if (contractStatuses.includes(status)) return 'contract'\n  \n  return 'generic'\n}\n\n// Hook for managing status state with BIRHAUS undo patterns\nexport function useBirhausStatusBadge(initialStatus: StatusType = 'default') {\n  const [status, setStatus] = React.useState<StatusType>(initialStatus)\n  const [previousStatus, setPreviousStatus] = React.useState<StatusType | null>(null)\n  \n  const changeStatus = React.useCallback((newStatus: StatusType) => {\n    setPreviousStatus(status)\n    setStatus(newStatus)\n  }, [status])\n  \n  // BIRHAUS: Undo pattern instead of confirmation\n  const undoStatusChange = React.useCallback(() => {\n    if (previousStatus) {\n      setStatus(previousStatus)\n      setPreviousStatus(null)\n    }\n  }, [previousStatus])\n  \n  return {\n    status,\n    setStatus: changeStatus,\n    previousStatus,\n    canUndo: previousStatus !== null,\n    undoStatusChange\n  }\n}\n\nexport { BirhausStatusBadge as default }","import React from 'react'\nimport { LucideIcon, TrendingUp, TrendingDown, Minus } from 'lucide-react'\nimport { cn } from '../../utils/cn'\nimport type { BirhausStatCardProps, StatTrend, StatColor, StatMetrics } from './types'\n\n/**\n * BirhausStatCard - Statistics display component with BIRHAUS principles\n * \n * Features:\n * - Spanish-first labels with English fallbacks\n * - Cognitive load reduction through clear visual hierarchy\n * - Accessibility-first design (WCAG AA+)\n * - Consistent color scheme following BIRHAUS design tokens\n * - Support for trend indicators and contextual information\n */\n\n// BIRHAUS color configurations\nconst colorClasses = {\n  blue: {\n    bg: 'bg-blue-50',\n    icon: 'text-blue-600',\n    trend: 'text-blue-600',\n    ring: 'ring-blue-200'\n  },\n  green: {\n    bg: 'bg-emerald-50',\n    icon: 'text-emerald-600',\n    trend: 'text-emerald-600',\n    ring: 'ring-emerald-200'\n  },\n  purple: {\n    bg: 'bg-purple-50',\n    icon: 'text-purple-600',\n    trend: 'text-purple-600',\n    ring: 'ring-purple-200'\n  },\n  indigo: {\n    bg: 'bg-indigo-50',\n    icon: 'text-indigo-600',\n    trend: 'text-indigo-600',\n    ring: 'ring-indigo-200'\n  },\n  amber: {\n    bg: 'bg-amber-50',\n    icon: 'text-amber-600',\n    trend: 'text-amber-600',\n    ring: 'ring-amber-200'\n  },\n  red: {\n    bg: 'bg-red-50',\n    icon: 'text-red-600',\n    trend: 'text-red-600',\n    ring: 'ring-red-200'\n  },\n  gray: {\n    bg: 'bg-gray-50',\n    icon: 'text-gray-600',\n    trend: 'text-gray-600',\n    ring: 'ring-gray-200'\n  },\n  teal: {\n    bg: 'bg-teal-50',\n    icon: 'text-teal-600',\n    trend: 'text-teal-600',\n    ring: 'ring-teal-200'\n  }\n}\n\nexport function BirhausStatCard({\n  // Labels - BIRHAUS Spanish-first\n  tituloEs,\n  tituloEn,\n  subtituloEs,\n  subtituloEn,\n  \n  // Data\n  value,\n  \n  // Trend information\n  trend,\n  trendValue,\n  trendLabelEs,\n  trendLabelEn,\n  \n  // Visual configuration\n  icon: Icon,\n  color = 'blue',\n  variant = 'default',\n  size = 'default',\n  \n  // Interaction\n  onClick,\n  loading = false,\n  \n  // Accessibility & localization\n  className,\n  locale = 'es',\n  'aria-label': ariaLabel,\n  'aria-describedby': ariaDescribedBy\n}: BirhausStatCardProps) {\n  \n  // BIRHAUS Spanish-first label resolution\n  const getLabel = (es: string, en?: string) => {\n    return locale === 'es' ? es : (en || es)\n  }\n  \n  const colors = colorClasses[color]\n  const TrendIcon = trend === 'up' ? TrendingUp : trend === 'down' ? TrendingDown : Minus\n  \n  // Size variants following BIRHAUS 8pt grid\n  const sizeClasses = {\n    compact: 'p-4',\n    default: 'p-6',\n    large: 'p-8'\n  }\n  \n  const titleSizeClasses = {\n    compact: 'text-sm',\n    default: 'text-sm',\n    large: 'text-base'\n  }\n  \n  const valueSizeClasses = {\n    compact: 'text-xl',\n    default: 'text-2xl',\n    large: 'text-3xl'\n  }\n  \n  // Variant classes\n  const variantClasses = {\n    default: 'bg-white border border-gray-200 shadow-sm hover:shadow-md transition-shadow',\n    elevated: 'bg-white border border-gray-200 shadow-lg hover:shadow-xl transition-shadow',\n    outlined: 'bg-transparent border-2 border-gray-300 hover:border-gray-400 transition-colors',\n    minimal: 'bg-transparent border-0'\n  }\n  \n  const displayTitle = getLabel(tituloEs, tituloEn)\n  const displaySubtitle = subtituloEs || subtituloEn ? getLabel(subtituloEs!, subtituloEn) : undefined\n  const displayTrendLabel = trendLabelEs || trendLabelEn ? getLabel(trendLabelEs!, trendLabelEn) : undefined\n  \n  // Format value if it's a number\n  const formatValue = (val: string | number): string => {\n    if (typeof val === 'number') {\n      // Use Spanish formatting for numbers\n      return new Intl.NumberFormat(locale === 'es' ? 'es-ES' : 'en-US').format(val)\n    }\n    return String(val)\n  }\n  \n  const cardContent = (\n    <div className={cn(\n      'rounded-lg transition-all duration-200',\n      variantClasses[variant],\n      sizeClasses[size],\n      onClick && 'cursor-pointer hover:ring-2',\n      onClick && colors.ring,\n      loading && 'animate-pulse',\n      className\n    )}>\n      <div className=\"flex items-center justify-between\">\n        <div className=\"flex-1 min-w-0\">\n          {/* Title */}\n          <p className={cn(\n            'font-medium text-gray-600 truncate',\n            titleSizeClasses[size]\n          )}>\n            {displayTitle}\n          </p>\n          \n          {/* Value */}\n          <div className=\"flex items-baseline mt-1\">\n            {loading ? (\n              <div className=\"h-8 w-24 bg-gray-200 rounded animate-pulse\" />\n            ) : (\n              <p className={cn(\n                'font-bold text-gray-900',\n                valueSizeClasses[size]\n              )}>\n                {formatValue(value)}\n              </p>\n            )}\n          </div>\n          \n          {/* Subtitle */}\n          {displaySubtitle && (\n            <p className=\"text-xs text-gray-500 mt-1 truncate\">\n              {displaySubtitle}\n            </p>\n          )}\n          \n          {/* Trend */}\n          {trend && (\n            <div className={cn(\n              'flex items-center mt-2 text-sm',\n              colors.trend\n            )}>\n              <TrendIcon className=\"w-4 h-4 mr-1\" />\n              {trendValue && (\n                <span className=\"font-medium mr-1\">{trendValue}</span>\n              )}\n              {displayTrendLabel && (\n                <span className=\"text-gray-600\">{displayTrendLabel}</span>\n              )}\n            </div>\n          )}\n        </div>\n        \n        {/* Icon */}\n        {Icon && (\n          <div className={cn(\n            'flex-shrink-0 p-3 rounded-lg ml-4',\n            colors.bg\n          )}>\n            <Icon className={cn(\n              'w-6 h-6',\n              colors.icon\n            )} />\n          </div>\n        )}\n      </div>\n    </div>\n  )\n  \n  // Wrap in button if clickable, otherwise return as div\n  if (onClick) {\n    return (\n      <button\n        type=\"button\"\n        onClick={onClick}\n        className=\"w-full text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500\"\n        aria-label={ariaLabel || displayTitle}\n        aria-describedby={ariaDescribedBy}\n      >\n        {cardContent}\n      </button>\n    )\n  }\n  \n  return (\n    <div \n      role=\"img\"\n      aria-label={ariaLabel || displayTitle}\n      aria-describedby={ariaDescribedBy}\n    >\n      {cardContent}\n    </div>\n  )\n}\n\n// Helper function to create stat metrics for BIRHAUS compliance\nexport function createStatMetrics(\n  value: number,\n  previousValue?: number,\n  target?: number\n): StatMetrics {\n  const metrics: StatMetrics = {\n    value,\n    formatted: new Intl.NumberFormat('es-ES').format(value),\n    trend: null,\n    trendPercentage: null,\n    targetProgress: null\n  }\n  \n  // Calculate trend if previous value is provided\n  if (previousValue !== undefined && previousValue !== 0) {\n    const change = value - previousValue\n    const percentageChange = (change / previousValue) * 100\n    \n    metrics.trend = change > 0 ? 'up' : change < 0 ? 'down' : 'neutral'\n    metrics.trendPercentage = Math.abs(percentageChange)\n  }\n  \n  // Calculate target progress if target is provided\n  if (target !== undefined && target > 0) {\n    metrics.targetProgress = Math.min((value / target) * 100, 100)\n  }\n  \n  return metrics\n}\n\n// Pre-configured stat card variants for common use cases\nexport const birhausStatCardPresets = {\n  // Financial metrics\n  revenue: {\n    color: 'green' as StatColor,\n    tituloEs: 'Ingresos',\n    tituloEn: 'Revenue'\n  },\n  \n  expenses: {\n    color: 'red' as StatColor,\n    tituloEs: 'Gastos',\n    tituloEn: 'Expenses'\n  },\n  \n  profit: {\n    color: 'blue' as StatColor,\n    tituloEs: 'Ganancia',\n    tituloEn: 'Profit'\n  },\n  \n  // Student metrics\n  totalStudents: {\n    color: 'indigo' as StatColor,\n    tituloEs: 'Total de Estudiantes',\n    tituloEn: 'Total Students'\n  },\n  \n  activeStudents: {\n    color: 'green' as StatColor,\n    tituloEs: 'Estudiantes Activos',\n    tituloEn: 'Active Students'\n  },\n  \n  newEnrollments: {\n    color: 'purple' as StatColor,\n    tituloEs: 'Nuevas Inscripciones',\n    tituloEn: 'New Enrollments'\n  },\n  \n  // Course metrics\n  totalCourses: {\n    color: 'teal' as StatColor,\n    tituloEs: 'Total de Cursos',\n    tituloEn: 'Total Courses'\n  },\n  \n  activeCourses: {\n    color: 'blue' as StatColor,\n    tituloEs: 'Cursos Activos',\n    tituloEn: 'Active Courses'\n  },\n  \n  // Performance metrics\n  attendance: {\n    color: 'green' as StatColor,\n    tituloEs: 'Asistencia',\n    tituloEn: 'Attendance'\n  },\n  \n  completion: {\n    color: 'purple' as StatColor,\n    tituloEs: 'Finalización',\n    tituloEn: 'Completion'\n  }\n} as const\n\n// Hook for managing stat card state with BIRHAUS patterns\nexport function useBirhausStatCard(initialValue: number = 0, refreshInterval?: number) {\n  const [value, setValue] = React.useState(initialValue)\n  const [previousValue, setPreviousValue] = React.useState<number | undefined>(undefined)\n  const [loading, setLoading] = React.useState(false)\n  const [lastUpdated, setLastUpdated] = React.useState<Date>(new Date())\n  \n  const updateValue = React.useCallback((newValue: number) => {\n    setPreviousValue(value)\n    setValue(newValue)\n    setLastUpdated(new Date())\n  }, [value])\n  \n  const refresh = React.useCallback(() => {\n    setLoading(true)\n    // Simulate refresh delay\n    setTimeout(() => {\n      setLoading(false)\n      setLastUpdated(new Date())\n    }, 500)\n  }, [])\n  \n  // Auto-refresh if interval is provided\n  React.useEffect(() => {\n    if (refreshInterval && refreshInterval > 0) {\n      const interval = setInterval(refresh, refreshInterval)\n      return () => clearInterval(interval)\n    }\n  }, [refreshInterval, refresh])\n  \n  const metrics = React.useMemo(() => {\n    return createStatMetrics(value, previousValue)\n  }, [value, previousValue])\n  \n  return {\n    value,\n    setValue: updateValue,\n    previousValue,\n    loading,\n    setLoading,\n    lastUpdated,\n    refresh,\n    metrics\n  }\n}\n\nexport { BirhausStatCard as default }","'use client'\n\nimport { forwardRef, useState, useCallback, useMemo } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils/cn'\nimport { safeAccess, safeArrayAccess } from '../utils/security'\n\n/**\n * BIRHAUS Quick Filter Component\n * \n * Toggle-able filter chip implementing BIRHAUS principles:\n * - Spanish-first labels with English fallbacks\n * - Clear active/inactive visual states\n * - Accessibility compliance (WCAG AA+)\n * - Count badges for cognitive load transparency\n * - Consistent with BIRHAUS color scheme\n * - Performance optimized with minimal re-renders\n */\n\nexport interface BirhausQuickFilterProps {\n  // BIRHAUS Principle #7: Bilingual by design\n  label?: string\n  labelEs?: string\n  labelEn?: string\n  \n  // Visual elements\n  icon?: string | LucideIcon\n  count?: number\n  \n  // State\n  active?: boolean\n  disabled?: boolean\n  loading?: boolean\n  \n  // Interactions\n  onClick?: () => void | Promise<void>\n  \n  // BIRHAUS Principle #6: Accessibility = dignity\n  ariaLabel?: string\n  ariaLabelEs?: string\n  ariaLabelEn?: string\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Styling\n  variant?: 'default' | 'primary' | 'secondary'\n  size?: 'sm' | 'md' | 'lg'\n  className?: string\n}\n\nexport const BirhausQuickFilter = forwardRef<HTMLButtonElement, BirhausQuickFilterProps>(({\n  // Content\n  label,\n  labelEs,\n  labelEn,\n  \n  // Visual elements\n  icon,\n  count,\n  \n  // State\n  active = false,\n  disabled = false,\n  loading = false,\n  \n  // Interactions\n  onClick,\n  \n  // Accessibility\n  ariaLabel,\n  ariaLabelEs,\n  ariaLabelEn,\n  \n  // Locale\n  locale = 'es',\n  \n  // Styling\n  variant = 'default',\n  size = 'md',\n  className,\n  \n  ...props\n}, ref) => {\n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = (\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }\n\n  const displayLabel = getDisplayText(\n    label,\n    labelEs,\n    labelEn,\n    'Filtro'\n  )\n\n  const displayAriaLabel = getDisplayText(\n    ariaLabel,\n    ariaLabelEs || labelEs,\n    ariaLabelEn || labelEn,\n    displayLabel\n  )\n\n  // Handle icon rendering\n  const Icon = typeof icon === 'function' ? icon : null\n  const isEmojiIcon = typeof icon === 'string'\n\n  // Handle async onClick\n  const handleClick = async () => {\n    if (disabled || loading) return\n    await onClick?.()\n  }\n\n  // Size classes\n  const sizeClasses = {\n    sm: {\n      button: 'px-2 py-1 text-xs',\n      icon: 'w-3 h-3 mr-1',\n      badge: 'ml-1 px-1 py-0.5 text-xs'\n    },\n    md: {\n      button: 'px-3 py-1.5 text-sm',\n      icon: 'w-4 h-4 mr-1.5',\n      badge: 'ml-2 px-1.5 py-0.5 text-xs'\n    },\n    lg: {\n      button: 'px-4 py-2 text-base',\n      icon: 'w-5 h-5 mr-2',\n      badge: 'ml-2 px-2 py-1 text-sm'\n    }\n  }\n\n  const sizeConfig = safeAccess(sizeClasses, size, sizeClasses.md)\n\n  // Variant classes\n  const variantClasses = {\n    default: active ? [\n      'border-blue-600 bg-blue-50 text-blue-700',\n      'hover:bg-blue-100 focus:ring-blue-500'\n    ] : [\n      'border-gray-200 bg-white text-gray-700',\n      'hover:bg-gray-50 hover:border-gray-300 focus:ring-gray-500'\n    ],\n    primary: active ? [\n      'border-blue-600 bg-blue-600 text-white',\n      'hover:bg-blue-700 focus:ring-blue-500'\n    ] : [\n      'border-blue-200 bg-blue-50 text-blue-700',\n      'hover:bg-blue-100 hover:border-blue-300 focus:ring-blue-500'\n    ],\n    secondary: active ? [\n      'border-gray-600 bg-gray-600 text-white',\n      'hover:bg-gray-700 focus:ring-gray-500'\n    ] : [\n      'border-gray-300 bg-gray-100 text-gray-700',\n      'hover:bg-gray-200 hover:border-gray-400 focus:ring-gray-500'\n    ]\n  }\n\n  const variantConfig = safeAccess(variantClasses, variant, variantClasses.default)\n  const activeVariantClasses = Array.isArray(variantConfig) \n    ? safeArrayAccess(variantConfig, 0, '')\n    : variantConfig\n  const inactiveVariantClasses = Array.isArray(variantConfig)\n    ? safeArrayAccess(variantConfig, 1, safeArrayAccess(variantConfig, 0, ''))\n    : variantConfig\n\n  return (\n    <button\n      ref={ref}\n      type=\"button\"\n      onClick={handleClick}\n      disabled={disabled || loading}\n      aria-pressed={active}\n      aria-label={displayAriaLabel}\n      className={cn(\n        'inline-flex items-center font-medium rounded-full',\n        'border transition-all duration-200',\n        'focus:outline-none focus:ring-2 focus:ring-offset-1',\n        'disabled:opacity-50 disabled:cursor-not-allowed',\n        sizeConfig.button,\n        active ? activeVariantClasses : inactiveVariantClasses,\n        className\n      )}\n      {...props}\n    >\n      {/* Loading state */}\n      {loading && (\n        <div className=\"animate-spin rounded-full border-2 border-current border-t-transparent w-4 h-4 mr-1.5\" />\n      )}\n\n      {/* Icon or Emoji */}\n      {!loading && icon && (\n        <>\n          {Icon ? (\n            <Icon className={sizeConfig.icon} />\n          ) : isEmojiIcon ? (\n            <span className=\"mr-1.5\">{icon}</span>\n          ) : null}\n        </>\n      )}\n\n      {/* Label */}\n      <span>{displayLabel}</span>\n\n      {/* Count Badge */}\n      {count !== undefined && (\n        <span className={cn(\n          'rounded-full font-medium',\n          sizeConfig.badge,\n          active ? (\n            variant === 'default' \n              ? 'bg-blue-600 text-white'\n              : variant === 'primary' \n                ? 'bg-blue-800 text-white'\n                : 'bg-gray-800 text-white'\n          ) : (\n            variant === 'default'\n              ? 'bg-gray-200 text-gray-600'\n              : variant === 'primary'\n                ? 'bg-blue-200 text-blue-800'\n                : 'bg-gray-300 text-gray-700'\n          )\n        )}>\n          {count}\n        </span>\n      )}\n    </button>\n  )\n})\n\nBirhausQuickFilter.displayName = 'BirhausQuickFilter'\n\n// Hook for managing quick filter state\nexport function useBirhausQuickFilter(initialFilters: Array<{\n  key: string\n  labelEs: string\n  labelEn?: string\n  active?: boolean\n}> = []) {\n  const [filters, setFilters] = useState(initialFilters)\n  \n  const toggleFilter = useCallback((key: string) => {\n    setFilters(prev => prev.map(filter => \n      filter.key === key \n        ? { ...filter, active: !filter.active }\n        : filter\n    ))\n  }, [])\n  \n  const setFilterActive = useCallback((key: string, active: boolean) => {\n    setFilters(prev => prev.map(filter =>\n      filter.key === key\n        ? { ...filter, active }\n        : filter\n    ))\n  }, [])\n  \n  const clearAllFilters = useCallback(() => {\n    setFilters(prev => prev.map(filter => ({ ...filter, active: false })))\n  }, [])\n  \n  const activeFilters = useMemo(() => \n    filters.filter(filter => filter.active)\n  , [filters])\n  \n  return {\n    filters,\n    setFilters,\n    toggleFilter,\n    setFilterActive,\n    clearAllFilters,\n    activeFilters,\n    hasActiveFilters: activeFilters.length > 0,\n    activeCount: activeFilters.length\n  }\n}\n\n// Common filter presets for BIRHAUS applications\nexport const birhausQuickFilterPresets = {\n  // Student management filters\n  studentStatus: [\n    { key: 'active', labelEs: 'Activos', labelEn: 'Active', icon: '👤' },\n    { key: 'inactive', labelEs: 'Inactivos', labelEn: 'Inactive', icon: '💤' },\n    { key: 'graduated', labelEs: 'Graduados', labelEn: 'Graduated', icon: '🎓' },\n    { key: 'pending', labelEs: 'Pendientes', labelEn: 'Pending', icon: '⏳' }\n  ],\n  \n  // Payment filters\n  paymentStatus: [\n    { key: 'paid', labelEs: 'Pagado', labelEn: 'Paid', icon: '✅' },\n    { key: 'pending', labelEs: 'Pendiente', labelEn: 'Pending', icon: '⏳' },\n    { key: 'overdue', labelEs: 'Vencido', labelEn: 'Overdue', icon: '⚠️' },\n    { key: 'cancelled', labelEs: 'Cancelado', labelEn: 'Cancelled', icon: '❌' }\n  ],\n  \n  // Course filters\n  courseStatus: [\n    { key: 'active', labelEs: 'En Curso', labelEn: 'Active', icon: '📚' },\n    { key: 'completed', labelEs: 'Completado', labelEn: 'Completed', icon: '✅' },\n    { key: 'scheduled', labelEs: 'Programado', labelEn: 'Scheduled', icon: '📅' },\n    { key: 'cancelled', labelEs: 'Cancelado', labelEn: 'Cancelled', icon: '❌' }\n  ],\n  \n  // Time period filters\n  timePeriod: [\n    { key: 'today', labelEs: 'Hoy', labelEn: 'Today', icon: '📅' },\n    { key: 'week', labelEs: 'Esta Semana', labelEn: 'This Week', icon: '📊' },\n    { key: 'month', labelEs: 'Este Mes', labelEn: 'This Month', icon: '🗓️' },\n    { key: 'year', labelEs: 'Este Año', labelEn: 'This Year', icon: '📈' }\n  ]\n}","'use client'\n\nimport { forwardRef, ReactNode, useState, useCallback, useMemo } from 'react'\nimport { Search, X, Filter, RotateCcw } from 'lucide-react'\nimport { cn } from '../utils/cn'\nimport { BirhausButton } from './BirhausButton'\nimport { BirhausQuickFilter, type BirhausQuickFilterProps } from './BirhausQuickFilter'\n\n/**\n * BIRHAUS Filter Bar Component\n * \n * Comprehensive filtering interface implementing BIRHAUS principles:\n * - Progressive disclosure (search -> quick filters -> advanced filters)\n * - Spanish-first labels and messages\n * - Miller's Law compliance (max 7±2 quick filters)\n * - 4-3-1 cognitive rule for filter organization\n * - Clear visual feedback for active filters\n * - Accessibility compliance (WCAG AA+)\n * - Undo-over-confirm patterns\n */\n\nexport interface FilterConfig {\n  id: string\n  labelEs: string\n  labelEn?: string\n  type: 'select' | 'multiselect' | 'date' | 'daterange' | 'number' | 'text'\n  options?: Array<{ value: string; labelEs: string; labelEn?: string }>\n  value?: any\n  onChange: (value: any) => void\n  placeholder?: string\n  placeholderEs?: string\n  placeholderEn?: string\n}\n\nexport interface BirhausQuickFilterConfig extends Omit<BirhausQuickFilterProps, 'onClick'> {\n  key: string\n  onClick?: () => void | Promise<void>\n}\n\nexport interface BirhausFilterBarProps {\n  // BIRHAUS Principle #4: Progressive disclosure - Search first\n  search?: {\n    value: string\n    onChange: (value: string) => void\n    placeholder?: string\n    placeholderEs?: string\n    placeholderEn?: string\n    debounceMs?: number\n  }\n  \n  // Quick filters (BIRHAUS 4-3-1 rule: max 4 primary quick filters)\n  quickFilters?: BirhausQuickFilterConfig[]\n  \n  // Advanced filters (progressive disclosure)\n  advancedFilters?: FilterConfig[]\n  showAdvancedFilters?: boolean\n  onToggleAdvancedFilters?: (show: boolean) => void\n  \n  // Custom filter content (for complex scenarios)\n  customFilters?: ReactNode\n  \n  // Results information\n  results?: {\n    count: number\n    labelEs?: string\n    labelEn?: string\n    totalCount?: number\n  }\n  \n  // Actions\n  onClearAll?: () => void | Promise<void>\n  onExport?: () => void | Promise<void>\n  \n  // BIRHAUS Principle #7: Bilingual labels\n  clearAllLabelEs?: string\n  clearAllLabelEn?: string\n  advancedFiltersLabelEs?: string\n  advancedFiltersLabelEn?: string\n  quickFiltersLabelEs?: string\n  quickFiltersLabelEn?: string\n  showingLabelEs?: string\n  showingLabelEn?: string\n  \n  // State\n  loading?: boolean\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Styling\n  variant?: 'default' | 'minimal' | 'card'\n  className?: string\n  children?: ReactNode\n}\n\nexport const BirhausFilterBar = forwardRef<HTMLDivElement, BirhausFilterBarProps>(({\n  // Search\n  search,\n  \n  // Filters\n  quickFilters = [],\n  advancedFilters = [],\n  showAdvancedFilters = false,\n  onToggleAdvancedFilters,\n  customFilters,\n  \n  // Results\n  results,\n  \n  // Actions\n  onClearAll,\n  onExport,\n  \n  // Labels\n  clearAllLabelEs = 'Limpiar filtros',\n  clearAllLabelEn = 'Clear filters',\n  advancedFiltersLabelEs = 'Filtros avanzados',\n  advancedFiltersLabelEn = 'Advanced filters',\n  quickFiltersLabelEs = 'Filtros rápidos:',\n  quickFiltersLabelEn = 'Quick filters:',\n  showingLabelEs = 'Mostrando',\n  showingLabelEn = 'Showing',\n  \n  // State\n  loading = false,\n  \n  // Locale\n  locale = 'es',\n  \n  // Styling\n  variant = 'default',\n  className,\n  children,\n  \n  ...props\n}, ref) => {\n  // Local state for search debouncing\n  const [searchValue, setSearchValue] = useState(search?.value || '')\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getLabel = useCallback((es: string, en?: string) => {\n    return locale === 'es' ? es : (en || es)\n  }, [locale])\n  \n  // BIRHAUS Validation: Check Miller's Law compliance for quick filters\n  const quickFiltersCount = quickFilters.length\n  if (quickFiltersCount > 7) {\n    console.warn(\n      `BIRHAUS FilterBar: ${quickFiltersCount} quick filters exceed Miller's Law recommendation of 7. ` +\n      'Consider grouping filters or using advanced filters section.'\n    )\n  }\n  \n  // Check for active filters\n  const hasActiveQuickFilters = quickFilters.some(filter => filter.active)\n  const hasSearchTerm = Boolean(search?.value)\n  const hasActiveFilters = hasActiveQuickFilters || hasSearchTerm || showAdvancedFilters\n  \n  // Handle search with optional debouncing\n  const handleSearchChange = useCallback((value: string) => {\n    setSearchValue(value)\n    if (search?.debounceMs) {\n      // Implement debouncing if specified\n      const timeoutId = setTimeout(() => {\n        search.onChange(value)\n      }, search.debounceMs)\n      return () => clearTimeout(timeoutId)\n    } else {\n      search?.onChange(value)\n    }\n  }, [search])\n  \n  // Clear search\n  const handleClearSearch = useCallback(() => {\n    setSearchValue('')\n    search?.onChange('')\n  }, [search])\n  \n  // Handle clear all filters\n  const handleClearAll = useCallback(async () => {\n    // Clear search\n    if (search?.value) {\n      handleClearSearch()\n    }\n    \n    // Clear quick filters by calling their onClick handlers if they're active\n    quickFilters.forEach(filter => {\n      if (filter.active && filter.onClick) {\n        filter.onClick()\n      }\n    })\n    \n    // Hide advanced filters\n    if (showAdvancedFilters) {\n      onToggleAdvancedFilters?.(false)\n    }\n    \n    // Call custom clear handler\n    await onClearAll?.()\n  }, [search, quickFilters, showAdvancedFilters, onToggleAdvancedFilters, onClearAll, handleClearSearch])\n  \n  // Variant styles\n  const variantClasses = {\n    default: 'bg-white rounded-xl shadow-sm border border-gray-100 p-6',\n    minimal: 'bg-transparent border-b border-gray-200 pb-4',\n    card: 'bg-gray-50 rounded-lg border border-gray-200 p-4'\n  }\n  \n  return (\n    <div\n      ref={ref}\n      className={cn(\n        'birhaus-filter-bar',\n        variantClasses[variant],\n        className\n      )}\n      role=\"search\"\n      aria-label={getLabel('Barra de filtros', 'Filter bar')}\n      {...props}\n    >\n      <div className=\"space-y-4\">\n        {/* Main Filter Controls Row */}\n        <div className=\"flex flex-col lg:flex-row lg:items-center gap-4\">\n          {/* Search Input */}\n          {search && (\n            <div className=\"relative flex-1 max-w-md\">\n              <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-gray-400\" />\n              <input\n                type=\"text\"\n                placeholder={getLabel(\n                  search.placeholderEs || 'Buscar...', \n                  search.placeholderEn || 'Search...'\n                )}\n                value={searchValue}\n                onChange={(e) => handleSearchChange(e.target.value)}\n                disabled={loading}\n                className={cn(\n                  'w-full pl-10 pr-10 py-2.5 border rounded-lg transition-all duration-200',\n                  'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent',\n                  'disabled:opacity-50 disabled:cursor-not-allowed',\n                  'border-gray-200 bg-white text-gray-900 placeholder:text-gray-400'\n                )}\n                aria-label={getLabel(\n                  search.placeholderEs || 'Buscar elementos',\n                  search.placeholderEn || 'Search items'\n                )}\n              />\n              {searchValue && (\n                <button\n                  onClick={handleClearSearch}\n                  className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600 transition-colors\"\n                  aria-label={getLabel('Limpiar búsqueda', 'Clear search')}\n                >\n                  <X className=\"w-4 h-4\" />\n                </button>\n              )}\n            </div>\n          )}\n          \n          {/* Custom Filters */}\n          {customFilters}\n          \n          {/* Advanced Filters Toggle */}\n          {advancedFilters.length > 0 && (\n            <BirhausButton\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={() => onToggleAdvancedFilters?.(!showAdvancedFilters)}\n              disabled={loading}\n            >\n              <Filter className=\"w-4 h-4 mr-2\" />\n              {getLabel(advancedFiltersLabelEs, advancedFiltersLabelEn)}\n            </BirhausButton>\n          )}\n          \n          {/* Export Button */}\n          {onExport && (\n            <BirhausButton\n              variant=\"secondary\"\n              size=\"sm\"\n              onClick={onExport}\n              disabled={loading}\n            >\n              {getLabel('Exportar', 'Export')}\n            </BirhausButton>\n          )}\n          \n          {/* Additional Controls */}\n          {children}\n        </div>\n        \n        {/* Quick Filters Row */}\n        {quickFilters.length > 0 && (\n          <div className=\"flex items-center flex-wrap gap-4\">\n            <span className=\"text-sm text-gray-600 font-medium\">\n              {getLabel(quickFiltersLabelEs, quickFiltersLabelEn)}\n            </span>\n            <div className=\"flex flex-wrap gap-2\">\n              {quickFilters.map((filter) => {\n                const { key, ...filterProps } = filter\n                return (\n                  <BirhausQuickFilter\n                    key={key}\n                    {...filterProps}\n                    locale={locale}\n                    disabled={loading || filter.disabled}\n                  />\n                )\n              })}\n            </div>\n          </div>\n        )}\n        \n        {/* Advanced Filters Section (Progressive Disclosure) */}\n        {showAdvancedFilters && advancedFilters.length > 0 && (\n          <div className=\"border-t border-gray-200 pt-4\">\n            <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n              {advancedFilters.map((filter) => (\n                <div key={filter.id} className=\"space-y-2\">\n                  <label className=\"block text-sm font-medium text-gray-700\">\n                    {getLabel(filter.labelEs, filter.labelEn)}\n                  </label>\n                  {filter.type === 'select' && (\n                    <select\n                      value={filter.value || ''}\n                      onChange={(e) => filter.onChange(e.target.value)}\n                      className=\"w-full px-3 py-2 border border-gray-200 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n                      disabled={loading}\n                    >\n                      <option value=\"\">\n                        {getLabel(\n                          filter.placeholderEs || 'Seleccionar...',\n                          filter.placeholderEn || 'Select...'\n                        )}\n                      </option>\n                      {filter.options?.map(option => (\n                        <option key={option.value} value={option.value}>\n                          {getLabel(option.labelEs, option.labelEn)}\n                        </option>\n                      ))}\n                    </select>\n                  )}\n                  {/* Add other filter types as needed */}\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n        \n        {/* Results Summary and Clear Actions */}\n        <div className=\"flex items-center justify-between pt-2 border-t border-gray-100\">\n          {/* Results Count */}\n          {results && (\n            <div className=\"flex items-center gap-2\">\n              <p className=\"text-sm text-gray-600\">\n                {getLabel(\n                  results.labelEs || showingLabelEs,\n                  results.labelEn || showingLabelEn\n                )}{' '}\n                <span className=\"font-semibold text-gray-900\">\n                  {results.count.toLocaleString()}\n                </span>\n                {results.totalCount && results.totalCount !== results.count && (\n                  <span className=\"text-gray-500\">\n                    {' '}/{' '}{results.totalCount.toLocaleString()}\n                  </span>\n                )}{' '}\n                {getLabel('resultados', 'results')}\n              </p>\n              {loading && (\n                <div className=\"animate-spin w-4 h-4 border-2 border-gray-200 border-t-blue-600 rounded-full\" />\n              )}\n            </div>\n          )}\n          \n          {/* Clear All Button */}\n          {hasActiveFilters && onClearAll && (\n            <BirhausButton\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={handleClearAll}\n              disabled={loading}\n              className=\"text-blue-600 hover:text-blue-800\"\n            >\n              <RotateCcw className=\"w-4 h-4 mr-1\" />\n              {getLabel(clearAllLabelEs, clearAllLabelEn)}\n            </BirhausButton>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n})\n\nBirhausFilterBar.displayName = 'BirhausFilterBar'\n\n// Hook for managing filter bar state\nexport function useBirhausFilterBar(initialFilters: Record<string, any> = {}) {\n  const [filters, setFilters] = useState(initialFilters)\n  const [searchTerm, setSearchTerm] = useState('')\n  const [showAdvanced, setShowAdvanced] = useState(false)\n  \n  const updateFilter = useCallback((key: string, value: any) => {\n    setFilters(prev => ({ ...prev, [key]: value }))\n  }, [])\n  \n  const clearFilter = useCallback((key: string) => {\n    setFilters(prev => {\n      const updated = { ...prev }\n      delete updated[key]\n      return updated\n    })\n  }, [])\n  \n  const clearAllFilters = useCallback(() => {\n    setFilters({})\n    setSearchTerm('')\n    setShowAdvanced(false)\n  }, [])\n  \n  const activeFilters = useMemo(() => {\n    return Object.entries(filters).filter(([_, value]) => {\n      if (Array.isArray(value)) return value.length > 0\n      return value !== null && value !== undefined && value !== ''\n    })\n  }, [filters])\n  \n  const hasActiveFilters = useMemo(() => {\n    return searchTerm !== '' || activeFilters.length > 0\n  }, [searchTerm, activeFilters])\n  \n  return {\n    // State\n    filters,\n    searchTerm,\n    showAdvanced,\n    \n    // Setters\n    setFilters,\n    setSearchTerm,\n    setShowAdvanced,\n    \n    // Methods\n    updateFilter,\n    clearFilter,\n    clearAllFilters,\n    \n    // Computed\n    activeFilters,\n    hasActiveFilters,\n    activeFiltersCount: activeFilters.length\n  }\n}\n\n// Common filter configurations for BIRHAUS applications\nexport const birhausFilterBarPresets = {\n  // Student management filters\n  studentManagement: {\n    quickFilters: [\n      { key: 'active', labelEs: 'Activos', labelEn: 'Active', icon: '👤' },\n      { key: 'pending', labelEs: 'Pendientes', labelEn: 'Pending', icon: '⏳' },\n      { key: 'graduated', labelEs: 'Graduados', labelEn: 'Graduated', icon: '🎓' }\n    ],\n    advancedFilters: [\n      {\n        id: 'course',\n        labelEs: 'Curso',\n        labelEn: 'Course',\n        type: 'select' as const,\n        options: []\n      },\n      {\n        id: 'enrollmentDate',\n        labelEs: 'Fecha de Matrícula',\n        labelEn: 'Enrollment Date',\n        type: 'daterange' as const\n      }\n    ]\n  },\n  \n  // Financial management filters\n  financialManagement: {\n    quickFilters: [\n      { key: 'paid', labelEs: 'Pagado', labelEn: 'Paid', icon: '✅' },\n      { key: 'pending', labelEs: 'Pendiente', labelEn: 'Pending', icon: '⏳' },\n      { key: 'overdue', labelEs: 'Vencido', labelEn: 'Overdue', icon: '⚠️' }\n    ],\n    advancedFilters: [\n      {\n        id: 'amount',\n        labelEs: 'Monto',\n        labelEn: 'Amount',\n        type: 'number' as const\n      },\n      {\n        id: 'paymentMethod',\n        labelEs: 'Método de Pago',\n        labelEn: 'Payment Method',\n        type: 'select' as const,\n        options: []\n      }\n    ]\n  }\n}","'use client'\n\nimport { forwardRef, ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\n/**\n * BIRHAUS Container Component\n * \n * Responsive container implementing BIRHAUS principles:\n * - Consistent spacing and max-width constraints\n * - 8-point grid system alignment\n * - BIRHAUS performance guidelines (optimal content width)\n * - Accessibility compliance with semantic structure\n * - Responsive design with mobile-first approach\n */\n\nexport interface BirhausContainerProps {\n  // Content\n  children: ReactNode\n  \n  // Container sizing based on BIRHAUS design tokens\n  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\n  \n  // Padding following 8-point grid system\n  padding?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n  \n  // Layout control\n  centered?: boolean\n  \n  // Semantic HTML\n  as?: 'div' | 'section' | 'article' | 'main' | 'aside' | 'header' | 'footer'\n  \n  // Styling\n  className?: string\n}\n\nexport const BirhausContainer = forwardRef<HTMLDivElement, BirhausContainerProps>(({\n  children,\n  size = 'xl',\n  padding = 'md',\n  centered = true,\n  as: Component = 'div',\n  className,\n  ...props\n}, ref) => {\n  // BIRHAUS Design Token: Container max-widths based on content optimization\n  const sizeClasses = {\n    xs: 'max-w-xs',    // 320px - Mobile content\n    sm: 'max-w-sm',    // 384px - Small mobile\n    md: 'max-w-md',    // 448px - Large mobile\n    lg: 'max-w-4xl',   // 896px - Tablet/small desktop (optimal reading width)\n    xl: 'max-w-6xl',   // 1152px - Desktop standard\n    '2xl': 'max-w-7xl', // 1280px - Large desktop\n    full: 'max-w-full' // Full width\n  }\n\n  // BIRHAUS Design Token: 8-point grid system padding\n  const paddingClasses = {\n    none: '',\n    xs: 'px-2 py-1',     // 8px horizontal, 4px vertical\n    sm: 'px-4 py-2',     // 16px horizontal, 8px vertical\n    md: 'px-6 py-4',     // 24px horizontal, 16px vertical\n    lg: 'px-8 py-6',     // 32px horizontal, 24px vertical\n    xl: 'px-12 py-8'     // 48px horizontal, 32px vertical\n  }\n\n  return (\n    <Component\n      ref={ref}\n      className={cn(\n        // Base container styles\n        'w-full',\n        \n        // Size constraints\n        // eslint-disable-next-line security/detect-object-injection -- Safe access with known keys from union type\n        sizeClasses[size],\n        \n        // Centering\n        centered && 'mx-auto',\n        \n        // Padding  \n        // eslint-disable-next-line security/detect-object-injection -- Safe access with known keys from union type\n        paddingClasses[padding],\n        \n        // Custom styles\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </Component>\n  )\n})\n\nBirhausContainer.displayName = 'BirhausContainer'\n\n// Hook for managing responsive container behavior\nexport function useBirhausContainer() {\n  // Could be extended to handle responsive size changes\n  // For now, it's a simple utility for container constants\n  return {\n    sizes: {\n      xs: '320px',\n      sm: '384px', \n      md: '448px',\n      lg: '896px',\n      xl: '1152px',\n      '2xl': '1280px',\n      full: '100%'\n    },\n    \n    // BIRHAUS guideline: optimal content width for readability\n    optimalReadingWidth: 'lg', // 896px - based on typography research\n    \n    // Common breakpoints for responsive design\n    breakpoints: {\n      mobile: 'sm',    // Up to 384px\n      tablet: 'lg',    // Up to 896px  \n      desktop: 'xl',   // Up to 1152px\n      wide: '2xl'      // Up to 1280px\n    }\n  }\n}\n\n// Pre-configured container variants for common use cases\nexport const birhausContainerPresets = {\n  // Page layouts\n  page: {\n    size: 'xl' as const,\n    padding: 'lg' as const,\n    centered: true\n  },\n  \n  // Content sections\n  content: {\n    size: 'lg' as const,\n    padding: 'md' as const,\n    centered: true\n  },\n  \n  // Sidebar content\n  sidebar: {\n    size: 'sm' as const,\n    padding: 'sm' as const,\n    centered: false\n  },\n  \n  // Full-width sections (heroes, banners)\n  fullWidth: {\n    size: 'full' as const,\n    padding: 'lg' as const,\n    centered: false\n  },\n  \n  // Modal/dialog content\n  modal: {\n    size: 'md' as const,\n    padding: 'md' as const,\n    centered: true\n  },\n  \n  // Mobile-optimized\n  mobile: {\n    size: 'sm' as const,\n    padding: 'sm' as const,\n    centered: true\n  }\n}","'use client'\n\nimport { forwardRef, ReactNode, useMemo, Fragment } from 'react'\nimport { ChevronRight, Home } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../utils/cn'\n\n/**\n * BIRHAUS Page Header Component\n * \n * Premium page header implementing BIRHAUS principles:\n * - Spanish-first titles and descriptions\n * - 4-3-1 cognitive rule for actions (max 4 primary, 3 secondary, 1 main)\n * - Accessibility compliance with semantic markup\n * - Elegant gradient design with glassmorphism\n * - Breadcrumb navigation with Spanish labels\n * - Progressive disclosure for complex headers\n */\n\nexport interface BreadcrumbItem {\n  labelEs: string\n  labelEn?: string\n  href?: string\n  icon?: LucideIcon\n  current?: boolean\n}\n\nexport interface BirhausPageHeaderAction {\n  labelEs: string\n  labelEn?: string\n  icon?: LucideIcon\n  onClick: () => void | Promise<void>\n  variant?: 'primary' | 'secondary' | 'ghost'\n  disabled?: boolean\n  loading?: boolean\n}\n\nexport interface BirhausPageHeaderProps {\n  // BIRHAUS Principle #7: Bilingual content\n  title?: string\n  titleEs?: string\n  titleEn?: string\n  \n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n  \n  // Visual elements\n  icon?: LucideIcon\n  \n  // Navigation\n  breadcrumbs?: BreadcrumbItem[]\n  \n  // Actions (BIRHAUS 4-3-1 rule)\n  actions?: BirhausPageHeaderAction[]\n  \n  // Layout variants\n  variant?: 'default' | 'minimal' | 'hero' | 'compact'\n  \n  // BIRHAUS Principle #6: Accessibility\n  level?: 1 | 2 | 3 | 4 | 5 | 6\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Styling\n  className?: string\n  gradient?: 'blue' | 'indigo' | 'purple' | 'gray' | 'emerald'\n  \n  // Custom content\n  children?: ReactNode\n}\n\nexport const BirhausPageHeader = forwardRef<HTMLElement, BirhausPageHeaderProps>(({\n  // Content\n  title,\n  titleEs,\n  titleEn,\n  description,\n  descriptionEs,\n  descriptionEn,\n  \n  // Visual elements\n  icon: Icon,\n  \n  // Navigation\n  breadcrumbs = [],\n  \n  // Actions\n  actions = [],\n  \n  // Layout\n  variant = 'default',\n  level = 1,\n  \n  // Locale\n  locale = 'es',\n  \n  // Styling\n  className,\n  gradient = 'blue',\n  \n  // Custom content\n  children,\n  \n  ...props\n}, ref) => {\n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = (\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }\n\n  const displayTitle = getDisplayText(\n    title,\n    titleEs,\n    titleEn,\n    'Página'\n  )\n\n  const displayDescription = getDisplayText(\n    description,\n    descriptionEs,\n    descriptionEn,\n    ''\n  )\n\n  // BIRHAUS Validation: Check 4-3-1 cognitive rule for actions\n  const actionsCount = actions.length\n  if (actionsCount > 4) {\n    console.warn(\n      `BIRHAUS PageHeader: ${actionsCount} actions exceed the 4-3-1 cognitive rule recommendation of 4. ` +\n      'Consider consolidating actions or using a dropdown menu.'\n    )\n  }\n\n  // Group actions by priority\n  const primaryActions = actions.filter(action => action.variant === 'primary' || !action.variant)\n  const secondaryActions = actions.filter(action => action.variant === 'secondary')\n  const ghostActions = actions.filter(action => action.variant === 'ghost')\n\n  // Validate BIRHAUS 4-3-1 rule more specifically\n  if (primaryActions.length > 4) {\n    console.warn(`BIRHAUS PageHeader: ${primaryActions.length} primary actions exceed 4-3-1 rule maximum of 4`)\n  }\n  if (secondaryActions.length > 3) {\n    console.warn(`BIRHAUS PageHeader: ${secondaryActions.length} secondary actions exceed 4-3-1 rule maximum of 3`)\n  }\n  if (ghostActions.length > 1) {\n    console.warn(`BIRHAUS PageHeader: ${ghostActions.length} ghost actions exceed 4-3-1 rule maximum of 1`)\n  }\n\n  // Gradient configurations\n  const gradientClasses = {\n    blue: 'from-blue-600 to-blue-700',\n    indigo: 'from-indigo-600 to-indigo-700', \n    purple: 'from-purple-600 to-purple-700',\n    gray: 'from-gray-600 to-gray-700',\n    emerald: 'from-emerald-600 to-emerald-700'\n  }\n\n  // Variant styles\n  const variantClasses = {\n    default: {\n      container: 'space-y-6',\n      header: 'bg-gradient-to-br rounded-2xl p-6 text-white shadow-lg',\n      title: 'text-3xl font-bold',\n      description: 'text-white/80 mt-2'\n    },\n    minimal: {\n      container: 'space-y-4',\n      header: 'border-b border-gray-200 pb-6',\n      title: 'text-2xl font-semibold text-gray-900',\n      description: 'text-gray-600 mt-1'\n    },\n    hero: {\n      container: 'space-y-8',\n      header: 'bg-gradient-to-br rounded-3xl p-8 text-white shadow-xl',\n      title: 'text-4xl md:text-5xl font-bold',\n      description: 'text-white/90 mt-3 text-lg'\n    },\n    compact: {\n      container: 'space-y-3',\n      header: 'bg-gradient-to-r rounded-lg p-4 text-white shadow-md',\n      title: 'text-xl font-semibold',\n      description: 'text-white/80 mt-1 text-sm'\n    }\n  }\n\n  const variantConfig = variantClasses[variant]\n\n  // Generate appropriate heading tag\n  const HeadingTag = `h${level}` as keyof JSX.IntrinsicElements\n\n  // Action button component\n  const ActionButton = ({ action }: { action: BirhausPageHeaderAction }) => {\n    const displayLabel = getDisplayText(\n      undefined,\n      action.labelEs,\n      action.labelEn,\n      'Acción'\n    )\n\n    const buttonVariantClasses = {\n      primary: variant === 'minimal' \n        ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n        : 'bg-white/20 backdrop-blur text-white hover:bg-white/30 focus:ring-white/50',\n      secondary: variant === 'minimal'\n        ? 'bg-white border border-gray-200 text-gray-700 hover:bg-gray-50 focus:ring-gray-500'\n        : 'bg-white/10 backdrop-blur border border-white/20 text-white hover:bg-white/20 focus:ring-white/30',\n      ghost: variant === 'minimal'\n        ? 'text-gray-600 hover:text-gray-900 hover:bg-gray-100 focus:ring-gray-500'\n        : 'text-white/80 hover:text-white hover:bg-white/10 focus:ring-white/30'\n    }\n\n    return (\n      <button\n        type=\"button\"\n        onClick={action.onClick}\n        disabled={action.disabled || action.loading}\n        className={cn(\n          'inline-flex items-center px-4 py-2 text-sm font-medium rounded-lg',\n          'focus:outline-none focus:ring-2 focus:ring-offset-1 transition-all duration-200',\n          'disabled:opacity-50 disabled:cursor-not-allowed',\n          buttonVariantClasses[action.variant || 'primary']\n        )}\n        aria-label={displayLabel}\n      >\n        {action.loading && (\n          <div className=\"animate-spin w-4 h-4 border-2 border-current border-t-transparent rounded-full mr-2\" />\n        )}\n        {!action.loading && action.icon && (\n          <action.icon className=\"w-4 h-4 mr-2\" />\n        )}\n        {displayLabel}\n      </button>\n    )\n  }\n\n  return (\n    <header\n      ref={ref}\n      className={cn('birhaus-page-header', variantConfig.container, className)}\n      {...props}\n    >\n      {/* Breadcrumb Navigation */}\n      {breadcrumbs.length > 0 && (\n        <nav \n          className=\"flex items-center space-x-1 text-sm text-gray-600\"\n          aria-label={locale === 'es' ? 'Navegación' : 'Navigation'}\n        >\n          <Home className=\"w-4 h-4\" />\n          {breadcrumbs.map((crumb, index) => {\n            const displayLabel = getDisplayText(\n              undefined,\n              crumb.labelEs,\n              crumb.labelEn,\n              'Página'\n            )\n\n            return (\n              <Fragment key={index}>\n                <ChevronRight className=\"w-4 h-4 text-gray-400\" />\n                {crumb.href && !crumb.current ? (\n                  <a\n                    href={crumb.href}\n                    className=\"hover:text-gray-900 transition-colors font-medium\"\n                    aria-current={crumb.current ? 'page' : undefined}\n                  >\n                    {crumb.icon && <crumb.icon className=\"w-4 h-4 mr-1 inline\" />}\n                    {displayLabel}\n                  </a>\n                ) : (\n                  <span \n                    className={cn(\n                      'font-medium',\n                      crumb.current ? 'text-gray-900' : 'text-gray-600'\n                    )}\n                    aria-current={crumb.current ? 'page' : undefined}\n                  >\n                    {crumb.icon && <crumb.icon className=\"w-4 h-4 mr-1 inline\" />}\n                    {displayLabel}\n                  </span>\n                )}\n              </Fragment>\n            )\n          })}\n        </nav>\n      )}\n\n      {/* Main Header */}\n      <div className={cn(\n        variantConfig.header,\n        variant === 'default' || variant === 'hero' || variant === 'compact' \n          ? gradientClasses[gradient] \n          : ''\n      )}>\n        <div className=\"flex items-start justify-between gap-6\">\n          {/* Title and Description */}\n          <div className=\"flex items-start space-x-4 min-w-0 flex-1\">\n            {/* Icon */}\n            {Icon && (\n              <div className={cn(\n                'flex-shrink-0 rounded-full flex items-center justify-center',\n                variant === 'minimal' \n                  ? 'w-10 h-10 bg-gray-100 text-gray-600'\n                  : variant === 'hero'\n                    ? 'w-16 h-16 bg-white/20 backdrop-blur text-white'\n                    : 'w-12 h-12 bg-white/20 backdrop-blur text-white'\n              )}>\n                <Icon className={cn(\n                  variant === 'hero' ? 'w-8 h-8' : 'w-6 h-6'\n                )} />\n              </div>\n            )}\n            \n            {/* Title and Description */}\n            <div className=\"min-w-0 flex-1\">\n              <HeadingTag className={cn(variantConfig.title, 'leading-tight')}>\n                {displayTitle}\n              </HeadingTag>\n              {displayDescription && (\n                <p className={cn(variantConfig.description, 'leading-relaxed')}>\n                  {displayDescription}\n                </p>\n              )}\n              {/* Custom content */}\n              {children}\n            </div>\n          </div>\n\n          {/* Actions */}\n          {actions.length > 0 && (\n            <div className=\"flex items-start space-x-3 flex-shrink-0\">\n              {actions.map((action, index) => (\n                <ActionButton key={index} action={action} />\n              ))}\n            </div>\n          )}\n        </div>\n      </div>\n    </header>\n  )\n})\n\nBirhausPageHeader.displayName = 'BirhausPageHeader'\n\n// Hook for managing page header state\nexport function useBirhausPageHeader() {\n  const createBreadcrumb = (\n    labelEs: string,\n    labelEn?: string,\n    href?: string,\n    options: Partial<BreadcrumbItem> = {}\n  ): BreadcrumbItem => ({\n    labelEs,\n    labelEn,\n    href,\n    ...options\n  })\n\n  const createAction = (\n    labelEs: string,\n    onClick: () => void,\n    options: Partial<BirhausPageHeaderAction> = {}\n  ): BirhausPageHeaderAction => ({\n    labelEs,\n    onClick,\n    variant: 'primary',\n    ...options\n  })\n\n  return {\n    createBreadcrumb,\n    createAction,\n    \n    // Common breadcrumb patterns\n    homeBreadcrumb: {\n      labelEs: 'Inicio',\n      labelEn: 'Home',\n      href: '/',\n      icon: Home\n    }\n  }\n}\n\n// Common page header configurations\nexport const birhausPageHeaderPresets = {\n  // Dashboard pages\n  dashboard: {\n    variant: 'hero' as const,\n    gradient: 'blue' as const,\n    titleEs: 'Panel de Control',\n    titleEn: 'Dashboard'\n  },\n  \n  // List pages\n  listPage: {\n    variant: 'default' as const,\n    gradient: 'indigo' as const\n  },\n  \n  // Detail pages  \n  detailPage: {\n    variant: 'compact' as const,\n    gradient: 'gray' as const\n  },\n  \n  // Settings pages\n  settings: {\n    variant: 'minimal' as const,\n    titleEs: 'Configuración',\n    titleEn: 'Settings'\n  },\n  \n  // Reports pages\n  reports: {\n    variant: 'default' as const,\n    gradient: 'emerald' as const,\n    titleEs: 'Reportes',\n    titleEn: 'Reports'\n  }\n}","'use client'\n\nimport { forwardRef, ReactNode, useState, useCallback } from 'react'\nimport { cn } from '../utils/cn'\nimport { BirhausContainer, type BirhausContainerProps } from './BirhausContainer'\nimport { BirhausPageHeader, type BirhausPageHeaderProps } from './BirhausPageHeader'\nimport { safeAccess } from '../utils/security'\n\n/**\n * BIRHAUS Page Layout Component\n * \n * Complete page layout system implementing BIRHAUS principles:\n * - Progressive disclosure (header -> content -> sidebar)\n * - Spanish-first navigation and labels\n * - Miller's Law compliance for navigation sections\n * - Accessibility-first semantic structure\n * - Responsive design with mobile-first approach\n * - Cognitive load optimization through layout patterns\n * - Performance-optimized with sticky positioning\n */\n\nexport interface BirhausPageLayoutProps {\n  // Content sections\n  children: ReactNode\n  \n  // Header configuration\n  header?: Omit<BirhausPageHeaderProps, 'ref'>\n  \n  // Navigation\n  breadcrumbs?: ReactNode\n  tabs?: ReactNode\n  \n  // Sidebar (progressive disclosure)\n  sidebar?: ReactNode\n  sidebarPosition?: 'left' | 'right'\n  sidebarWidth?: 'sm' | 'md' | 'lg'\n  sidebarSticky?: boolean\n  \n  // Container configuration\n  containerSize?: BirhausContainerProps['size']\n  containerPadding?: BirhausContainerProps['padding']\n  \n  // Layout variants\n  variant?: 'default' | 'fullwidth' | 'centered' | 'dashboard'\n  \n  // Background and styling\n  background?: 'default' | 'gray' | 'white' | 'gradient'\n  \n  // Loading states\n  loading?: boolean\n  loadingMessage?: string\n  loadingMessageEs?: string\n  loadingMessageEn?: string\n  \n  // BIRHAUS Principle #6: Accessibility\n  skipToContentLabel?: string\n  skipToContentLabelEs?: string\n  skipToContentLabelEn?: string\n  \n  // Locale\n  locale?: 'es' | 'en'\n  \n  // Styling\n  className?: string\n  headerClassName?: string\n  contentClassName?: string\n  sidebarClassName?: string\n  \n  // Layout behavior\n  collapsibleSidebar?: boolean\n  onSidebarToggle?: (collapsed: boolean) => void\n}\n\nexport const BirhausPageLayout = forwardRef<HTMLDivElement, BirhausPageLayoutProps>(({\n  // Content\n  children,\n  \n  // Header\n  header,\n  \n  // Navigation\n  breadcrumbs,\n  tabs,\n  \n  // Sidebar\n  sidebar,\n  sidebarPosition = 'right',\n  sidebarWidth = 'md',\n  sidebarSticky = true,\n  \n  // Container\n  containerSize = 'xl',\n  containerPadding = 'lg',\n  \n  // Layout\n  variant = 'default',\n  background = 'default',\n  \n  // Loading\n  loading = false,\n  loadingMessage,\n  loadingMessageEs = 'Cargando...',\n  loadingMessageEn = 'Loading...',\n  \n  // Accessibility\n  skipToContentLabel,\n  skipToContentLabelEs = 'Saltar al contenido principal',\n  skipToContentLabelEn = 'Skip to main content',\n  \n  // Locale\n  locale = 'es',\n  \n  // Styling\n  className,\n  headerClassName,\n  contentClassName,\n  sidebarClassName,\n  \n  // Behavior\n  collapsibleSidebar = false,\n  onSidebarToggle,\n  \n  ...props\n}, ref) => {\n  // Local state for collapsible sidebar\n  const [sidebarCollapsed, setSidebarCollapsed] = useState(false)\n  \n  // BIRHAUS Principle #7: Spanish-first text resolution\n  const getDisplayText = useCallback((\n    primary: string | undefined,\n    spanish: string | undefined,\n    english: string | undefined,\n    fallback: string\n  ): string => {\n    if (locale === 'es') {\n      return primary || spanish || english || fallback\n    }\n    return primary || english || spanish || fallback\n  }, [locale])\n\n  // Handle sidebar toggle\n  const handleSidebarToggle = useCallback(() => {\n    const newCollapsed = !sidebarCollapsed\n    setSidebarCollapsed(newCollapsed)\n    onSidebarToggle?.(newCollapsed)\n  }, [sidebarCollapsed, onSidebarToggle])\n\n  // Background styles\n  const backgroundClasses = {\n    default: 'bg-gray-50',\n    gray: 'bg-gray-100',\n    white: 'bg-white',\n    gradient: 'bg-gradient-to-br from-gray-50 to-gray-100'\n  }\n\n  // Sidebar width classes\n  const sidebarWidthClasses = {\n    sm: 'w-64',  // 256px\n    md: 'w-80',  // 320px\n    lg: 'w-96'   // 384px\n  }\n\n  // Variant-specific styles\n  const variantClasses = {\n    default: {\n      layout: 'min-h-screen',\n      content: 'flex-1'\n    },\n    fullwidth: {\n      layout: 'min-h-screen',\n      content: 'flex-1'\n    },\n    centered: {\n      layout: 'min-h-screen flex items-center justify-center',\n      content: 'w-full max-w-4xl'\n    },\n    dashboard: {\n      layout: 'min-h-screen',\n      content: 'flex-1'\n    }\n  }\n\n  const variantConfig = safeAccess(variantClasses, variant, variantClasses.default)\n\n  // Skip link (BIRHAUS Principle #6: Accessibility)\n  const skipLabel = getDisplayText(\n    skipToContentLabel,\n    skipToContentLabelEs,\n    skipToContentLabelEn,\n    skipToContentLabelEs\n  )\n\n  const displayLoadingMessage = getDisplayText(\n    loadingMessage,\n    loadingMessageEs,\n    loadingMessageEn,\n    loadingMessageEs\n  )\n\n  // Loading state\n  if (loading) {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'min-h-screen flex items-center justify-center',\n          safeAccess(backgroundClasses, background, backgroundClasses.default),\n          className\n        )}\n        role=\"status\"\n        aria-live=\"polite\"\n        {...props}\n      >\n        <div className=\"text-center space-y-4\">\n          <div className=\"animate-spin w-8 h-8 border-4 border-gray-200 border-t-blue-600 rounded-full mx-auto\" />\n          <p className=\"text-gray-600\">{displayLoadingMessage}</p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        'birhaus-page-layout',\n        variantConfig.layout,\n        safeAccess(backgroundClasses, background, backgroundClasses.default),\n        className\n      )}\n      {...props}\n    >\n      {/* Skip to content link (BIRHAUS Accessibility) */}\n      <a\n        href=\"#birhaus-main-content\"\n        className={cn(\n          'sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4',\n          'bg-blue-600 text-white px-4 py-2 rounded-lg font-medium',\n          'focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2',\n          'z-50 transition-all duration-200'\n        )}\n      >\n        {skipLabel}\n      </a>\n\n      {/* Header Section */}\n      {(header || breadcrumbs || tabs) && (\n        <div className={cn(\n          'bg-white border-b border-gray-200 relative z-10',\n          headerClassName\n        )}>\n          <BirhausContainer size={containerSize} padding={containerPadding}>\n            {/* Breadcrumbs */}\n            {breadcrumbs && (\n              <div className=\"mb-6\">\n                {breadcrumbs}\n              </div>\n            )}\n            \n            {/* Page Header */}\n            {header && (\n              <BirhausPageHeader\n                {...header}\n                locale={locale}\n                className={cn('mb-0', header.className)}\n              />\n            )}\n            \n            {/* Tabs Navigation */}\n            {tabs && (\n              <div className=\"mt-6 border-t border-gray-100 pt-6\">\n                {tabs}\n              </div>\n            )}\n          </BirhausContainer>\n        </div>\n      )}\n\n      {/* Main Content Area */}\n      <div className={variantConfig.content}>\n        <BirhausContainer \n          size={variant === 'fullwidth' ? 'full' : containerSize} \n          padding={containerPadding}\n        >\n          <div className={cn(\n            'flex gap-6',\n            variant === 'centered' && 'justify-center',\n            contentClassName\n          )}>\n            {/* Left Sidebar */}\n            {sidebar && sidebarPosition === 'left' && (\n              <aside className={cn(\n                'flex-shrink-0 transition-all duration-300',\n                safeAccess(sidebarWidthClasses, sidebarWidth, sidebarWidthClasses.md),\n                collapsibleSidebar && sidebarCollapsed && 'w-16',\n                sidebarClassName\n              )}>\n                <div className={cn(\n                  sidebarSticky && 'sticky top-6'\n                )}>\n                  {/* Collapse/Expand Button */}\n                  {collapsibleSidebar && (\n                    <button\n                      onClick={handleSidebarToggle}\n                      className={cn(\n                        'mb-4 p-2 rounded-lg bg-white border border-gray-200',\n                        'hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500',\n                        'transition-colors duration-200'\n                      )}\n                      aria-label={\n                        locale === 'es' \n                          ? (sidebarCollapsed ? 'Expandir sidebar' : 'Contraer sidebar')\n                          : (sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar')\n                      }\n                    >\n                      <div className={cn(\n                        'w-4 h-4 transition-transform duration-200',\n                        sidebarCollapsed && 'rotate-180'\n                      )}>\n                        {'◀'}\n                      </div>\n                    </button>\n                  )}\n                  {sidebar}\n                </div>\n              </aside>\n            )}\n\n            {/* Main Content */}\n            <main \n              id=\"birhaus-main-content\"\n              className={cn(\n                'flex-1',\n                sidebar ? 'min-w-0' : '',\n                variant === 'centered' && 'max-w-none'\n              )}\n              role=\"main\"\n            >\n              {children}\n            </main>\n\n            {/* Right Sidebar */}\n            {sidebar && sidebarPosition === 'right' && (\n              <aside className={cn(\n                'flex-shrink-0 transition-all duration-300',\n                safeAccess(sidebarWidthClasses, sidebarWidth, sidebarWidthClasses.md),\n                collapsibleSidebar && sidebarCollapsed && 'w-16',\n                sidebarClassName\n              )}>\n                <div className={cn(\n                  sidebarSticky && 'sticky top-6'\n                )}>\n                  {/* Collapse/Expand Button */}\n                  {collapsibleSidebar && (\n                    <button\n                      onClick={handleSidebarToggle}\n                      className={cn(\n                        'mb-4 p-2 rounded-lg bg-white border border-gray-200',\n                        'hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500',\n                        'transition-colors duration-200'\n                      )}\n                      aria-label={\n                        locale === 'es' \n                          ? (sidebarCollapsed ? 'Expandir sidebar' : 'Contraer sidebar')\n                          : (sidebarCollapsed ? 'Expand sidebar' : 'Collapse sidebar')\n                      }\n                    >\n                      <div className={cn(\n                        'w-4 h-4 transition-transform duration-200',\n                        sidebarCollapsed && 'rotate-180'\n                      )}>\n                        {'▶'}\n                      </div>\n                    </button>\n                  )}\n                  {sidebar}\n                </div>\n              </aside>\n            )}\n          </div>\n        </BirhausContainer>\n      </div>\n    </div>\n  )\n})\n\nBirhausPageLayout.displayName = 'BirhausPageLayout'\n\n// Hook for managing page layout state\nexport function useBirhausPageLayout() {\n  const [sidebarVisible, setSidebarVisible] = useState(true)\n  const [currentTab, setCurrentTab] = useState<string | null>(null)\n  \n  const toggleSidebar = useCallback(() => {\n    setSidebarVisible(prev => !prev)\n  }, [])\n  \n  const hideSidebar = useCallback(() => {\n    setSidebarVisible(false)\n  }, [])\n  \n  const showSidebar = useCallback(() => {\n    setSidebarVisible(true)\n  }, [])\n  \n  return {\n    // Sidebar state\n    sidebarVisible,\n    setSidebarVisible,\n    toggleSidebar,\n    hideSidebar,\n    showSidebar,\n    \n    // Tab state\n    currentTab,\n    setCurrentTab,\n    \n    // Layout utilities\n    getResponsiveContainer: (isMobile: boolean) => isMobile ? 'sm' : 'xl',\n    getResponsivePadding: (isMobile: boolean) => isMobile ? 'sm' : 'lg'\n  }\n}\n\n// Pre-configured layout templates for common page types\nexport const birhausPageLayoutPresets = {\n  // Dashboard layout\n  dashboard: {\n    variant: 'dashboard' as const,\n    background: 'default' as const,\n    containerSize: 'xl' as const,\n    header: {\n      variant: 'hero' as const,\n      gradient: 'blue' as const,\n      titleEs: 'Panel de Control',\n      titleEn: 'Dashboard'\n    }\n  },\n  \n  // List/Table view\n  listView: {\n    variant: 'default' as const,\n    background: 'default' as const,\n    containerSize: 'xl' as const,\n    header: {\n      variant: 'default' as const,\n      gradient: 'indigo' as const\n    },\n    sidebarPosition: 'left' as const,\n    sidebarWidth: 'sm' as const\n  },\n  \n  // Detail/Form view\n  detailView: {\n    variant: 'default' as const,\n    background: 'white' as const,\n    containerSize: 'lg' as const,\n    header: {\n      variant: 'compact' as const,\n      gradient: 'gray' as const\n    }\n  },\n  \n  // Settings pages\n  settings: {\n    variant: 'default' as const,\n    background: 'gray' as const,\n    containerSize: 'lg' as const,\n    header: {\n      variant: 'minimal' as const,\n      titleEs: 'Configuración',\n      titleEn: 'Settings'\n    },\n    sidebarPosition: 'left' as const,\n    sidebarWidth: 'sm' as const\n  },\n  \n  // Report/Analytics\n  analytics: {\n    variant: 'dashboard' as const,\n    background: 'gradient' as const,\n    containerSize: 'xl' as const,\n    header: {\n      variant: 'hero' as const,\n      gradient: 'emerald' as const,\n      titleEs: 'Análisis',\n      titleEn: 'Analytics'\n    }\n  },\n  \n  // Modal/Dialog content\n  modal: {\n    variant: 'centered' as const,\n    background: 'white' as const,\n    containerSize: 'md' as const,\n    containerPadding: 'md' as const,\n    header: {\n      variant: 'minimal' as const\n    }\n  }\n}","/**\n * BIRHAUS Performance Budgets\n * \n * These constants define the performance and cognitive load limits\n * that all BIRHAUS components must adhere to.\n */\n\nexport const BIRHAUS_PERFORMANCE = {\n  /**\n   * Bundle and asset size limits (in bytes)\n   */\n  BUDGETS: {\n    MAX_BUNDLE_SIZE: 200_000,        // 200KB compressed total bundle\n    MAX_COMPONENT_SIZE: 50_000,      // 50KB per individual component\n    MAX_THEME_SIZE: 25_000,          // 25KB per theme\n    MAX_ICON_SIZE: 2_000,            // 2KB per SVG icon\n    MAX_IMAGE_SIZE: 100_000,         // 100KB per image\n    MAX_FONT_SIZE: 50_000,           // 50KB per font file\n  },\n\n  /**\n   * Core Web Vitals and performance metrics\n   */\n  WEB_VITALS: {\n    MAX_TTI: 2000,                   // Time to Interactive (ms)\n    MAX_FCP: 1000,                   // First Contentful Paint (ms)\n    MAX_LCP: 2500,                   // Largest Contentful Paint (ms)\n    MAX_CLS: 0.1,                    // Cumulative Layout Shift\n    MAX_INP: 200,                    // Interaction to Next Paint (ms)\n    MAX_TBT: 300,                    // Total Blocking Time (ms)\n    MIN_FID: 100,                    // First Input Delay (ms)\n  },\n\n  /**\n   * Cognitive load and UX performance limits\n   */\n  COGNITIVE: {\n    MAX_ANIMATION_DURATION: 300,     // Maximum animation time (ms)\n    MIN_ANIMATION_DURATION: 150,     // Minimum for perceived responsiveness\n    MAX_TRANSITION_DURATION: 200,    // CSS transition duration\n    MIN_TOUCH_TARGET: 44,            // Minimum touch target size (px)\n    MIN_CONTRAST_RATIO: 4.5,         // WCAG AA compliance\n    MAX_SIMULTANEOUS_ANIMATIONS: 2,  // Prevent cognitive overload\n    MAX_MODAL_STACK: 2,              // Maximum nested modals\n    MAX_TOAST_STACK: 3,              // Maximum concurrent notifications\n  },\n\n  /**\n   * Network and loading performance\n   */\n  NETWORK: {\n    MAX_API_RESPONSE_TIME: 1000,     // API response time (ms)\n    MAX_CONCURRENT_REQUESTS: 6,      // Simultaneous network requests\n    MAX_RETRY_ATTEMPTS: 3,           // API retry limit\n    CACHE_TTL: 300_000,              // 5 minutes cache TTL\n    OFFLINE_CACHE_SIZE: 50_000_000,  // 50MB offline cache limit\n  },\n\n  /**\n   * Memory and resource usage\n   */\n  MEMORY: {\n    MAX_DOM_NODES: 1500,             // Maximum DOM elements\n    MAX_EVENT_LISTENERS: 100,        // Event listener limit\n    MAX_COMPONENT_INSTANCES: 50,     // Per component type\n    MAX_STATE_SIZE: 1_000_000,       // 1MB state object size\n    MEMORY_LEAK_THRESHOLD: 10_000_000, // 10MB memory leak threshold\n  },\n\n  /**\n   * Accessibility performance\n   */\n  ACCESSIBILITY: {\n    MAX_TAB_STOPS: 20,               // Maximum tab stops per view\n    MIN_FOCUS_INDICATOR: 2,          // Minimum focus outline width (px)\n    MAX_HEADING_LEVELS: 6,           // H1-H6 semantic structure\n    MIN_COLOR_CONTRAST: 4.5,         // Text contrast ratio\n    MIN_COLOR_CONTRAST_LARGE: 3.0,   // Large text contrast ratio\n    MAX_ALT_TEXT_LENGTH: 125,        // Alt text character limit\n  }\n} as const\n\n/**\n * Performance monitoring and alerting thresholds\n */\nexport const BIRHAUS_ALERTS = {\n  /**\n   * Warning thresholds (80% of limits)\n   */\n  WARNING: {\n    BUNDLE_SIZE: Math.floor(BIRHAUS_PERFORMANCE.BUDGETS.MAX_BUNDLE_SIZE * 0.8),\n    TTI: Math.floor(BIRHAUS_PERFORMANCE.WEB_VITALS.MAX_TTI * 0.8),\n    DOM_NODES: Math.floor(BIRHAUS_PERFORMANCE.MEMORY.MAX_DOM_NODES * 0.8),\n    API_RESPONSE: Math.floor(BIRHAUS_PERFORMANCE.NETWORK.MAX_API_RESPONSE_TIME * 0.8),\n  },\n\n  /**\n   * Critical thresholds (95% of limits)\n   */\n  CRITICAL: {\n    BUNDLE_SIZE: Math.floor(BIRHAUS_PERFORMANCE.BUDGETS.MAX_BUNDLE_SIZE * 0.95),\n    TTI: Math.floor(BIRHAUS_PERFORMANCE.WEB_VITALS.MAX_TTI * 0.95),\n    DOM_NODES: Math.floor(BIRHAUS_PERFORMANCE.MEMORY.MAX_DOM_NODES * 0.95),\n    API_RESPONSE: Math.floor(BIRHAUS_PERFORMANCE.NETWORK.MAX_API_RESPONSE_TIME * 0.95),\n  }\n} as const\n\n/**\n * Lighthouse scoring weights for Birhaus Score calculation\n */\nexport const BIRHAUS_SCORING = {\n  WEIGHTS: {\n    PERFORMANCE: 0.4,                // 40% of total score\n    ACCESSIBILITY: 0.3,              // 30% of total score\n    COGNITIVE_LOAD: 0.2,             // 20% of total score (Miller's Law, etc.)\n    SPANISH_COVERAGE: 0.1,           // 10% of total score\n  },\n  \n  PENALTIES: {\n    CONFIRMATION_DIALOG: -10,        // -10 points per confirmation dialog\n    MILLER_LAW_VIOLATION: -5,        // -5 points per Miller's Law violation\n    MISSING_SPANISH_LABEL: -2,       // -2 points per missing Spanish label\n    ACCESSIBILITY_VIOLATION: -3,     // -3 points per a11y violation\n    PERFORMANCE_BUDGET_EXCEEDED: -5, // -5 points per budget violation\n  },\n\n  BONUSES: {\n    UNDO_PATTERN_IMPLEMENTED: 5,     // +5 points per undo pattern\n    PROGRESSIVE_DISCLOSURE: 3,       // +3 points per progressive disclosure\n    SPANISH_FIRST_DESIGN: 2,         // +2 points for Spanish-first approach\n    WCAG_AAA_COMPLIANCE: 5,          // +5 points for exceeding WCAG AA\n    PERFORMANCE_EXCELLENCE: 3,       // +3 points for exceeding performance budgets\n  }\n} as const\n\n/**\n * Type definitions for performance monitoring\n */\nexport interface PerformanceMetrics {\n  bundleSize: number\n  componentSize: number\n  ttiduration: number\n  fcp: number\n  lcp: number\n  cls: number\n  inp: number\n  domNodes: number\n  memoryUsage: number\n  apiResponseTime: number\n  accessibilityScore: number\n}\n\nexport interface CognitiveLoadMetrics {\n  navigationItems: number\n  formFields: number\n  selectOptions: number\n  modalStack: number\n  confirmationDialogs: number\n  undoPatterns: number\n  millerLawViolations: number\n}\n\nexport interface BirhausScore {\n  total: number                      // 0-100 total score\n  performance: number                // Performance subscore\n  accessibility: number             // Accessibility subscore\n  cognitiveLoad: number             // Cognitive load subscore\n  spanishCoverage: number           // Spanish coverage subscore\n  violations: string[]              // List of violations\n  recommendations: string[]          // Improvement recommendations\n  timestamp: Date                   // When score was calculated\n}\n\n/**\n * Default Birhaus performance configuration\n */\nexport const DEFAULT_BIRHAUS_CONFIG = {\n  strictMode: true,\n  cognitiveLoadTracking: true,\n  performanceBudgets: true,\n  accessibilityValidation: true,\n  spanishFirst: true,\n  undoOverConfirm: true,\n  millerLawEnforcement: true,\n  progressiveDisclosure: true,\n} as const\n\n/**\n * Environment-specific configurations\n */\nexport const BIRHAUS_ENV_CONFIG = {\n  development: {\n    ...DEFAULT_BIRHAUS_CONFIG,\n    strictMode: true,\n    showWarnings: true,\n    detailedLogging: true,\n    performanceMonitoring: true,\n  },\n  \n  production: {\n    ...DEFAULT_BIRHAUS_CONFIG,\n    strictMode: false,\n    showWarnings: false,\n    detailedLogging: false,\n    performanceMonitoring: true,\n    analyticsEnabled: true,\n  },\n  \n  testing: {\n    ...DEFAULT_BIRHAUS_CONFIG,\n    strictMode: true,\n    showWarnings: false,\n    detailedLogging: false,\n    performanceMonitoring: false,\n  }\n} as const"]}