shekel-fe-shared-lib 1.0.9 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/components/Button.tsx","../src/components/StatCard.tsx","../src/components/SearchInput.tsx","../src/components/Card.tsx","../src/components/Dropdown.tsx","../src/components/Select.tsx","../src/components/Table.tsx","../src/components/TableTop.tsx","../src/components/Modal.tsx","../src/components/Badge.tsx","../src/components/Steps.tsx","../src/components/Progress.tsx","../src/components/Checkbox.tsx","../src/components/SelectedItemsList.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes, CSSProperties, FC, ReactNode } from 'react';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'outlined' | 'ghost' | 'text';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n loading?: boolean;\n hoverColor?: string;\n bgColor?: string;\n textColor?: string;\n borderColor?: string;\n hoverBgColor?: string;\n hoverTextColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Button: FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n icon,\n iconPosition = 'left',\n loading = false,\n hoverColor,\n bgColor,\n textColor,\n borderColor,\n hoverBgColor,\n hoverTextColor,\n rounded = 'lg',\n style,\n className = '',\n children,\n disabled,\n ...props\n}) => {\n const baseClasses = 'inline-flex items-center justify-center font-normal transition-all duration-300 ease-out focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-95';\n\n const variantClasses = {\n primary: 'bg-[#EC615B] hover:bg-[#D4554F] text-white focus:ring-[#EC615B] shadow-sm hover:shadow-md',\n outlined: 'border border-gray-300 bg-white hover:bg-gray-50 text-[#181918] focus:ring-gray-300',\n ghost: 'bg-gray-100 hover:bg-gray-200 text-[#181918] focus:ring-gray-300',\n text: 'text-[#181918] hover:bg-gray-100 focus:ring-gray-300',\n };\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm gap-1.5',\n md: 'px-4 py-2 text-base gap-2',\n lg: 'px-6 py-3 text-lg gap-2.5',\n responsive: 'px-2 py-1 text-xs sm:px-3 sm:py-1.5 sm:text-sm md:px-4 md:py-2 md:text-base lg:px-6 lg:py-3 lg:text-lg gap-1 sm:gap-1.5 md:gap-2 lg:gap-2.5',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const widthClass = fullWidth ? 'w-full' : '';\n\n // Determine variant classes, but they can be overridden by custom color props\n let variantClassesToUse = variantClasses[variant];\n\n // If custom colors are provided, remove variant styling and use custom styles\n if (bgColor || textColor || borderColor) {\n variantClassesToUse = '';\n }\n\n const combinedClassName = `${baseClasses} ${variantClassesToUse} ${sizeClasses[size]} ${roundedClasses[rounded]} ${widthClass} ${className}`;\n\n const renderIcon = () => {\n if (loading) {\n return (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n }\n return icon;\n };\n\n // Merge custom styles with generated inline styles\n const inlineStyles: CSSProperties = {\n ...style,\n };\n\n // Apply custom color props as inline styles\n if (bgColor) inlineStyles.backgroundColor = bgColor;\n if (textColor) inlineStyles.color = textColor;\n if (borderColor) inlineStyles.borderColor = borderColor;\n\n return (\n <button\n className={combinedClassName}\n disabled={disabled || loading}\n style={inlineStyles}\n onMouseEnter={(e) => {\n if (!disabled && !loading) {\n if (hoverBgColor) {\n e.currentTarget.style.backgroundColor = hoverBgColor;\n } else if (hoverColor) {\n e.currentTarget.style.backgroundColor = hoverColor;\n }\n if (hoverTextColor) {\n e.currentTarget.style.color = hoverTextColor;\n }\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !loading) {\n if (bgColor || hoverBgColor || hoverColor) {\n e.currentTarget.style.backgroundColor = bgColor || '';\n }\n if (textColor || hoverTextColor) {\n e.currentTarget.style.color = textColor || '';\n }\n }\n }}\n {...props}\n >\n {iconPosition === 'left' && renderIcon()}\n {children}\n {iconPosition === 'right' && renderIcon()}\n </button>\n );\n};\n\nexport default Button;\n","import type { FC, CSSProperties } from 'react';\n\nexport interface StatCardProps {\n label: string;\n value: string | number;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n // Size customization\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n // Border radius customization\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n // Color customization - Default state\n bgColor?: string;\n borderColor?: string;\n labelColor?: string;\n valueColor?: string;\n // Color customization - Selected state\n selectedBgColor?: string;\n selectedBorderColor?: string;\n selectedLabelColor?: string;\n selectedValueColor?: string;\n // Inline styles\n style?: CSSProperties;\n}\n\nexport const StatCard: FC<StatCardProps> = ({\n label,\n value,\n selected = false,\n onClick,\n className = '',\n size = 'responsive',\n rounded = 'md',\n bgColor,\n borderColor,\n labelColor,\n valueColor,\n selectedBgColor,\n selectedBorderColor,\n selectedLabelColor,\n selectedValueColor,\n style,\n}) => {\n // Padding based on size\n const getPaddingClasses = () => {\n switch (size) {\n case 'sm':\n return 'p-2 sm:p-3';\n case 'md':\n return 'p-3 sm:p-4';\n case 'lg':\n return 'p-4 sm:p-6';\n case 'responsive':\n return 'p-3 sm:p-4 md:p-5 lg:p-6';\n default:\n return 'p-4';\n }\n };\n\n // Border radius based on rounded prop\n const getRoundedClasses = () => {\n switch (rounded) {\n case 'none':\n return 'rounded-none';\n case 'sm':\n return 'rounded-sm';\n case 'md':\n return 'rounded-md';\n case 'lg':\n return 'rounded-lg';\n case 'xl':\n return 'rounded-xl';\n case 'full':\n return 'rounded-full';\n default:\n return 'rounded-md';\n }\n };\n\n // Label text size based on size prop\n const getLabelTextClasses = () => {\n switch (size) {\n case 'sm':\n return 'text-xs sm:text-xs';\n case 'md':\n return 'text-sm sm:text-base';\n case 'lg':\n return 'text-base sm:text-lg';\n case 'responsive':\n return 'text-xs sm:text-sm md:text-base lg:text-lg';\n default:\n return 'text-xs sm:text-sm md:text-base';\n }\n };\n\n // Value text size based on size prop\n const getValueTextClasses = () => {\n switch (size) {\n case 'sm':\n return 'text-lg sm:text-xl';\n case 'md':\n return 'text-2xl sm:text-3xl';\n case 'lg':\n return 'text-4xl sm:text-5xl';\n case 'responsive':\n return 'text-2xl sm:text-3xl md:text-4xl lg:text-5xl';\n default:\n return 'text-3xl';\n }\n };\n\n const baseClasses = `stat-card relative flex flex-col ${getPaddingClasses()} ${getRoundedClasses()} border transition-all duration-500 ease-in-out cursor-pointer overflow-hidden`;\n\n // Build default state classes with custom color support\n const defaultBgClass = bgColor ? '' : 'bg-white';\n const defaultBorderClass = borderColor ? '' : 'border-gray-200';\n const defaultHoverClasses = !bgColor && !borderColor ? 'hover:border-gray-300 hover:shadow-sm' : '';\n\n const stateClasses = selected\n ? `border-[#181918] bg-[#F4F4F4] shadow-sm scale-[1.02]`\n : `${defaultBorderClass} ${defaultBgClass} ${defaultHoverClasses}`;\n\n const combinedClassName = `${baseClasses} ${stateClasses} ${className}`;\n\n // Inline styles for custom colors\n const inlineStyles: CSSProperties = {\n ...style,\n };\n\n // Apply custom background color\n if (selected && selectedBgColor) {\n inlineStyles.backgroundColor = selectedBgColor;\n } else if (!selected && bgColor) {\n inlineStyles.backgroundColor = bgColor;\n }\n\n // Apply custom border color\n if (selected && selectedBorderColor) {\n inlineStyles.borderColor = selectedBorderColor;\n } else if (!selected && borderColor) {\n inlineStyles.borderColor = borderColor;\n }\n\n return (\n <div className={combinedClassName} onClick={onClick} style={inlineStyles}>\n {/* Active indicator slide effect */}\n {selected && (\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-[#EC615B]/5 to-transparent animate-slide-in pointer-events-none\" />\n )}\n\n <div className=\"relative z-10 transition-transform duration-300 ease-out hover:scale-[0.98] active:scale-[0.96]\">\n <span\n className={`${getLabelTextClasses()} font-normal mb-2 block transition-colors duration-500 ${\n selected ? 'text-gray-700' : 'text-gray-600'\n }`}\n style={\n selected && selectedLabelColor\n ? { color: selectedLabelColor }\n : !selected && labelColor\n ? { color: labelColor }\n : undefined\n }\n >\n {label}\n </span>\n <span\n className={`${getValueTextClasses()} font-semibold stat-value block transition-all duration-500 ${\n selected ? 'text-[#181918] scale-105' : 'text-[#181918]'\n }`}\n style={\n selected && selectedValueColor\n ? { color: selectedValueColor }\n : !selected && valueColor\n ? { color: valueColor }\n : undefined\n }\n >\n {value}\n </span>\n </div>\n </div>\n );\n};\n\nexport default StatCard;\n","import type { FC, ReactNode, InputHTMLAttributes, CSSProperties } from 'react';\n\nexport interface SearchInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n onIconClick?: () => void;\n bgColor?: string;\n borderColor?: string;\n focusBorderColor?: string;\n iconColor?: string;\n textColor?: string;\n placeholderColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const SearchInput: FC<SearchInputProps> = ({\n icon,\n iconPosition = 'left',\n size = 'md',\n fullWidth = false,\n className = '',\n onIconClick,\n bgColor,\n borderColor,\n focusBorderColor,\n iconColor,\n textColor,\n placeholderColor,\n rounded = 'md',\n style,\n ...props\n}) => {\n const containerBaseClasses = 'relative inline-flex items-center';\n\n const inputBaseClasses =\n 'border focus:outline-none focus:ring-1 transition-all duration-200 ease-in-out';\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-5 py-3 text-lg',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-sm sm:text-base md:text-lg',\n };\n\n const iconSizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n responsive: 'w-4 sm:w-5 md:w-6 h-4 sm:h-5 md:h-6',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-lg',\n lg: 'rounded-xl',\n full: 'rounded-full',\n };\n\n const paddingWithIcon =\n iconPosition === 'left'\n ? size === 'sm'\n ? 'pl-9'\n : size === 'md'\n ? 'pl-10'\n : size === 'lg'\n ? 'pl-12'\n : 'pl-9 sm:pl-10 md:pl-12'\n : size === 'sm'\n ? 'pr-9'\n : size === 'md'\n ? 'pr-10'\n : size === 'lg'\n ? 'pr-12'\n : 'pr-9 sm:pr-10 md:pr-12';\n\n const widthClass = fullWidth ? 'w-full' : '';\n\n // Build custom styles for colors\n const customStyles: CSSProperties = {\n backgroundColor: bgColor,\n borderColor: borderColor || '#D1D5DB',\n color: textColor,\n ...style,\n };\n\n // Determine placeholder color class\n const placeholderClass = placeholderColor\n ? ''\n : 'placeholder:text-gray-400';\n\n // Build border and default colors\n const defaultBorderClass = borderColor ? '' : 'border-gray-300';\n const defaultTextClass = textColor ? '' : 'text-gray-900';\n const defaultFocusClass = focusBorderColor\n ? ''\n : 'focus:ring-[#EC615B] focus:border-[#EC615B]';\n\n const inputClassName = `${inputBaseClasses} ${sizeClasses[size]} ${\n icon ? paddingWithIcon : ''\n } ${widthClass} ${roundedClasses[rounded]} ${defaultBorderClass} ${defaultTextClass} ${defaultFocusClass} ${placeholderClass} ${className}`;\n\n const iconPositionClasses = iconPosition === 'left' ? 'left-3' : 'right-3';\n const defaultIconColor = iconColor || 'text-gray-400';\n const hoverIconColor = iconColor ? '' : 'hover:text-gray-600';\n\n const defaultSearchIcon = (\n <svg\n className={`${iconSizeClasses[size]} ${defaultIconColor}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n );\n\n return (\n <div className={`${containerBaseClasses} ${widthClass}`}>\n {icon && (\n <div\n className={`absolute ${iconPositionClasses} ${defaultIconColor} ${\n onIconClick ? 'cursor-pointer' : ''\n } ${hoverIconColor}`}\n onClick={onIconClick}\n >\n {icon === true ? defaultSearchIcon : icon}\n </div>\n )}\n <input\n type=\"text\"\n className={inputClassName}\n style={{\n ...customStyles,\n ...(focusBorderColor && {\n '--focus-border-color': focusBorderColor,\n } as CSSProperties),\n ...(placeholderColor && {\n '--placeholder-color': placeholderColor,\n } as CSSProperties),\n }}\n {...props}\n />\n </div>\n );\n};\n\nexport default SearchInput;\n","import type { FC, HTMLAttributes, CSSProperties } from 'react';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'responsive';\n shadow?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n bordered?: boolean;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n bgColor?: string;\n borderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Card: FC<CardProps> = ({\n padding = 'md',\n shadow = 'sm',\n hover = false,\n bordered = true,\n rounded = 'lg',\n className = '',\n bgColor,\n borderColor,\n style,\n children,\n ...props\n}) => {\n const baseClasses = 'card transition-all duration-300 ease-out';\n\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n responsive: 'p-2 sm:p-3 md:p-4 lg:p-6',\n };\n\n const shadowClasses = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n };\n\n const borderClass = bordered ? `border ${borderColor || 'border-gray-200'}` : '';\n const hoverClass = hover ? 'cursor-pointer' : '';\n const bgClass = bgColor ? '' : 'bg-white';\n\n const combinedClassName = `${baseClasses} ${bgClass} ${paddingClasses[padding]} ${shadowClasses[shadow]} ${roundedClasses[rounded]} ${borderClass} ${hoverClass} ${className}`;\n\n const mergedStyle: CSSProperties = {\n ...(bgColor && { backgroundColor: bgColor }),\n ...style,\n };\n\n return (\n <div className={combinedClassName} style={mergedStyle} {...props}>\n <div className={hover ? 'transition-transform duration-300 ease-out hover:scale-[0.98] active:scale-[0.96]' : ''}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default Card;\n","import { useState, useRef, useEffect } from 'react';\nimport type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface DropdownMenuItem {\n key: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onClick?: () => void;\n}\n\nexport interface DropdownProps {\n items: DropdownMenuItem[];\n trigger?: 'click' | 'hover';\n placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';\n children: ReactNode;\n className?: string;\n overlayClassName?: string;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n menuBgColor?: string;\n menuItemHoverColor?: string;\n dangerColor?: string;\n borderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Dropdown: FC<DropdownProps> = ({\n items,\n trigger = 'click',\n placement = 'bottomLeft',\n children,\n className = '',\n overlayClassName = '',\n disabled = false,\n size = 'md',\n menuBgColor,\n menuItemHoverColor,\n dangerColor,\n borderColor,\n style,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: Event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleTriggerClick = () => {\n if (!disabled && trigger === 'click') {\n setIsOpen(!isOpen);\n }\n };\n\n const handleTriggerMouseEnter = () => {\n if (!disabled && trigger === 'hover') {\n setIsOpen(true);\n }\n };\n\n const handleTriggerMouseLeave = () => {\n if (!disabled && trigger === 'hover') {\n setIsOpen(false);\n }\n };\n\n const handleMenuItemClick = (item: DropdownMenuItem) => {\n if (!item.disabled && item.onClick) {\n item.onClick();\n }\n setIsOpen(false);\n };\n\n const placementClasses = {\n bottomLeft: 'top-full left-0 mt-1',\n bottomRight: 'top-full right-0 mt-1',\n topLeft: 'bottom-full left-0 mb-1',\n topRight: 'bottom-full right-0 mb-1',\n };\n\n const animationClasses = placement.startsWith('bottom')\n ? 'dropdown-slide-down'\n : 'dropdown-slide-up';\n\n const sizeClasses = {\n sm: 'min-w-[120px] text-xs',\n md: 'min-w-[160px] text-sm',\n lg: 'min-w-[220px] text-base',\n responsive: 'min-w-[120px] sm:min-w-[160px] md:min-w-[200px] lg:min-w-[240px] text-xs sm:text-sm md:text-base',\n };\n\n const itemSizeClasses = {\n sm: 'px-3 py-1.5 text-xs gap-1.5',\n md: 'px-4 py-2 text-sm gap-2',\n lg: 'px-5 py-3 text-base gap-2.5',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-xs sm:text-sm md:text-base gap-1.5 sm:gap-2 md:gap-2.5',\n };\n\n // Color styling helpers\n const defaultHoverColor = 'hover:bg-gray-50';\n const defaultBorderColor = 'border-gray-200';\n const defaultDangerColor = 'text-red-600';\n\n // Hover color handling\n const hoverColorStyle = menuItemHoverColor ? { backgroundColor: menuItemHoverColor } : {};\n const customHoverClass = menuItemHoverColor ? '' : defaultHoverColor;\n\n // Danger color handling\n const customDangerStyle = dangerColor ? { color: dangerColor } : {};\n const dangerHoverBgStyle = dangerColor ? { backgroundColor: dangerColor + '15' } : {};\n\n // Border color handling\n const finalBorderColor = borderColor || defaultBorderColor;\n\n return (\n <div\n ref={dropdownRef}\n className={`relative inline-block ${className}`}\n onMouseEnter={handleTriggerMouseEnter}\n onMouseLeave={handleTriggerMouseLeave}\n style={style}\n >\n <div\n onClick={handleTriggerClick}\n className={`inline-flex ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}`}\n >\n {children}\n </div>\n\n {isOpen && !disabled && (\n <div\n className={`absolute ${placementClasses[placement]} ${animationClasses} z-50 ${sizeClasses[size]} ${overlayClassName}`}\n >\n <div\n className={`dropdown-menu rounded-lg shadow-lg border py-1 overflow-hidden ${finalBorderColor}`}\n style={{ backgroundColor: menuBgColor || '#ffffff' }}\n >\n {items.map((item) => {\n // Determine item-specific styles\n let itemStyle: React.CSSProperties = {};\n\n if (!item.disabled) {\n if (item.danger) {\n // Danger items use custom danger color if provided\n itemStyle = {\n ...customDangerStyle,\n ...dangerHoverBgStyle,\n };\n } else if (menuItemHoverColor) {\n // Custom hover color applied inline\n itemStyle = hoverColorStyle;\n }\n }\n\n return (\n <div\n key={item.key}\n onClick={() => handleMenuItemClick(item)}\n className={`\n dropdown-menu-item\n flex items-center cursor-pointer transition-all duration-200 ease-out\n ${itemSizeClasses[size]}\n ${item.disabled ? 'opacity-50 cursor-not-allowed' : customHoverClass}\n ${item.danger ? (dangerColor ? '' : defaultDangerColor) : 'text-gray-700'}\n `}\n style={itemStyle}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default Dropdown;\n","import { useState, useRef, useEffect } from 'react';\nimport type { FC, MouseEvent, CSSProperties } from 'react';\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string | number;\n defaultValue?: string | number;\n placeholder?: string;\n onChange?: (value: string | number) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n className?: string;\n allowClear?: boolean;\n showSearch?: boolean;\n searchPlaceholder?: string;\n bgColor?: string;\n borderColor?: string;\n focusBorderColor?: string;\n selectedBgColor?: string;\n selectedTextColor?: string;\n hoverBgColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Select: FC<SelectProps> = ({\n options,\n value: controlledValue,\n defaultValue,\n placeholder = 'Select an option',\n onChange,\n disabled = false,\n size = 'md',\n fullWidth = false,\n className = '',\n allowClear = false,\n showSearch = false,\n searchPlaceholder = 'Search...',\n bgColor,\n borderColor,\n focusBorderColor = '#EC615B',\n selectedBgColor,\n selectedTextColor,\n hoverBgColor,\n rounded = 'lg',\n style,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<string | number | undefined>(\n defaultValue\n );\n const [searchQuery, setSearchQuery] = useState('');\n const selectRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n useEffect(() => {\n const handleClickOutside = (event: Event) => {\n if (selectRef.current && !selectRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n if (showSearch && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, showSearch]);\n\n const handleSelect = (optionValue: string | number) => {\n if (controlledValue === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n };\n\n const handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n if (controlledValue === undefined) {\n setInternalValue(undefined);\n }\n onChange?.('' as any);\n };\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n const filteredOptions = showSearch\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-5 py-3 text-lg',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-sm sm:text-base md:text-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const widthClass = fullWidth ? 'w-full' : 'min-w-[200px]';\n\n // Helper function to apply custom colors to inline styles\n const getTriggerStyles = (): CSSProperties => {\n const styles: CSSProperties = {};\n if (bgColor) styles.backgroundColor = bgColor;\n if (borderColor) styles.borderColor = borderColor;\n return styles;\n };\n\n const getSelectedOptionStyles = (): CSSProperties => {\n const styles: CSSProperties = {};\n if (selectedBgColor) styles.backgroundColor = selectedBgColor;\n if (selectedTextColor) styles.color = selectedTextColor;\n return styles;\n };\n\n const ChevronIcon = (\n <svg\n className={`w-4 h-4 transition-transform duration-200 ease-out ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n\n const ClearIcon = (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n\n return (\n <div ref={selectRef} className={`relative inline-block ${widthClass} ${className}`} style={style}>\n <div\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`\n select-trigger\n flex items-center justify-between gap-2\n border transition-all duration-200 ease-out\n ${sizeClasses[size]}\n ${roundedClasses[rounded]}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${isOpen ? 'ring-2 ring-opacity-20' : ''}\n `}\n style={{\n ...getTriggerStyles(),\n backgroundColor: bgColor || getTriggerStyles().backgroundColor || '#FFFFFF',\n borderColor: borderColor || getTriggerStyles().borderColor || '#D1D5DB',\n ...(isOpen && {\n borderColor: focusBorderColor,\n boxShadow: `0 0 0 2px ${focusBorderColor}20`,\n }),\n ...(!disabled && !isOpen && hoverBgColor && {\n cursor: 'pointer',\n }),\n }}\n onMouseEnter={(e) => {\n if (!disabled && hoverBgColor) {\n e.currentTarget.style.backgroundColor = hoverBgColor;\n }\n }}\n onMouseLeave={(e) => {\n if (bgColor) {\n e.currentTarget.style.backgroundColor = bgColor;\n } else {\n e.currentTarget.style.backgroundColor = '#FFFFFF';\n }\n }}\n >\n <span className={selectedOption ? 'text-gray-900' : 'text-gray-400'}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <div className=\"flex items-center gap-1\">\n {allowClear && value && !disabled && (\n <span\n onClick={handleClear}\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-200 ease-out\"\n >\n {ClearIcon}\n </span>\n )}\n <span className=\"text-gray-400\">{ChevronIcon}</span>\n </div>\n </div>\n\n {isOpen && !disabled && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-50 dropdown-slide-down\">\n <div className={`select-dropdown bg-white shadow-lg border border-gray-200 py-1 max-h-[300px] overflow-auto ${roundedClasses[rounded]}`}>\n {showSearch && (\n <div className=\"px-2 py-2 border-b border-gray-200\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"w-full px-3 py-1.5 text-sm border border-gray-300 rounded focus:outline-none focus:ring-2 transition-all duration-200 ease-out\"\n style={{\n borderColor: borderColor,\n boxShadow: `0 0 0 2px ${focusBorderColor}20`,\n }}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n {filteredOptions.length === 0 ? (\n <div className=\"px-4 py-3 text-sm text-gray-500 text-center\">\n No results found\n </div>\n ) : (\n filteredOptions.map((option) => (\n <div\n key={option.value}\n onClick={() => !option.disabled && handleSelect(option.value)}\n className={`\n select-option\n px-4 py-2 text-sm transition-all duration-200 ease-out\n ${option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n `}\n style={{\n ...(option.value === value ? getSelectedOptionStyles() : {}),\n backgroundColor: option.value === value ? (selectedBgColor || '#FCEAE9') : undefined,\n color: option.value === value ? (selectedTextColor || '#EC615B') : '#181918',\n fontWeight: option.value === value ? 'medium' : undefined,\n }}\n onMouseEnter={(e) => {\n if (!option.disabled && option.value !== value) {\n e.currentTarget.style.backgroundColor = hoverBgColor || '#F3F4F6';\n }\n }}\n onMouseLeave={(e) => {\n if (option.value !== value) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {option.label}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default Select;\n","import { useState } from 'react';\nimport type { FC, ReactNode, HTMLAttributes, CSSProperties } from 'react';\nimport { Select } from './Select';\n\nexport interface ColumnDef<T = any> {\n key: string;\n title: string;\n dataIndex?: string;\n render?: (value: any, record: T, index: number) => ReactNode;\n width?: string | number;\n align?: 'left' | 'center' | 'right';\n sortable?: boolean;\n}\n\nexport interface TableProps<T = any> {\n columns: ColumnDef<T>[];\n dataSource: T[];\n rowKey?: string | ((record: T) => string);\n pagination?: PaginationConfig | false;\n loading?: boolean;\n onRow?: (record: T, index: number) => HTMLAttributes<HTMLTableRowElement>;\n className?: string;\n bordered?: boolean;\n striped?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n headerBgColor?: string;\n headerTextColor?: string;\n rowHoverColor?: string;\n borderColor?: string;\n stripedRowColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n style?: CSSProperties;\n}\n\nexport interface PaginationConfig {\n current?: number;\n pageSize?: number;\n total?: number;\n onChange?: (page: number, pageSize: number) => void;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Table = <T extends Record<string, any>>({\n columns,\n dataSource,\n rowKey = 'id',\n pagination,\n loading = false,\n onRow,\n className = '',\n bordered = false,\n striped = false,\n size = 'md',\n headerBgColor,\n headerTextColor,\n rowHoverColor,\n borderColor,\n stripedRowColor,\n rounded = 'md',\n style,\n}: TableProps<T>) => {\n const [currentPage, setCurrentPage] = useState(\n pagination && typeof pagination === 'object' ? pagination.current || 1 : 1\n );\n const [pageSize, setPageSize] = useState(\n pagination && typeof pagination === 'object' ? pagination.pageSize || 10 : 10\n );\n\n // Size configuration for responsive sizing\n const sizeConfig = {\n sm: {\n headerPadding: 'px-3 py-2',\n headerFontSize: 'text-xs',\n rowPadding: 'px-3 py-2',\n rowFontSize: 'text-xs',\n containerRounded: 'rounded-md',\n },\n md: {\n headerPadding: 'px-4 py-3',\n headerFontSize: 'text-xs',\n rowPadding: 'px-4 py-3',\n rowFontSize: 'text-sm',\n containerRounded: 'rounded-lg',\n },\n lg: {\n headerPadding: 'px-6 py-4',\n headerFontSize: 'text-sm',\n rowPadding: 'px-6 py-4',\n rowFontSize: 'text-base',\n containerRounded: 'rounded-xl',\n },\n responsive: {\n headerPadding: 'px-2 sm:px-3 md:px-4 py-2 sm:py-2.5 md:py-3',\n headerFontSize: 'text-xs sm:text-xs md:text-sm',\n rowPadding: 'px-2 sm:px-3 md:px-4 py-2 sm:py-2.5 md:py-3',\n rowFontSize: 'text-xs sm:text-xs md:text-sm',\n containerRounded: 'rounded-md sm:rounded-lg md:rounded-lg',\n },\n };\n\n // Rounded configuration\n const roundedClasses = {\n none: '',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n };\n\n const currentSizeConfig = sizeConfig[size];\n const currentRoundedClass = roundedClasses[rounded];\n\n const getRowKey = (record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || String(index);\n };\n\n const getValue = (record: T, dataIndex?: string) => {\n if (!dataIndex) return record;\n return dataIndex.split('.').reduce((obj, key) => obj?.[key], record);\n };\n\n // Pagination logic\n const paginatedData =\n pagination === false\n ? dataSource\n : dataSource.slice((currentPage - 1) * pageSize, currentPage * pageSize);\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(page, pageSize);\n }\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n setPageSize(newPageSize);\n setCurrentPage(1);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(1, newPageSize);\n }\n };\n\n return (\n <div className=\"w-full\" style={style}>\n <div\n className={`overflow-x-auto ${currentRoundedClass || 'rounded-2xl'} border`}\n style={{ borderColor: borderColor || '#EEEEEE' }}\n >\n <table className={`w-full ${bordered ? 'border-collapse' : ''} ${className}`}>\n <thead\n style={{\n backgroundColor: headerBgColor || '#F5F6F7',\n color: headerTextColor || '#333333',\n }}\n >\n <tr>\n {columns.map((column, idx) => (\n <th\n key={column.key}\n className={`${currentSizeConfig.headerPadding} text-left ${currentSizeConfig.headerFontSize} font-medium uppercase tracking-wider ${\n bordered && idx !== columns.length - 1 ? 'border-r' : ''\n } ${\n column.align === 'center'\n ? 'text-center'\n : column.align === 'right'\n ? 'text-right'\n : ''\n }`}\n style={{\n width: column.width,\n borderColor: borderColor || '#EEEEEE',\n color: headerTextColor || '#333333',\n }}\n >\n {column.title}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n className=\"bg-white divide-y\"\n style={{ borderColor: borderColor || '#e5e5e5' }}\n >\n {loading ? (\n <tr>\n <td\n colSpan={columns.length}\n className={`${currentSizeConfig.rowPadding} py-8 text-center`}\n style={{ color: '#333333' }}\n >\n <div className=\"flex justify-center items-center\">\n <svg\n className=\"animate-spin h-5 w-5 mr-2\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n Loading...\n </div>\n </td>\n </tr>\n ) : paginatedData.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className={`${currentSizeConfig.rowPadding} py-8 text-center`}\n style={{ color: '#333333' }}\n >\n No data\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const rowProps = onRow ? onRow(record, index) : {};\n const stripedBg = striped && index % 2 === 1 ? (stripedRowColor || '#F5F6F7') : 'transparent';\n const hoverBg = rowHoverColor || '#f3f4f6';\n return (\n <tr\n key={getRowKey(record, index)}\n className=\"transition-colors duration-200 ease-out\"\n style={{\n backgroundColor: stripedBg,\n }}\n onMouseEnter={(e) => {\n if (rowHoverColor || !striped || index % 2 === 0) {\n e.currentTarget.style.backgroundColor = hoverBg;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = stripedBg;\n }}\n {...rowProps}\n >\n {columns.map((column, colIdx) => {\n const value = getValue(record, column.dataIndex);\n const content = column.render ? column.render(value, record, index) : value;\n\n return (\n <td\n key={column.key}\n className={`${currentSizeConfig.rowPadding} ${currentSizeConfig.rowFontSize} text-gray-900 ${\n bordered && colIdx !== columns.length - 1 ? 'border-r' : ''\n } ${\n column.align === 'center'\n ? 'text-center'\n : column.align === 'right'\n ? 'text-right'\n : ''\n }`}\n style={{\n borderColor: borderColor || '#EEEEEE',\n }}\n >\n {content as ReactNode}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination !== false && (\n <Pagination\n current={currentPage}\n pageSize={pageSize}\n total={dataSource.length}\n onChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n showSizeChanger={\n pagination && typeof pagination === 'object' ? pagination.showSizeChanger : true\n }\n pageSizeOptions={\n pagination && typeof pagination === 'object'\n ? pagination.pageSizeOptions\n : [10, 20, 50, 100]\n }\n showTotal={pagination && typeof pagination === 'object' ? pagination.showTotal : true}\n size={\n pagination && typeof pagination === 'object' && pagination.size\n ? pagination.size\n : size === 'responsive'\n ? 'md'\n : size\n }\n />\n )}\n </div>\n );\n};\n\ninterface PaginationProps {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst Pagination: FC<PaginationProps> = ({\n current,\n pageSize,\n total,\n onChange,\n onPageSizeChange,\n showSizeChanger = true,\n pageSizeOptions = [10, 20, 50, 100],\n showTotal = true,\n size = 'md',\n}) => {\n const totalPages = Math.ceil(total / pageSize);\n const startItem = (current - 1) * pageSize + 1;\n const endItem = Math.min(current * pageSize, total);\n\n const sizeClasses = {\n sm: {\n button: 'px-2.5 py-1 text-xs',\n icon: 'h-3.5 w-3.5',\n nav: 'px-1.5 py-1.5',\n },\n md: {\n button: 'px-4 py-2 text-sm',\n icon: 'h-5 w-5',\n nav: 'px-2 py-2',\n },\n lg: {\n button: 'px-5 py-2.5 text-base',\n icon: 'h-6 w-6',\n nav: 'px-3 py-3',\n },\n };\n\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisible = 7;\n\n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n if (current <= 3) {\n for (let i = 1; i <= 5; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n } else if (current >= totalPages - 2) {\n pages.push(1);\n pages.push('...');\n for (let i = totalPages - 4; i <= totalPages; i++) pages.push(i);\n } else {\n pages.push(1);\n pages.push('...');\n for (let i = current - 1; i <= current + 1; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n }\n }\n\n return pages;\n };\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-[#EEEEEE] sm:px-6 mt-4\">\n {showTotal && (\n <div className=\"text-sm text-[#181918]\">\n {startItem}-{endItem} of {total} items\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n {showSizeChanger && (\n <Select\n value={pageSize.toString()}\n onChange={(value) => onPageSizeChange(Number(value))}\n options={pageSizeOptions.map((size) => ({\n value: size.toString(),\n label: `${size} / page`,\n }))}\n size=\"sm\"\n className=\"w-32\"\n />\n )}\n\n <nav className=\"inline-flex gap-1 items-center\" aria-label=\"Pagination\">\n <button\n onClick={() => onChange(current - 1)}\n disabled={current === 1}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].nav} text-[#181918] hover:bg-gray-100 focus:z-20 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent transition-all duration-300 ease-out hover:scale-110 active:scale-95`}\n >\n <svg className={sizeClasses[size].icon} viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n\n {getPageNumbers().map((page, index) => {\n if (page === '...') {\n return (\n <span\n key={`ellipsis-${index}`}\n className={`relative inline-flex items-center justify-center ${sizeClasses[size].button} font-normal text-[#181918]`}\n >\n ...\n </span>\n );\n }\n\n return (\n <button\n key={page}\n onClick={() => onChange(page as number)}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].button} font-medium transition-all duration-300 ease-out focus:z-20 hover:scale-105 active:scale-95 ${\n current === page\n ? 'bg-[#EC615B] text-white shadow-sm'\n : 'text-[#181918] hover:bg-gray-100'\n }`}\n >\n {page}\n </button>\n );\n })}\n\n <button\n onClick={() => onChange(current + 1)}\n disabled={current === totalPages}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].nav} text-[#181918] hover:bg-gray-100 focus:z-20 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent transition-all duration-300 ease-out hover:scale-110 active:scale-95`}\n >\n <svg className={sizeClasses[size].icon} viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n </nav>\n </div>\n </div>\n );\n};\n\nexport default Table;\n","import type { FC, ReactNode, ChangeEvent, CSSProperties } from 'react';\n\nexport interface TableTopProps {\n // Existing props\n title?: string;\n description?: string;\n searchPlaceholder?: string;\n onSearch?: (value: string) => void;\n actions?: ReactNode;\n filters?: ReactNode;\n className?: string;\n\n // New responsive props\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n\n // Custom color props\n titleColor?: string;\n descriptionColor?: string;\n searchBgColor?: string;\n searchBorderColor?: string;\n searchFocusBorderColor?: string;\n\n // Search input border radius\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n // Custom styles\n style?: CSSProperties;\n}\n\nexport const TableTop: FC<TableTopProps> = ({\n title,\n description,\n searchPlaceholder = 'Search...',\n onSearch,\n actions,\n filters,\n className = '',\n size = 'responsive',\n titleColor,\n descriptionColor,\n searchBgColor = 'white',\n searchBorderColor = '#d1d5db',\n searchFocusBorderColor = '#3b82f6',\n rounded = 'md',\n style,\n}) => {\n const handleSearchChange = (e: ChangeEvent<HTMLInputElement>) => {\n onSearch?.(e.target.value);\n };\n\n // Size configuration\n const sizeConfig = {\n sm: {\n titleSize: 'text-lg',\n titleWeight: 'font-semibold',\n descriptionSize: 'text-xs',\n searchInputSize: 'text-xs',\n searchInputPy: 'py-1.5',\n searchPaddingLeft: 'pl-8',\n iconSize: 'h-4 w-4',\n spacing: 'space-y-2',\n gap: 'gap-2',\n maxWidth: 'max-w-sm',\n descriptionMargin: 'mt-0.5',\n },\n md: {\n titleSize: 'text-xl',\n titleWeight: 'font-semibold',\n descriptionSize: 'text-sm',\n searchInputSize: 'text-sm',\n searchInputPy: 'py-2',\n searchPaddingLeft: 'pl-10',\n iconSize: 'h-5 w-5',\n spacing: 'space-y-3',\n gap: 'gap-3',\n maxWidth: 'max-w-md',\n descriptionMargin: 'mt-1',\n },\n lg: {\n titleSize: 'text-2xl',\n titleWeight: 'font-bold',\n descriptionSize: 'text-base',\n searchInputSize: 'text-base',\n searchInputPy: 'py-2.5',\n searchPaddingLeft: 'pl-12',\n iconSize: 'h-6 w-6',\n spacing: 'space-y-4',\n gap: 'gap-4',\n maxWidth: 'max-w-lg',\n descriptionMargin: 'mt-2',\n },\n responsive: {\n titleSize: 'text-lg sm:text-xl md:text-2xl',\n titleWeight: 'font-semibold md:font-bold',\n descriptionSize: 'text-xs sm:text-sm md:text-base',\n searchInputSize: 'text-xs sm:text-sm md:text-base',\n searchInputPy: 'py-1.5 sm:py-2 md:py-2.5',\n searchPaddingLeft: 'pl-8 sm:pl-10 md:pl-12',\n iconSize: 'h-4 w-4 sm:h-5 sm:w-5 md:h-6 md:w-6',\n spacing: 'space-y-2 sm:space-y-3 md:space-y-4',\n gap: 'gap-2 sm:gap-3 md:gap-4',\n maxWidth: 'max-w-sm md:max-w-md lg:max-w-lg',\n descriptionMargin: 'mt-0.5 sm:mt-1 md:mt-2',\n },\n };\n\n const config = sizeConfig[size];\n\n // Border radius configuration\n const radiusConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const radiusClass = radiusConfig[rounded];\n\n // Build inline styles for custom colors\n const searchInputStyle: CSSProperties = {\n backgroundColor: searchBgColor,\n borderColor: searchBorderColor,\n };\n\n return (\n <div\n className={`${config.spacing} mb-4 ${className}`}\n style={style}\n >\n {/* Title and Description */}\n {(title || description) && (\n <div>\n {title && (\n <h2\n className={`${config.titleSize} ${config.titleWeight}`}\n style={{ color: titleColor || '#111827' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n className={`${config.descriptionSize} ${config.descriptionMargin}`}\n style={{ color: descriptionColor || '#6b7280' }}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Search and Actions Row */}\n <div className={`flex flex-col sm:flex-row items-stretch sm:items-center justify-between ${config.gap}`}>\n {/* Search Input */}\n {onSearch && (\n <div className={`flex-1 ${config.maxWidth}`}>\n <div className=\"relative\">\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg\n className={`${config.iconSize} text-gray-400`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n onChange={handleSearchChange}\n className={`block w-full ${config.searchPaddingLeft} pr-3 ${config.searchInputPy} border ${radiusClass} focus:outline-none focus:ring-2 focus:ring-opacity-50 ${config.searchInputSize} transition-colors duration-200`}\n style={searchInputStyle}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = searchFocusBorderColor;\n e.currentTarget.style.boxShadow = `0 0 0 2px rgba(59, 130, 246, 0.1)`;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = searchBorderColor;\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n </div>\n </div>\n )}\n\n {/* Actions (Buttons) */}\n {actions && (\n <div className={`flex items-center gap-2 w-full sm:w-auto`}>\n {actions}\n </div>\n )}\n </div>\n\n {/* Filters Row */}\n {filters && (\n <div className={`flex flex-wrap items-center ${config.gap}`}>\n {filters}\n </div>\n )}\n </div>\n );\n};\n\nexport default TableTop;\n","import { useEffect, useState, CSSProperties } from 'react';\nimport type { FC, ReactNode, MouseEvent } from 'react';\n\ntype ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'responsive';\n\nconst widthMap: Record<ModalSize, string> = {\n sm: '384px',\n md: '448px',\n lg: '512px',\n xl: '600px',\n full: '100%',\n responsive: '90vw',\n};\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n width?: string | number;\n size?: ModalSize;\n closable?: boolean;\n maskClosable?: boolean;\n centered?: boolean;\n className?: string;\n bgColor?: string;\n headerBgColor?: string;\n overlayColor?: string;\n bodyClassName?: string;\n headerClassName?: string;\n maxHeight?: string | number;\n}\n\nexport const Modal: FC<ModalProps> = ({\n open,\n onClose,\n title,\n children,\n footer,\n width,\n size = 'md',\n closable = true,\n maskClosable = true,\n centered = true,\n className = '',\n bgColor = '#ffffff',\n headerBgColor = '#ffffff',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n bodyClassName = '',\n headerClassName = '',\n maxHeight = '70vh',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n\n // Determine effective width\n const effectiveWidth = width || widthMap[size];\n const effectiveWidthNum = typeof effectiveWidth === 'number' ? `${effectiveWidth}px` : effectiveWidth;\n\n // Prepare modal style\n const modalStyle: CSSProperties = {\n width: effectiveWidthNum,\n maxWidth: '90vw',\n backgroundColor: bgColor,\n };\n\n // Prepare header style\n const headerStyle: CSSProperties = {\n backgroundColor: headerBgColor,\n };\n\n // Prepare overlay style\n const overlayStyle: CSSProperties = {\n backgroundColor: overlayColor,\n };\n\n useEffect(() => {\n if (open) {\n setIsVisible(true);\n // Small delay to trigger animation\n setTimeout(() => setIsAnimating(true), 10);\n document.body.style.overflow = 'hidden';\n } else {\n setIsAnimating(false);\n // Wait for animation to complete before unmounting\n const timer = setTimeout(() => {\n setIsVisible(false);\n }, 200);\n document.body.style.overflow = 'unset';\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closable && open) {\n onClose();\n }\n };\n\n if (open) {\n document.addEventListener('keydown', handleEscape);\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open, onClose, closable]);\n\n if (!isVisible) return null;\n\n const handleMaskClick = () => {\n if (maskClosable) {\n onClose();\n }\n };\n\n const handleModalClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n return (\n <div\n className=\"fixed inset-0 z-50 overflow-y-auto\"\n onClick={handleMaskClick}\n >\n {/* Backdrop */}\n <div\n className={`fixed inset-0 transition-opacity duration-200 ease-out ${\n isAnimating ? 'opacity-100' : 'opacity-0'\n }`}\n style={overlayStyle}\n />\n\n {/* Modal Container */}\n <div className={`flex min-h-full items-center justify-center p-4 ${centered ? 'items-center' : 'items-start pt-20'}`}>\n <div\n className={`relative rounded-lg shadow-xl transition-all duration-200 ease-out overflow-y-auto ${\n isAnimating\n ? 'opacity-100 scale-100 translate-y-0'\n : 'opacity-0 scale-95 -translate-y-4'\n } ${className}`}\n style={{...modalStyle, maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight}}\n onClick={handleModalClick}\n >\n {/* Header */}\n {(title || closable) && (\n <div\n className={`flex items-center justify-between px-6 py-4 border-b border-gray-200 ${headerClassName}`}\n style={headerStyle}\n >\n {title && <h3 className=\"text-lg font-semibold text-gray-900\">{title}</h3>}\n {closable && (\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-200 ease-out\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Body */}\n <div\n className={`px-6 py-4 ${bodyClassName}`}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"px-6 py-4 border-t border-gray-200 flex justify-end gap-2\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Modal;\n","import type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface BadgeProps {\n children: ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n dot?: boolean;\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n className?: string;\n bgColor?: string;\n textColor?: string;\n borderColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Badge: FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'md',\n dot = false,\n icon,\n iconPosition = 'left',\n className = '',\n bgColor,\n textColor,\n borderColor,\n rounded = 'full',\n style,\n}) => {\n const variantClasses = {\n default: 'bg-gray-100 text-[#181918]',\n primary: 'bg-[#FCEAE9] text-[#EC615B]',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-100 text-yellow-800',\n danger: 'bg-red-100 text-red-800',\n info: 'bg-cyan-100 text-cyan-800',\n };\n\n const 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 responsive: 'px-1.5 py-0.5 text-[10px] sm:px-2 sm:py-0.5 sm:text-xs md:px-2.5 md:py-1 md:text-sm lg:px-3 lg:py-1.5 lg:text-base',\n };\n\n const dotSizeClasses = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n responsive: 'w-1 h-1 sm:w-1.5 sm:h-1.5 md:w-2 md:h-2 lg:w-2.5 lg:h-2.5',\n };\n\n const dotColorClasses = {\n default: 'bg-gray-600',\n primary: 'bg-[#EC615B]',\n success: 'bg-green-600',\n warning: 'bg-yellow-600',\n danger: 'bg-red-600',\n info: 'bg-cyan-600',\n };\n\n const iconSizeClasses = {\n sm: 'w-3 h-3',\n md: 'w-3.5 h-3.5',\n lg: 'w-4 h-4',\n responsive: 'w-2.5 h-2.5 sm:w-3 sm:h-3 md:w-3.5 md:h-3.5 lg:w-4 lg:h-4',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const customStyles: CSSProperties = {\n ...(bgColor && { backgroundColor: bgColor }),\n ...(textColor && { color: textColor }),\n ...(borderColor && { borderColor, borderWidth: '1px', borderStyle: 'solid' }),\n ...style,\n };\n\n return (\n <span\n className={`inline-flex items-center gap-1.5 font-medium transition-all duration-200 ${!bgColor ? variantClasses[variant] : ''} ${sizeClasses[size]} ${roundedClasses[rounded]} ${className}`}\n style={customStyles}\n >\n {dot && (\n <span className={`rounded-full ${dotSizeClasses[size]} ${dotColorClasses[variant]}`} />\n )}\n {icon && iconPosition === 'left' && (\n <span className={`inline-flex items-center ${iconSizeClasses[size]}`}>\n {icon}\n </span>\n )}\n {children}\n {icon && iconPosition === 'right' && (\n <span className={`inline-flex items-center ${iconSizeClasses[size]}`}>\n {icon}\n </span>\n )}\n </span>\n );\n};\n\nexport default Badge;\n","import type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface StepItem {\n title: string;\n description?: string;\n status?: 'wait' | 'process' | 'finish' | 'error';\n icon?: ReactNode;\n}\n\nexport interface StepsProps {\n items: StepItem[];\n current?: number;\n direction?: 'horizontal' | 'vertical';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n variant?: 'default' | 'outline';\n className?: string;\n style?: CSSProperties;\n finishColor?: string;\n processColor?: string;\n waitColor?: string;\n errorColor?: string;\n lineColor?: string;\n}\n\nexport const Steps: FC<StepsProps> = ({\n items,\n current = 0,\n direction = 'vertical',\n size = 'md',\n variant = 'default',\n className = '',\n style,\n finishColor,\n processColor,\n waitColor,\n errorColor,\n lineColor,\n}) => {\n const getStepStatus = (index: number, item: StepItem): StepItem['status'] => {\n if (item.status) return item.status;\n if (index < current) return 'finish';\n if (index === current) return 'process';\n return 'wait';\n };\n\n const iconSizeClasses = {\n sm: 'w-6 h-6',\n md: 'w-8 h-8',\n lg: 'w-10 h-10',\n responsive: 'w-6 h-6 sm:w-7 sm:h-7 md:w-8 md:h-8 lg:w-10 lg:h-10',\n };\n\n const textSizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n responsive: 'text-xs sm:text-sm md:text-base lg:text-lg',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n responsive: 'text-xs sm:text-xs md:text-sm lg:text-base',\n };\n\n const renderIcon = (status: StepItem['status'], icon?: ReactNode) => {\n if (icon) return icon;\n\n if (status === 'finish') {\n return (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n if (status === 'error') {\n return (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n return null;\n };\n\n const getStatusClasses = (status: StepItem['status']) => {\n const isOutline = variant === 'outline';\n\n switch (status) {\n case 'finish':\n return {\n icon: isOutline\n ? `bg-white text-white border ${finishColor ? `border-[${finishColor}]` : 'border-green-500'}`\n : `${finishColor ? `bg-[${finishColor}]` : 'bg-green-500'} text-white ${finishColor ? `border-[${finishColor}]` : 'border-green-500'}`,\n title: 'text-[#181918]',\n description: 'text-gray-600',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-green-500',\n iconColor: finishColor,\n };\n case 'process':\n return {\n icon: isOutline\n ? `bg-white text-white border ${processColor ? `border-[${processColor}]` : 'border-[#EC615B]'}`\n : `${processColor ? `bg-[${processColor}]` : 'bg-[#EC615B]'} text-white ${processColor ? `border-[${processColor}]` : 'border-[#EC615B]'}`,\n title: 'text-[#181918] font-semibold',\n description: 'text-gray-700',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: processColor,\n };\n case 'error':\n return {\n icon: isOutline\n ? `bg-white text-white border ${errorColor ? `border-[${errorColor}]` : 'border-red-500'}`\n : `${errorColor ? `bg-[${errorColor}]` : 'bg-red-500'} text-white ${errorColor ? `border-[${errorColor}]` : 'border-red-500'}`,\n title: 'text-red-600',\n description: 'text-red-500',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: errorColor,\n };\n default:\n return {\n icon: 'bg-white text-gray-400 border-gray-300',\n title: 'text-gray-500',\n description: 'text-gray-400',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: waitColor,\n };\n }\n };\n\n if (direction === 'horizontal') {\n return (\n <div className={`flex items-start ${className}`} style={style}>\n {items.map((item, index) => {\n const status = getStepStatus(index, item);\n const statusClasses = getStatusClasses(status);\n const isLast = index === items.length - 1;\n const iconStyle: CSSProperties = {};\n if (statusClasses.iconColor) {\n iconStyle.color = statusClasses.iconColor;\n }\n\n return (\n <div key={index} className=\"flex flex-1 items-start\">\n <div className=\"flex flex-col items-center\">\n <div\n className={`flex items-center justify-center ${iconSizeClasses[size]} rounded-full border transition-all duration-300 ${statusClasses.icon}`}\n style={iconStyle}\n >\n {renderIcon(status, item.icon)}\n </div>\n <div className=\"mt-2 text-center\">\n <div\n className={`${textSizeClasses[size]} ${statusClasses.title} transition-colors duration-300`}\n >\n {item.title}\n </div>\n {item.description && (\n <div\n className={`${descriptionSizeClasses[size]} ${statusClasses.description} mt-1 transition-colors duration-300`}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n {!isLast && (\n <div\n className={`flex-1 h-0.5 mt-4 mx-2 ${statusClasses.line} transition-colors duration-300`}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={`flex flex-col ${className}`} style={style}>\n {items.map((item, index) => {\n const status = getStepStatus(index, item);\n const statusClasses = getStatusClasses(status);\n const isLast = index === items.length - 1;\n const iconStyle: CSSProperties = {};\n if (statusClasses.iconColor) {\n iconStyle.color = statusClasses.iconColor;\n }\n\n return (\n <div key={index} className=\"flex\">\n <div className=\"flex flex-col items-center mr-4\">\n <div\n className={`flex items-center justify-center ${iconSizeClasses[size]} rounded-full border transition-all duration-300 ${statusClasses.icon}`}\n style={iconStyle}\n >\n {renderIcon(status, item.icon)}\n </div>\n {!isLast && (\n <div\n className={`w-0.5 flex-1 my-1 ${statusClasses.line} transition-colors duration-300`}\n style={{ minHeight: '20px' }}\n />\n )}\n </div>\n <div className=\"flex-1 pb-6\">\n <div\n className={`${textSizeClasses[size]} ${statusClasses.title} transition-colors duration-300`}\n >\n {item.title}\n </div>\n {item.description && (\n <div\n className={`${descriptionSizeClasses[size]} ${statusClasses.description} mt-1 transition-colors duration-300`}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default Steps;\n","import type { FC, ReactNode } from 'react';\n\nexport interface ProgressProps {\n percent?: number;\n status?: 'normal' | 'success' | 'exception' | 'active';\n showInfo?: boolean;\n strokeColor?: string;\n strokeWidth?: number;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n className?: string;\n format?: (percent: number) => ReactNode;\n bgColor?: string;\n successColor?: string;\n exceptionColor?: string;\n trackColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n}\n\nexport const Progress: FC<ProgressProps> = ({\n percent = 0,\n status = 'normal',\n showInfo = true,\n strokeColor,\n strokeWidth,\n size = 'md',\n className = '',\n format,\n bgColor,\n successColor,\n exceptionColor,\n trackColor,\n rounded = 'full',\n}) => {\n const clampedPercent = Math.min(100, Math.max(0, percent));\n\n const heightClasses = {\n sm: 'h-1.5',\n md: 'h-2',\n lg: 'h-3',\n responsive: 'h-1.5 sm:h-2 md:h-3 lg:h-4',\n };\n\n const textSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n responsive: 'text-xs sm:text-sm md:text-base lg:text-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const getStatusColor = () => {\n if (strokeColor) return strokeColor;\n\n switch (status) {\n case 'success':\n return successColor || 'bg-green-500';\n case 'exception':\n return exceptionColor || 'bg-red-500';\n case 'active':\n return bgColor || 'bg-[#EC615B]';\n default:\n if (clampedPercent === 100) return successColor || 'bg-green-500';\n return bgColor || 'bg-[#EC615B]';\n }\n };\n\n const getTrackColor = () => {\n return trackColor || 'bg-gray-200';\n };\n\n const getStatusIcon = () => {\n if (status === 'success' || clampedPercent === 100) {\n return (\n <svg className=\"w-4 h-4 text-green-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n if (status === 'exception') {\n return (\n <svg className=\"w-4 h-4 text-red-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n return null;\n };\n\n const formatPercent = () => {\n if (format) return format(clampedPercent);\n return `${Math.round(clampedPercent)}%`;\n };\n\n const height = strokeWidth ? `${strokeWidth}px` : undefined;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <div className=\"flex-1\">\n <div\n className={`w-full overflow-hidden ${heightClasses[size]} ${roundedClasses[rounded]} ${getTrackColor()}`}\n style={{ height }}\n >\n <div\n className={`${getStatusColor()} ${heightClasses[size]} ${roundedClasses[rounded]} transition-all duration-300 ease-out ${\n status === 'active' ? 'progress-active' : ''\n }`}\n style={{\n width: `${clampedPercent}%`,\n height,\n }}\n />\n </div>\n </div>\n\n {showInfo && (\n <div className={`flex items-center gap-1 ${textSizeClasses[size]} text-gray-600 font-normal`}>\n {getStatusIcon() || formatPercent()}\n </div>\n )}\n </div>\n );\n};\n\nexport default Progress;\n","import { useState } from 'react';\nimport type { FC, ChangeEvent, CSSProperties } from 'react';\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n indeterminate?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n variant?: 'filled' | 'outline';\n className?: string;\n id?: string;\n name?: string;\n value?: string;\n checkedColor?: string;\n uncheckedColor?: string;\n checkedBorderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n disabled = false,\n indeterminate = false,\n size = 'md',\n variant = 'filled',\n className = '',\n id,\n name,\n value,\n checkedColor = '#EC615B',\n uncheckedColor = '#ffffff',\n checkedBorderColor = '#EC615B',\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n };\n\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n responsive: 'w-4 h-4 sm:w-5 sm:h-5 lg:w-6 lg:h-6',\n };\n\n const iconSizeClasses = {\n sm: 'w-3 h-3',\n md: 'w-3.5 h-3.5',\n lg: 'w-4 h-4',\n responsive: 'w-2.5 h-2.5 sm:w-3.5 sm:h-3.5 lg:w-4 lg:h-4',\n };\n\n const isFilled = variant === 'filled';\n\n const getCheckboxClasses = () => {\n if (disabled) {\n return 'cursor-not-allowed opacity-50 border-gray-300 bg-gray-100';\n }\n\n if (isFilled) {\n // Filled variant\n if (!checked && !indeterminate) {\n return 'border-gray-300 bg-white hover:border-gray-400';\n }\n return '';\n } else {\n // Outline variant\n if (!checked && !indeterminate) {\n return 'border-gray-300 bg-white hover:border-gray-400';\n }\n return '';\n }\n };\n\n const getCheckboxInlineStyles = (): CSSProperties | undefined => {\n if (disabled) return undefined;\n\n if (!checked && !indeterminate) {\n return undefined;\n }\n\n if (isFilled) {\n return {\n borderColor: checkedBorderColor,\n backgroundColor: checkedColor,\n };\n } else {\n return {\n borderColor: checkedBorderColor,\n backgroundColor: uncheckedColor,\n };\n }\n };\n\n const getIconColor = () => {\n if (isFilled && (checked || indeterminate)) {\n return 'text-white';\n }\n return '';\n };\n\n return (\n <div className=\"inline-flex items-center\" style={style}>\n <input\n type=\"checkbox\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n />\n <label\n htmlFor={id}\n className={`\n relative flex items-center justify-center\n ${sizeClasses[size]}\n ${variant === 'outline' ? 'border' : 'border-2'}\n rounded\n transition-all duration-200 ease-out\n cursor-pointer\n ${getCheckboxClasses()}\n ${className}\n `}\n style={getCheckboxInlineStyles()}\n >\n {/* Checkmark Icon */}\n {checked && !indeterminate && (\n <svg\n className={`${iconSizeClasses[size]} ${getIconColor()}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n strokeWidth={3}\n style={\n !isFilled && (checked || indeterminate)\n ? { color: checkedColor }\n : undefined\n }\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n\n {/* Indeterminate Icon */}\n {indeterminate && (\n <svg\n className={`${iconSizeClasses[size]} ${getIconColor()}`}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n style={\n !isFilled && (checked || indeterminate)\n ? { color: checkedColor }\n : undefined\n }\n >\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"2\" rx=\"1\" />\n </svg>\n )}\n </label>\n </div>\n );\n};\n\nexport default Checkbox;\n","import type { FC, CSSProperties } from 'react';\n\nexport interface SelectedItem {\n id: string | number;\n label: string;\n sublabel?: string;\n}\n\nexport interface SelectedItemsListProps {\n items: SelectedItem[];\n onRemove: (id: string | number) => void;\n emptyMessage?: string;\n className?: string;\n itemClassName?: string;\n maxHeight?: string;\n // New size and responsive props\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n // New custom color props\n bgColor?: string;\n hoverBgColor?: string;\n textColor?: string;\n sublabelColor?: string;\n removeButtonColor?: string;\n removeButtonHoverColor?: string;\n // New border radius prop\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n // New style prop\n style?: CSSProperties;\n}\n\n// Helper function to get size-based classes\nconst getSizeClasses = (size: 'sm' | 'md' | 'lg' | 'responsive' = 'md') => {\n const baseClasses = {\n sm: {\n container: 'space-y-1',\n item: 'px-2 py-1.5',\n label: 'text-xs',\n sublabel: 'text-[10px]',\n button: 'w-5 h-5',\n icon: 'w-3 h-3',\n },\n md: {\n container: 'space-y-2',\n item: 'px-4 py-3',\n label: 'text-sm',\n sublabel: 'text-xs',\n button: 'w-6 h-6',\n icon: 'w-4 h-4',\n },\n lg: {\n container: 'space-y-3',\n item: 'px-5 py-4',\n label: 'text-base',\n sublabel: 'text-sm',\n button: 'w-7 h-7',\n icon: 'w-5 h-5',\n },\n responsive: {\n container: 'space-y-1 sm:space-y-2 md:space-y-3',\n item: 'px-2 py-1.5 sm:px-3 sm:py-2 md:px-4 md:py-3 lg:px-5 lg:py-4',\n label: 'text-xs sm:text-sm md:text-base',\n sublabel: 'text-[10px] sm:text-xs md:text-sm',\n button: 'w-5 h-5 sm:w-5 sm:h-5 md:w-6 md:h-6 lg:w-7 lg:h-7',\n icon: 'w-3 h-3 sm:w-3 sm:h-3 md:w-4 md:h-4 lg:w-5 lg:h-5',\n },\n };\n\n return baseClasses[size];\n};\n\n// Helper function to get rounded corner classes\nconst getRoundedClasses = (rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md') => {\n const roundedMap = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-lg',\n lg: 'rounded-xl',\n full: 'rounded-full',\n };\n\n return roundedMap[rounded];\n};\n\nexport const SelectedItemsList: FC<SelectedItemsListProps> = ({\n items,\n onRemove,\n emptyMessage = 'No items selected',\n className = '',\n itemClassName = '',\n maxHeight = '300px',\n size = 'md',\n bgColor,\n hoverBgColor,\n textColor,\n sublabelColor,\n removeButtonColor,\n removeButtonHoverColor,\n rounded = 'md',\n style,\n}) => {\n const sizeClasses = getSizeClasses(size);\n const roundedClass = getRoundedClasses(rounded);\n\n // Default colors\n const defaultBgColor = '#F4F4F4';\n const defaultHoverBgColor = '#EBEBEB';\n const defaultTextColor = '#181918';\n const defaultSublabelColor = '#999999';\n const defaultRemoveButtonColor = '#9CA3AF';\n const defaultRemoveButtonHoverColor = '#EC615B';\n\n // Get final colors (use provided or default)\n const finalBgColor = bgColor || defaultBgColor;\n const finalHoverBgColor = hoverBgColor || defaultHoverBgColor;\n const finalTextColor = textColor || defaultTextColor;\n const finalSublabelColor = sublabelColor || defaultSublabelColor;\n const finalRemoveButtonColor = removeButtonColor || defaultRemoveButtonColor;\n const finalRemoveButtonHoverColor = removeButtonHoverColor || defaultRemoveButtonHoverColor;\n\n if (items.length === 0) {\n return (\n <div\n className={`text-center py-8 text-gray-500 text-sm ${className}`}\n style={{\n color: finalSublabelColor,\n ...style,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n return (\n <div\n className={`overflow-y-auto ${sizeClasses.container} ${className}`}\n style={{ maxHeight, ...style }}\n >\n {items.map((item, index) => (\n <div\n key={item.id}\n className={`\n group flex items-center justify-between\n ${roundedClass}\n transition-all duration-300 ease-out\n hover:shadow-sm\n animate-slide-in-item\n ${itemClassName}\n `}\n style={{\n backgroundColor: finalBgColor,\n animationDelay: `${index * 50}ms`,\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = finalHoverBgColor;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = finalBgColor;\n }}\n >\n <div className={`flex-1 min-w-0 ${sizeClasses.item}`}>\n {item.sublabel && (\n <div\n className={`font-normal mb-0.5 ${sizeClasses.sublabel}`}\n style={{ color: finalSublabelColor }}\n >\n {item.sublabel}\n </div>\n )}\n <div\n className={`font-medium truncate ${sizeClasses.label}`}\n style={{ color: finalTextColor }}\n >\n {item.label}\n </div>\n </div>\n\n <button\n onClick={() => onRemove(item.id)}\n className={`\n ml-3 flex-shrink-0 rounded-full\n flex items-center justify-center\n transition-all duration-200 ease-out\n hover:scale-110\n active:scale-95\n focus:outline-none focus:ring-2 focus:ring-opacity-50\n ${sizeClasses.button}\n `}\n style={{\n color: finalRemoveButtonColor,\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = 'white';\n (e.currentTarget as HTMLElement).style.color = finalRemoveButtonHoverColor;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent';\n (e.currentTarget as HTMLElement).style.color = finalRemoveButtonColor;\n }}\n aria-label={`Remove ${item.label}`}\n >\n <svg\n className={sizeClasses.icon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ))}\n </div>\n );\n};\n\nexport default SelectedItemsList;\n"],"names":["Button","variant","size","fullWidth","icon","iconPosition","loading","hoverColor","bgColor","textColor","borderColor","hoverBgColor","hoverTextColor","rounded","style","className","children","disabled","props","baseClasses","variantClasses","sizeClasses","roundedClasses","widthClass","variantClassesToUse","combinedClassName","renderIcon","jsxs","jsx","inlineStyles","e","StatCard","label","value","selected","onClick","labelColor","valueColor","selectedBgColor","selectedBorderColor","selectedLabelColor","selectedValueColor","getPaddingClasses","getRoundedClasses","getLabelTextClasses","getValueTextClasses","SearchInput","onIconClick","focusBorderColor","iconColor","placeholderColor","containerBaseClasses","inputBaseClasses","iconSizeClasses","paddingWithIcon","customStyles","placeholderClass","defaultBorderClass","defaultTextClass","defaultFocusClass","inputClassName","iconPositionClasses","defaultIconColor","hoverIconColor","defaultSearchIcon","Card","padding","shadow","hover","bordered","paddingClasses","shadowClasses","borderClass","hoverClass","mergedStyle","Dropdown","items","trigger","placement","overlayClassName","menuBgColor","menuItemHoverColor","dangerColor","isOpen","setIsOpen","useState","dropdownRef","useRef","useEffect","handleClickOutside","event","handleTriggerClick","handleTriggerMouseEnter","handleTriggerMouseLeave","handleMenuItemClick","item","placementClasses","animationClasses","itemSizeClasses","defaultHoverColor","defaultBorderColor","defaultDangerColor","hoverColorStyle","customHoverClass","customDangerStyle","dangerHoverBgStyle","finalBorderColor","itemStyle","Select","options","controlledValue","defaultValue","placeholder","onChange","allowClear","showSearch","searchPlaceholder","selectedTextColor","internalValue","setInternalValue","searchQuery","setSearchQuery","selectRef","searchInputRef","handleSelect","optionValue","handleClear","selectedOption","opt","filteredOptions","option","getTriggerStyles","styles","getSelectedOptionStyles","ChevronIcon","ClearIcon","Table","columns","dataSource","rowKey","pagination","onRow","striped","headerBgColor","headerTextColor","rowHoverColor","stripedRowColor","currentPage","setCurrentPage","pageSize","setPageSize","sizeConfig","currentSizeConfig","currentRoundedClass","getRowKey","record","index","getValue","dataIndex","obj","key","paginatedData","handlePageChange","page","handlePageSizeChange","newPageSize","column","idx","rowProps","stripedBg","hoverBg","colIdx","content","Pagination","current","total","onPageSizeChange","showSizeChanger","pageSizeOptions","showTotal","totalPages","startItem","endItem","getPageNumbers","pages","i","TableTop","title","description","onSearch","actions","filters","titleColor","descriptionColor","searchBgColor","searchBorderColor","searchFocusBorderColor","handleSearchChange","config","radiusClass","searchInputStyle","widthMap","Modal","open","onClose","footer","width","closable","maskClosable","centered","overlayColor","bodyClassName","headerClassName","maxHeight","isVisible","setIsVisible","isAnimating","setIsAnimating","effectiveWidth","modalStyle","headerStyle","overlayStyle","timer","handleEscape","handleMaskClick","handleModalClick","Badge","dot","dotSizeClasses","dotColorClasses","Steps","direction","finishColor","processColor","waitColor","errorColor","lineColor","getStepStatus","textSizeClasses","descriptionSizeClasses","status","getStatusClasses","isOutline","statusClasses","isLast","iconStyle","Progress","percent","showInfo","strokeColor","strokeWidth","format","successColor","exceptionColor","trackColor","clampedPercent","heightClasses","getStatusColor","getTrackColor","getStatusIcon","formatPercent","height","Checkbox","controlledChecked","defaultChecked","indeterminate","id","name","checkedColor","uncheckedColor","checkedBorderColor","internalChecked","setInternalChecked","isControlled","checked","handleChange","newChecked","isFilled","getCheckboxClasses","getCheckboxInlineStyles","getIconColor","getSizeClasses","SelectedItemsList","onRemove","emptyMessage","itemClassName","sublabelColor","removeButtonColor","removeButtonHoverColor","roundedClass","defaultBgColor","defaultHoverBgColor","defaultTextColor","defaultSublabelColor","defaultRemoveButtonColor","defaultRemoveButtonHoverColor","finalBgColor","finalHoverBgColor","finalTextColor","finalSublabelColor","finalRemoveButtonColor","finalRemoveButtonHoverColor"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/Button.tsx","../src/components/StatCard.tsx","../src/components/SearchInput.tsx","../src/components/Card.tsx","../src/components/Dropdown.tsx","../src/components/Select.tsx","../src/components/Table.tsx","../src/components/TableTop.tsx","../src/components/Modal.tsx","../src/components/Badge.tsx","../src/components/Steps.tsx","../src/components/Progress.tsx","../src/components/Checkbox.tsx","../src/components/SelectedItemsList.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes, CSSProperties, FC, ReactNode } from 'react';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'outlined' | 'ghost' | 'text';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n loading?: boolean;\n hoverColor?: string;\n bgColor?: string;\n textColor?: string;\n borderColor?: string;\n hoverBgColor?: string;\n hoverTextColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Button: FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n icon,\n iconPosition = 'left',\n loading = false,\n hoverColor,\n bgColor,\n textColor,\n borderColor,\n hoverBgColor,\n hoverTextColor,\n rounded = 'lg',\n style,\n className = '',\n children,\n disabled,\n ...props\n}) => {\n const baseClasses = 'inline-flex items-center justify-center font-normal transition-all duration-300 ease-out focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed active:scale-95';\n\n const variantClasses = {\n primary: 'bg-[#EC615B] hover:bg-[#D4554F] text-white focus:ring-[#EC615B] shadow-sm hover:shadow-md',\n outlined: 'border border-gray-300 bg-white hover:bg-gray-50 text-[#181918] focus:ring-gray-300',\n ghost: 'bg-gray-100 hover:bg-gray-200 text-[#181918] focus:ring-gray-300',\n text: 'text-[#181918] hover:bg-gray-100 focus:ring-gray-300',\n };\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm gap-1.5',\n md: 'px-4 py-2 text-base gap-2',\n lg: 'px-6 py-3 text-lg gap-2.5',\n responsive: 'px-2 py-1 text-xs sm:px-3 sm:py-1.5 sm:text-sm md:px-4 md:py-2 md:text-base lg:px-6 lg:py-3 lg:text-lg gap-1 sm:gap-1.5 md:gap-2 lg:gap-2.5',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const widthClass = fullWidth ? 'w-full' : '';\n\n // Determine variant classes, but they can be overridden by custom color props\n let variantClassesToUse = variantClasses[variant];\n\n // If custom colors are provided, remove variant styling and use custom styles\n if (bgColor || textColor || borderColor) {\n variantClassesToUse = '';\n }\n\n const combinedClassName = `${baseClasses} ${variantClassesToUse} ${sizeClasses[size]} ${roundedClasses[rounded]} ${widthClass} ${className}`;\n\n const renderIcon = () => {\n if (loading) {\n return (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n }\n return icon;\n };\n\n // Merge custom styles with generated inline styles\n const inlineStyles: CSSProperties = {\n ...style,\n };\n\n // Apply custom color props as inline styles\n if (bgColor) inlineStyles.backgroundColor = bgColor;\n if (textColor) inlineStyles.color = textColor;\n if (borderColor) inlineStyles.borderColor = borderColor;\n\n return (\n <button\n className={combinedClassName}\n disabled={disabled || loading}\n style={inlineStyles}\n onMouseEnter={(e) => {\n if (!disabled && !loading) {\n if (hoverBgColor) {\n e.currentTarget.style.backgroundColor = hoverBgColor;\n } else if (hoverColor) {\n e.currentTarget.style.backgroundColor = hoverColor;\n }\n if (hoverTextColor) {\n e.currentTarget.style.color = hoverTextColor;\n }\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !loading) {\n if (bgColor || hoverBgColor || hoverColor) {\n e.currentTarget.style.backgroundColor = bgColor || '';\n }\n if (textColor || hoverTextColor) {\n e.currentTarget.style.color = textColor || '';\n }\n }\n }}\n {...props}\n >\n {iconPosition === 'left' && renderIcon()}\n {children}\n {iconPosition === 'right' && renderIcon()}\n </button>\n );\n};\n\nexport default Button;\n","import type { FC, CSSProperties } from 'react';\n\nexport interface StatCardProps {\n label: string;\n value: string | number;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n // Size customization\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n // Border radius customization\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n // Color customization - Default state\n bgColor?: string;\n borderColor?: string;\n labelColor?: string;\n valueColor?: string;\n // Color customization - Selected state\n selectedBgColor?: string;\n selectedBorderColor?: string;\n selectedLabelColor?: string;\n selectedValueColor?: string;\n // Inline styles\n style?: CSSProperties;\n}\n\nexport const StatCard: FC<StatCardProps> = ({\n label,\n value,\n selected = false,\n onClick,\n className = '',\n size = 'responsive',\n rounded = 'md',\n bgColor,\n borderColor,\n labelColor,\n valueColor,\n selectedBgColor,\n selectedBorderColor,\n selectedLabelColor,\n selectedValueColor,\n style,\n}) => {\n // Padding based on size\n const getPaddingClasses = () => {\n switch (size) {\n case 'sm':\n return 'p-2 sm:p-3';\n case 'md':\n return 'p-3 sm:p-4';\n case 'lg':\n return 'p-4 sm:p-6';\n case 'responsive':\n return 'p-3 sm:p-4 md:p-5 lg:p-6';\n default:\n return 'p-4';\n }\n };\n\n // Border radius based on rounded prop\n const getRoundedClasses = () => {\n switch (rounded) {\n case 'none':\n return 'rounded-none';\n case 'sm':\n return 'rounded-sm';\n case 'md':\n return 'rounded-md';\n case 'lg':\n return 'rounded-lg';\n case 'xl':\n return 'rounded-xl';\n case 'full':\n return 'rounded-full';\n default:\n return 'rounded-md';\n }\n };\n\n // Label text size based on size prop\n const getLabelTextClasses = () => {\n switch (size) {\n case 'sm':\n return 'text-xs sm:text-xs';\n case 'md':\n return 'text-sm sm:text-base';\n case 'lg':\n return 'text-base sm:text-lg';\n case 'responsive':\n return 'text-xs sm:text-sm md:text-base lg:text-lg';\n default:\n return 'text-xs sm:text-sm md:text-base';\n }\n };\n\n // Value text size based on size prop\n const getValueTextClasses = () => {\n switch (size) {\n case 'sm':\n return 'text-lg sm:text-xl';\n case 'md':\n return 'text-2xl sm:text-3xl';\n case 'lg':\n return 'text-4xl sm:text-5xl';\n case 'responsive':\n return 'text-2xl sm:text-3xl md:text-4xl lg:text-5xl';\n default:\n return 'text-3xl';\n }\n };\n\n const baseClasses = `stat-card relative flex flex-col ${getPaddingClasses()} ${getRoundedClasses()} border transition-all duration-500 ease-in-out cursor-pointer overflow-hidden`;\n\n // Build default state classes with custom color support\n const defaultBgClass = bgColor ? '' : 'bg-white';\n const defaultBorderClass = borderColor ? '' : 'border-gray-200';\n const defaultHoverClasses = !bgColor && !borderColor ? 'hover:border-gray-300 hover:shadow-sm' : '';\n\n const stateClasses = selected\n ? `border-[#181918] bg-[#F4F4F4] shadow-sm scale-[1.02]`\n : `${defaultBorderClass} ${defaultBgClass} ${defaultHoverClasses}`;\n\n const combinedClassName = `${baseClasses} ${stateClasses} ${className}`;\n\n // Inline styles for custom colors\n const inlineStyles: CSSProperties = {\n ...style,\n };\n\n // Apply custom background color\n if (selected && selectedBgColor) {\n inlineStyles.backgroundColor = selectedBgColor;\n } else if (!selected && bgColor) {\n inlineStyles.backgroundColor = bgColor;\n }\n\n // Apply custom border color\n if (selected && selectedBorderColor) {\n inlineStyles.borderColor = selectedBorderColor;\n } else if (!selected && borderColor) {\n inlineStyles.borderColor = borderColor;\n }\n\n return (\n <div className={combinedClassName} onClick={onClick} style={inlineStyles}>\n {/* Active indicator slide effect */}\n {selected && (\n <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-[#EC615B]/5 to-transparent animate-slide-in pointer-events-none\" />\n )}\n\n <div className=\"relative z-10 transition-transform duration-300 ease-out hover:scale-[0.98] active:scale-[0.96]\">\n <span\n className={`${getLabelTextClasses()} font-normal mb-2 block transition-colors duration-500 ${\n selected ? 'text-gray-700' : 'text-gray-600'\n }`}\n style={\n selected && selectedLabelColor\n ? { color: selectedLabelColor }\n : !selected && labelColor\n ? { color: labelColor }\n : undefined\n }\n >\n {label}\n </span>\n <span\n className={`${getValueTextClasses()} font-semibold stat-value block transition-all duration-500 ${\n selected ? 'text-[#181918] scale-105' : 'text-[#181918]'\n }`}\n style={\n selected && selectedValueColor\n ? { color: selectedValueColor }\n : !selected && valueColor\n ? { color: valueColor }\n : undefined\n }\n >\n {value}\n </span>\n </div>\n </div>\n );\n};\n\nexport default StatCard;\n","import type { FC, ReactNode, InputHTMLAttributes, CSSProperties } from 'react';\n\nexport interface SearchInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n onIconClick?: () => void;\n bgColor?: string;\n borderColor?: string;\n focusBorderColor?: string;\n iconColor?: string;\n textColor?: string;\n placeholderColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const SearchInput: FC<SearchInputProps> = ({\n icon,\n iconPosition = 'left',\n size = 'md',\n fullWidth = false,\n className = '',\n onIconClick,\n bgColor,\n borderColor,\n focusBorderColor,\n iconColor,\n textColor,\n placeholderColor,\n rounded = 'md',\n style,\n ...props\n}) => {\n const containerBaseClasses = 'relative inline-flex items-center';\n\n const inputBaseClasses =\n 'border focus:outline-none focus:ring-1 transition-all duration-200 ease-in-out';\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-5 py-3 text-lg',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-sm sm:text-base md:text-lg',\n };\n\n const iconSizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n responsive: 'w-4 sm:w-5 md:w-6 h-4 sm:h-5 md:h-6',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-lg',\n lg: 'rounded-xl',\n full: 'rounded-full',\n };\n\n const paddingWithIcon =\n iconPosition === 'left'\n ? size === 'sm'\n ? 'pl-9'\n : size === 'md'\n ? 'pl-10'\n : size === 'lg'\n ? 'pl-12'\n : 'pl-9 sm:pl-10 md:pl-12'\n : size === 'sm'\n ? 'pr-9'\n : size === 'md'\n ? 'pr-10'\n : size === 'lg'\n ? 'pr-12'\n : 'pr-9 sm:pr-10 md:pr-12';\n\n const widthClass = fullWidth ? 'w-full' : '';\n\n // Build custom styles for colors\n const customStyles: CSSProperties = {\n backgroundColor: bgColor,\n borderColor: borderColor || '#D1D5DB',\n color: textColor,\n ...style,\n };\n\n // Determine placeholder color class\n const placeholderClass = placeholderColor\n ? ''\n : 'placeholder:text-gray-400';\n\n // Build border and default colors\n const defaultBorderClass = borderColor ? '' : 'border-gray-300';\n const defaultTextClass = textColor ? '' : 'text-gray-900';\n const defaultFocusClass = focusBorderColor\n ? ''\n : 'focus:ring-[#EC615B] focus:border-[#EC615B]';\n\n const inputClassName = `${inputBaseClasses} ${!className.includes('px-') && !className.includes('py-') ? sizeClasses[size] : ''} ${\n icon ? paddingWithIcon : ''\n } ${widthClass} ${!className.includes('rounded') ? roundedClasses[rounded] : ''} ${!className.includes('border-') ? defaultBorderClass : ''} ${defaultTextClass} ${defaultFocusClass} ${placeholderClass} ${className}`;\n\n const iconPositionClasses = iconPosition === 'left' ? 'left-3' : 'right-3';\n const defaultIconColor = iconColor || 'text-gray-400';\n const hoverIconColor = iconColor ? '' : 'hover:text-gray-600';\n\n const defaultSearchIcon = (\n <svg\n className={`${iconSizeClasses[size]} ${defaultIconColor}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n );\n\n return (\n <div className={`${containerBaseClasses} ${widthClass}`}>\n {icon && (\n <div\n className={`absolute ${iconPositionClasses} ${defaultIconColor} ${\n onIconClick ? 'cursor-pointer' : ''\n } ${hoverIconColor}`}\n onClick={onIconClick}\n >\n {icon === true ? defaultSearchIcon : icon}\n </div>\n )}\n <input\n type=\"text\"\n className={inputClassName}\n style={{\n ...customStyles,\n ...(focusBorderColor && {\n '--focus-border-color': focusBorderColor,\n } as CSSProperties),\n ...(placeholderColor && {\n '--placeholder-color': placeholderColor,\n } as CSSProperties),\n }}\n {...props}\n />\n </div>\n );\n};\n\nexport default SearchInput;\n","import type { FC, HTMLAttributes, CSSProperties } from 'react';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'responsive';\n shadow?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n bordered?: boolean;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n bgColor?: string;\n borderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Card: FC<CardProps> = ({\n padding = 'md',\n shadow = 'sm',\n hover = false,\n bordered = true,\n rounded = 'lg',\n className = '',\n bgColor,\n borderColor,\n style,\n children,\n ...props\n}) => {\n const baseClasses = 'card transition-all duration-300 ease-out';\n\n const paddingClasses = {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n responsive: 'p-2 sm:p-3 md:p-4 lg:p-6',\n };\n\n const shadowClasses = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n };\n\n const borderClass = bordered ? `border ${borderColor || 'border-gray-200'}` : '';\n const hoverClass = hover ? 'cursor-pointer' : '';\n const bgClass = bgColor ? '' : 'bg-white';\n\n const combinedClassName = `${baseClasses} ${bgClass} ${paddingClasses[padding]} ${shadowClasses[shadow]} ${roundedClasses[rounded]} ${borderClass} ${hoverClass} ${className}`;\n\n const mergedStyle: CSSProperties = {\n ...(bgColor && { backgroundColor: bgColor }),\n ...style,\n };\n\n return (\n <div className={combinedClassName} style={mergedStyle} {...props}>\n <div className={hover ? 'transition-transform duration-300 ease-out hover:scale-[0.98] active:scale-[0.96]' : ''}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default Card;\n","import { useState, useRef, useEffect } from 'react';\nimport type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface DropdownMenuItem {\n key: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onClick?: () => void;\n}\n\nexport interface DropdownProps {\n items: DropdownMenuItem[];\n trigger?: 'click' | 'hover';\n placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';\n children: ReactNode;\n className?: string;\n overlayClassName?: string;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n menuBgColor?: string;\n menuItemHoverColor?: string;\n dangerColor?: string;\n borderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Dropdown: FC<DropdownProps> = ({\n items,\n trigger = 'click',\n placement = 'bottomLeft',\n children,\n className = '',\n overlayClassName = '',\n disabled = false,\n size = 'md',\n menuBgColor,\n menuItemHoverColor,\n dangerColor,\n borderColor,\n style,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: Event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const handleTriggerClick = () => {\n if (!disabled && trigger === 'click') {\n setIsOpen(!isOpen);\n }\n };\n\n const handleTriggerMouseEnter = () => {\n if (!disabled && trigger === 'hover') {\n setIsOpen(true);\n }\n };\n\n const handleTriggerMouseLeave = () => {\n if (!disabled && trigger === 'hover') {\n setIsOpen(false);\n }\n };\n\n const handleMenuItemClick = (item: DropdownMenuItem) => {\n if (!item.disabled && item.onClick) {\n item.onClick();\n }\n setIsOpen(false);\n };\n\n const placementClasses = {\n bottomLeft: 'top-full left-0 mt-1',\n bottomRight: 'top-full right-0 mt-1',\n topLeft: 'bottom-full left-0 mb-1',\n topRight: 'bottom-full right-0 mb-1',\n };\n\n const animationClasses = placement.startsWith('bottom')\n ? 'dropdown-slide-down'\n : 'dropdown-slide-up';\n\n const sizeClasses = {\n sm: 'min-w-[120px] text-xs',\n md: 'min-w-[160px] text-sm',\n lg: 'min-w-[220px] text-base',\n responsive: 'min-w-[120px] sm:min-w-[160px] md:min-w-[200px] lg:min-w-[240px] text-xs sm:text-sm md:text-base',\n };\n\n const itemSizeClasses = {\n sm: 'px-3 py-1.5 text-xs gap-1.5',\n md: 'px-4 py-2 text-sm gap-2',\n lg: 'px-5 py-3 text-base gap-2.5',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-xs sm:text-sm md:text-base gap-1.5 sm:gap-2 md:gap-2.5',\n };\n\n // Color styling helpers\n const defaultHoverColor = 'hover:bg-gray-50';\n const defaultBorderColor = 'border-gray-200';\n const defaultDangerColor = 'text-red-600';\n\n // Hover color handling\n const hoverColorStyle = menuItemHoverColor ? { backgroundColor: menuItemHoverColor } : {};\n const customHoverClass = menuItemHoverColor ? '' : defaultHoverColor;\n\n // Danger color handling\n const customDangerStyle = dangerColor ? { color: dangerColor } : {};\n const dangerHoverBgStyle = dangerColor ? { backgroundColor: dangerColor + '15' } : {};\n\n // Border color handling\n const finalBorderColor = borderColor || defaultBorderColor;\n\n return (\n <div\n ref={dropdownRef}\n className={`relative inline-block ${className}`}\n onMouseEnter={handleTriggerMouseEnter}\n onMouseLeave={handleTriggerMouseLeave}\n style={style}\n >\n <div\n onClick={handleTriggerClick}\n className={`inline-flex ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}`}\n >\n {children}\n </div>\n\n {isOpen && !disabled && (\n <div\n className={`absolute ${placementClasses[placement]} ${animationClasses} z-50 ${sizeClasses[size]} ${overlayClassName}`}\n >\n <div\n className={`dropdown-menu rounded-lg shadow-lg border py-1 overflow-hidden ${finalBorderColor}`}\n style={{ backgroundColor: menuBgColor || '#ffffff' }}\n >\n {items.map((item) => {\n // Determine item-specific styles\n let itemStyle: React.CSSProperties = {};\n\n if (!item.disabled) {\n if (item.danger) {\n // Danger items use custom danger color if provided\n itemStyle = {\n ...customDangerStyle,\n ...dangerHoverBgStyle,\n };\n } else if (menuItemHoverColor) {\n // Custom hover color applied inline\n itemStyle = hoverColorStyle;\n }\n }\n\n return (\n <div\n key={item.key}\n onClick={() => handleMenuItemClick(item)}\n className={`\n dropdown-menu-item\n flex items-center cursor-pointer transition-all duration-200 ease-out\n ${!overlayClassName.includes('px-') && !overlayClassName.includes('py-') ? itemSizeClasses[size] : ''}\n ${item.disabled ? 'opacity-50 cursor-not-allowed' : customHoverClass}\n ${item.danger ? (dangerColor ? '' : defaultDangerColor) : 'text-gray-700'}\n `}\n style={itemStyle}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default Dropdown;\n","import { useState, useRef, useEffect } from 'react';\nimport type { FC, MouseEvent, CSSProperties } from 'react';\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string | number;\n defaultValue?: string | number;\n placeholder?: string;\n onChange?: (value: string | number) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n fullWidth?: boolean;\n className?: string;\n allowClear?: boolean;\n showSearch?: boolean;\n searchPlaceholder?: string;\n bgColor?: string;\n borderColor?: string;\n focusBorderColor?: string;\n selectedBgColor?: string;\n selectedTextColor?: string;\n hoverBgColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Select: FC<SelectProps> = ({\n options,\n value: controlledValue,\n defaultValue,\n placeholder = 'Select an option',\n onChange,\n disabled = false,\n size = 'md',\n fullWidth = false,\n className = '',\n allowClear = false,\n showSearch = false,\n searchPlaceholder = 'Search...',\n bgColor,\n borderColor,\n focusBorderColor = '#EC615B',\n selectedBgColor,\n selectedTextColor,\n hoverBgColor,\n rounded = 'lg',\n style,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<string | number | undefined>(\n defaultValue\n );\n const [searchQuery, setSearchQuery] = useState('');\n const selectRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n useEffect(() => {\n const handleClickOutside = (event: Event) => {\n if (selectRef.current && !selectRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setSearchQuery('');\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n if (showSearch && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, showSearch]);\n\n const handleSelect = (optionValue: string | number) => {\n if (controlledValue === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n };\n\n const handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n if (controlledValue === undefined) {\n setInternalValue(undefined);\n }\n onChange?.('' as any);\n };\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n const filteredOptions = showSearch\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-5 py-3 text-lg',\n responsive: 'px-3 sm:px-4 md:px-5 py-1.5 sm:py-2 md:py-3 text-sm sm:text-base md:text-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const widthClass = fullWidth ? 'w-full' : 'min-w-[200px]';\n\n // Helper function to apply custom colors to inline styles\n const getTriggerStyles = (): CSSProperties => {\n const styles: CSSProperties = {};\n if (bgColor) styles.backgroundColor = bgColor;\n if (borderColor) styles.borderColor = borderColor;\n return styles;\n };\n\n const getSelectedOptionStyles = (): CSSProperties => {\n const styles: CSSProperties = {};\n if (selectedBgColor) styles.backgroundColor = selectedBgColor;\n if (selectedTextColor) styles.color = selectedTextColor;\n return styles;\n };\n\n const ChevronIcon = (\n <svg\n className={`w-4 h-4 transition-transform duration-200 ease-out ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n\n const ClearIcon = (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n );\n\n return (\n <div ref={selectRef} className={`relative inline-block ${widthClass}`} style={style}>\n <div\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={`\n select-trigger\n flex items-center justify-between gap-2\n border transition-all duration-200 ease-out\n ${!className.includes('px-') && !className.includes('py-') && !className.includes('h-') ? sizeClasses[size] : ''}\n ${!className.includes('rounded') ? roundedClasses[rounded] : ''}\n ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${isOpen ? 'ring-2 ring-opacity-20' : ''}\n ${className}\n `}\n style={{\n ...getTriggerStyles(),\n backgroundColor: bgColor || getTriggerStyles().backgroundColor || '#FFFFFF',\n borderColor: borderColor || getTriggerStyles().borderColor || '#D1D5DB',\n ...(isOpen && {\n borderColor: focusBorderColor,\n boxShadow: `0 0 0 2px ${focusBorderColor}20`,\n }),\n ...(!disabled && !isOpen && hoverBgColor && {\n cursor: 'pointer',\n }),\n }}\n onMouseEnter={(e) => {\n if (!disabled && hoverBgColor) {\n e.currentTarget.style.backgroundColor = hoverBgColor;\n }\n }}\n onMouseLeave={(e) => {\n if (bgColor) {\n e.currentTarget.style.backgroundColor = bgColor;\n } else {\n e.currentTarget.style.backgroundColor = '#FFFFFF';\n }\n }}\n >\n <span className={selectedOption ? 'text-gray-900' : 'text-gray-400'}>\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <div className=\"flex items-center gap-1\">\n {allowClear && value && !disabled && (\n <span\n onClick={handleClear}\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-200 ease-out\"\n >\n {ClearIcon}\n </span>\n )}\n <span className=\"text-gray-400\">{ChevronIcon}</span>\n </div>\n </div>\n\n {isOpen && !disabled && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-50 dropdown-slide-down\">\n <div className={`select-dropdown bg-white shadow-lg border border-gray-200 py-1 max-h-[300px] overflow-auto ${roundedClasses[rounded]}`}>\n {showSearch && (\n <div className=\"px-2 py-2 border-b border-gray-200\">\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"w-full px-3 py-1.5 text-sm border border-gray-300 rounded focus:outline-none focus:ring-2 transition-all duration-200 ease-out\"\n style={{\n borderColor: borderColor,\n boxShadow: `0 0 0 2px ${focusBorderColor}20`,\n }}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n {filteredOptions.length === 0 ? (\n <div className=\"px-4 py-3 text-sm text-gray-500 text-center\">\n No results found\n </div>\n ) : (\n filteredOptions.map((option) => (\n <div\n key={option.value}\n onClick={() => !option.disabled && handleSelect(option.value)}\n className={`\n select-option\n px-4 py-2 text-sm transition-all duration-200 ease-out\n ${option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n `}\n style={{\n ...(option.value === value ? getSelectedOptionStyles() : {}),\n backgroundColor: option.value === value ? (selectedBgColor || '#FCEAE9') : undefined,\n color: option.value === value ? (selectedTextColor || '#EC615B') : '#181918',\n fontWeight: option.value === value ? 'medium' : undefined,\n }}\n onMouseEnter={(e) => {\n if (!option.disabled && option.value !== value) {\n e.currentTarget.style.backgroundColor = hoverBgColor || '#F3F4F6';\n }\n }}\n onMouseLeave={(e) => {\n if (option.value !== value) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {option.label}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default Select;\n","import { useState } from 'react';\nimport type { FC, ReactNode, HTMLAttributes, CSSProperties } from 'react';\nimport { Select } from './Select';\n\nexport interface ColumnDef<T = any> {\n key: string;\n title: string;\n dataIndex?: string;\n render?: (value: any, record: T, index: number) => ReactNode;\n width?: string | number;\n align?: 'left' | 'center' | 'right';\n sortable?: boolean;\n}\n\nexport interface TableProps<T = any> {\n columns: ColumnDef<T>[];\n dataSource: T[];\n rowKey?: string | ((record: T) => string);\n pagination?: PaginationConfig | false;\n loading?: boolean;\n onRow?: (record: T, index: number) => HTMLAttributes<HTMLTableRowElement>;\n className?: string;\n bordered?: boolean;\n striped?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n headerBgColor?: string;\n headerTextColor?: string;\n rowHoverColor?: string;\n borderColor?: string;\n stripedRowColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n style?: CSSProperties;\n}\n\nexport interface PaginationConfig {\n current?: number;\n pageSize?: number;\n total?: number;\n onChange?: (page: number, pageSize: number) => void;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Table = <T extends Record<string, any>>({\n columns,\n dataSource,\n rowKey = 'id',\n pagination,\n loading = false,\n onRow,\n className = '',\n bordered = false,\n striped = false,\n size = 'md',\n headerBgColor,\n headerTextColor,\n rowHoverColor,\n borderColor,\n stripedRowColor,\n rounded = 'md',\n style,\n}: TableProps<T>) => {\n const [currentPage, setCurrentPage] = useState(\n pagination && typeof pagination === 'object' ? pagination.current || 1 : 1\n );\n const [pageSize, setPageSize] = useState(\n pagination && typeof pagination === 'object' ? pagination.pageSize || 10 : 10\n );\n\n // Size configuration for responsive sizing\n const sizeConfig = {\n sm: {\n headerPadding: 'px-3 py-2',\n headerFontSize: 'text-xs',\n rowPadding: 'px-3 py-2',\n rowFontSize: 'text-xs',\n containerRounded: 'rounded-md',\n },\n md: {\n headerPadding: 'px-4 py-3',\n headerFontSize: 'text-xs',\n rowPadding: 'px-4 py-3',\n rowFontSize: 'text-sm',\n containerRounded: 'rounded-lg',\n },\n lg: {\n headerPadding: 'px-6 py-4',\n headerFontSize: 'text-sm',\n rowPadding: 'px-6 py-4',\n rowFontSize: 'text-base',\n containerRounded: 'rounded-xl',\n },\n responsive: {\n headerPadding: 'px-2 sm:px-3 md:px-4 py-2 sm:py-2.5 md:py-3',\n headerFontSize: 'text-xs sm:text-xs md:text-sm',\n rowPadding: 'px-2 sm:px-3 md:px-4 py-2 sm:py-2.5 md:py-3',\n rowFontSize: 'text-xs sm:text-xs md:text-sm',\n containerRounded: 'rounded-md sm:rounded-lg md:rounded-lg',\n },\n };\n\n // Rounded configuration\n const roundedClasses = {\n none: '',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n };\n\n const currentSizeConfig = sizeConfig[size];\n const currentRoundedClass = roundedClasses[rounded];\n\n const getRowKey = (record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n return record[rowKey] || String(index);\n };\n\n const getValue = (record: T, dataIndex?: string) => {\n if (!dataIndex) return record;\n return dataIndex.split('.').reduce((obj, key) => obj?.[key], record);\n };\n\n // Pagination logic\n const paginatedData =\n pagination === false\n ? dataSource\n : dataSource.slice((currentPage - 1) * pageSize, currentPage * pageSize);\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(page, pageSize);\n }\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n setPageSize(newPageSize);\n setCurrentPage(1);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(1, newPageSize);\n }\n };\n\n return (\n <div className=\"w-full\" style={style}>\n <div\n className={`overflow-x-auto ${currentRoundedClass || 'rounded-2xl'} border`}\n style={{ borderColor: borderColor || '#EEEEEE' }}\n >\n <table className={`w-full ${bordered ? 'border-collapse' : ''} ${className}`}>\n <thead\n style={{\n backgroundColor: headerBgColor || '#F5F6F7',\n color: headerTextColor || '#333333',\n }}\n >\n <tr>\n {columns.map((column, idx) => (\n <th\n key={column.key}\n className={`${currentSizeConfig.headerPadding} text-left ${currentSizeConfig.headerFontSize} font-medium uppercase tracking-wider ${\n bordered && idx !== columns.length - 1 ? 'border-r' : ''\n } ${\n column.align === 'center'\n ? 'text-center'\n : column.align === 'right'\n ? 'text-right'\n : ''\n }`}\n style={{\n width: column.width,\n borderColor: borderColor || '#EEEEEE',\n color: headerTextColor || '#333333',\n }}\n >\n {column.title}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n className=\"bg-white divide-y\"\n style={{ borderColor: borderColor || '#e5e5e5' }}\n >\n {loading ? (\n <tr>\n <td\n colSpan={columns.length}\n className={`${currentSizeConfig.rowPadding} py-8 text-center`}\n style={{ color: '#333333' }}\n >\n <div className=\"flex justify-center items-center\">\n <svg\n className=\"animate-spin h-5 w-5 mr-2\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n Loading...\n </div>\n </td>\n </tr>\n ) : paginatedData.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className={`${currentSizeConfig.rowPadding} py-8 text-center`}\n style={{ color: '#333333' }}\n >\n No data\n </td>\n </tr>\n ) : (\n paginatedData.map((record, index) => {\n const rowProps = onRow ? onRow(record, index) : {};\n const stripedBg = striped && index % 2 === 1 ? (stripedRowColor || '#F5F6F7') : 'transparent';\n const hoverBg = rowHoverColor || '#f3f4f6';\n return (\n <tr\n key={getRowKey(record, index)}\n className=\"transition-colors duration-200 ease-out\"\n style={{\n backgroundColor: stripedBg,\n }}\n onMouseEnter={(e) => {\n if (rowHoverColor || !striped || index % 2 === 0) {\n e.currentTarget.style.backgroundColor = hoverBg;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = stripedBg;\n }}\n {...rowProps}\n >\n {columns.map((column, colIdx) => {\n const value = getValue(record, column.dataIndex);\n const content = column.render ? column.render(value, record, index) : value;\n\n return (\n <td\n key={column.key}\n className={`${currentSizeConfig.rowPadding} ${currentSizeConfig.rowFontSize} text-gray-900 ${\n bordered && colIdx !== columns.length - 1 ? 'border-r' : ''\n } ${\n column.align === 'center'\n ? 'text-center'\n : column.align === 'right'\n ? 'text-right'\n : ''\n }`}\n style={{\n borderColor: borderColor || '#EEEEEE',\n }}\n >\n {content as ReactNode}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {pagination !== false && (\n <Pagination\n current={currentPage}\n pageSize={pageSize}\n total={dataSource.length}\n onChange={handlePageChange}\n onPageSizeChange={handlePageSizeChange}\n showSizeChanger={\n pagination && typeof pagination === 'object' ? pagination.showSizeChanger : true\n }\n pageSizeOptions={\n pagination && typeof pagination === 'object'\n ? pagination.pageSizeOptions\n : [10, 20, 50, 100]\n }\n showTotal={pagination && typeof pagination === 'object' ? pagination.showTotal : true}\n size={\n pagination && typeof pagination === 'object' && pagination.size\n ? pagination.size\n : size === 'responsive'\n ? 'md'\n : size\n }\n />\n )}\n </div>\n );\n};\n\ninterface PaginationProps {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst Pagination: FC<PaginationProps> = ({\n current,\n pageSize,\n total,\n onChange,\n onPageSizeChange,\n showSizeChanger = true,\n pageSizeOptions = [10, 20, 50, 100],\n showTotal = true,\n size = 'md',\n}) => {\n const totalPages = Math.ceil(total / pageSize);\n const startItem = (current - 1) * pageSize + 1;\n const endItem = Math.min(current * pageSize, total);\n\n const sizeClasses = {\n sm: {\n button: 'px-2.5 py-1 text-xs',\n icon: 'h-3.5 w-3.5',\n nav: 'px-1.5 py-1.5',\n },\n md: {\n button: 'px-4 py-2 text-sm',\n icon: 'h-5 w-5',\n nav: 'px-2 py-2',\n },\n lg: {\n button: 'px-5 py-2.5 text-base',\n icon: 'h-6 w-6',\n nav: 'px-3 py-3',\n },\n };\n\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisible = 7;\n\n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n if (current <= 3) {\n for (let i = 1; i <= 5; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n } else if (current >= totalPages - 2) {\n pages.push(1);\n pages.push('...');\n for (let i = totalPages - 4; i <= totalPages; i++) pages.push(i);\n } else {\n pages.push(1);\n pages.push('...');\n for (let i = current - 1; i <= current + 1; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n }\n }\n\n return pages;\n };\n\n return (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-[#EEEEEE] sm:px-6 mt-4\">\n {showTotal && (\n <div className=\"text-sm text-[#181918]\">\n {startItem}-{endItem} of {total} items\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n {showSizeChanger && (\n <Select\n value={pageSize.toString()}\n onChange={(value) => onPageSizeChange(Number(value))}\n options={pageSizeOptions.map((size) => ({\n value: size.toString(),\n label: `${size} / page`,\n }))}\n size=\"sm\"\n className=\"w-32\"\n />\n )}\n\n <nav className=\"inline-flex gap-1 items-center\" aria-label=\"Pagination\">\n <button\n onClick={() => onChange(current - 1)}\n disabled={current === 1}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].nav} text-[#181918] hover:bg-gray-100 focus:z-20 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent transition-all duration-300 ease-out hover:scale-110 active:scale-95`}\n >\n <svg className={sizeClasses[size].icon} viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n\n {getPageNumbers().map((page, index) => {\n if (page === '...') {\n return (\n <span\n key={`ellipsis-${index}`}\n className={`relative inline-flex items-center justify-center ${sizeClasses[size].button} font-normal text-[#181918]`}\n >\n ...\n </span>\n );\n }\n\n return (\n <button\n key={page}\n onClick={() => onChange(page as number)}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].button} font-medium transition-all duration-300 ease-out focus:z-20 hover:scale-105 active:scale-95 ${\n current === page\n ? 'bg-[#EC615B] text-white shadow-sm'\n : 'text-[#181918] hover:bg-gray-100'\n }`}\n >\n {page}\n </button>\n );\n })}\n\n <button\n onClick={() => onChange(current + 1)}\n disabled={current === totalPages}\n className={`relative inline-flex items-center justify-center rounded-md ${sizeClasses[size].nav} text-[#181918] hover:bg-gray-100 focus:z-20 disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent transition-all duration-300 ease-out hover:scale-110 active:scale-95`}\n >\n <svg className={sizeClasses[size].icon} viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n </nav>\n </div>\n </div>\n );\n};\n\nexport default Table;\n","import type { FC, ReactNode, ChangeEvent, CSSProperties } from 'react';\n\nexport interface TableTopProps {\n // Existing props\n title?: string;\n description?: string;\n searchPlaceholder?: string;\n onSearch?: (value: string) => void;\n actions?: ReactNode;\n filters?: ReactNode;\n className?: string;\n\n // New responsive props\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n\n // Custom color props\n titleColor?: string;\n descriptionColor?: string;\n searchBgColor?: string;\n searchBorderColor?: string;\n searchFocusBorderColor?: string;\n\n // Search input border radius\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n // Custom styles\n style?: CSSProperties;\n}\n\nexport const TableTop: FC<TableTopProps> = ({\n title,\n description,\n searchPlaceholder = 'Search...',\n onSearch,\n actions,\n filters,\n className = '',\n size = 'responsive',\n titleColor,\n descriptionColor,\n searchBgColor = 'white',\n searchBorderColor = '#d1d5db',\n searchFocusBorderColor = '#3b82f6',\n rounded = 'md',\n style,\n}) => {\n const handleSearchChange = (e: ChangeEvent<HTMLInputElement>) => {\n onSearch?.(e.target.value);\n };\n\n // Size configuration\n const sizeConfig = {\n sm: {\n titleSize: 'text-lg',\n titleWeight: 'font-semibold',\n descriptionSize: 'text-xs',\n searchInputSize: 'text-xs',\n searchInputPy: 'py-1.5',\n searchPaddingLeft: 'pl-8',\n iconSize: 'h-4 w-4',\n spacing: 'space-y-2',\n gap: 'gap-2',\n maxWidth: 'max-w-sm',\n descriptionMargin: 'mt-0.5',\n },\n md: {\n titleSize: 'text-xl',\n titleWeight: 'font-semibold',\n descriptionSize: 'text-sm',\n searchInputSize: 'text-sm',\n searchInputPy: 'py-2',\n searchPaddingLeft: 'pl-10',\n iconSize: 'h-5 w-5',\n spacing: 'space-y-3',\n gap: 'gap-3',\n maxWidth: 'max-w-md',\n descriptionMargin: 'mt-1',\n },\n lg: {\n titleSize: 'text-2xl',\n titleWeight: 'font-bold',\n descriptionSize: 'text-base',\n searchInputSize: 'text-base',\n searchInputPy: 'py-2.5',\n searchPaddingLeft: 'pl-12',\n iconSize: 'h-6 w-6',\n spacing: 'space-y-4',\n gap: 'gap-4',\n maxWidth: 'max-w-lg',\n descriptionMargin: 'mt-2',\n },\n responsive: {\n titleSize: 'text-lg sm:text-xl md:text-2xl',\n titleWeight: 'font-semibold md:font-bold',\n descriptionSize: 'text-xs sm:text-sm md:text-base',\n searchInputSize: 'text-xs sm:text-sm md:text-base',\n searchInputPy: 'py-1.5 sm:py-2 md:py-2.5',\n searchPaddingLeft: 'pl-8 sm:pl-10 md:pl-12',\n iconSize: 'h-4 w-4 sm:h-5 sm:w-5 md:h-6 md:w-6',\n spacing: 'space-y-2 sm:space-y-3 md:space-y-4',\n gap: 'gap-2 sm:gap-3 md:gap-4',\n maxWidth: 'max-w-sm md:max-w-md lg:max-w-lg',\n descriptionMargin: 'mt-0.5 sm:mt-1 md:mt-2',\n },\n };\n\n const config = sizeConfig[size];\n\n // Border radius configuration\n const radiusConfig = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const radiusClass = radiusConfig[rounded];\n\n // Build inline styles for custom colors\n const searchInputStyle: CSSProperties = {\n backgroundColor: searchBgColor,\n borderColor: searchBorderColor,\n };\n\n return (\n <div\n className={`${config.spacing} mb-4 ${className}`}\n style={style}\n >\n {/* Title and Description */}\n {(title || description) && (\n <div>\n {title && (\n <h2\n className={`${config.titleSize} ${config.titleWeight}`}\n style={{ color: titleColor || '#111827' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n className={`${config.descriptionSize} ${config.descriptionMargin}`}\n style={{ color: descriptionColor || '#6b7280' }}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Search and Actions Row */}\n <div className={`flex flex-col sm:flex-row items-stretch sm:items-center justify-between ${config.gap}`}>\n {/* Search Input */}\n {onSearch && (\n <div className={`flex-1 ${config.maxWidth}`}>\n <div className=\"relative\">\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg\n className={`${config.iconSize} text-gray-400`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n onChange={handleSearchChange}\n className={`block w-full ${config.searchPaddingLeft} pr-3 ${config.searchInputPy} border ${radiusClass} focus:outline-none focus:ring-2 focus:ring-opacity-50 ${config.searchInputSize} transition-colors duration-200`}\n style={searchInputStyle}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = searchFocusBorderColor;\n e.currentTarget.style.boxShadow = `0 0 0 2px rgba(59, 130, 246, 0.1)`;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = searchBorderColor;\n e.currentTarget.style.boxShadow = 'none';\n }}\n />\n </div>\n </div>\n )}\n\n {/* Actions (Buttons) */}\n {actions && (\n <div className={`flex items-center gap-2 w-full sm:w-auto`}>\n {actions}\n </div>\n )}\n </div>\n\n {/* Filters Row */}\n {filters && (\n <div className={`flex flex-wrap items-center ${config.gap}`}>\n {filters}\n </div>\n )}\n </div>\n );\n};\n\nexport default TableTop;\n","import { useEffect, useState, CSSProperties } from 'react';\nimport type { FC, ReactNode, MouseEvent } from 'react';\n\ntype ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'responsive';\n\nconst widthMap: Record<ModalSize, string> = {\n sm: '384px',\n md: '448px',\n lg: '512px',\n xl: '600px',\n full: '100%',\n responsive: '90vw',\n};\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n footer?: ReactNode;\n width?: string | number;\n size?: ModalSize;\n closable?: boolean;\n maskClosable?: boolean;\n centered?: boolean;\n className?: string;\n bgColor?: string;\n headerBgColor?: string;\n overlayColor?: string;\n bodyClassName?: string;\n headerClassName?: string;\n maxHeight?: string | number;\n}\n\nexport const Modal: FC<ModalProps> = ({\n open,\n onClose,\n title,\n children,\n footer,\n width,\n size = 'md',\n closable = true,\n maskClosable = true,\n centered = true,\n className = '',\n bgColor = '#ffffff',\n headerBgColor = '#ffffff',\n overlayColor = 'rgba(0, 0, 0, 0.5)',\n bodyClassName = '',\n headerClassName = '',\n maxHeight = '70vh',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n\n // Determine effective width\n const effectiveWidth = width || widthMap[size];\n const effectiveWidthNum = typeof effectiveWidth === 'number' ? `${effectiveWidth}px` : effectiveWidth;\n\n // Prepare modal style\n const modalStyle: CSSProperties = {\n width: effectiveWidthNum,\n maxWidth: '90vw',\n backgroundColor: bgColor,\n };\n\n // Prepare header style\n const headerStyle: CSSProperties = {\n backgroundColor: headerBgColor,\n };\n\n // Prepare overlay style\n const overlayStyle: CSSProperties = {\n backgroundColor: overlayColor,\n };\n\n useEffect(() => {\n if (open) {\n setIsVisible(true);\n // Small delay to trigger animation\n setTimeout(() => setIsAnimating(true), 10);\n document.body.style.overflow = 'hidden';\n } else {\n setIsAnimating(false);\n // Wait for animation to complete before unmounting\n const timer = setTimeout(() => {\n setIsVisible(false);\n }, 200);\n document.body.style.overflow = 'unset';\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // Close on Escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closable && open) {\n onClose();\n }\n };\n\n if (open) {\n document.addEventListener('keydown', handleEscape);\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open, onClose, closable]);\n\n if (!isVisible) return null;\n\n const handleMaskClick = () => {\n if (maskClosable) {\n onClose();\n }\n };\n\n const handleModalClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n return (\n <div\n className=\"fixed inset-0 z-50 overflow-y-auto\"\n onClick={handleMaskClick}\n >\n {/* Backdrop */}\n <div\n className={`fixed inset-0 transition-opacity duration-200 ease-out ${\n isAnimating ? 'opacity-100' : 'opacity-0'\n }`}\n style={overlayStyle}\n />\n\n {/* Modal Container */}\n <div className={`flex min-h-full items-center justify-center p-4 ${centered ? 'items-center' : 'items-start pt-20'}`}>\n <div\n className={`relative rounded-lg shadow-xl transition-all duration-200 ease-out overflow-y-auto ${\n isAnimating\n ? 'opacity-100 scale-100 translate-y-0'\n : 'opacity-0 scale-95 -translate-y-4'\n } ${className}`}\n style={{...modalStyle, maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight}}\n onClick={handleModalClick}\n >\n {/* Header */}\n {(title || closable) && (\n <div\n className={`flex items-center justify-between px-6 py-4 border-b border-gray-200 ${headerClassName}`}\n style={headerStyle}\n >\n {title && <h3 className=\"text-lg font-semibold text-gray-900\">{title}</h3>}\n {closable && (\n <button\n onClick={onClose}\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-200 ease-out\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Body */}\n <div\n className={`px-6 py-4 ${bodyClassName}`}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"px-6 py-4 border-t border-gray-200 flex justify-end gap-2\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Modal;\n","import type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface BadgeProps {\n children: ReactNode;\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n dot?: boolean;\n icon?: ReactNode;\n iconPosition?: 'left' | 'right';\n className?: string;\n bgColor?: string;\n textColor?: string;\n borderColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n style?: CSSProperties;\n}\n\nexport const Badge: FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'md',\n dot = false,\n icon,\n iconPosition = 'left',\n className = '',\n bgColor,\n textColor,\n borderColor,\n rounded = 'full',\n style,\n}) => {\n const variantClasses = {\n default: 'bg-gray-100 text-[#181918]',\n primary: 'bg-[#FCEAE9] text-[#EC615B]',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-100 text-yellow-800',\n danger: 'bg-red-100 text-red-800',\n info: 'bg-cyan-100 text-cyan-800',\n };\n\n const 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 responsive: 'px-1.5 py-0.5 text-[10px] sm:px-2 sm:py-0.5 sm:text-xs md:px-2.5 md:py-1 md:text-sm lg:px-3 lg:py-1.5 lg:text-base',\n };\n\n const dotSizeClasses = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n responsive: 'w-1 h-1 sm:w-1.5 sm:h-1.5 md:w-2 md:h-2 lg:w-2.5 lg:h-2.5',\n };\n\n const dotColorClasses = {\n default: 'bg-gray-600',\n primary: 'bg-[#EC615B]',\n success: 'bg-green-600',\n warning: 'bg-yellow-600',\n danger: 'bg-red-600',\n info: 'bg-cyan-600',\n };\n\n const iconSizeClasses = {\n sm: 'w-3 h-3',\n md: 'w-3.5 h-3.5',\n lg: 'w-4 h-4',\n responsive: 'w-2.5 h-2.5 sm:w-3 sm:h-3 md:w-3.5 md:h-3.5 lg:w-4 lg:h-4',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const customStyles: CSSProperties = {\n ...(bgColor && { backgroundColor: bgColor }),\n ...(textColor && { color: textColor }),\n ...(borderColor && { borderColor, borderWidth: '1px', borderStyle: 'solid' }),\n ...style,\n };\n\n return (\n <span\n className={`inline-flex items-center gap-1.5 font-medium transition-all duration-200 ${!bgColor ? variantClasses[variant] : ''} ${sizeClasses[size]} ${roundedClasses[rounded]} ${className}`}\n style={customStyles}\n >\n {dot && (\n <span className={`rounded-full ${dotSizeClasses[size]} ${dotColorClasses[variant]}`} />\n )}\n {icon && iconPosition === 'left' && (\n <span className={`inline-flex items-center ${iconSizeClasses[size]}`}>\n {icon}\n </span>\n )}\n {children}\n {icon && iconPosition === 'right' && (\n <span className={`inline-flex items-center ${iconSizeClasses[size]}`}>\n {icon}\n </span>\n )}\n </span>\n );\n};\n\nexport default Badge;\n","import type { FC, ReactNode, CSSProperties } from 'react';\n\nexport interface StepItem {\n title: string;\n description?: string;\n status?: 'wait' | 'process' | 'finish' | 'error';\n icon?: ReactNode;\n}\n\nexport interface StepsProps {\n items: StepItem[];\n current?: number;\n direction?: 'horizontal' | 'vertical';\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n variant?: 'default' | 'outline';\n className?: string;\n style?: CSSProperties;\n finishColor?: string;\n processColor?: string;\n waitColor?: string;\n errorColor?: string;\n lineColor?: string;\n}\n\nexport const Steps: FC<StepsProps> = ({\n items,\n current = 0,\n direction = 'vertical',\n size = 'md',\n variant = 'default',\n className = '',\n style,\n finishColor,\n processColor,\n waitColor,\n errorColor,\n lineColor,\n}) => {\n const getStepStatus = (index: number, item: StepItem): StepItem['status'] => {\n if (item.status) return item.status;\n if (index < current) return 'finish';\n if (index === current) return 'process';\n return 'wait';\n };\n\n const iconSizeClasses = {\n sm: 'w-6 h-6',\n md: 'w-8 h-8',\n lg: 'w-10 h-10',\n responsive: 'w-6 h-6 sm:w-7 sm:h-7 md:w-8 md:h-8 lg:w-10 lg:h-10',\n };\n\n const textSizeClasses = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n responsive: 'text-xs sm:text-sm md:text-base lg:text-lg',\n };\n\n const descriptionSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n responsive: 'text-xs sm:text-xs md:text-sm lg:text-base',\n };\n\n const renderIcon = (status: StepItem['status'], icon?: ReactNode) => {\n if (icon) return icon;\n\n if (status === 'finish') {\n return (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n if (status === 'error') {\n return (\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n return null;\n };\n\n const getStatusClasses = (status: StepItem['status']) => {\n const isOutline = variant === 'outline';\n\n switch (status) {\n case 'finish':\n return {\n icon: isOutline\n ? `bg-white text-white border ${finishColor ? `border-[${finishColor}]` : 'border-green-500'}`\n : `${finishColor ? `bg-[${finishColor}]` : 'bg-green-500'} text-white ${finishColor ? `border-[${finishColor}]` : 'border-green-500'}`,\n title: 'text-[#181918]',\n description: 'text-gray-600',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-green-500',\n iconColor: finishColor,\n };\n case 'process':\n return {\n icon: isOutline\n ? `bg-white text-white border ${processColor ? `border-[${processColor}]` : 'border-[#EC615B]'}`\n : `${processColor ? `bg-[${processColor}]` : 'bg-[#EC615B]'} text-white ${processColor ? `border-[${processColor}]` : 'border-[#EC615B]'}`,\n title: 'text-[#181918] font-semibold',\n description: 'text-gray-700',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: processColor,\n };\n case 'error':\n return {\n icon: isOutline\n ? `bg-white text-white border ${errorColor ? `border-[${errorColor}]` : 'border-red-500'}`\n : `${errorColor ? `bg-[${errorColor}]` : 'bg-red-500'} text-white ${errorColor ? `border-[${errorColor}]` : 'border-red-500'}`,\n title: 'text-red-600',\n description: 'text-red-500',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: errorColor,\n };\n default:\n return {\n icon: 'bg-white text-gray-400 border-gray-300',\n title: 'text-gray-500',\n description: 'text-gray-400',\n line: lineColor ? `bg-[${lineColor}]` : 'bg-gray-300',\n iconColor: waitColor,\n };\n }\n };\n\n if (direction === 'horizontal') {\n return (\n <div className={`flex items-start ${className}`} style={style}>\n {items.map((item, index) => {\n const status = getStepStatus(index, item);\n const statusClasses = getStatusClasses(status);\n const isLast = index === items.length - 1;\n const iconStyle: CSSProperties = {};\n if (statusClasses.iconColor) {\n iconStyle.color = statusClasses.iconColor;\n }\n\n return (\n <div key={index} className=\"flex flex-1 items-start\">\n <div className=\"flex flex-col items-center\">\n <div\n className={`flex items-center justify-center ${iconSizeClasses[size]} rounded-full border transition-all duration-300 ${statusClasses.icon}`}\n style={iconStyle}\n >\n {renderIcon(status, item.icon)}\n </div>\n <div className=\"mt-2 text-center\">\n <div\n className={`${textSizeClasses[size]} ${statusClasses.title} transition-colors duration-300`}\n >\n {item.title}\n </div>\n {item.description && (\n <div\n className={`${descriptionSizeClasses[size]} ${statusClasses.description} mt-1 transition-colors duration-300`}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n {!isLast && (\n <div\n className={`flex-1 h-0.5 mt-4 mx-2 ${statusClasses.line} transition-colors duration-300`}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={`flex flex-col ${className}`} style={style}>\n {items.map((item, index) => {\n const status = getStepStatus(index, item);\n const statusClasses = getStatusClasses(status);\n const isLast = index === items.length - 1;\n const iconStyle: CSSProperties = {};\n if (statusClasses.iconColor) {\n iconStyle.color = statusClasses.iconColor;\n }\n\n return (\n <div key={index} className=\"flex\">\n <div className=\"flex flex-col items-center mr-4\">\n <div\n className={`flex items-center justify-center ${iconSizeClasses[size]} rounded-full border transition-all duration-300 ${statusClasses.icon}`}\n style={iconStyle}\n >\n {renderIcon(status, item.icon)}\n </div>\n {!isLast && (\n <div\n className={`w-0.5 flex-1 my-1 ${statusClasses.line} transition-colors duration-300`}\n style={{ minHeight: '20px' }}\n />\n )}\n </div>\n <div className=\"flex-1 pb-6\">\n <div\n className={`${textSizeClasses[size]} ${statusClasses.title} transition-colors duration-300`}\n >\n {item.title}\n </div>\n {item.description && (\n <div\n className={`${descriptionSizeClasses[size]} ${statusClasses.description} mt-1 transition-colors duration-300`}\n >\n {item.description}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default Steps;\n","import type { FC, ReactNode } from 'react';\n\nexport interface ProgressProps {\n percent?: number;\n status?: 'normal' | 'success' | 'exception' | 'active';\n showInfo?: boolean;\n strokeColor?: string;\n strokeWidth?: number;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n className?: string;\n format?: (percent: number) => ReactNode;\n bgColor?: string;\n successColor?: string;\n exceptionColor?: string;\n trackColor?: string;\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n}\n\nexport const Progress: FC<ProgressProps> = ({\n percent = 0,\n status = 'normal',\n showInfo = true,\n strokeColor,\n strokeWidth,\n size = 'md',\n className = '',\n format,\n bgColor,\n successColor,\n exceptionColor,\n trackColor,\n rounded = 'full',\n}) => {\n const clampedPercent = Math.min(100, Math.max(0, percent));\n\n const heightClasses = {\n sm: 'h-1.5',\n md: 'h-2',\n lg: 'h-3',\n responsive: 'h-1.5 sm:h-2 md:h-3 lg:h-4',\n };\n\n const textSizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n responsive: 'text-xs sm:text-sm md:text-base lg:text-lg',\n };\n\n const roundedClasses = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n };\n\n const getStatusColor = () => {\n if (strokeColor) return strokeColor;\n\n switch (status) {\n case 'success':\n return successColor || 'bg-green-500';\n case 'exception':\n return exceptionColor || 'bg-red-500';\n case 'active':\n return bgColor || 'bg-[#EC615B]';\n default:\n if (clampedPercent === 100) return successColor || 'bg-green-500';\n return bgColor || 'bg-[#EC615B]';\n }\n };\n\n const getTrackColor = () => {\n return trackColor || 'bg-gray-200';\n };\n\n const getStatusIcon = () => {\n if (status === 'success' || clampedPercent === 100) {\n return (\n <svg className=\"w-4 h-4 text-green-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n if (status === 'exception') {\n return (\n <svg className=\"w-4 h-4 text-red-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n return null;\n };\n\n const formatPercent = () => {\n if (format) return format(clampedPercent);\n return `${Math.round(clampedPercent)}%`;\n };\n\n const height = strokeWidth ? `${strokeWidth}px` : undefined;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n <div className=\"flex-1\">\n <div\n className={`w-full overflow-hidden ${heightClasses[size]} ${roundedClasses[rounded]} ${getTrackColor()}`}\n style={{ height }}\n >\n <div\n className={`${getStatusColor()} ${heightClasses[size]} ${roundedClasses[rounded]} transition-all duration-300 ease-out ${\n status === 'active' ? 'progress-active' : ''\n }`}\n style={{\n width: `${clampedPercent}%`,\n height,\n }}\n />\n </div>\n </div>\n\n {showInfo && (\n <div className={`flex items-center gap-1 ${textSizeClasses[size]} text-gray-600 font-normal`}>\n {getStatusIcon() || formatPercent()}\n </div>\n )}\n </div>\n );\n};\n\nexport default Progress;\n","import { useState } from 'react';\nimport type { FC, ChangeEvent, CSSProperties } from 'react';\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n indeterminate?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n variant?: 'filled' | 'outline';\n className?: string;\n id?: string;\n name?: string;\n value?: string;\n checkedColor?: string;\n uncheckedColor?: string;\n checkedBorderColor?: string;\n style?: CSSProperties;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n disabled = false,\n indeterminate = false,\n size = 'md',\n variant = 'filled',\n className = '',\n id,\n name,\n value,\n checkedColor = '#EC615B',\n uncheckedColor = '#ffffff',\n checkedBorderColor = '#EC615B',\n style,\n}) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const newChecked = e.target.checked;\n\n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n };\n\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n responsive: 'w-4 h-4 sm:w-5 sm:h-5 lg:w-6 lg:h-6',\n };\n\n const iconSizeClasses = {\n sm: 'w-3 h-3',\n md: 'w-3.5 h-3.5',\n lg: 'w-4 h-4',\n responsive: 'w-2.5 h-2.5 sm:w-3.5 sm:h-3.5 lg:w-4 lg:h-4',\n };\n\n const isFilled = variant === 'filled';\n\n const getCheckboxClasses = () => {\n if (disabled) {\n return 'cursor-not-allowed opacity-50 border-gray-300 bg-gray-100';\n }\n\n if (isFilled) {\n // Filled variant\n if (!checked && !indeterminate) {\n return 'border-gray-300 bg-white hover:border-gray-400';\n }\n return '';\n } else {\n // Outline variant\n if (!checked && !indeterminate) {\n return 'border-gray-300 bg-white hover:border-gray-400';\n }\n return '';\n }\n };\n\n const getCheckboxInlineStyles = (): CSSProperties | undefined => {\n if (disabled) return undefined;\n\n if (!checked && !indeterminate) {\n return undefined;\n }\n\n if (isFilled) {\n return {\n borderColor: checkedBorderColor,\n backgroundColor: checkedColor,\n };\n } else {\n return {\n borderColor: checkedBorderColor,\n backgroundColor: uncheckedColor,\n };\n }\n };\n\n const getIconColor = () => {\n if (isFilled && (checked || indeterminate)) {\n return 'text-white';\n }\n return '';\n };\n\n return (\n <div className=\"inline-flex items-center\" style={style}>\n <input\n type=\"checkbox\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n />\n <label\n htmlFor={id}\n className={`\n relative flex items-center justify-center\n ${sizeClasses[size]}\n ${variant === 'outline' ? 'border' : 'border-2'}\n rounded\n transition-all duration-200 ease-out\n cursor-pointer\n ${getCheckboxClasses()}\n ${className}\n `}\n style={getCheckboxInlineStyles()}\n >\n {/* Checkmark Icon */}\n {checked && !indeterminate && (\n <svg\n className={`${iconSizeClasses[size]} ${getIconColor()}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n strokeWidth={3}\n style={\n !isFilled && (checked || indeterminate)\n ? { color: checkedColor }\n : undefined\n }\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n\n {/* Indeterminate Icon */}\n {indeterminate && (\n <svg\n className={`${iconSizeClasses[size]} ${getIconColor()}`}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n style={\n !isFilled && (checked || indeterminate)\n ? { color: checkedColor }\n : undefined\n }\n >\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"2\" rx=\"1\" />\n </svg>\n )}\n </label>\n </div>\n );\n};\n\nexport default Checkbox;\n","import type { FC, CSSProperties } from 'react';\n\nexport interface SelectedItem {\n id: string | number;\n label: string;\n sublabel?: string;\n}\n\nexport interface SelectedItemsListProps {\n items: SelectedItem[];\n onRemove: (id: string | number) => void;\n emptyMessage?: string;\n className?: string;\n itemClassName?: string;\n maxHeight?: string;\n // New size and responsive props\n size?: 'sm' | 'md' | 'lg' | 'responsive';\n // New custom color props\n bgColor?: string;\n hoverBgColor?: string;\n textColor?: string;\n sublabelColor?: string;\n removeButtonColor?: string;\n removeButtonHoverColor?: string;\n // New border radius prop\n rounded?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n // New style prop\n style?: CSSProperties;\n}\n\n// Helper function to get size-based classes\nconst getSizeClasses = (size: 'sm' | 'md' | 'lg' | 'responsive' = 'md') => {\n const baseClasses = {\n sm: {\n container: 'space-y-1',\n item: 'px-2 py-1.5',\n label: 'text-xs',\n sublabel: 'text-[10px]',\n button: 'w-5 h-5',\n icon: 'w-3 h-3',\n },\n md: {\n container: 'space-y-2',\n item: 'px-4 py-3',\n label: 'text-sm',\n sublabel: 'text-xs',\n button: 'w-6 h-6',\n icon: 'w-4 h-4',\n },\n lg: {\n container: 'space-y-3',\n item: 'px-5 py-4',\n label: 'text-base',\n sublabel: 'text-sm',\n button: 'w-7 h-7',\n icon: 'w-5 h-5',\n },\n responsive: {\n container: 'space-y-1 sm:space-y-2 md:space-y-3',\n item: 'px-2 py-1.5 sm:px-3 sm:py-2 md:px-4 md:py-3 lg:px-5 lg:py-4',\n label: 'text-xs sm:text-sm md:text-base',\n sublabel: 'text-[10px] sm:text-xs md:text-sm',\n button: 'w-5 h-5 sm:w-5 sm:h-5 md:w-6 md:h-6 lg:w-7 lg:h-7',\n icon: 'w-3 h-3 sm:w-3 sm:h-3 md:w-4 md:h-4 lg:w-5 lg:h-5',\n },\n };\n\n return baseClasses[size];\n};\n\n// Helper function to get rounded corner classes\nconst getRoundedClasses = (rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md') => {\n const roundedMap = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-lg',\n lg: 'rounded-xl',\n full: 'rounded-full',\n };\n\n return roundedMap[rounded];\n};\n\nexport const SelectedItemsList: FC<SelectedItemsListProps> = ({\n items,\n onRemove,\n emptyMessage = 'No items selected',\n className = '',\n itemClassName = '',\n maxHeight = '300px',\n size = 'md',\n bgColor,\n hoverBgColor,\n textColor,\n sublabelColor,\n removeButtonColor,\n removeButtonHoverColor,\n rounded = 'md',\n style,\n}) => {\n const sizeClasses = getSizeClasses(size);\n const roundedClass = getRoundedClasses(rounded);\n\n // Default colors\n const defaultBgColor = '#F4F4F4';\n const defaultHoverBgColor = '#EBEBEB';\n const defaultTextColor = '#181918';\n const defaultSublabelColor = '#999999';\n const defaultRemoveButtonColor = '#9CA3AF';\n const defaultRemoveButtonHoverColor = '#EC615B';\n\n // Get final colors (use provided or default)\n const finalBgColor = bgColor || defaultBgColor;\n const finalHoverBgColor = hoverBgColor || defaultHoverBgColor;\n const finalTextColor = textColor || defaultTextColor;\n const finalSublabelColor = sublabelColor || defaultSublabelColor;\n const finalRemoveButtonColor = removeButtonColor || defaultRemoveButtonColor;\n const finalRemoveButtonHoverColor = removeButtonHoverColor || defaultRemoveButtonHoverColor;\n\n if (items.length === 0) {\n return (\n <div\n className={`text-center py-8 text-gray-500 text-sm ${className}`}\n style={{\n color: finalSublabelColor,\n ...style,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n return (\n <div\n className={`overflow-y-auto ${sizeClasses.container} ${className}`}\n style={{ maxHeight, ...style }}\n >\n {items.map((item, index) => (\n <div\n key={item.id}\n className={`\n group flex items-center justify-between\n ${roundedClass}\n transition-all duration-300 ease-out\n hover:shadow-sm\n animate-slide-in-item\n ${itemClassName}\n `}\n style={{\n backgroundColor: finalBgColor,\n animationDelay: `${index * 50}ms`,\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = finalHoverBgColor;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = finalBgColor;\n }}\n >\n <div className={`flex-1 min-w-0 ${sizeClasses.item}`}>\n {item.sublabel && (\n <div\n className={`font-normal mb-0.5 ${sizeClasses.sublabel}`}\n style={{ color: finalSublabelColor }}\n >\n {item.sublabel}\n </div>\n )}\n <div\n className={`font-medium truncate ${sizeClasses.label}`}\n style={{ color: finalTextColor }}\n >\n {item.label}\n </div>\n </div>\n\n <button\n onClick={() => onRemove(item.id)}\n className={`\n ml-3 flex-shrink-0 rounded-full\n flex items-center justify-center\n transition-all duration-200 ease-out\n hover:scale-110\n active:scale-95\n focus:outline-none focus:ring-2 focus:ring-opacity-50\n ${sizeClasses.button}\n `}\n style={{\n color: finalRemoveButtonColor,\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = 'white';\n (e.currentTarget as HTMLElement).style.color = finalRemoveButtonHoverColor;\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent';\n (e.currentTarget as HTMLElement).style.color = finalRemoveButtonColor;\n }}\n aria-label={`Remove ${item.label}`}\n >\n <svg\n className={sizeClasses.icon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n ))}\n </div>\n );\n};\n\nexport default SelectedItemsList;\n"],"names":["Button","variant","size","fullWidth","icon","iconPosition","loading","hoverColor","bgColor","textColor","borderColor","hoverBgColor","hoverTextColor","rounded","style","className","children","disabled","props","baseClasses","variantClasses","sizeClasses","roundedClasses","widthClass","variantClassesToUse","combinedClassName","renderIcon","jsxs","jsx","inlineStyles","e","StatCard","label","value","selected","onClick","labelColor","valueColor","selectedBgColor","selectedBorderColor","selectedLabelColor","selectedValueColor","getPaddingClasses","getRoundedClasses","getLabelTextClasses","getValueTextClasses","SearchInput","onIconClick","focusBorderColor","iconColor","placeholderColor","containerBaseClasses","inputBaseClasses","iconSizeClasses","paddingWithIcon","customStyles","placeholderClass","defaultBorderClass","defaultTextClass","defaultFocusClass","inputClassName","iconPositionClasses","defaultIconColor","hoverIconColor","defaultSearchIcon","Card","padding","shadow","hover","bordered","paddingClasses","shadowClasses","borderClass","hoverClass","mergedStyle","Dropdown","items","trigger","placement","overlayClassName","menuBgColor","menuItemHoverColor","dangerColor","isOpen","setIsOpen","useState","dropdownRef","useRef","useEffect","handleClickOutside","event","handleTriggerClick","handleTriggerMouseEnter","handleTriggerMouseLeave","handleMenuItemClick","item","placementClasses","animationClasses","itemSizeClasses","defaultHoverColor","defaultBorderColor","defaultDangerColor","hoverColorStyle","customHoverClass","customDangerStyle","dangerHoverBgStyle","finalBorderColor","itemStyle","Select","options","controlledValue","defaultValue","placeholder","onChange","allowClear","showSearch","searchPlaceholder","selectedTextColor","internalValue","setInternalValue","searchQuery","setSearchQuery","selectRef","searchInputRef","handleSelect","optionValue","handleClear","selectedOption","opt","filteredOptions","option","getTriggerStyles","styles","getSelectedOptionStyles","ChevronIcon","ClearIcon","Table","columns","dataSource","rowKey","pagination","onRow","striped","headerBgColor","headerTextColor","rowHoverColor","stripedRowColor","currentPage","setCurrentPage","pageSize","setPageSize","sizeConfig","currentSizeConfig","currentRoundedClass","getRowKey","record","index","getValue","dataIndex","obj","key","paginatedData","handlePageChange","page","handlePageSizeChange","newPageSize","column","idx","rowProps","stripedBg","hoverBg","colIdx","content","Pagination","current","total","onPageSizeChange","showSizeChanger","pageSizeOptions","showTotal","totalPages","startItem","endItem","getPageNumbers","pages","i","TableTop","title","description","onSearch","actions","filters","titleColor","descriptionColor","searchBgColor","searchBorderColor","searchFocusBorderColor","handleSearchChange","config","radiusClass","searchInputStyle","widthMap","Modal","open","onClose","footer","width","closable","maskClosable","centered","overlayColor","bodyClassName","headerClassName","maxHeight","isVisible","setIsVisible","isAnimating","setIsAnimating","effectiveWidth","modalStyle","headerStyle","overlayStyle","timer","handleEscape","handleMaskClick","handleModalClick","Badge","dot","dotSizeClasses","dotColorClasses","Steps","direction","finishColor","processColor","waitColor","errorColor","lineColor","getStepStatus","textSizeClasses","descriptionSizeClasses","status","getStatusClasses","isOutline","statusClasses","isLast","iconStyle","Progress","percent","showInfo","strokeColor","strokeWidth","format","successColor","exceptionColor","trackColor","clampedPercent","heightClasses","getStatusColor","getTrackColor","getStatusIcon","formatPercent","height","Checkbox","controlledChecked","defaultChecked","indeterminate","id","name","checkedColor","uncheckedColor","checkedBorderColor","internalChecked","setInternalChecked","isControlled","checked","handleChange","newChecked","isFilled","getCheckboxClasses","getCheckboxInlineStyles","getIconColor","getSizeClasses","SelectedItemsList","onRemove","emptyMessage","itemClassName","sublabelColor","removeButtonColor","removeButtonHoverColor","roundedClass","defaultBgColor","defaultHoverBgColor","defaultTextColor","defaultSublabelColor","defaultRemoveButtonColor","defaultRemoveButtonHoverColor","finalBgColor","finalHoverBgColor","finalTextColor","finalSublabelColor","finalRemoveButtonColor","finalRemoveButtonHoverColor"],"mappings":"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"}