@ryanhe919/lumen-ui 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/componentSizes.ts","../src/components/LMButton/LMButton.tsx","../src/components/LMInput/LMInput.tsx","../src/components/LMBadge/LMBadge.tsx","../src/components/LMTooltip/LMTooltip.tsx","../src/components/LMModal/LMModal.tsx","../src/components/LMCheckbox/LMCheckbox.tsx","../src/components/LMRadio/LMRadio.tsx","../src/components/LMSwitch/LMSwitch.tsx","../src/components/LMTextarea/LMTextarea.tsx","../src/components/LMNumberInput/LMNumberInput.tsx","../src/components/LMSearchInput/LMSearchInput.tsx","../src/components/LMSelect/LMSelect.tsx","../src/components/LMField/LMField.tsx","../src/components/LMTable/LMTable.tsx","../src/components/LMMessage/LMMessage.tsx","../src/components/LMConfirm/LMConfirm.tsx","../src/components/LMStatCard/LMStatCard.tsx","../src/utils/cn.ts"],"sourcesContent":["/**\n * @file Component size utilities\n * @description Shared size tokens for LumenUI components\n */\n\nexport type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\n/** Size order for iteration */\nexport const COMPONENT_SIZE_ORDER: ComponentSize[] = [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n]\n\n/** Text size classes */\nexport const SIZE_TEXT_CLASSES: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n}\n\n/** Heading size classes */\nexport const SIZE_HEADING_CLASSES: Record<ComponentSize, string> = {\n xs: 'text-lg',\n sm: 'text-xl',\n md: 'text-2xl',\n lg: 'text-3xl',\n xl: 'text-4xl',\n '2xl': 'text-5xl',\n}\n\n/** Display size classes */\nexport const SIZE_DISPLAY_CLASSES: Record<ComponentSize, string> = {\n xs: 'text-xl',\n sm: 'text-2xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n xl: 'text-5xl',\n '2xl': 'text-6xl',\n}\n\n/** Gap classes */\nexport const SIZE_GAP_CLASSES: Record<ComponentSize, string> = {\n xs: 'gap-1',\n sm: 'gap-1.5',\n md: 'gap-2',\n lg: 'gap-2.5',\n xl: 'gap-3',\n '2xl': 'gap-4',\n}\n\n/** Padding classes */\nexport const SIZE_PADDING_CLASSES: Record<ComponentSize, string> = {\n xs: 'p-3',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n xl: 'p-10',\n '2xl': 'p-12',\n}\n\n/** Button size config */\nexport const SIZE_BUTTON_CONFIG: Record<\n ComponentSize,\n { padding: string; height: string }\n> = {\n xs: { padding: 'px-2.5 py-1.5', height: 'h-7' },\n sm: { padding: 'px-3 py-2', height: 'h-8' },\n md: { padding: 'px-4 py-2.5', height: 'h-10' },\n lg: { padding: 'px-5 py-3', height: 'h-12' },\n xl: { padding: 'px-6 py-3.5', height: 'h-14' },\n '2xl': { padding: 'px-8 py-4', height: 'h-16' },\n}\n\n/** Input size config */\nexport const SIZE_INPUT_CONFIG: Record<\n ComponentSize,\n { padding: string; height: string; fontSize: string }\n> = {\n xs: { padding: 'px-3 py-1', height: 'h-7', fontSize: 'text-xs' },\n sm: { padding: 'px-3 py-1.5', height: 'h-9', fontSize: 'text-sm' },\n md: { padding: 'px-4 py-2', height: 'h-10', fontSize: 'text-sm' },\n lg: { padding: 'px-4 py-2.5', height: 'h-12', fontSize: 'text-base' },\n xl: { padding: 'px-5 py-3', height: 'h-14', fontSize: 'text-base' },\n '2xl': { padding: 'px-6 py-4', height: 'h-16', fontSize: 'text-lg' },\n}\n\n/** Selector size config */\nexport const SIZE_SELECTOR_CONFIG: Record<\n ComponentSize,\n { padding: string; height: string; fontSize: string }\n> = {\n xs: { padding: 'px-3 py-1', height: 'h-7', fontSize: 'text-xs' },\n sm: { padding: 'px-3 py-1.5', height: 'h-9', fontSize: 'text-sm' },\n md: { padding: 'px-4 py-2', height: 'h-10', fontSize: 'text-sm' },\n lg: { padding: 'px-4 py-2.5', height: 'h-12', fontSize: 'text-base' },\n xl: { padding: 'px-5 py-3', height: 'h-14', fontSize: 'text-base' },\n '2xl': { padding: 'px-6 py-4', height: 'h-16', fontSize: 'text-lg' },\n}\n\n/** Modal size config */\nexport const SIZE_MODAL_CONFIG: Record<\n ComponentSize,\n { width: string; maxWidth: string }\n> = {\n xs: { width: '360px', maxWidth: '90vw' },\n sm: { width: '480px', maxWidth: '90vw' },\n md: { width: '640px', maxWidth: '90vw' },\n lg: { width: '800px', maxWidth: '95vw' },\n xl: { width: '960px', maxWidth: '95vw' },\n '2xl': { width: '1200px', maxWidth: '95vw' },\n}\n\n/** Tooltip size config */\nexport const SIZE_TOOLTIP_CONFIG: Record<\n ComponentSize,\n { paddingClass: string; textClass: string; maxWidth: number }\n> = {\n xs: { paddingClass: 'px-2.5 py-1.5', textClass: 'text-xs', maxWidth: 200 },\n sm: { paddingClass: 'px-3 py-2', textClass: 'text-sm', maxWidth: 240 },\n md: { paddingClass: 'px-4 py-2.5', textClass: 'text-sm', maxWidth: 300 },\n lg: { paddingClass: 'px-4 py-3', textClass: 'text-base', maxWidth: 360 },\n xl: { paddingClass: 'px-5 py-3', textClass: 'text-lg', maxWidth: 420 },\n '2xl': { paddingClass: 'px-6 py-4', textClass: 'text-xl', maxWidth: 500 },\n}\n\n/** Icon size config */\nexport const SIZE_ICON_CONFIG: Record<ComponentSize, string> = {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n '2xl': 'w-12 h-12',\n}\n\n/** Table size config */\nexport const SIZE_TABLE_CONFIG: Record<\n ComponentSize,\n { cellPadding: string; rowHeight: string }\n> = {\n xs: { cellPadding: 'px-2 py-1', rowHeight: 'h-8' },\n sm: { cellPadding: 'px-3 py-1.5', rowHeight: 'h-10' },\n md: { cellPadding: 'px-4 py-2', rowHeight: 'h-12' },\n lg: { cellPadding: 'px-6 py-3', rowHeight: 'h-14' },\n xl: { cellPadding: 'px-8 py-4', rowHeight: 'h-16' },\n '2xl': { cellPadding: 'px-10 py-5', rowHeight: 'h-20' },\n}\n\n/**\n * Clamp size to allowed values\n */\nexport const clampComponentSize = (\n size: ComponentSize | undefined,\n allowedSizes: ComponentSize[],\n fallback: ComponentSize = 'md'\n): ComponentSize => {\n const nextSize = size ?? fallback\n return allowedSizes.includes(nextSize) ? nextSize : fallback\n}\n","import React, { memo } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_BUTTON_CONFIG,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport type LMButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'danger'\n | 'success'\n | 'warning'\n\nexport interface LMButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Button variant */\n variant?: LMButtonVariant\n /** Size */\n size?: ComponentSize\n /** Loading state */\n loading?: boolean\n /** Loading text */\n loadingText?: string\n /** Left icon */\n leftIcon?: React.ReactNode\n /** Right icon */\n rightIcon?: React.ReactNode\n /** Full width */\n fullWidth?: boolean\n /** Full rounded */\n rounded?: boolean\n}\n\nconst LMButton: React.FC<LMButtonProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n rounded = false,\n disabled = false,\n className = '',\n ...props\n}) => {\n const isDisabled = disabled || loading\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const roundedClasses = rounded ? 'rounded-full' : 'rounded-2xl'\n const widthClasses = fullWidth ? 'w-full' : ''\n\n const baseClassName = `\n ${SIZE_BUTTON_CONFIG[resolvedSize].padding} ${SIZE_TEXT_CLASSES[resolvedSize]} ${SIZE_GAP_CLASSES[resolvedSize]}\n ${roundedClasses} ${widthClasses}\n backdrop-blur-md border transition-all duration-300\n shadow-sm font-medium focus:ring-2 focus:ring-offset-0\n focus:outline-none disabled:cursor-not-allowed\n flex items-center justify-center\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getButtonStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'var(--lm-primary-500)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'secondary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-primary-600)',\n borderColor: 'var(--lm-primary-300)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'ghost':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-text-primary)',\n borderColor: 'transparent',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'danger':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-500)',\n color: 'white',\n borderColor: 'var(--lm-error-500)',\n '--tw-ring-color': 'var(--lm-error-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-500)',\n color: 'white',\n borderColor: 'var(--lm-success-500)',\n '--tw-ring-color': 'var(--lm-success-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-500)',\n color: 'white',\n borderColor: 'var(--lm-warning-500)',\n '--tw-ring-color': 'var(--lm-warning-400)',\n '--tw-ring-opacity': '0.3',\n }\n default:\n return baseStyles\n }\n }\n\n const getDisabledStyles = () => {\n if (isDisabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n borderColor: 'var(--lm-border-light)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n return {}\n }\n\n const getHoverStyles = () => {\n if (isDisabled) return {}\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-600)',\n borderColor: 'var(--lm-primary-600)',\n }\n case 'secondary':\n return {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-strong)',\n }\n case 'outline':\n return {\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-400)',\n }\n case 'ghost':\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n }\n case 'danger':\n return {\n backgroundColor: 'var(--lm-error-600)',\n borderColor: 'var(--lm-error-600)',\n }\n case 'success':\n return {\n backgroundColor: 'var(--lm-success-600)',\n borderColor: 'var(--lm-success-600)',\n }\n case 'warning':\n return {\n backgroundColor: 'var(--lm-warning-600)',\n borderColor: 'var(--lm-warning-600)',\n }\n default:\n return {}\n }\n }\n\n const getActiveStyles = () => {\n if (isDisabled) return {}\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-700)',\n borderColor: 'var(--lm-primary-700)',\n }\n case 'secondary':\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-default)',\n }\n case 'outline':\n return {\n backgroundColor: 'var(--lm-primary-100)',\n borderColor: 'var(--lm-primary-500)',\n }\n case 'ghost':\n return {\n backgroundColor: 'var(--lm-bg-elevated)',\n }\n case 'danger':\n return {\n backgroundColor: 'var(--lm-error-700)',\n borderColor: 'var(--lm-error-700)',\n }\n case 'success':\n return {\n backgroundColor: 'var(--lm-success-700)',\n borderColor: 'var(--lm-success-700)',\n }\n case 'warning':\n return {\n backgroundColor: 'var(--lm-warning-700)',\n borderColor: 'var(--lm-warning-700)',\n }\n default:\n return {}\n }\n }\n\n const getIconStyles = () => {\n if (isDisabled) {\n return { color: 'var(--lm-text-disabled)' }\n }\n switch (variant) {\n case 'primary':\n case 'danger':\n case 'success':\n case 'warning':\n return { color: 'white' }\n case 'outline':\n return { color: 'var(--lm-primary-600)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n const LoadingSpinner = () => (\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 style={getIconStyles()}\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 (\n <button\n {...props}\n disabled={isDisabled}\n className={baseClassName}\n style={{\n ...getButtonStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onMouseLeave?.(e)\n }}\n onMouseDown={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getActiveStyles())\n props.onMouseDown?.(e)\n }}\n onMouseUp={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseUp?.(e)\n }}\n onFocus={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.borderColor = 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onBlur?.(e)\n }}\n >\n {loading ? (\n <>\n <LoadingSpinner />\n {loadingText || children}\n </>\n ) : (\n <>\n {leftIcon && <span style={getIconStyles()}>{leftIcon}</span>}\n <span className=\"inline-flex items-center\">{children}</span>\n {rightIcon && <span style={getIconStyles()}>{rightIcon}</span>}\n </>\n )}\n </button>\n )\n}\n\nexport default memo(LMButton)\n","import React, { useRef } from 'react'\nimport { SIZE_INPUT_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Left icon */\n leftIcon?: React.ReactNode\n /** Right element */\n rightElement?: React.ReactNode\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n /** Include seconds for time inputs */\n includeSeconds?: boolean\n}\n\nconst LMInput: React.FC<LMInputProps> = ({\n leftIcon,\n rightElement,\n error = false,\n errorMessage,\n className = '',\n size = 'md',\n includeSeconds = false,\n ...props\n}) => {\n const hasLeftIcon = !!leftIcon\n const hasRightElement = !!rightElement\n const errorId = useRef(\n `lm-input-err-${Math.random().toString(36).slice(2)}`\n ).current\n\n const timeInputProps = () => {\n if (\n (props.type === 'datetime-local' || props.type === 'time') &&\n includeSeconds\n ) {\n return { step: '1' as const }\n }\n return {}\n }\n\n const baseClassName = `\n w-full ${SIZE_INPUT_CONFIG[size].padding} ${SIZE_INPUT_CONFIG[size].height} ${SIZE_INPUT_CONFIG[size].fontSize}\n backdrop-blur-md border rounded-2xl\n focus:ring-2 focus:outline-none transition-all duration-300\n shadow-sm\n ${hasLeftIcon ? 'pl-10' : ''}\n ${hasRightElement ? 'pr-10' : ''}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getInputStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n } as React.CSSProperties\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () =>\n props.disabled\n ? {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n : {}\n\n const getIconStyles = () =>\n error\n ? { color: 'var(--lm-error-400)' }\n : { color: 'var(--lm-text-secondary)' }\n\n return (\n <div className=\"space-y-2\">\n <div className=\"relative group\">\n {hasLeftIcon && (\n <div className=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none z-10\">\n <div\n className=\"transition-colors duration-200\"\n style={getIconStyles()}\n >\n {leftIcon}\n </div>\n </div>\n )}\n\n <input\n {...props}\n {...timeInputProps()}\n className={baseClassName}\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errorId : undefined}\n style={{\n ...getInputStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!props.disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n if (!props.disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n props.onMouseLeave?.(e)\n }}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n\n {hasRightElement && (\n <div className=\"absolute inset-y-0 right-0 pr-4 flex items-center z-10\">\n {rightElement}\n </div>\n )}\n </div>\n\n {errorMessage && (\n <p\n id={errorId}\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMInput\n","import React from 'react'\n\nexport type LMBadgeVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'neutral'\n\nexport type LMBadgeSize = 'xs' | 'sm' | 'md' | 'lg'\n\nexport interface LMBadgeProps {\n /** Badge content */\n children: React.ReactNode\n /** Color variant */\n variant?: LMBadgeVariant\n /** Size */\n size?: LMBadgeSize\n /** Custom class name */\n className?: string\n /** Show dot */\n dot?: boolean\n /** Icon */\n icon?: React.ReactNode\n}\n\nconst sizeConfig = {\n xs: {\n padding: 'px-2 py-0.5',\n fontSize: 'text-xs',\n dotSize: 'w-1.5 h-1.5',\n iconSize: 'text-xs',\n },\n sm: {\n padding: 'px-3 py-1',\n fontSize: 'text-xs',\n dotSize: 'w-2 h-2',\n iconSize: 'text-xs',\n },\n md: {\n padding: 'px-3.5 py-1.5',\n fontSize: 'text-sm',\n dotSize: 'w-2 h-2',\n iconSize: 'text-sm',\n },\n lg: {\n padding: 'px-4 py-2',\n fontSize: 'text-sm',\n dotSize: 'w-2.5 h-2.5',\n iconSize: 'text-sm',\n },\n}\n\nconst LMBadge: React.FC<LMBadgeProps> = ({\n children,\n variant = 'primary',\n size = 'sm',\n className = '',\n dot = false,\n icon,\n}) => {\n const getVariantStyles = (): React.CSSProperties => {\n const variantMap: Record<LMBadgeVariant, React.CSSProperties> = {\n primary: {\n backgroundColor: 'var(--lm-primary-100)',\n color: 'var(--lm-primary-700)',\n borderColor: 'var(--lm-primary-200)',\n },\n secondary: {\n backgroundColor: 'var(--lm-gray-100)',\n color: 'var(--lm-gray-700)',\n borderColor: 'var(--lm-gray-200)',\n },\n success: {\n backgroundColor: 'var(--lm-success-100)',\n color: 'var(--lm-success-700)',\n borderColor: 'var(--lm-success-200)',\n },\n warning: {\n backgroundColor: 'var(--lm-warning-100)',\n color: 'var(--lm-warning-700)',\n borderColor: 'var(--lm-warning-200)',\n },\n error: {\n backgroundColor: 'var(--lm-error-100)',\n color: 'var(--lm-error-700)',\n borderColor: 'var(--lm-error-200)',\n },\n info: {\n backgroundColor: 'var(--lm-info-100)',\n color: 'var(--lm-info-700)',\n borderColor: 'var(--lm-info-200)',\n },\n neutral: {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-secondary)',\n borderColor: 'var(--lm-border-default)',\n },\n }\n\n return variantMap[variant]\n }\n\n const getDotColor = (): string => {\n const dotColorMap: Record<LMBadgeVariant, string> = {\n primary: 'var(--lm-primary-500)',\n secondary: 'var(--lm-gray-500)',\n success: 'var(--lm-success-500)',\n warning: 'var(--lm-warning-500)',\n error: 'var(--lm-error-500)',\n info: 'var(--lm-info-500)',\n neutral: 'var(--lm-text-disabled)',\n }\n\n return dotColorMap[variant]\n }\n\n const currentSize = sizeConfig[size]\n\n return (\n <span\n className={`inline-flex items-center justify-center ${currentSize.padding} ${currentSize.fontSize} rounded-full border font-medium transition-all duration-200 ${className}`}\n style={getVariantStyles()}\n >\n {dot && (\n <span\n className={`${currentSize.dotSize} rounded-full mr-1.5 flex-shrink-0`}\n style={{ backgroundColor: getDotColor() }}\n />\n )}\n {icon && (\n <span className={`${currentSize.iconSize} mr-1.5 flex-shrink-0`}>\n {icon}\n </span>\n )}\n <span className=\"truncate\">{children}</span>\n </span>\n )\n}\n\nexport default LMBadge\n","import React, { useState, useRef, useEffect } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TOOLTIP_CONFIG,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMTooltipProps {\n /** Tooltip content */\n content: React.ReactNode\n /** Trigger element */\n children: React.ReactNode\n /** Placement */\n placement?: 'top' | 'bottom' | 'left' | 'right'\n /** Max width */\n maxWidth?: number\n /** Size */\n size?: ComponentSize\n}\n\nconst LMTooltip: React.FC<LMTooltipProps> = ({\n content,\n children,\n placement = 'top',\n maxWidth,\n size = 'sm',\n}) => {\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLDivElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const effectiveMaxWidth =\n maxWidth ?? SIZE_TOOLTIP_CONFIG[resolvedSize].maxWidth\n\n useEffect(() => {\n if (visible && triggerRef.current && tooltipRef.current) {\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const tooltipRect = tooltipRef.current.getBoundingClientRect()\n\n let top = 0\n let left = 0\n\n switch (placement) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - 8\n left =\n triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2\n break\n case 'bottom':\n top = triggerRect.bottom + 8\n left =\n triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2\n break\n case 'left':\n top =\n triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2\n left = triggerRect.left - tooltipRect.width - 8\n break\n case 'right':\n top =\n triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2\n left = triggerRect.right + 8\n break\n }\n\n // Ensure tooltip doesn't overflow viewport\n const padding = 8\n if (left < padding) left = padding\n if (left + tooltipRect.width > window.innerWidth - padding) {\n left = window.innerWidth - tooltipRect.width - padding\n }\n if (top < padding) top = padding\n if (top + tooltipRect.height > window.innerHeight - padding) {\n top = window.innerHeight - tooltipRect.height - padding\n }\n\n setPosition({ top, left })\n }\n }, [visible, placement])\n\n return (\n <>\n <div\n ref={triggerRef}\n onMouseEnter={() => setVisible(true)}\n onMouseLeave={() => setVisible(false)}\n className=\"inline-block\"\n >\n {children}\n </div>\n {visible && (\n <div\n ref={tooltipRef}\n className={`fixed z-50 ${SIZE_TOOLTIP_CONFIG[resolvedSize].paddingClass} ${SIZE_TOOLTIP_CONFIG[resolvedSize].textClass} rounded-lg shadow-lg pointer-events-none`}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n maxWidth: `${effectiveMaxWidth}px`,\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n color: 'var(--lm-text-primary)',\n border: '1px solid',\n }}\n >\n {content}\n </div>\n )}\n </>\n )\n}\n\nexport default LMTooltip\n","import React, { useEffect, useRef, useCallback, memo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { LMButton } from '../LMButton'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_HEADING_CLASSES,\n SIZE_MODAL_CONFIG,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nconst MODAL_FOOTER_SIZE_MAP: Record<ComponentSize, ComponentSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n xl: 'md',\n '2xl': 'lg',\n}\n\nexport interface LMModalProps {\n /** Visibility */\n visible: boolean\n /** Title */\n title?: string\n /** Content */\n children: React.ReactNode\n /** Custom footer */\n footer?: React.ReactNode\n /** Close callback */\n onClose?: () => void\n /** OK callback */\n onOk?: () => void\n /** Cancel callback */\n onCancel?: () => void\n /** OK button text */\n okText?: string\n /** Cancel button text */\n cancelText?: string\n /** Show OK button */\n showOk?: boolean\n /** Show Cancel button */\n showCancel?: boolean\n /** OK loading state */\n okLoading?: boolean\n /** Cancel loading state */\n cancelLoading?: boolean\n /** Show mask */\n mask?: boolean\n /** Click mask to close */\n maskClosable?: boolean\n /** Show close button */\n closable?: boolean\n /** Custom close icon */\n closeIcon?: React.ReactNode\n /** Header icon */\n headerIcon?: React.ReactNode\n /** Width */\n width?: string | number\n /** Height */\n height?: string | number\n /** Size preset */\n size?: ComponentSize\n /** Custom class name */\n className?: string\n /** Custom style */\n style?: React.CSSProperties\n /** Center vertically */\n centered?: boolean\n /** Fullscreen mode */\n fullscreen?: boolean\n /** Animation duration (ms) */\n animationDuration?: number\n /** Enable animation */\n animation?: boolean\n}\n\nconst LMModal: React.FC<LMModalProps> = ({\n visible,\n title,\n children,\n footer,\n onClose,\n onOk,\n onCancel,\n okText = 'Confirm',\n cancelText = 'Cancel',\n showOk = true,\n showCancel = true,\n okLoading = false,\n cancelLoading = false,\n mask = true,\n maskClosable = false,\n closable = true,\n closeIcon,\n headerIcon,\n width,\n height,\n size = 'md',\n className = '',\n style,\n centered = true,\n fullscreen = false,\n animationDuration = 300,\n animation = true,\n}) => {\n const modalRef = useRef<HTMLDivElement>(null)\n const backdropRef = useRef<HTMLDivElement>(null)\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const footerButtonSize = MODAL_FOOTER_SIZE_MAP[resolvedSize]\n\n const getModalStyles = () => {\n const baseStyles: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-xl)',\n borderRadius: '1rem',\n border: '1px solid var(--lm-border-default)',\n backdropFilter: 'blur(10px)',\n ...style,\n }\n\n if (fullscreen) {\n baseStyles.width = '100vw'\n baseStyles.height = '100vh'\n baseStyles.maxWidth = '100vw'\n baseStyles.maxHeight = '100vh'\n baseStyles.borderRadius = '0'\n } else {\n baseStyles.width = width\n ? typeof width === 'number'\n ? `${width}px`\n : width\n : SIZE_MODAL_CONFIG[resolvedSize].width\n baseStyles.maxWidth = SIZE_MODAL_CONFIG[resolvedSize].maxWidth\n if (height) {\n baseStyles.height = typeof height === 'number' ? `${height}px` : height\n }\n }\n\n return baseStyles\n }\n\n const getBackdropStyles = () =>\n mask\n ? { backgroundColor: 'rgba(0, 0, 0, 0.5)', backdropFilter: 'blur(4px)' }\n : { backgroundColor: 'transparent', backdropFilter: 'none' }\n\n const handleOk = () => (onOk ? onOk() : onClose?.())\n\n const handleCancel = useCallback(() => {\n if (onCancel) onCancel()\n else onClose?.()\n }, [onCancel, onClose])\n\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (maskClosable && e.target === backdropRef.current) handleCancel()\n }\n\n useEffect(() => {\n const keyHandler = (e: KeyboardEvent) => {\n if (visible && e.key === 'Escape') handleCancel()\n }\n if (visible) {\n document.addEventListener('keydown', keyHandler)\n document.body.style.overflow = 'hidden'\n }\n return () => {\n document.removeEventListener('keydown', keyHandler)\n if (visible) document.body.style.overflow = ''\n }\n }, [visible, handleCancel])\n\n const CloseIcon = () => (\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 const WindowIcon = () => (\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )\n\n const defaultFooter = (\n <div\n className=\"flex items-center justify-end gap-3 px-6 py-4 border-t\"\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n {showCancel && (\n <LMButton\n variant=\"secondary\"\n size={footerButtonSize}\n onClick={handleCancel}\n disabled={cancelLoading}\n loading={cancelLoading}\n >\n {cancelText}\n </LMButton>\n )}\n {showOk && (\n <LMButton\n variant=\"primary\"\n size={footerButtonSize}\n onClick={handleOk}\n disabled={okLoading}\n loading={okLoading}\n >\n {okText}\n </LMButton>\n )}\n </div>\n )\n\n const getAnimationClasses = () => {\n if (!animation) return ''\n const ms = animationDuration\n const durationClass =\n ms <= 150\n ? 'duration-150'\n : ms <= 200\n ? 'duration-200'\n : ms <= 300\n ? 'duration-300'\n : ms <= 500\n ? 'duration-500'\n : ms <= 700\n ? 'duration-700'\n : 'duration-1000'\n return `transition-all ${durationClass} ease-in-out`\n }\n\n if (!visible) return null\n\n const modalContent = (\n <div\n ref={backdropRef}\n className={`fixed inset-0 z-50 flex ${centered ? 'items-center' : 'items-start pt-20'} justify-center ${getAnimationClasses()}`}\n style={getBackdropStyles()}\n onClick={handleBackdropClick}\n >\n <div\n ref={modalRef}\n className={`relative ${getAnimationClasses()} ${className}`}\n style={getModalStyles()}\n onClick={(e) => e.stopPropagation()}\n >\n {(title || closable) && (\n <div\n className=\"flex items-center justify-between p-6 pb-4 border-b\"\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n {title && (\n <h3\n className={`font-bold flex items-center gap-2 ${SIZE_HEADING_CLASSES[resolvedSize]}`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n <span style={{ color: 'var(--lm-text-secondary)' }}>\n {headerIcon || <WindowIcon />}\n </span>\n {title}\n </h3>\n )}\n {closable && (\n <LMButton\n variant=\"ghost\"\n size=\"xs\"\n onClick={handleCancel}\n leftIcon={closeIcon || <CloseIcon />}\n className=\"w-8 h-8 p-0\"\n aria-label=\"Close dialog\"\n title=\"Close\"\n style={{\n borderRadius: '0.5rem',\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-default)',\n color: 'var(--lm-text-secondary)',\n }}\n />\n )}\n </div>\n )}\n\n <div className=\"p-6\">{children}</div>\n\n {footer !== undefined\n ? footer\n : showOk || showCancel\n ? defaultFooter\n : null}\n </div>\n </div>\n )\n\n return createPortal(modalContent, document.body)\n}\n\nexport default memo(LMModal)\n","import React from 'react'\nimport { SIZE_ICON_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMCheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Label text */\n label: string\n /** Description text */\n description?: string\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst sizeConfig = {\n xs: {\n container: 'p-2 gap-2',\n label: 'text-xs',\n description: 'text-xs mt-0.5',\n errorMessage: 'text-xs',\n },\n sm: {\n container: 'p-3 gap-2.5',\n label: 'text-sm',\n description: 'text-xs mt-1',\n errorMessage: 'text-xs',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n },\n lg: {\n container: 'p-5 gap-4',\n label: 'text-lg',\n description: 'text-base mt-1.5',\n errorMessage: 'text-sm',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n },\n '2xl': {\n container: 'p-8 gap-5',\n label: 'text-2xl',\n description: 'text-xl mt-2.5',\n errorMessage: 'text-base',\n },\n}\n\nconst LMCheckbox: React.FC<LMCheckboxProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n className = '',\n ...props\n}) => {\n const currentSize = sizeConfig[size]\n const checkboxSizeClass = SIZE_ICON_CONFIG[size]\n\n const getCheckboxStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n color: 'var(--lm-primary-500)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n } as React.CSSProperties\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-50)'\n : 'var(--lm-bg-paper)',\n }) as React.CSSProperties\n\n const getHoverContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-100)'\n : 'var(--lm-bg-elevated)',\n }) as React.CSSProperties\n\n const getLabelStyles = () => {\n if (error)\n return { color: 'var(--lm-error-700)' } as React.CSSProperties\n if (props.disabled)\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n } as React.CSSProperties\n return {\n color: 'var(--lm-text-primary)',\n cursor: 'pointer',\n } as React.CSSProperties\n }\n\n const getDescriptionStyles = () =>\n (error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }) as React.CSSProperties\n\n const checkboxClassName = `\n ${checkboxSizeClass} border-2 rounded-md\n focus:ring-2 focus:ring-offset-0\n transition-all duration-200\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n return (\n <div>\n <label\n className={`flex items-center rounded-2xl transition-colors duration-200 ${currentSize.container} ${\n props.disabled ? '' : 'cursor-pointer'\n }`}\n style={getContainerStyles()}\n onMouseEnter={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getHoverContainerStyles())\n }\n }}\n onMouseLeave={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getContainerStyles())\n }\n }}\n >\n <input\n type=\"checkbox\"\n {...props}\n className={checkboxClassName}\n style={{\n ...getCheckboxStyles(),\n ...getDisabledStyles(),\n }}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n\n <div className=\"flex-1\">\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n </label>\n\n {errorMessage && (\n <p\n className={`flex items-center gap-1 ${currentSize.errorMessage}`}\n style={{ color: 'var(--lm-error-500)' }}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMCheckbox\n","import React, { useId } from 'react'\nimport { SIZE_ICON_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMRadioProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n /** Label text */\n label: string\n /** Description text */\n description?: string\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst LMRadio: React.FC<LMRadioProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n className = '',\n id,\n ...props\n}) => {\n const autoId = useId()\n const controlId = id ?? `lm-radio-${autoId}`\n const errId = `lm-radio-err-${autoId}`\n\n const radioSizeClass = SIZE_ICON_CONFIG[size]\n\n const getRadioStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n color: 'var(--lm-primary-500)',\n } as React.CSSProperties\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () => {\n const base = { backgroundColor: 'var(--lm-bg-paper)' }\n return error ? { ...base, backgroundColor: 'var(--lm-error-50)' } : base\n }\n\n const getHoverContainerStyles = () =>\n error\n ? { backgroundColor: 'var(--lm-error-100)' }\n : { backgroundColor: 'var(--lm-bg-elevated)' }\n\n const getLabelStyles = () => {\n if (error) return { color: 'var(--lm-error-700)' }\n if (props.disabled)\n return { color: 'var(--lm-text-disabled)', cursor: 'not-allowed' }\n return { color: 'var(--lm-text-primary)', cursor: 'pointer' }\n }\n\n const getDescriptionStyles = () =>\n error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }\n\n const radioClassName = `\n ${radioSizeClass} border-2 rounded-full\n focus:ring-2 focus:ring-offset-0\n transition-all duration-200\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n return (\n <div>\n <div\n className=\"flex items-start gap-3 p-4 rounded-2xl transition-colors duration-200\"\n style={getContainerStyles()}\n onMouseEnter={(e) => {\n if (!props.disabled)\n Object.assign(e.currentTarget.style, getHoverContainerStyles())\n }}\n onMouseLeave={(e) => {\n if (!props.disabled)\n Object.assign(e.currentTarget.style, getContainerStyles())\n }}\n >\n <input\n type=\"radio\"\n id={controlId}\n {...props}\n className={radioClassName}\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errId : undefined}\n style={{ ...getRadioStyles(), ...getDisabledStyles() } as React.CSSProperties}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n\n <div className=\"flex-1\">\n <label\n htmlFor={controlId}\n className=\"text-base font-medium transition-colors duration-200\"\n style={getLabelStyles()}\n >\n {label}\n </label>\n {description && (\n <p className=\"text-sm mt-1\" style={getDescriptionStyles()}>\n {description}\n </p>\n )}\n </div>\n </div>\n\n {errorMessage && (\n <p\n id={errId}\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMRadio\n","import React, { useId } from 'react'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMSwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n /** Label text */\n label?: string\n /** Description text */\n description?: string\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst sizeConfig = {\n xs: {\n container: 'p-2 gap-2',\n label: 'text-xs',\n description: 'text-xs mt-0.5',\n errorMessage: 'text-xs',\n track: 'w-7 h-4',\n thumb: 'w-2.5 h-2.5',\n translate: 'translate-x-3',\n },\n sm: {\n container: 'p-3 gap-2.5',\n label: 'text-sm',\n description: 'text-xs mt-1',\n errorMessage: 'text-xs',\n track: 'w-9 h-5',\n thumb: 'w-3 h-3',\n translate: 'translate-x-4',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n track: 'w-11 h-6',\n thumb: 'w-4 h-4',\n translate: 'translate-x-5',\n },\n lg: {\n container: 'p-5 gap-4',\n label: 'text-lg',\n description: 'text-base mt-1.5',\n errorMessage: 'text-sm',\n track: 'w-14 h-7',\n thumb: 'w-5 h-5',\n translate: 'translate-x-7',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n track: 'w-16 h-8',\n thumb: 'w-6 h-6',\n translate: 'translate-x-8',\n },\n '2xl': {\n container: 'p-8 gap-5',\n label: 'text-2xl',\n description: 'text-xl mt-2.5',\n errorMessage: 'text-base',\n track: 'w-20 h-10',\n thumb: 'w-8 h-8',\n translate: 'translate-x-10',\n },\n}\n\nconst LMSwitch: React.FC<LMSwitchProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n id,\n ...props\n}) => {\n const autoId = useId()\n const controlId = id ?? `lm-switch-${autoId}`\n const errId = `lm-switch-err-${autoId}`\n\n const currentSize = sizeConfig[size]\n\n const getTrackBg = () => {\n if (props.disabled) return 'var(--lm-bg-paper)'\n if (error && !props.checked) return 'var(--lm-error-300)'\n if (props.checked) return 'var(--lm-primary-500)'\n return 'var(--lm-border-default)'\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n opacity: 0.6,\n cursor: 'not-allowed',\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () => {\n const base = { backgroundColor: 'var(--lm-bg-paper)' }\n return error ? { ...base, backgroundColor: 'var(--lm-error-50)' } : base\n }\n\n const getHoverContainerStyles = () =>\n error\n ? { backgroundColor: 'var(--lm-error-100)' }\n : { backgroundColor: 'var(--lm-bg-elevated)' }\n\n const getLabelStyles = () => {\n if (error) return { color: 'var(--lm-error-700)' }\n if (props.disabled)\n return { color: 'var(--lm-text-disabled)', cursor: 'not-allowed' }\n return { color: 'var(--lm-text-primary)', cursor: 'pointer' }\n }\n\n const getDescriptionStyles = () =>\n error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }\n\n return (\n <div>\n <label\n htmlFor={controlId}\n className={`flex items-start rounded-2xl transition-colors duration-200 ${currentSize.container} ${\n props.disabled ? '' : 'cursor-pointer'\n }`}\n style={getContainerStyles()}\n onMouseEnter={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getHoverContainerStyles())\n }\n }}\n onMouseLeave={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getContainerStyles())\n }\n }}\n >\n <div className=\"flex-shrink-0 relative\">\n <input\n type=\"checkbox\"\n id={controlId}\n {...props}\n className=\"sr-only peer\"\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errId : undefined}\n style={getDisabledStyles()}\n />\n <div\n className={`${currentSize.track} rounded-full transition-all duration-300 relative`}\n style={{\n backgroundColor: getTrackBg(),\n ...getDisabledStyles(),\n }}\n >\n <div\n className={`${currentSize.thumb} absolute left-1 top-1/2 -translate-y-1/2 rounded-full transition-transform duration-300 ${\n props.checked ? currentSize.translate : 'translate-x-0'\n }`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n }}\n />\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex-1\">\n {label && (\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n )}\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </label>\n\n {errorMessage && (\n <p\n id={errId}\n className={`flex items-center gap-1 mt-2 ${currentSize.errorMessage}`}\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMSwitch\n","import React from 'react'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMTextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst sizeConfig = {\n xs: {\n minHeight: 'min-h-[60px]',\n fontSize: 'text-xs',\n padding: 'px-3 py-2',\n },\n sm: {\n minHeight: 'min-h-[80px]',\n fontSize: 'text-sm',\n padding: 'px-3 py-2',\n },\n md: {\n minHeight: 'min-h-[100px]',\n fontSize: 'text-sm',\n padding: 'px-4 py-2.5',\n },\n lg: {\n minHeight: 'min-h-[120px]',\n fontSize: 'text-base',\n padding: 'px-4 py-3',\n },\n xl: {\n minHeight: 'min-h-[140px]',\n fontSize: 'text-base',\n padding: 'px-5 py-3.5',\n },\n '2xl': {\n minHeight: 'min-h-[160px]',\n fontSize: 'text-lg',\n padding: 'px-6 py-4',\n },\n}\n\nconst LMTextarea: React.FC<LMTextareaProps> = ({\n error = false,\n errorMessage,\n className = '',\n size = 'md',\n ...props\n}) => {\n const baseClassName = `\n w-full ${sizeConfig[size].padding} ${sizeConfig[size].fontSize} backdrop-blur-md border rounded-2xl\n focus:ring-2 focus:outline-none transition-all duration-300\n shadow-sm resize-none ${className.includes('h-full') ? '' : sizeConfig[size].minHeight}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getTextareaStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n return {}\n }\n\n const isFullHeight = className.includes('h-full')\n const containerClassName = isFullHeight\n ? 'h-full flex flex-col'\n : 'space-y-2'\n\n return (\n <div className={containerClassName}>\n <textarea\n {...props}\n className={baseClassName}\n style={{\n ...getTextareaStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!props.disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n if (!props.disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n props.onMouseLeave?.(e)\n }}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n {errorMessage && (\n <p\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n >\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMTextarea\n","import React, {\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n} from 'react'\nimport { SIZE_INPUT_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMNumberInputProps {\n /** Current value (controlled) */\n value?: number | null\n /** Change callback */\n onChange?: (value: number | null) => void\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Class name */\n className?: string\n /** Form field name */\n name?: string\n /** Size */\n size?: ComponentSize\n /** Minimum value */\n min?: number\n /** Maximum value */\n max?: number\n /** Step */\n step?: number\n /** Decimal precision */\n precision?: number\n /** Show increment/decrement controls */\n showControls?: boolean\n /** Prefix text */\n prefix?: string\n /** Suffix text */\n suffix?: string\n}\n\nconst LMNumberInput: React.FC<LMNumberInputProps> = ({\n value,\n onChange,\n error = false,\n errorMessage,\n placeholder = 'Enter number...',\n disabled = false,\n className = '',\n name,\n size = 'md',\n min,\n max,\n step = 1,\n precision = 0,\n showControls = true,\n prefix,\n suffix,\n}) => {\n const [inputValue, setInputValue] = useState<string>(\n value !== null && value !== undefined ? String(value) : ''\n )\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const errId = useRef(`lm-ni-err-${Math.random().toString(36).slice(2)}`).current\n\n const formatNumber = useCallback(\n (num: number): string => {\n if (!Number.isFinite(num)) return ''\n if (precision <= 0) return String(Math.round(num))\n return num.toFixed(precision)\n },\n [precision]\n )\n\n useEffect(() => {\n if (value === undefined || value === null) {\n setInputValue('')\n } else if (!isFocused) {\n setInputValue(formatNumber(value))\n }\n }, [value, isFocused, formatNumber])\n\n const baseClassName = `\n w-full ${SIZE_INPUT_CONFIG[size].padding} ${SIZE_INPUT_CONFIG[size].height} ${SIZE_INPUT_CONFIG[size].fontSize}\n backdrop-blur-md border rounded-2xl\n focus:ring-2 focus:outline-none transition-all duration-300\n shadow-sm\n ${showControls ? 'pr-10' : ''}\n ${prefix ? 'pl-10' : ''}\n ${suffix ? 'pr-10' : ''}\n ${className}\n [&::-webkit-outer-spin-button]:appearance-none\n [&::-webkit-inner-spin-button]:appearance-none\n [-moz-appearance:textfield]\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getNumberInputStyles = () => {\n const base = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : isFocused\n ? 'var(--lm-primary-400)'\n : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n } as React.CSSProperties\n\n return {\n ...base,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () =>\n disabled\n ? {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n : {}\n\n const getIconStyles = () => {\n if (error) return { color: 'var(--lm-error-400)' }\n if (isFocused) return { color: 'var(--lm-primary-500)' }\n return { color: 'var(--lm-text-secondary)' }\n }\n\n const getControlButtonStyles = () => ({\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-secondary)',\n borderColor: 'var(--lm-border-light)',\n })\n\n const getHoverControlButtonStyles = () => ({\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n })\n\n const parseNumber = (str: string): number | null => {\n const n = parseFloat(str)\n return Number.isNaN(n) ? null : n\n }\n\n const clamp = (num: number): number => {\n let v = num\n if (min !== undefined) v = Math.max(v, min)\n if (max !== undefined) v = Math.min(v, max)\n return v\n }\n\n const stepFrom = useMemo(() => min ?? 0, [min])\n const alignToStep = (num: number) => {\n const offset = num - stepFrom\n const k = Math.round(offset / step)\n const next = stepFrom + k * step\n return Number(next.toFixed(Math.max(precision, 12)))\n }\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const val = event.target.value\n setInputValue(val)\n\n if (val.trim() === '') {\n onChange?.(null)\n return\n }\n\n const num = parseNumber(val)\n if (num === null) return\n\n const clamped = clamp(num)\n if (clamped !== num) return\n onChange?.(num)\n }\n\n const changeByStep = (delta: number) => {\n if (disabled) return\n\n const current = parseNumber(inputValue)\n const base = current ?? min ?? 0\n const raw = base + delta * step\n const clamped = clamp(raw)\n const aligned = alignToStep(clamped)\n\n setInputValue(formatNumber(aligned))\n onChange?.(aligned)\n }\n\n const handleIncrement = () => changeByStep(+1)\n const handleDecrement = () => changeByStep(-1)\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n handleIncrement()\n } else if (event.key === 'ArrowDown') {\n event.preventDefault()\n handleDecrement()\n }\n }\n\n const handleFocus = () => setIsFocused(true)\n const handleBlur = () => {\n setIsFocused(false)\n\n if (inputValue.trim() === '') {\n setInputValue('')\n if (value !== null) onChange?.(null)\n return\n }\n\n const num = parseNumber(inputValue)\n if (num === null) {\n if (typeof value === 'number') {\n setInputValue(formatNumber(clamp(value)))\n } else {\n setInputValue('')\n if (value !== null) onChange?.(null)\n }\n return\n }\n let v = clamp(num)\n v = alignToStep(v)\n const formatted = formatNumber(v)\n setInputValue(formatted)\n if (v !== value) onChange?.(v)\n }\n\n const handleWheel: React.WheelEventHandler<HTMLInputElement> = (e) => {\n if (document.activeElement === inputRef.current) {\n e.preventDefault()\n }\n }\n\n const currentNum = parseNumber(inputValue)\n const incDisabled = useMemo(() => {\n if (disabled) return true\n const base = currentNum ?? min ?? 0\n return max !== undefined && base >= max\n }, [disabled, currentNum, min, max])\n\n const decDisabled = useMemo(() => {\n if (disabled) return true\n const base = currentNum ?? min ?? 0\n return min !== undefined && base <= min\n }, [disabled, currentNum, min])\n\n const ChevronUp = () => (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n )\n\n const ChevronDown = () => (\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n\n return (\n <div className=\"space-y-2\">\n <div className=\"relative group\">\n {prefix && (\n <div className=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none z-10\">\n <span className=\"text-sm font-medium\" style={getIconStyles()}>\n {prefix}\n </span>\n </div>\n )}\n\n <input\n ref={inputRef}\n type=\"number\"\n name={name}\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n inputMode=\"decimal\"\n className={baseClassName}\n style={{ ...getNumberInputStyles(), ...getDisabledStyles() } as React.CSSProperties}\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errId : undefined}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onWheel={handleWheel}\n onMouseEnter={(e) => {\n if (!disabled && !error && !isFocused) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !error && !isFocused) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n }}\n />\n\n {suffix && (\n <div\n className={`absolute inset-y-0 flex items-center pointer-events-none z-10 ${\n showControls ? 'right-10' : 'right-4'\n }`}\n >\n <span className=\"text-sm font-medium\" style={getIconStyles()}>\n {suffix}\n </span>\n </div>\n )}\n\n {showControls && (\n <div className=\"absolute inset-y-0 right-0 flex flex-col w-8\">\n <button\n type=\"button\"\n aria-label=\"Increment\"\n onClick={handleIncrement}\n disabled={incDisabled}\n className=\"flex-1 px-1 border-l border-b rounded-tr-2xl transition-colors duration-200 flex items-center justify-center\"\n style={getControlButtonStyles()}\n onMouseEnter={(e) => {\n if (!incDisabled)\n Object.assign(e.currentTarget.style, getHoverControlButtonStyles())\n }}\n onMouseLeave={(e) => {\n if (!incDisabled)\n Object.assign(e.currentTarget.style, getControlButtonStyles())\n }}\n >\n <ChevronUp />\n </button>\n <button\n type=\"button\"\n aria-label=\"Decrement\"\n onClick={handleDecrement}\n disabled={decDisabled}\n className=\"flex-1 px-1 border-l rounded-br-2xl transition-colors duration-200 flex items-center justify-center\"\n style={getControlButtonStyles()}\n onMouseEnter={(e) => {\n if (!decDisabled)\n Object.assign(e.currentTarget.style, getHoverControlButtonStyles())\n }}\n onMouseLeave={(e) => {\n if (!decDisabled)\n Object.assign(e.currentTarget.style, getControlButtonStyles())\n }}\n >\n <ChevronDown />\n </button>\n </div>\n )}\n </div>\n\n {errorMessage && (\n <p\n id={errId}\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMNumberInput\n","import React, { useState, useRef, useEffect } from 'react'\nimport { SIZE_INPUT_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMSearchInputProps {\n /** Current search value */\n value?: string\n /** Change callback */\n onChange?: (value: string) => void\n /** Search submit callback */\n onSearch?: (value: string) => void\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Class name */\n className?: string\n /** Form field name */\n name?: string\n /** Size */\n size?: ComponentSize\n /** Show clear button */\n showClear?: boolean\n /** Show search button */\n showSearchButton?: boolean\n /** Search button text */\n searchButtonText?: string\n /** Debounce delay (ms) */\n debounceDelay?: number\n}\n\nconst LMSearchInput: React.FC<LMSearchInputProps> = ({\n value,\n onChange,\n onSearch,\n error = false,\n errorMessage,\n placeholder = 'Search...',\n disabled = false,\n className = '',\n name,\n size = 'md',\n showClear = true,\n showSearchButton = true,\n searchButtonText = 'Search',\n debounceDelay = 300,\n}) => {\n const [inputValue, setInputValue] = useState(value || '')\n const [isFocused, setIsFocused] = useState(false)\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const searchBtnRef = useRef<HTMLButtonElement>(null)\n const [searchBtnWidth, setSearchBtnWidth] = useState(0)\n\n useEffect(() => {\n if (value !== undefined && value !== null) setInputValue(value)\n }, [value])\n\n useEffect(() => {\n if (showSearchButton && searchBtnRef.current) {\n setSearchBtnWidth(searchBtnRef.current.offsetWidth || 0)\n } else {\n setSearchBtnWidth(0)\n }\n }, [showSearchButton, searchButtonText])\n\n const baseClassName = `\n w-full ${SIZE_INPUT_CONFIG[size].padding} ${SIZE_INPUT_CONFIG[size].height} backdrop-blur-md border rounded-2xl\n focus:ring-2 focus:outline-none transition-all duration-300\n shadow-sm\n ${showSearchButton ? 'pr-20' : showClear ? 'pr-10' : 'pr-4'}\n pl-12\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getSearchInputStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : isFocused\n ? 'var(--lm-primary-400)'\n : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n } as React.CSSProperties\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () =>\n disabled\n ? {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n : {}\n\n const getIconStyles = () => {\n if (error) return { color: 'var(--lm-error-400)' }\n if (isFocused) return { color: 'var(--lm-primary-500)' }\n return { color: 'var(--lm-text-secondary)' }\n }\n\n const getButtonStyles = () => ({\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n })\n\n const getClearButtonStyles = () => ({\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-secondary)',\n })\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value\n setInputValue(newValue)\n onChange?.(newValue)\n\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => {\n onSearch?.(newValue)\n }, debounceDelay)\n }\n\n const handleSearch = () => onSearch?.(inputValue)\n\n const handleClear = () => {\n setInputValue('')\n onChange?.('')\n onSearch?.('')\n inputRef.current?.focus()\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n handleSearch()\n }\n }\n\n const clearBtnSizeClass =\n size === 'sm'\n ? 'w-7 h-7 text-xs'\n : size === 'lg'\n ? 'w-9 h-9 text-sm'\n : 'w-8 h-8 text-sm'\n\n const clearRightPx = showSearchButton ? searchBtnWidth + 8 : 8\n\n const SearchIcon = () => (\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=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n )\n\n const ClearIcon = () => (\n <svg className=\"w-3 h-3\" 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 className=\"space-y-2\">\n <div className=\"relative group\">\n <div className=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none z-10\">\n <span style={getIconStyles()}>\n <SearchIcon />\n </span>\n </div>\n\n <input\n ref={inputRef}\n type=\"search\"\n name={name}\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n className={baseClassName}\n style={{\n ...getSearchInputStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onMouseEnter={(e) => {\n if (!disabled && !error && !isFocused) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !error && !isFocused) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n }}\n />\n\n <style>{`\n input[type='search']::-webkit-search-cancel-button {\n -webkit-appearance: none;\n appearance: none;\n }\n `}</style>\n\n {showClear && inputValue && !disabled && (\n <button\n onClick={handleClear}\n className={`absolute top-1/2 -translate-y-1/2 z-10 rounded-full flex items-center justify-center ${clearBtnSizeClass}`}\n style={{\n ...getClearButtonStyles(),\n right: `${clearRightPx}px`,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-bg-elevated)'\n e.currentTarget.style.color = 'var(--lm-text-primary)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-bg-paper)'\n e.currentTarget.style.color = 'var(--lm-text-secondary)'\n }}\n aria-label=\"Clear\"\n type=\"button\"\n >\n <ClearIcon />\n </button>\n )}\n\n {showSearchButton && !disabled && (\n <button\n ref={searchBtnRef}\n onClick={handleSearch}\n className=\"absolute inset-y-0 right-0 px-4 rounded-r-2xl transition-colors duration-200 z-20\"\n style={getButtonStyles()}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-primary-600)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-primary-500)'\n }}\n type=\"button\"\n >\n <span className=\"text-sm font-medium\">{searchButtonText}</span>\n </button>\n )}\n </div>\n\n {errorMessage && (\n <p\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n >\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMSearchInput\n","import React, { useState, useRef, useEffect } from 'react'\nimport { SIZE_SELECTOR_CONFIG } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMSelectOption {\n value: string | number\n label: string\n disabled?: boolean\n}\n\nexport interface LMSelectProps {\n /** Options */\n options: LMSelectOption[]\n /** Current value */\n value?: string | number | (string | number)[]\n /** Change callback */\n onChange?: (value: string | number | (string | number)[]) => void\n /** Dropdown visibility change callback */\n onDropdownVisibleChange?: (visible: boolean) => void\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Class name */\n className?: string\n /** Form field name */\n name?: string\n /** Size */\n size?: ComponentSize\n /** Multiple selection */\n multiple?: boolean\n}\n\nconst SIZE_DROPDOWN_CONFIG: Record<\n ComponentSize,\n {\n maxHeight: string\n optionPadding: string\n optionTextSize: string\n }\n> = {\n xs: { maxHeight: 'max-h-32', optionPadding: 'px-3 py-1.5', optionTextSize: 'text-xs' },\n sm: { maxHeight: 'max-h-40', optionPadding: 'px-3 py-2', optionTextSize: 'text-xs' },\n md: { maxHeight: 'max-h-48', optionPadding: 'px-4 py-2.5', optionTextSize: 'text-sm' },\n lg: { maxHeight: 'max-h-56', optionPadding: 'px-4 py-3', optionTextSize: 'text-sm' },\n xl: { maxHeight: 'max-h-64', optionPadding: 'px-5 py-3', optionTextSize: 'text-base' },\n '2xl': { maxHeight: 'max-h-72', optionPadding: 'px-6 py-4', optionTextSize: 'text-lg' },\n}\n\nconst LMSelect: React.FC<LMSelectProps> = ({\n options,\n value,\n onChange,\n onDropdownVisibleChange,\n error = false,\n errorMessage,\n placeholder = 'Select...',\n disabled = false,\n className = '',\n name,\n size = 'md',\n multiple = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false)\n const [selectedOption, setSelectedOption] = useState<LMSelectOption | null>(null)\n const [selectedOptions, setSelectedOptions] = useState<LMSelectOption[]>([])\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!multiple) {\n if (value !== undefined && value !== null && !Array.isArray(value)) {\n const option = options.find((opt) => opt.value === value)\n setSelectedOption(option || null)\n } else {\n setSelectedOption(null)\n }\n }\n }, [value, options, multiple])\n\n useEffect(() => {\n if (multiple && Array.isArray(value)) {\n const selectedOpts = options.filter((opt) => value.includes(opt.value))\n setSelectedOptions(selectedOpts)\n } else if (multiple) {\n setSelectedOptions([])\n }\n }, [value, options, multiple])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n onDropdownVisibleChange?.(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, onDropdownVisibleChange])\n\n const handleSelect = (option: LMSelectOption) => {\n if (option.disabled) return\n\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : []\n const isSelected = currentValues.includes(option.value)\n const newValues = isSelected\n ? currentValues.filter((v) => v !== option.value)\n : [...currentValues, option.value]\n onChange?.(newValues)\n } else {\n setSelectedOption(option)\n onChange?.(option.value)\n setIsOpen(false)\n onDropdownVisibleChange?.(false)\n }\n }\n\n const toggleDropdown = () => {\n if (!disabled) {\n const newIsOpen = !isOpen\n setIsOpen(newIsOpen)\n onDropdownVisibleChange?.(newIsOpen)\n }\n }\n\n const baseClassName = `\n w-full ${SIZE_SELECTOR_CONFIG[size].padding} ${SIZE_SELECTOR_CONFIG[size].height} ${SIZE_SELECTOR_CONFIG[size].fontSize}\n backdrop-blur-md border rounded-2xl\n transition-all duration-300 shadow-sm cursor-pointer\n flex items-center justify-between\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getSelectorStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error ? 'var(--lm-error-300)' : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error ? 'var(--lm-error-400)' : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n }\n\n const getDisabledStyles = () =>\n disabled\n ? {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n : {}\n\n const getIconStyles = () =>\n error ? { color: 'var(--lm-error-400)' } : { color: 'var(--lm-text-secondary)' }\n\n const getDropdownStyles = () => ({\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-lg)',\n })\n\n const isOptionSelected = (optionValue: string | number): boolean => {\n if (multiple) {\n return Array.isArray(value) && value.includes(optionValue)\n }\n return selectedOption?.value === optionValue\n }\n\n const getOptionStyles = (option: LMSelectOption) => {\n const baseStyles = {\n color: option.disabled ? 'var(--lm-text-disabled)' : 'var(--lm-text-primary)',\n backgroundColor: option.disabled ? 'var(--lm-bg-paper)' : 'transparent',\n }\n\n if (isOptionSelected(option.value)) {\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-50)',\n color: 'var(--lm-primary-700)',\n }\n }\n\n return baseStyles\n }\n\n const getHoverOptionStyles = (option: LMSelectOption) => {\n if (option.disabled) return {}\n\n if (isOptionSelected(option.value)) {\n return { backgroundColor: 'var(--lm-primary-100)' }\n }\n\n return { backgroundColor: 'var(--lm-bg-paper)' }\n }\n\n const getDisplayText = (): string => {\n if (multiple) {\n if (selectedOptions.length === 0) return placeholder\n if (selectedOptions.length === 1) return selectedOptions[0].label\n return `${selectedOptions.length} selected`\n }\n return selectedOption ? selectedOption.label : placeholder\n }\n\n const ChevronDown = () => (\n <svg\n className={`w-4 h-4 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n style={getIconStyles()}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n\n const CheckIcon = () => (\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=\"M5 13l4 4L19 7\" />\n </svg>\n )\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <select\n name={name}\n value={\n multiple\n ? Array.isArray(value)\n ? value.map(String)\n : []\n : value !== undefined && value !== null && !Array.isArray(value)\n ? String(value)\n : ''\n }\n onChange={() => {}}\n className=\"sr-only\"\n disabled={disabled}\n tabIndex={-1}\n multiple={multiple}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n\n <div\n className={baseClassName}\n onClick={toggleDropdown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n style={{\n ...getSelectorStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n }}\n onFocus={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n }}\n onBlur={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggleDropdown()\n }\n }}\n >\n <span\n style={{\n color:\n (multiple && selectedOptions.length > 0) || selectedOption\n ? 'var(--lm-text-primary)'\n : 'var(--lm-text-secondary)',\n }}\n >\n {getDisplayText()}\n </span>\n <ChevronDown />\n </div>\n\n {isOpen && (\n <div\n className={`absolute left-0 right-0 z-50 backdrop-blur-md border rounded-xl overflow-y-auto ${SIZE_DROPDOWN_CONFIG[size].maxHeight}`}\n style={{\n ...getDropdownStyles(),\n top: 'calc(100% + 4px)',\n }}\n >\n {options.map((option, index) => (\n <div\n key={option.value}\n className={`\n ${SIZE_DROPDOWN_CONFIG[size].optionPadding} ${SIZE_DROPDOWN_CONFIG[size].optionTextSize} font-medium\n cursor-pointer transition-all duration-150\n ${option.disabled ? 'cursor-not-allowed' : ''}\n ${index === 0 ? 'rounded-t-xl' : ''}\n ${index === options.length - 1 ? 'rounded-b-xl' : ''}\n ${index > 0 ? 'border-t' : ''}\n `}\n style={{\n ...getOptionStyles(option),\n borderTopColor: index > 0 ? 'var(--lm-border-light)' : 'transparent',\n }}\n onMouseEnter={(e) => {\n if (!option.disabled) {\n Object.assign(e.currentTarget.style, getHoverOptionStyles(option))\n }\n }}\n onMouseLeave={(e) => {\n if (!option.disabled) {\n Object.assign(e.currentTarget.style, getOptionStyles(option))\n }\n }}\n onClick={() => handleSelect(option)}\n role=\"option\"\n aria-selected={isOptionSelected(option.value)}\n >\n <div className=\"flex items-center justify-between\">\n {multiple && (\n <input\n type=\"checkbox\"\n checked={isOptionSelected(option.value)}\n onChange={() => {}}\n className=\"mr-2 cursor-pointer\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n <span className=\"truncate flex-1\">{option.label}</span>\n {!multiple && isOptionSelected(option.value) && (\n <span className=\"ml-2 flex-shrink-0\" style={{ color: 'var(--lm-primary-600)' }}>\n <CheckIcon />\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {errorMessage && (\n <p\n className=\"text-xs flex items-center gap-1 mt-2\"\n style={{ color: 'var(--lm-error-500)' }}\n >\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMSelect\n","import React from 'react'\n\nexport interface LMFieldProps {\n /** Field label */\n label: string\n /** Required indicator */\n required?: boolean\n /** Error message */\n errorMessage?: string\n /** Help text */\n help?: string\n /** Children */\n children: React.ReactNode\n /** Class name */\n className?: string\n}\n\nconst LMField: React.FC<LMFieldProps> = ({\n label,\n required = false,\n errorMessage,\n help,\n children,\n className = '',\n}) => {\n let controlId: string | undefined\n const firstChild = Array.isArray(children)\n ? children.find(Boolean)\n : (children as React.ReactNode)\n\n if (\n React.isValidElement<{ id?: string }>(firstChild) &&\n typeof firstChild.props.id === 'string'\n ) {\n controlId = firstChild.props.id\n }\n\n const containerClass = `space-y-2 ${className}`.trim().replace(/\\s+/g, ' ')\n\n return (\n <div className={containerClass}>\n <label\n htmlFor={controlId}\n className=\"block text-xs font-semibold tracking-wide\"\n style={{ color: 'var(--lm-text-primary)' }}\n aria-required={required || undefined}\n >\n {label}\n {required && (\n <span className=\"ml-1\" style={{ color: 'var(--lm-error-500)' }}>\n *\n </span>\n )}\n </label>\n\n {help && (\n <p className=\"text-xs\" style={{ color: 'var(--lm-text-secondary)' }}>\n {help}\n </p>\n )}\n\n {children}\n\n {errorMessage && (\n <p\n className=\"text-xs flex items-center gap-1\"\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n {errorMessage}\n </p>\n )}\n </div>\n )\n}\n\nexport default LMField\n","import React, { useState, useEffect, useRef, useCallback, memo } from 'react'\nimport { SIZE_TABLE_CONFIG, SIZE_TEXT_CLASSES } from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMTableColumn<T = Record<string, unknown>> {\n /** Column title */\n title: string\n /** Data field name */\n dataIndex: string\n /** Column width */\n width?: string | number\n /** Custom render function */\n render?: (value: unknown, record: T, index: number) => React.ReactNode\n /** Sortable */\n sorter?: boolean\n /** Column alignment */\n align?: 'left' | 'center' | 'right'\n /** Fixed column */\n fixed?: 'left' | 'right'\n}\n\nexport interface LMPaginationConfig {\n /** Current page */\n current: number\n /** Page size */\n pageSize: number\n /** Total count */\n total: number\n /** Show pagination */\n showPagination?: boolean\n /** Page size options */\n pageSizeOptions?: number[]\n /** Show total */\n showTotal?: boolean\n /** Show quick jumper */\n showQuickJumper?: boolean\n /** Show size changer */\n showSizeChanger?: boolean\n /** Change callback */\n onChange?: (page: number, pageSize: number) => void\n}\n\nexport interface LMLoadMoreConfig {\n /** Enable load more */\n enabled: boolean\n /** Threshold */\n threshold?: number\n /** Has more data */\n hasMore: boolean\n /** Loading state */\n loading: boolean\n /** Load more callback */\n onLoadMore: () => void\n}\n\nexport interface LMTableProps<T = Record<string, unknown>> {\n /** Data source */\n dataSource: T[]\n /** Columns */\n columns: LMTableColumn<T>[]\n /** Row key */\n rowKey?: string | ((record: T, index: number) => string)\n /** Pagination config */\n pagination?: LMPaginationConfig\n /** Load more config */\n loadMore?: LMLoadMoreConfig\n /** Loading state */\n loading?: boolean\n /** Empty text */\n emptyText?: string\n /** Size */\n size?: ComponentSize\n /** Bordered */\n bordered?: boolean\n /** Striped */\n striped?: boolean\n /** Selectable */\n selectable?: boolean\n /** Selected row keys */\n selectedRowKeys?: string[]\n /** Selection change callback */\n onSelectionChange?: (selectedRowKeys: string[], selectedRows: T[]) => void\n /** Row click callback */\n onRowClick?: (record: T, index: number) => void\n /** Sort change callback */\n onSortChange?: (field: string, order: 'ascend' | 'descend') => void\n /** Class name */\n className?: string\n /** Full height */\n fullHeight?: boolean\n /** Variant */\n variant?: 'default' | 'elevated' | 'outline' | 'minimal' | 'soft' | 'zebra'\n}\n\nconst CaretUpIcon: React.FC<{ active?: boolean }> = ({ active }) => (\n <svg\n className=\"w-2.5 h-2.5\"\n viewBox=\"0 0 10 6\"\n fill=\"none\"\n style={{ color: active ? 'var(--lm-primary-500)' : 'var(--lm-gray-400)' }}\n >\n <path d=\"M5 0L10 6H0L5 0Z\" fill=\"currentColor\" />\n </svg>\n)\n\nconst CaretDownIcon: React.FC<{ active?: boolean }> = ({ active }) => (\n <svg\n className=\"w-2.5 h-2.5\"\n viewBox=\"0 0 10 6\"\n fill=\"none\"\n style={{ color: active ? 'var(--lm-primary-500)' : 'var(--lm-gray-400)' }}\n >\n <path d=\"M5 6L0 0H10L5 6Z\" fill=\"currentColor\" />\n </svg>\n)\n\nconst ChevronLeftIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n)\n\nconst ChevronRightIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n)\n\nconst SpinnerIcon: React.FC = () => (\n <svg className=\"w-4 h-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\">\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\nconst LMTable = <T = unknown,>({\n dataSource,\n columns,\n rowKey = 'id',\n pagination,\n loadMore,\n loading = false,\n emptyText = 'No data',\n size = 'md',\n bordered = false,\n striped = false,\n selectable = false,\n selectedRowKeys = [],\n onSelectionChange,\n onRowClick,\n onSortChange,\n className = '',\n fullHeight = false,\n variant = 'default',\n}: LMTableProps<T>) => {\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(10)\n const [sortField, setSortField] = useState<string>('')\n const [sortOrder, setSortOrder] = useState<'ascend' | 'descend'>('ascend')\n const containerRef = useRef<HTMLDivElement>(null)\n\n const getRowKey = useCallback(\n (record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record, index)\n }\n const key = (record as unknown as Record<string, unknown>)[rowKey as string]\n return (typeof key === 'string' ? key : String(key)) || index.toString()\n },\n [rowKey]\n )\n\n const getValueByDataIndex = useCallback((record: T, dataIndex: string) => {\n const parts = String(dataIndex).split('.')\n let current: unknown = record as unknown as Record<string, unknown>\n for (const p of parts) {\n if (\n current == null ||\n typeof current !== 'object' ||\n !(p in (current as Record<string, unknown>))\n ) {\n return ''\n }\n current = (current as Record<string, unknown>)[p]\n }\n return current as unknown\n }, [])\n\n const handleSort = useCallback(\n (column: LMTableColumn<T>) => {\n if (!column.sorter) return\n\n let newSortOrder: 'ascend' | 'descend' = 'ascend'\n if (sortField === column.dataIndex) {\n newSortOrder = sortOrder === 'ascend' ? 'descend' : 'ascend'\n }\n\n setSortField(column.dataIndex)\n setSortOrder(newSortOrder)\n onSortChange?.(column.dataIndex, newSortOrder)\n },\n [sortField, sortOrder, onSortChange]\n )\n\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page)\n pagination?.onChange?.(page, pageSize)\n },\n [pagination, pageSize]\n )\n\n const handlePageSizeChange = useCallback(\n (newPageSize: number) => {\n setPageSize(newPageSize)\n setCurrentPage(1)\n pagination?.onChange?.(1, newPageSize)\n },\n [pagination]\n )\n\n const handleRowSelect = useCallback(\n (record: T, checked: boolean) => {\n const key = getRowKey(record, dataSource.indexOf(record))\n let newSelectedRowKeys: string[]\n\n if (checked) {\n newSelectedRowKeys = [...selectedRowKeys, key]\n } else {\n newSelectedRowKeys = selectedRowKeys.filter((k) => k !== key)\n }\n\n const newSelectedRows = dataSource.filter((item) =>\n newSelectedRowKeys.includes(getRowKey(item, dataSource.indexOf(item)))\n )\n\n onSelectionChange?.(newSelectedRowKeys, newSelectedRows)\n },\n [selectedRowKeys, dataSource, getRowKey, onSelectionChange]\n )\n\n const handleSelectAll = useCallback(\n (checked: boolean) => {\n if (checked) {\n const allKeys = dataSource.map((record, index) => getRowKey(record, index))\n onSelectionChange?.(allKeys, dataSource)\n } else {\n onSelectionChange?.([], [])\n }\n },\n [dataSource, getRowKey, onSelectionChange]\n )\n\n const handleScroll = useCallback(() => {\n if (!loadMore?.enabled || loadMore.loading || !loadMore.hasMore) return\n\n const container = containerRef.current\n if (!container) return\n\n const { scrollTop, scrollHeight, clientHeight } = container\n const threshold = loadMore.threshold || 100\n\n if (scrollTop + clientHeight >= scrollHeight - threshold) {\n loadMore.onLoadMore()\n }\n }, [loadMore])\n\n useEffect(() => {\n const container = containerRef.current\n if (!container || !loadMore?.enabled) return\n\n container.addEventListener('scroll', handleScroll)\n return () => container.removeEventListener('scroll', handleScroll)\n }, [handleScroll, loadMore?.enabled, loadMore?.loading, loadMore?.hasMore])\n\n useEffect(() => {\n if (pagination?.current !== undefined) {\n setCurrentPage(pagination.current)\n }\n if (pagination?.pageSize !== undefined) {\n setPageSize(pagination.pageSize)\n }\n }, [pagination])\n\n const paginationUiClasses = {\n xs: {\n container: 'px-3 py-2',\n text: 'text-xs',\n control: 'px-2 py-1 text-xs',\n gap: 'gap-1',\n select: 'px-2 py-1 text-xs',\n input: 'px-2 py-1 text-xs w-14',\n },\n sm: {\n container: 'px-3 py-2',\n text: 'text-sm',\n control: 'px-2 py-1 text-sm',\n gap: 'gap-2',\n select: 'px-2 py-1 text-sm',\n input: 'px-2 py-1 text-sm w-16',\n },\n md: {\n container: 'px-4 py-3',\n text: 'text-sm',\n control: 'px-3 py-1 text-sm',\n gap: 'gap-2',\n select: 'px-2 py-1 text-sm',\n input: 'px-2 py-1 text-sm w-16',\n },\n lg: {\n container: 'px-5 py-3.5',\n text: 'text-base',\n control: 'px-3.5 py-1.5 text-base',\n gap: 'gap-3',\n select: 'px-3 py-1.5 text-base',\n input: 'px-3 py-1.5 text-base w-20',\n },\n xl: {\n container: 'px-6 py-4',\n text: 'text-lg',\n control: 'px-4 py-2 text-lg',\n gap: 'gap-3',\n select: 'px-4 py-2 text-lg',\n input: 'px-4 py-2 text-lg w-24',\n },\n '2xl': {\n container: 'px-8 py-5',\n text: 'text-xl',\n control: 'px-5 py-2.5 text-xl',\n gap: 'gap-4',\n select: 'px-5 py-2.5 text-xl',\n input: 'px-5 py-2.5 text-xl w-28',\n },\n } as const\n\n const totalPages =\n pagination && pagination.total && pageSize\n ? Math.max(1, Math.ceil(pagination.total / pageSize))\n : 1\n\n const getTableStyles = () => ({\n backgroundColor:\n variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n borderColor:\n variant === 'outline'\n ? 'var(--lm-border-strong)'\n : bordered\n ? 'var(--lm-border-default)'\n : 'transparent',\n })\n\n const getHeaderStyles = () => ({\n backgroundColor: variant === 'minimal' ? 'transparent' : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: variant === 'outline' ? 'var(--lm-border-strong)' : 'var(--lm-border-light)',\n })\n\n const getCellStyles = (isHeader = false) => ({\n backgroundColor: isHeader\n ? variant === 'minimal'\n ? 'transparent'\n : 'var(--lm-bg-paper)'\n : variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor:\n variant === 'outline'\n ? 'var(--lm-border-strong)'\n : variant === 'minimal'\n ? 'transparent'\n : 'var(--lm-border-light)',\n })\n\n const getRowStyles = (index: number, isSelected = false) => {\n const baseStyles = {\n backgroundColor: isSelected\n ? 'var(--lm-primary-50)'\n : (striped || variant === 'zebra') && index % 2 === 1\n ? 'var(--lm-bg-paper)'\n : variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n }\n\n if (isSelected) {\n return {\n ...baseStyles,\n borderColor: 'var(--lm-primary-200)',\n }\n }\n\n return baseStyles\n }\n\n const getPaginationStyles = () => ({\n backgroundColor:\n variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: variant === 'outline' ? 'var(--lm-border-strong)' : 'var(--lm-border-default)',\n boxShadow: variant === 'elevated' ? 'var(--lm-shadow-md)' : undefined,\n })\n\n const getButtonStyles = (disabled = false, active = false) => {\n if (disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n borderColor: 'var(--lm-border-light)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n\n if (active) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'var(--lm-primary-500)',\n }\n }\n\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }\n }\n\n const getLoadingStyles = () => ({\n color: 'var(--lm-text-secondary)',\n })\n\n const getEmptyStyles = () => ({\n color: 'var(--lm-text-secondary)',\n })\n\n const tableClassName = `w-full ${SIZE_TEXT_CLASSES[size]} border-collapse ${className}`\n .trim()\n .replace(/\\s+/g, ' ')\n\n const isAllSelected = dataSource.length > 0 && selectedRowKeys.length === dataSource.length\n\n const isIndeterminate =\n selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length\n\n const rootClassName = `space-y-4 ${fullHeight ? 'h-full flex flex-col min-h-0' : ''}`\n .trim()\n .replace(/\\s+/g, ' ')\n\n const tableContainerClassName = `${\n fullHeight\n ? 'flex-1 min-h-0 overflow-auto'\n : `overflow-auto ${loadMore?.enabled ? 'max-h-96' : ''}`\n }`\n .trim()\n .replace(/\\s+/g, ' ')\n\n const wrapperVariantClasses = (() => {\n switch (variant) {\n case 'elevated':\n return 'rounded-2xl border shadow-lg'\n case 'outline':\n return 'rounded-xl border'\n case 'soft':\n return 'rounded-xl border'\n case 'minimal':\n return 'rounded-xl'\n case 'zebra':\n return 'rounded-xl border'\n default:\n return ''\n }\n })()\n\n return (\n <div className={rootClassName}>\n <div\n ref={containerRef}\n className={`${tableContainerClassName} ${wrapperVariantClasses}`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n <table className={tableClassName} style={getTableStyles()}>\n <thead className=\"sticky top-0 z-20\" style={getHeaderStyles()}>\n <tr>\n {selectable && (\n <th\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} py-3 ${SIZE_TEXT_CLASSES[size]} text-left ${bordered ? 'border-r' : ''} font-semibold`}\n style={getCellStyles(true)}\n >\n <input\n type=\"checkbox\"\n checked={isAllSelected}\n ref={(input) => {\n if (input) input.indeterminate = isIndeterminate\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className=\"w-4 h-4\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n />\n </th>\n )}\n {columns.map((column) => (\n <th\n key={column.dataIndex}\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} py-3 text-left ${bordered ? 'border-r' : ''} ${\n column.sorter ? 'cursor-pointer hover:bg-opacity-60' : ''\n } font-semibold`}\n style={{\n ...getCellStyles(true),\n width: column.width,\n textAlign: column.align || 'left',\n fontSize:\n size === 'xs'\n ? '0.8125rem'\n : size === 'sm'\n ? '0.875rem'\n : '0.9375rem',\n }}\n onClick={() => handleSort(column)}\n >\n <div className=\"flex items-center gap-2\">\n <span>{column.title}</span>\n {column.sorter && (\n <div className=\"flex flex-col -space-y-1\">\n <CaretUpIcon\n active={sortField === column.dataIndex && sortOrder === 'ascend'}\n />\n <CaretDownIcon\n active={sortField === column.dataIndex && sortOrder === 'descend'}\n />\n </div>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {loading ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className={`px-4 py-8 text-center ${SIZE_TEXT_CLASSES[size]}`}\n style={getLoadingStyles()}\n >\n <div className=\"flex items-center justify-center gap-2\">\n <SpinnerIcon />\n Loading...\n </div>\n </td>\n </tr>\n ) : dataSource.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className={`px-4 py-8 text-center ${SIZE_TEXT_CLASSES[size]}`}\n style={getEmptyStyles()}\n >\n {emptyText}\n </td>\n </tr>\n ) : (\n dataSource.map((record, index) => {\n const key = getRowKey(record, index)\n const isSelected = selectedRowKeys.includes(key)\n const isLastRow = index === dataSource.length - 1\n\n return (\n <tr\n key={key}\n className={`${onRowClick ? 'cursor-pointer hover:bg-opacity-60' : ''} transition-colors border-t ${isLastRow ? 'border-b' : ''}`}\n style={{\n ...getRowStyles(index, isSelected),\n borderColor: 'var(--lm-border-light)',\n }}\n onClick={() => onRowClick?.(record, index)}\n >\n {selectable && (\n <td\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} ${SIZE_TEXT_CLASSES[size]} ${bordered ? 'border-r' : ''}`}\n style={getCellStyles()}\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n className=\"w-4 h-4\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n />\n </td>\n )}\n {columns.map((column) => (\n <td\n key={column.dataIndex}\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} ${SIZE_TEXT_CLASSES[size]} ${bordered ? 'border-r' : ''}`}\n style={{\n ...getCellStyles(),\n textAlign: column.align || 'left',\n }}\n >\n {column.render\n ? column.render(\n getValueByDataIndex(record, column.dataIndex),\n record,\n index\n )\n : String(getValueByDataIndex(record, column.dataIndex) ?? '')}\n </td>\n ))}\n </tr>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination?.showPagination && (\n <div\n className={`flex items-center justify-between ${paginationUiClasses[size].container} rounded-2xl border`}\n style={getPaginationStyles()}\n >\n {(() => {\n const maxButtons = 5\n const half = Math.floor(maxButtons / 2)\n let start = Math.max(1, currentPage - half)\n const end = Math.min(totalPages, start + maxButtons - 1)\n if (end - start + 1 < maxButtons) {\n start = Math.max(1, end - maxButtons + 1)\n }\n const pageNumbers = Array.from({ length: end - start + 1 }, (_, i) => start + i)\n\n return (\n <>\n <div className=\"flex items-center gap-4\">\n {pagination.showTotal && (\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Total {pagination.total} items / {totalPages} pages\n </span>\n )}\n {pagination.showSizeChanger && (\n <div className=\"flex items-center gap-2\">\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Show:\n </span>\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n className={`${paginationUiClasses[size].select} border rounded-lg focus:ring-2 focus:ring-primary-400 focus:outline-none`}\n style={{\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n >\n {pagination.pageSizeOptions?.map((s) => (\n <option key={s} value={s}>\n {s} / page\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n <div className={`flex items-center ${paginationUiClasses[size].gap}`}>\n <button\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors`}\n style={getButtonStyles(currentPage <= 1)}\n aria-label=\"Previous page\"\n title=\"Previous page\"\n >\n <ChevronLeftIcon />\n </button>\n\n {pageNumbers.map((page) => (\n <button\n key={page}\n onClick={() => handlePageChange(page)}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors ${currentPage === page ? 'font-medium' : ''}`}\n style={getButtonStyles(false, currentPage === page)}\n >\n {page}\n </button>\n ))}\n\n <button\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors`}\n style={getButtonStyles(currentPage >= totalPages)}\n aria-label=\"Next page\"\n title=\"Next page\"\n >\n <ChevronRightIcon />\n </button>\n\n {pagination.showQuickJumper && (\n <div className={`flex items-center ${paginationUiClasses[size].gap} ml-4`}>\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Go to:\n </span>\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n className={`${paginationUiClasses[size].input} border rounded-lg focus:ring-2 focus:ring-primary-400 focus:outline-none`}\n style={{\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const page = Number(e.currentTarget.value)\n if (page >= 1 && page <= totalPages) {\n handlePageChange(page)\n }\n }\n }}\n />\n </div>\n )}\n </div>\n </>\n )\n })()}\n </div>\n )}\n\n {loadMore?.enabled && loadMore.hasMore && (\n <div className=\"text-center py-4\">\n <button\n onClick={loadMore.onLoadMore}\n disabled={loadMore.loading}\n className=\"px-6 py-2 text-sm border rounded-2xl transition-colors\"\n style={getButtonStyles(loadMore.loading)}\n >\n {loadMore.loading ? (\n <div className=\"flex items-center gap-2\">\n <SpinnerIcon />\n Loading...\n </div>\n ) : (\n 'Load more'\n )}\n </button>\n </div>\n )}\n </div>\n )\n}\n\nexport default memo(LMTable) as typeof LMTable\n","import React, { useEffect, useMemo, useState, useCallback } from 'react'\n\nexport type LMMessageType = 'success' | 'error' | 'warning' | 'info'\n\nexport interface LMMessageItem {\n id: string\n type: LMMessageType\n title?: string\n content: string\n duration?: number\n}\n\nexport interface LMMessageProps {\n id: string\n type: LMMessageType\n title?: string\n content: string\n /** Auto close duration in ms, 0 means no auto close */\n duration?: number\n onClose: (id: string) => void\n}\n\ninterface Tone {\n accent: string\n background: string\n text: string\n title: string\n}\n\nconst ICONS: Record<LMMessageType, React.ReactNode> = {\n success: (\n <svg viewBox=\"0 0 24 24\" className=\"h-5 w-5\" aria-hidden=\"true\">\n <path\n d=\"M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20Z\"\n fill=\"currentColor\"\n opacity=\"0.15\"\n />\n <path\n d=\"M16.7 9.3a1 1 0 0 0-1.4-1.4L11 12.2 8.7 9.9a1 1 0 1 0-1.4 1.4l3 3a1 1 0 0 0 1.4 0l5-5Z\"\n fill=\"currentColor\"\n />\n </svg>\n ),\n error: (\n <svg viewBox=\"0 0 24 24\" className=\"h-5 w-5\" aria-hidden=\"true\">\n <path\n d=\"M12 22c5.5 0 10-4.5 10-10S17.5 2 12 2 2 6.5 2 12s4.5 10 10 10Z\"\n fill=\"currentColor\"\n opacity=\"0.15\"\n />\n <path\n d=\"M15.5 8.5l-7 7M8.5 8.5l7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 24 24\" className=\"h-5 w-5\" aria-hidden=\"true\">\n <path\n d=\"M12.9 4.5c-.4-.7-1.4-.7-1.8 0L3.5 18a1 1 0 0 0 .9 1.5h15.2a1 1 0 0 0 .9-1.5l-7.6-13.5Z\"\n fill=\"currentColor\"\n opacity=\"0.15\"\n />\n <path d=\"M12 9v5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16.5\" r=\"1\" fill=\"currentColor\" />\n </svg>\n ),\n info: (\n <svg viewBox=\"0 0 24 24\" className=\"h-5 w-5\" aria-hidden=\"true\">\n <path\n d=\"M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20Z\"\n fill=\"currentColor\"\n opacity=\"0.15\"\n />\n <path\n d=\"M12 10.5v5M12 7.5h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n ),\n}\n\nconst useTone = (type: LMMessageType): Tone => {\n switch (type) {\n case 'success':\n return {\n accent: 'var(--lm-success-500)',\n background: 'color-mix(in srgb, var(--lm-success-100) 60%, transparent)',\n text: 'var(--lm-success-700)',\n title: 'var(--lm-success-800)',\n }\n case 'error':\n return {\n accent: 'var(--lm-error-500)',\n background: 'color-mix(in srgb, var(--lm-error-100) 60%, transparent)',\n text: 'var(--lm-error-700)',\n title: 'var(--lm-error-800)',\n }\n case 'warning':\n return {\n accent: 'var(--lm-warning-500)',\n background: 'color-mix(in srgb, var(--lm-warning-100) 60%, transparent)',\n text: 'var(--lm-warning-700)',\n title: 'var(--lm-warning-800)',\n }\n case 'info':\n default:\n return {\n accent: 'var(--lm-primary-500)',\n background: 'color-mix(in srgb, var(--lm-primary-100) 60%, transparent)',\n text: 'var(--lm-primary-700)',\n title: 'var(--lm-primary-800)',\n }\n }\n}\n\nconst LMMessage: React.FC<LMMessageProps> = ({ id, type, title, content, duration = 2000, onClose }) => {\n const tone = useTone(type)\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => onClose(id), duration)\n return () => clearTimeout(timer)\n }, [id, duration, onClose])\n\n const icon = useMemo(() => ICONS[type], [type])\n const ariaRole = 'status'\n const ariaLabel = useMemo(() => {\n switch (type) {\n case 'success':\n return 'Success message'\n case 'error':\n return 'Error message'\n case 'warning':\n return 'Warning message'\n default:\n return 'Information message'\n }\n }, [type])\n\n return (\n <div className=\"max-w-sm mx-auto will-change-transform\" role={ariaRole} aria-label={ariaLabel}>\n <div\n className=\"rounded-3xl shadow-lg p-5 mb-3 backdrop-blur-md border transition-all duration-300 ease-out\"\n style={{\n backgroundColor: tone.background,\n borderColor: 'var(--lm-border-light)',\n boxShadow: 'var(--lm-shadow-lg)',\n }}\n >\n <div className=\"flex items-start gap-4\">\n <div\n className=\"mt-0.5 flex h-10 w-10 items-center justify-center rounded-2xl\"\n style={{\n color: tone.accent,\n backgroundColor: 'color-mix(in srgb, currentColor 12%, transparent)',\n }}\n >\n {icon}\n </div>\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h4 className=\"text-sm font-semibold mb-2 truncate\" style={{ color: tone.title }}>\n {title}\n </h4>\n )}\n <p className=\"text-sm leading-relaxed break-words\" style={{ color: tone.text }}>\n {content}\n </p>\n </div>\n\n <button\n onClick={() => onClose(id)}\n aria-label=\"Close message\"\n className=\"flex-shrink-0 p-2 rounded-xl transition-all duration-200 hover:bg-black/5 active:bg-black/10\"\n style={{ color: tone.accent }}\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" aria-hidden=\"true\">\n <path\n d=\"M6 6l12 12M18 6L6 18\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n )\n}\n\nexport interface LMMessageContainerProps {\n /** Messages list */\n messages: LMMessageItem[]\n /** Close callback */\n onClose: (id: string) => void\n /** Position */\n position?: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'\n}\n\nexport const LMMessageContainer: React.FC<LMMessageContainerProps> = ({\n messages,\n onClose,\n position = 'top-right',\n}) => {\n if (messages.length === 0) return null\n\n const positionClasses = {\n 'top-right': 'top-20 right-6',\n 'top-left': 'top-20 left-6',\n 'top-center': 'top-20 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n }\n\n return (\n <div className={`fixed z-50 space-y-3 ${positionClasses[position]}`}>\n {messages.map((message) => (\n <LMMessage key={message.id} {...message} onClose={onClose} />\n ))}\n </div>\n )\n}\n\n// Message manager hook for standalone usage\nexport interface UseMessageReturn {\n messages: LMMessageItem[]\n addMessage: (message: Omit<LMMessageItem, 'id'>) => string\n removeMessage: (id: string) => void\n success: (content: string, title?: string, duration?: number) => string\n error: (content: string, title?: string, duration?: number) => string\n warning: (content: string, title?: string, duration?: number) => string\n info: (content: string, title?: string, duration?: number) => string\n clearAll: () => void\n}\n\nlet messageIdCounter = 0\n\nexport const useMessage = (): UseMessageReturn => {\n const [messages, setMessages] = useState<LMMessageItem[]>([])\n\n const addMessage = useCallback((message: Omit<LMMessageItem, 'id'>) => {\n const id = `lm-message-${++messageIdCounter}`\n setMessages((prev) => [...prev, { ...message, id }])\n return id\n }, [])\n\n const removeMessage = useCallback((id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id))\n }, [])\n\n const success = useCallback(\n (content: string, title?: string, duration?: number) => {\n return addMessage({ type: 'success', content, title, duration })\n },\n [addMessage]\n )\n\n const error = useCallback(\n (content: string, title?: string, duration?: number) => {\n return addMessage({ type: 'error', content, title, duration })\n },\n [addMessage]\n )\n\n const warning = useCallback(\n (content: string, title?: string, duration?: number) => {\n return addMessage({ type: 'warning', content, title, duration })\n },\n [addMessage]\n )\n\n const info = useCallback(\n (content: string, title?: string, duration?: number) => {\n return addMessage({ type: 'info', content, title, duration })\n },\n [addMessage]\n )\n\n const clearAll = useCallback(() => {\n setMessages([])\n }, [])\n\n return {\n messages,\n addMessage,\n removeMessage,\n success,\n error,\n warning,\n info,\n clearAll,\n }\n}\n\nexport default LMMessage\n","import React, { useState, useCallback, useEffect } from 'react'\n\nexport interface LMConfirmProps {\n /** Dialog visible */\n visible: boolean\n /** Dialog title */\n title?: string\n /** Dialog content */\n content: string\n /** Confirm button text */\n confirmText?: string\n /** Cancel button text */\n cancelText?: string\n /** Confirm button style */\n confirmButtonStyle?: 'primary' | 'danger'\n /** Confirm callback */\n onConfirm: () => void\n /** Cancel callback */\n onCancel: () => void\n /** Close on overlay click */\n closeOnOverlayClick?: boolean\n}\n\nconst QuestionIcon: React.FC = () => (\n <svg viewBox=\"0 0 24 24\" className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 17h.01\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst LMConfirm: React.FC<LMConfirmProps> = ({\n visible,\n title = 'Confirm',\n content,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n confirmButtonStyle = 'primary',\n onConfirm,\n onCancel,\n closeOnOverlayClick = true,\n}) => {\n const [isVisible, setIsVisible] = useState(false)\n const [isAnimating, setIsAnimating] = useState(false)\n\n useEffect(() => {\n if (visible) {\n setIsVisible(true)\n requestAnimationFrame(() => {\n setIsAnimating(true)\n })\n } else {\n setIsAnimating(false)\n const timer = setTimeout(() => {\n setIsVisible(false)\n }, 200)\n return () => clearTimeout(timer)\n }\n }, [visible])\n\n const getConfirmButtonStyles = () => {\n switch (confirmButtonStyle) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'var(--lm-text-inverse)',\n }\n case 'danger':\n return {\n backgroundColor: 'var(--lm-error-500)',\n color: 'var(--lm-text-inverse)',\n }\n }\n }\n\n const getConfirmButtonHoverStyles = () => {\n switch (confirmButtonStyle) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-600)',\n }\n case 'danger':\n return {\n backgroundColor: 'var(--lm-error-600)',\n }\n }\n }\n\n const handleOverlayClick = () => {\n if (closeOnOverlayClick) {\n onCancel()\n }\n }\n\n if (!isVisible) return null\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center px-4\">\n {/* Backdrop */}\n <div\n className={`absolute inset-0 backdrop-blur-sm transition-opacity duration-200 ${\n isAnimating ? 'opacity-100' : 'opacity-0'\n }`}\n style={{\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n }}\n onClick={handleOverlayClick}\n />\n\n {/* Dialog */}\n <div\n className={`relative backdrop-blur-xl rounded-3xl shadow-2xl border p-8 max-w-md w-full mx-auto transition-all duration-200 ${\n isAnimating ? 'opacity-100 scale-100' : 'opacity-0 scale-95'\n }`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-xl)',\n }}\n >\n {/* Icon area */}\n <div className=\"text-center mb-6\">\n <div\n className=\"inline-flex items-center justify-center w-16 h-16 rounded-full mb-4\"\n style={{\n backgroundColor: 'var(--lm-gray-100)',\n }}\n >\n <span style={{ color: 'var(--lm-gray-600)' }}>\n <QuestionIcon />\n </span>\n </div>\n\n {/* Title */}\n <h3\n className=\"text-xl font-semibold mb-2\"\n style={{\n color: 'var(--lm-text-primary)',\n }}\n >\n {title}\n </h3>\n\n {/* Content */}\n <p\n className=\"text-sm leading-relaxed\"\n style={{\n color: 'var(--lm-text-secondary)',\n }}\n >\n {content}\n </p>\n </div>\n\n {/* Button area */}\n <div className=\"flex space-x-3\">\n {/* Cancel button */}\n <button\n onClick={onCancel}\n className=\"flex-1 py-3 px-4 font-medium rounded-xl transition-all duration-200 hover:scale-[1.02] active:scale-[0.98]\"\n style={{\n backgroundColor: 'var(--lm-gray-100)',\n color: 'var(--lm-text-primary)',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-gray-200)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--lm-gray-100)'\n }}\n >\n {cancelText}\n </button>\n\n {/* Confirm button */}\n <button\n onClick={onConfirm}\n className=\"flex-1 py-3 px-4 font-medium rounded-xl transition-all duration-200 hover:scale-[1.02] active:scale-[0.98]\"\n style={getConfirmButtonStyles()}\n onMouseEnter={(e) => {\n const hoverStyles = getConfirmButtonHoverStyles()\n e.currentTarget.style.backgroundColor = hoverStyles?.backgroundColor || ''\n }}\n onMouseLeave={(e) => {\n const normalStyles = getConfirmButtonStyles()\n e.currentTarget.style.backgroundColor = normalStyles?.backgroundColor || ''\n }}\n >\n {confirmText}\n </button>\n </div>\n </div>\n </div>\n )\n}\n\n// Hook for using confirm dialog\nexport interface UseConfirmReturn {\n visible: boolean\n config: Omit<LMConfirmProps, 'visible' | 'onConfirm' | 'onCancel'> | null\n confirm: (options: {\n title?: string\n content: string\n confirmText?: string\n cancelText?: string\n confirmButtonStyle?: 'primary' | 'danger'\n }) => Promise<boolean>\n ConfirmDialog: React.FC\n}\n\nexport const useConfirm = (): UseConfirmReturn => {\n const [visible, setVisible] = useState(false)\n const [config, setConfig] = useState<Omit<LMConfirmProps, 'visible' | 'onConfirm' | 'onCancel'> | null>(null)\n const [resolveRef, setResolveRef] = useState<((value: boolean) => void) | null>(null)\n\n const confirm = useCallback((options: {\n title?: string\n content: string\n confirmText?: string\n cancelText?: string\n confirmButtonStyle?: 'primary' | 'danger'\n }): Promise<boolean> => {\n return new Promise((resolve) => {\n setConfig(options)\n setVisible(true)\n setResolveRef(() => resolve)\n })\n }, [])\n\n const handleConfirm = useCallback(() => {\n setVisible(false)\n resolveRef?.(true)\n setResolveRef(null)\n }, [resolveRef])\n\n const handleCancel = useCallback(() => {\n setVisible(false)\n resolveRef?.(false)\n setResolveRef(null)\n }, [resolveRef])\n\n const ConfirmDialog: React.FC = useCallback(() => {\n if (!config) return null\n return (\n <LMConfirm\n visible={visible}\n {...config}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n )\n }, [visible, config, handleConfirm, handleCancel])\n\n return {\n visible,\n config,\n confirm,\n ConfirmDialog,\n }\n}\n\nexport default LMConfirm\n","import React from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMStatCardProps {\n /** Title */\n title: string\n /** Value */\n value: string | number\n /** Description text */\n description?: string\n /** Left icon */\n icon?: React.ReactNode\n /** Trend value (percentage, positive/negative indicates direction; 0 means flat) */\n trend?: number\n /** Trend description text */\n trendText?: string\n /** Visual variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'\n /** Size */\n size?: ComponentSize\n /** Clickable */\n clickable?: boolean\n /** Click event */\n onClick?: () => void\n /** Class name */\n className?: string\n /** Value prefix (e.g., $) */\n prefix?: string\n /** Value suffix (e.g., %, times) */\n suffix?: string\n /** Show border */\n bordered?: boolean\n /** Show shadow */\n shadow?: boolean\n /** Compact mode: uses smaller spacing and fonts when enabled */\n compact?: boolean\n}\n\nconst ArrowUpIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 10V2M6 2l4 4M6 2L2 6\" />\n </svg>\n)\n\nconst ArrowDownIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 2v8M6 10l4-4M6 10l-4-4\" />\n </svg>\n)\n\nconst MinusIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M2 6h8\" />\n </svg>\n)\n\nconst LMStatCard: React.FC<LMStatCardProps> = ({\n title,\n value,\n description,\n icon,\n trend,\n trendText,\n variant = 'default',\n size = 'md',\n clickable = false,\n onClick,\n className = '',\n prefix,\n suffix,\n bordered = true,\n shadow = true,\n compact = false,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const iconSizeClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n '2xl': 'w-12 h-12',\n }\n : {\n xs: 'w-5 h-5',\n sm: 'w-6 h-6',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-14 h-14',\n '2xl': 'w-16 h-16',\n }\n\n const titleTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n '2xl': 'text-xl',\n }\n\n const metaTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-[10px]',\n lg: 'text-[10px]',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n\n const descriptionTextClasses: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-xs',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n\n const valueTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-sm',\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n xl: 'text-2xl',\n '2xl': 'text-3xl',\n }\n : {\n xs: 'text-lg',\n sm: 'text-xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n xl: 'text-5xl',\n '2xl': 'text-6xl',\n }\n\n const roundedClasses = 'rounded-2xl'\n const borderClasses = bordered ? 'border' : ''\n const shadowClasses = shadow ? 'shadow-sm' : ''\n const clickableClasses = clickable ? 'cursor-pointer transition-transform hover:scale-105' : ''\n\n const baseClassName = `\n ${SIZE_PADDING_CLASSES[resolvedSize]} ${roundedClasses} ${borderClasses} ${shadowClasses} ${clickableClasses}\n backdrop-blur-md transition-all duration-300\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getCardStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n } as React.CSSProperties\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-200)',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-50)',\n borderColor: 'var(--lm-success-200)',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-50)',\n borderColor: 'var(--lm-warning-200)',\n }\n case 'error':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-50)',\n borderColor: 'var(--lm-error-200)',\n }\n case 'info':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-gray-50)',\n borderColor: 'var(--lm-gray-200)',\n }\n default:\n return baseStyles\n }\n }\n\n const getHoverStyles = () => {\n if (!clickable) return {}\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-100)',\n borderColor: 'var(--lm-primary-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'success':\n return {\n backgroundColor: 'var(--lm-success-100)',\n borderColor: 'var(--lm-success-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'warning':\n return {\n backgroundColor: 'var(--lm-warning-100)',\n borderColor: 'var(--lm-warning-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'error':\n return {\n backgroundColor: 'var(--lm-error-100)',\n borderColor: 'var(--lm-error-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'info':\n return {\n backgroundColor: 'var(--lm-gray-100)',\n borderColor: 'var(--lm-gray-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n }\n }\n\n const getIconStyles = () => {\n switch (variant) {\n case 'primary':\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-primary-100)',\n }\n case 'success':\n return {\n color: 'var(--lm-success-600)',\n backgroundColor: 'var(--lm-success-100)',\n }\n case 'warning':\n return {\n color: 'var(--lm-warning-600)',\n backgroundColor: 'var(--lm-warning-100)',\n }\n case 'error':\n return {\n color: 'var(--lm-error-600)',\n backgroundColor: 'var(--lm-error-100)',\n }\n case 'info':\n return {\n color: 'var(--lm-gray-600)',\n backgroundColor: 'var(--lm-gray-100)',\n }\n default:\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-bg-paper)',\n }\n }\n }\n\n const getValueStyles = () => {\n switch (variant) {\n case 'primary':\n return { color: 'var(--lm-primary-700)' }\n case 'success':\n return { color: 'var(--lm-success-700)' }\n case 'warning':\n return { color: 'var(--lm-warning-700)' }\n case 'error':\n return { color: 'var(--lm-error-700)' }\n case 'info':\n return { color: 'var(--lm-gray-700)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n const getTrendStyles = () => {\n if (trend == null) return {}\n if (trend > 0) return { color: 'var(--lm-success-600)' }\n if (trend < 0) return { color: 'var(--lm-error-600)' }\n return { color: 'var(--lm-text-secondary)' }\n }\n\n const getTrendIcon = () => {\n if (trend == null) return null\n if (trend > 0) return <ArrowUpIcon />\n if (trend < 0) return <ArrowDownIcon />\n return <MinusIcon />\n }\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (e) => {\n if (!clickable) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.()\n }\n }\n\n return (\n <div\n className={baseClassName}\n style={getCardStyles()}\n onClick={clickable ? onClick : undefined}\n onKeyDown={handleKeyDown}\n onMouseEnter={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getHoverStyles())\n }}\n onMouseLeave={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getCardStyles())\n }}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={clickable ? title : undefined}\n >\n <div className=\"flex items-start justify-between overflow-hidden\">\n <div className=\"flex-1 min-w-0\">\n {/* Title and icon */}\n <div className=\"flex items-center gap-2 mb-2 min-w-0\">\n {icon && (\n <div\n className={`${iconSizeClasses[resolvedSize]} rounded-lg flex items-center justify-center flex-shrink-0`}\n style={getIconStyles()}\n >\n {icon}\n </div>\n )}\n <h3\n className={`${titleTextClasses[resolvedSize]} font-medium truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={title}\n >\n {title}\n </h3>\n </div>\n\n {/* Value area (prefix/suffix) */}\n <div\n className={`flex items-baseline ${SIZE_GAP_CLASSES[resolvedSize]} min-w-0 overflow-hidden w-full`}\n >\n {prefix && (\n <span\n className={`${metaTextClasses[resolvedSize]} flex-shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {prefix}\n </span>\n )}\n <span\n className={`font-bold ${valueTextClasses[resolvedSize]} overflow-hidden`}\n style={getValueStyles()}\n >\n {value}\n </span>\n {suffix && (\n <span\n className={`${metaTextClasses[resolvedSize]} flex-shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {suffix}\n </span>\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p\n className={`${descriptionTextClasses[resolvedSize]} mt-1 truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={description}\n >\n {description}\n </p>\n )}\n\n {/* Trend area */}\n {(trend != null || trendText) && (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} mt-2`}>\n {trend != null && (\n <div className=\"flex items-center gap-1\" style={getTrendStyles()}>\n {getTrendIcon()}\n <span className=\"text-sm font-medium\">{Math.abs(trend)}%</span>\n </div>\n )}\n {trendText && (\n <span className=\"text-sm\" style={{ color: 'var(--lm-text-secondary)' }}>\n {trendText}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default LMStatCard\n","/**\n * Utility for merging class names\n * Simple implementation without external dependencies\n */\n\ntype ClassValue = string | undefined | null | false | ClassValue[]\n\nexport function cn(...inputs: ClassValue[]): string {\n return inputs\n .flat()\n .filter((x): x is string => typeof x === 'string' && x.length > 0)\n .join(' ')\n}\n"],"names":["LMButton","jsxs","jsx","Fragment","memo","useRef","sizeConfig","useState","useEffect","useCallback","createPortal","useId","useMemo"],"mappings":"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"}