@ryanhe919/lumen-ui 0.2.0 → 0.2.1

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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/components/LMCard/LMCard.tsx","../src/components/LMEmpty/LMEmpty.tsx","../src/components/LMPagination/LMPagination.tsx","../src/components/LMDropdown/LMDropdown.tsx","../src/components/LMTabs/LMTabs.tsx","../src/components/LMDrawer/LMDrawer.tsx","../src/components/LMMenu/LMMenu.tsx","../src/components/LMDatePicker/LMDatePicker.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","import React, { useState } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Card title */\n title?: React.ReactNode\n /** Extra content in the top-right corner */\n extra?: React.ReactNode\n /** Card content */\n children: React.ReactNode\n /** Card size */\n size?: ComponentSize\n /** Show border */\n bordered?: boolean\n /** Hoverable effect */\n hoverable?: boolean\n /** Loading state - shows skeleton */\n loading?: boolean\n /** Cover image at top */\n cover?: React.ReactNode\n /** Actions at bottom */\n actions?: React.ReactNode[]\n /** Visual variant */\n variant?: 'default' | 'elevated' | 'outline' | 'soft'\n /** Custom class name */\n className?: string\n}\n\nconst LMCard: React.FC<LMCardProps> = ({\n title,\n extra,\n children,\n size = 'md',\n bordered = true,\n hoverable = false,\n loading = false,\n cover,\n actions,\n variant = 'default',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [isHovered, setIsHovered] = useState(false)\n\n const titleTextClasses: Record<ComponentSize, string> = {\n xs: 'text-sm',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n }\n\n const roundedClasses = 'rounded-2xl'\n const borderClasses = bordered ? 'border' : ''\n const hoverableClasses = hoverable ? 'cursor-pointer transition-all duration-300' : ''\n\n const baseClassName = `\n ${roundedClasses} ${borderClasses} ${hoverableClasses}\n backdrop-blur-md transition-all duration-300 overflow-hidden\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getCardStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseStyles,\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'none',\n }\n case 'soft':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n boxShadow: 'none',\n }\n default:\n return baseStyles\n }\n }\n\n const getHoverStyles = (): React.CSSProperties => {\n if (!hoverable) return {}\n\n const baseHover: React.CSSProperties = {\n boxShadow: 'var(--lm-shadow-lg)',\n borderColor: 'var(--lm-border-strong)',\n transform: 'translateY(-2px)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseHover,\n boxShadow: 'var(--lm-shadow-xl)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'soft':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return baseHover\n }\n }\n\n const currentStyles = isHovered && hoverable ? { ...getCardStyles(), ...getHoverStyles() } : getCardStyles()\n\n // Loading skeleton\n const renderSkeleton = () => (\n <div className=\"animate-pulse\">\n {title && (\n <div className=\"mb-4\">\n <div\n className=\"h-4 rounded w-1/3\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n )}\n <div className=\"space-y-3\">\n <div\n className=\"h-4 rounded w-full\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-5/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-4/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n </div>\n )\n\n // Header section\n const renderHeader = () => {\n if (!title && !extra) return null\n\n return (\n <div\n className={`flex items-center justify-between ${SIZE_GAP_CLASSES[resolvedSize]} border-b`}\n style={{\n borderColor: 'var(--lm-border-light)',\n padding: `${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[0].replace('px-', '')}rem ${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[1]?.replace('py-', '') || '1'}rem`,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n paddingTop: '0.75rem',\n paddingBottom: '0.75rem',\n }}\n >\n {title && (\n <div\n className={`${titleTextClasses[resolvedSize]} font-semibold`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </div>\n )}\n {extra && (\n <div\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {extra}\n </div>\n )}\n </div>\n )\n }\n\n // Actions section\n const renderActions = () => {\n if (!actions || actions.length === 0) return null\n\n return (\n <div\n className=\"flex items-center border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n >\n {actions.map((action, index) => (\n <div\n key={index}\n className={`flex-1 flex items-center justify-center py-3 transition-colors duration-200 hover:bg-[var(--lm-bg-hover)] ${\n index !== actions.length - 1 ? 'border-r' : ''\n }`}\n style={{\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-secondary)',\n }}\n >\n {action}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={baseClassName}\n style={currentStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...rest}\n >\n {/* Cover image */}\n {cover && (\n <div className=\"w-full overflow-hidden\">\n {cover}\n </div>\n )}\n\n {/* Header */}\n {renderHeader()}\n\n {/* Body */}\n <div className={SIZE_PADDING_CLASSES[resolvedSize]}>\n {loading ? renderSkeleton() : children}\n </div>\n\n {/* Actions */}\n {renderActions()}\n </div>\n )\n}\n\nexport default LMCard\n","import React from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMEmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Custom image or preset type */\n image?: React.ReactNode | 'default' | 'simple'\n /** Custom image style */\n imageStyle?: React.CSSProperties\n /** Description text */\n description?: React.ReactNode\n /** Actions or extra content below description */\n children?: React.ReactNode\n /** Component size */\n size?: ComponentSize\n}\n\n/** Default empty illustration */\nconst DefaultImage: React.FC<{ size: ComponentSize }> = ({ size }) => {\n const sizeMap: Record<ComponentSize, number> = {\n xs: 64,\n sm: 80,\n md: 100,\n lg: 120,\n xl: 140,\n '2xl': 160,\n }\n const dimension = sizeMap[size]\n\n return (\n <svg\n width={dimension}\n height={dimension}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Box base */}\n <path\n d=\"M20 40L50 25L80 40V70L50 85L20 70V40Z\"\n fill=\"var(--lm-bg-paper)\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Box lid */}\n <path\n d=\"M20 40L50 55L80 40\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Center line */}\n <path\n d=\"M50 55V85\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Decorative circles */}\n <circle cx=\"35\" cy=\"20\" r=\"3\" fill=\"var(--lm-border-light)\" />\n <circle cx=\"65\" cy=\"18\" r=\"2\" fill=\"var(--lm-border-light)\" />\n <circle cx=\"75\" cy=\"28\" r=\"2.5\" fill=\"var(--lm-border-light)\" />\n </svg>\n )\n}\n\n/** Simple empty illustration */\nconst SimpleImage: React.FC<{ size: ComponentSize }> = ({ size }) => {\n const sizeMap: Record<ComponentSize, number> = {\n xs: 48,\n sm: 56,\n md: 64,\n lg: 72,\n xl: 80,\n '2xl': 88,\n }\n const dimension = sizeMap[size]\n\n return (\n <svg\n width={dimension}\n height={dimension}\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Simple file icon */}\n <rect\n x=\"16\"\n y=\"8\"\n width=\"32\"\n height=\"48\"\n rx=\"4\"\n fill=\"var(--lm-bg-paper)\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Lines */}\n <line\n x1=\"24\"\n y1=\"24\"\n x2=\"40\"\n y2=\"24\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"32\"\n x2=\"40\"\n y2=\"32\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"40\"\n x2=\"32\"\n y2=\"40\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\nconst LMEmpty: React.FC<LMEmptyProps> = ({\n image = 'default',\n imageStyle,\n description = '暂无数据',\n children,\n size = 'md',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const descriptionTextClasses: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n\n const paddingClasses: Record<ComponentSize, string> = {\n xs: 'py-4',\n sm: 'py-6',\n md: 'py-8',\n lg: 'py-10',\n xl: 'py-12',\n '2xl': 'py-16',\n }\n\n const baseClassName = `\n flex flex-col items-center justify-center\n ${paddingClasses[resolvedSize]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const renderImage = () => {\n if (image === 'default') {\n return <DefaultImage size={resolvedSize} />\n }\n if (image === 'simple') {\n return <SimpleImage size={resolvedSize} />\n }\n return image\n }\n\n return (\n <div className={baseClassName} {...rest}>\n {/* Image */}\n {image && (\n <div\n className={`mb-4 ${SIZE_GAP_CLASSES[resolvedSize]}`}\n style={imageStyle}\n >\n {renderImage()}\n </div>\n )}\n\n {/* Description */}\n {description && (\n <p\n className={`${descriptionTextClasses[resolvedSize]} text-center`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {description}\n </p>\n )}\n\n {/* Actions */}\n {children && (\n <div className={`mt-4 ${SIZE_GAP_CLASSES[resolvedSize]}`}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nexport default LMEmpty\n","import React, { useState, useCallback, useMemo } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMPaginationProps {\n /** Current page number */\n current: number\n /** Total number of items */\n total: number\n /** Number of items per page */\n pageSize?: number\n /** Page size options */\n pageSizeOptions?: number[]\n /** Show quick jumper */\n showQuickJumper?: boolean\n /** Show page size changer */\n showSizeChanger?: boolean\n /** Show total count */\n showTotal?: boolean | ((total: number, range: [number, number]) => React.ReactNode)\n /** Component size */\n size?: ComponentSize\n /** Simple mode - only shows prev/next */\n simple?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Change handler */\n onChange?: (page: number, pageSize: number) => void\n /** Custom class name */\n className?: string\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 MoreIcon: 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=\"M5 12h.01M12 12h.01M19 12h.01\" />\n </svg>\n)\n\nconst LMPagination: React.FC<LMPaginationProps> = ({\n current,\n total,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n showQuickJumper = false,\n showSizeChanger = false,\n showTotal = false,\n size = 'md',\n simple = false,\n disabled = false,\n onChange,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [jumpValue, setJumpValue] = useState('')\n const [internalPageSize, setInternalPageSize] = useState(pageSize)\n\n const totalPages = Math.ceil(total / internalPageSize)\n\n const buttonSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-7 h-7 text-sm',\n md: 'w-8 h-8 text-sm',\n lg: 'w-9 h-9 text-base',\n xl: 'w-10 h-10 text-base',\n '2xl': 'w-12 h-12 text-lg',\n }\n\n const inputSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-10 h-6 text-xs px-1',\n sm: 'w-12 h-7 text-sm px-1',\n md: 'w-14 h-8 text-sm px-2',\n lg: 'w-16 h-9 text-base px-2',\n xl: 'w-18 h-10 text-base px-2',\n '2xl': 'w-20 h-12 text-lg px-3',\n }\n\n const handlePageChange = useCallback((page: number) => {\n if (disabled || page < 1 || page > totalPages || page === current) return\n onChange?.(page, internalPageSize)\n }, [disabled, totalPages, current, onChange, internalPageSize])\n\n const handlePageSizeChange = useCallback((newSize: number) => {\n setInternalPageSize(newSize)\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = Math.min(current, newTotalPages)\n onChange?.(newCurrent, newSize)\n }, [total, current, onChange])\n\n const handleJump = useCallback(() => {\n const page = parseInt(jumpValue, 10)\n if (!isNaN(page) && page >= 1 && page <= totalPages) {\n handlePageChange(page)\n }\n setJumpValue('')\n }, [jumpValue, totalPages, handlePageChange])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n handleJump()\n }\n }, [handleJump])\n\n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const pages: (number | 'prev-more' | 'next-more')[] = []\n const showPrevMore = current > 4\n const showNextMore = current < totalPages - 3\n\n if (totalPages <= 7) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n\n if (showPrevMore) {\n pages.push('prev-more')\n }\n\n const start = showPrevMore ? Math.max(2, current - 1) : 2\n const end = showNextMore ? Math.min(totalPages - 1, current + 1) : totalPages - 1\n\n for (let i = start; i <= end; i++) {\n if (i > 1 && i < totalPages) {\n pages.push(i)\n }\n }\n\n if (showNextMore) {\n pages.push('next-more')\n }\n\n if (totalPages > 1) {\n pages.push(totalPages)\n }\n }\n\n return pages\n }, [current, totalPages])\n\n const getButtonStyles = (isActive: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled) {\n return {\n backgroundColor: 'transparent',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n if (isActive) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'var(--lm-primary-500)',\n }\n }\n return {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }\n }\n\n const getButtonHoverStyles = (): React.CSSProperties => ({\n backgroundColor: 'var(--lm-bg-hover)',\n borderColor: 'var(--lm-primary-400)',\n color: 'var(--lm-primary-600)',\n })\n\n const range: [number, number] = [\n Math.min((current - 1) * internalPageSize + 1, total),\n Math.min(current * internalPageSize, total),\n ]\n\n // Simple mode\n if (simple) {\n return (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} ${className}`}>\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current <= 1)}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current <= 1}\n onMouseEnter={(e) => {\n if (!disabled && current > 1) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current <= 1))\n }}\n >\n <ChevronLeftIcon />\n </button>\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {current} / {totalPages}\n </span>\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current >= totalPages)}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current >= totalPages}\n onMouseEnter={(e) => {\n if (!disabled && current < totalPages) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current >= totalPages))\n }}\n >\n <ChevronRightIcon />\n </button>\n </div>\n )\n }\n\n return (\n <div className={`flex items-center flex-wrap ${SIZE_GAP_CLASSES[resolvedSize]} ${className}`}>\n {/* Total count */}\n {showTotal && (\n <span\n className={`${SIZE_TEXT_CLASSES[resolvedSize]} mr-2`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {typeof showTotal === 'function'\n ? showTotal(total, range)\n : `共 ${total} 条`}\n </span>\n )}\n\n {/* Previous button */}\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current <= 1)}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current <= 1}\n aria-label=\"上一页\"\n onMouseEnter={(e) => {\n if (!disabled && current > 1) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current <= 1))\n }}\n >\n <ChevronLeftIcon />\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) => {\n if (page === 'prev-more' || page === 'next-more') {\n return (\n <button\n key={`more-${index}`}\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg flex items-center justify-center`}\n style={{ color: 'var(--lm-text-secondary)' }}\n onClick={() => handlePageChange(page === 'prev-more' ? current - 5 : current + 5)}\n disabled={disabled}\n >\n <MoreIcon />\n </button>\n )\n }\n\n const isActive = page === current\n return (\n <button\n key={page}\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(isActive, disabled)}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n aria-current={isActive ? 'page' : undefined}\n onMouseEnter={(e) => {\n if (!disabled && !isActive) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(isActive, disabled))\n }}\n >\n {page}\n </button>\n )\n })}\n\n {/* Next button */}\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current >= totalPages)}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current >= totalPages}\n aria-label=\"下一页\"\n onMouseEnter={(e) => {\n if (!disabled && current < totalPages) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current >= totalPages))\n }}\n >\n <ChevronRightIcon />\n </button>\n\n {/* Page size changer */}\n {showSizeChanger && (\n <select\n className={`${inputSizeClasses[resolvedSize]} rounded-lg border outline-none transition-all duration-200`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n value={internalPageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option} 条/页\n </option>\n ))}\n </select>\n )}\n\n {/* Quick jumper */}\n {showQuickJumper && (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]}`}>\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n 跳至\n </span>\n <input\n type=\"text\"\n className={`${inputSizeClasses[resolvedSize]} rounded-lg border outline-none text-center transition-all duration-200`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n value={jumpValue}\n onChange={(e) => setJumpValue(e.target.value.replace(/\\D/g, ''))}\n onBlur={handleJump}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n 页\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport default LMPagination\n","import React, { useState, useRef, useEffect, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMDropdownMenuItem {\n /** Unique key */\n key: string\n /** Menu item label */\n label: React.ReactNode\n /** Icon before label */\n icon?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Danger style (red) */\n danger?: boolean\n /** Show as divider */\n divider?: boolean\n}\n\nexport interface LMDropdownProps {\n /** Trigger type */\n trigger?: 'click' | 'hover' | 'contextMenu'\n /** Menu items */\n menu: LMDropdownMenuItem[]\n /** Dropdown placement */\n placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight'\n /** Disabled state */\n disabled?: boolean\n /** Component size */\n size?: ComponentSize\n /** Trigger element */\n children: React.ReactNode\n /** Selection callback */\n onSelect?: (key: string) => void\n /** Visibility change callback */\n onVisibleChange?: (visible: boolean) => void\n /** Custom class name */\n className?: string\n}\n\nconst LMDropdown: React.FC<LMDropdownProps> = ({\n trigger = 'click',\n menu,\n placement = 'bottomLeft',\n disabled = false,\n size = 'md',\n children,\n onSelect,\n onVisibleChange,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const hoverTimeoutRef = useRef<number | null>(null)\n\n const itemPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-2.5 py-1.5',\n md: 'px-3 py-2',\n lg: 'px-4 py-2.5',\n xl: 'px-5 py-3',\n '2xl': 'px-6 py-4',\n }\n\n const minWidthClasses: Record<ComponentSize, string> = {\n xs: 'min-w-[100px]',\n sm: 'min-w-[120px]',\n md: 'min-w-[140px]',\n lg: 'min-w-[160px]',\n xl: 'min-w-[180px]',\n '2xl': 'min-w-[200px]',\n }\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !dropdownRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const dropdownRect = dropdownRef.current.getBoundingClientRect()\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n\n let top = 0\n let left = 0\n\n switch (placement) {\n case 'bottomLeft':\n top = triggerRect.bottom + scrollY + 4\n left = triggerRect.left + scrollX\n break\n case 'bottomRight':\n top = triggerRect.bottom + scrollY + 4\n left = triggerRect.right + scrollX - dropdownRect.width\n break\n case 'topLeft':\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n left = triggerRect.left + scrollX\n break\n case 'topRight':\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n left = triggerRect.right + scrollX - dropdownRect.width\n break\n }\n\n // Boundary check\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n if (left + dropdownRect.width > viewportWidth + scrollX) {\n left = viewportWidth + scrollX - dropdownRect.width - 8\n }\n if (left < scrollX) {\n left = scrollX + 8\n }\n if (top + dropdownRect.height > viewportHeight + scrollY) {\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n }\n if (top < scrollY) {\n top = triggerRect.bottom + scrollY + 4\n }\n\n setPosition({ top, left })\n }, [placement])\n\n const show = useCallback(() => {\n if (disabled) return\n setVisible(true)\n onVisibleChange?.(true)\n }, [disabled, onVisibleChange])\n\n const hide = useCallback(() => {\n setVisible(false)\n onVisibleChange?.(false)\n }, [onVisibleChange])\n\n const toggle = useCallback(() => {\n if (visible) {\n hide()\n } else {\n show()\n }\n }, [visible, show, hide])\n\n // Handle click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(e.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n hide()\n }\n }\n\n if (visible) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [visible, hide])\n\n // Update position when visible\n useEffect(() => {\n if (visible) {\n updatePosition()\n }\n }, [visible, updatePosition])\n\n // Handle scroll and resize\n useEffect(() => {\n if (visible) {\n const handleScrollResize = () => updatePosition()\n window.addEventListener('scroll', handleScrollResize, true)\n window.addEventListener('resize', handleScrollResize)\n return () => {\n window.removeEventListener('scroll', handleScrollResize, true)\n window.removeEventListener('resize', handleScrollResize)\n }\n }\n }, [visible, updatePosition])\n\n const handleTriggerClick = () => {\n if (trigger === 'click') {\n toggle()\n }\n }\n\n const handleTriggerMouseEnter = () => {\n if (trigger === 'hover') {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n show()\n }\n }\n\n const handleTriggerMouseLeave = () => {\n if (trigger === 'hover') {\n hoverTimeoutRef.current = window.setTimeout(() => {\n hide()\n }, 100)\n }\n }\n\n const handleDropdownMouseEnter = () => {\n if (trigger === 'hover' && hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n }\n\n const handleDropdownMouseLeave = () => {\n if (trigger === 'hover') {\n hoverTimeoutRef.current = window.setTimeout(() => {\n hide()\n }, 100)\n }\n }\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (trigger === 'contextMenu') {\n e.preventDefault()\n toggle()\n }\n }\n\n const handleItemClick = (item: LMDropdownMenuItem) => {\n if (item.disabled || item.divider) return\n onSelect?.(item.key)\n hide()\n }\n\n const getItemStyles = (item: LMDropdownMenuItem, isHovered: boolean): React.CSSProperties => {\n if (item.disabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n if (item.danger) {\n return {\n color: isHovered ? 'white' : 'var(--lm-error-600)',\n backgroundColor: isHovered ? 'var(--lm-error-500)' : 'transparent',\n }\n }\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: isHovered ? 'var(--lm-bg-hover)' : 'transparent',\n }\n }\n\n const dropdownContent = visible && (\n <div\n ref={dropdownRef}\n className={`\n ${minWidthClasses[resolvedSize]}\n rounded-xl border backdrop-blur-md\n shadow-lg py-1\n animate-in fade-in-0 zoom-in-95 duration-200\n `}\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 1000,\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n }}\n onMouseEnter={handleDropdownMouseEnter}\n onMouseLeave={handleDropdownMouseLeave}\n >\n {menu.map((item, index) => {\n if (item.divider) {\n return (\n <div\n key={item.key || `divider-${index}`}\n className=\"my-1 mx-2 border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n />\n )\n }\n\n return (\n <MenuItem\n key={item.key}\n item={item}\n size={resolvedSize}\n paddingClass={itemPaddingClasses[resolvedSize]}\n textClass={SIZE_TEXT_CLASSES[resolvedSize]}\n gapClass={SIZE_GAP_CLASSES[resolvedSize]}\n getStyles={getItemStyles}\n onClick={handleItemClick}\n />\n )\n })}\n </div>\n )\n\n return (\n <>\n <div\n ref={triggerRef}\n className={`inline-block ${className}`}\n onClick={handleTriggerClick}\n onMouseEnter={handleTriggerMouseEnter}\n onMouseLeave={handleTriggerMouseLeave}\n onContextMenu={handleContextMenu}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {children}\n </div>\n {typeof document !== 'undefined' && createPortal(dropdownContent, document.body)}\n </>\n )\n}\n\n// Separate MenuItem component for hover state\ninterface MenuItemProps {\n item: LMDropdownMenuItem\n size: ComponentSize\n paddingClass: string\n textClass: string\n gapClass: string\n getStyles: (item: LMDropdownMenuItem, isHovered: boolean) => React.CSSProperties\n onClick: (item: LMDropdownMenuItem) => void\n}\n\nconst MenuItem: React.FC<MenuItemProps> = ({\n item,\n paddingClass,\n textClass,\n gapClass,\n getStyles,\n onClick,\n}) => {\n const [isHovered, setIsHovered] = useState(false)\n\n return (\n <div\n className={`\n ${paddingClass} ${textClass}\n flex items-center ${gapClass}\n transition-colors duration-150\n cursor-pointer\n `}\n style={getStyles(item, isHovered)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onClick(item)}\n role=\"menuitem\"\n aria-disabled={item.disabled}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n </div>\n )\n}\n\nexport default LMDropdown\n","import React, { useState, useRef, useEffect, useCallback } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMTabItem {\n /** Unique key */\n key: string\n /** Tab label */\n label: React.ReactNode\n /** Tab content */\n children?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Icon before label */\n icon?: React.ReactNode\n}\n\nexport interface LMTabsProps {\n /** Controlled active key */\n activeKey?: string\n /** Default active key */\n defaultActiveKey?: string\n /** Tab items */\n items: LMTabItem[]\n /** Tab style type */\n type?: 'line' | 'card' | 'rounded'\n /** Component size */\n size?: ComponentSize\n /** Center tabs */\n centered?: boolean\n /** Extra content on the right */\n tabBarExtraContent?: React.ReactNode\n /** Active key change handler */\n onChange?: (activeKey: string) => void\n /** Tab click handler */\n onTabClick?: (key: string) => void\n /** Custom class name */\n className?: string\n}\n\nconst LMTabs: React.FC<LMTabsProps> = ({\n activeKey: controlledActiveKey,\n defaultActiveKey,\n items,\n type = 'line',\n size = 'md',\n centered = false,\n tabBarExtraContent,\n onChange,\n onTabClick,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || items[0]?.key || ''\n )\n const [inkStyle, setInkStyle] = useState<React.CSSProperties>({})\n const tabsRef = useRef<HTMLDivElement>(null)\n const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n\n const activeKey = controlledActiveKey ?? internalActiveKey\n\n const tabPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-3 py-1.5',\n md: 'px-4 py-2',\n lg: 'px-5 py-2.5',\n xl: 'px-6 py-3',\n '2xl': 'px-8 py-4',\n }\n\n const cardPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-3 py-1.5',\n md: 'px-4 py-2',\n lg: 'px-5 py-2.5',\n xl: 'px-6 py-3',\n '2xl': 'px-8 py-4',\n }\n\n const updateInkBar = useCallback(() => {\n if (type !== 'line') return\n\n const activeTab = tabRefs.current.get(activeKey)\n const container = tabsRef.current\n\n if (activeTab && container) {\n const containerRect = container.getBoundingClientRect()\n const tabRect = activeTab.getBoundingClientRect()\n\n setInkStyle({\n left: tabRect.left - containerRect.left,\n width: tabRect.width,\n })\n }\n }, [activeKey, type])\n\n useEffect(() => {\n updateInkBar()\n }, [updateInkBar])\n\n useEffect(() => {\n const handleResize = () => updateInkBar()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [updateInkBar])\n\n const handleTabClick = (item: LMTabItem) => {\n if (item.disabled) return\n\n onTabClick?.(item.key)\n\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(item.key)\n }\n onChange?.(item.key)\n }\n\n const getTabStyles = (item: LMTabItem, isActive: boolean): React.CSSProperties => {\n if (item.disabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (type === 'line') {\n return {\n color: isActive ? 'var(--lm-primary-600)' : 'var(--lm-text-secondary)',\n backgroundColor: 'transparent',\n }\n }\n\n if (type === 'card') {\n return {\n color: isActive ? 'var(--lm-primary-600)' : 'var(--lm-text-secondary)',\n backgroundColor: isActive ? 'var(--lm-bg-elevated)' : 'transparent',\n borderColor: isActive ? 'var(--lm-border-default)' : 'transparent',\n borderBottomColor: isActive ? 'var(--lm-bg-elevated)' : 'transparent',\n }\n }\n\n // rounded\n return {\n color: isActive ? 'white' : 'var(--lm-text-secondary)',\n backgroundColor: isActive ? 'var(--lm-primary-500)' : 'transparent',\n }\n }\n\n const getTabHoverStyles = (item: LMTabItem, isActive: boolean): React.CSSProperties => {\n if (item.disabled || isActive) return {}\n\n if (type === 'line') {\n return {\n color: 'var(--lm-text-primary)',\n }\n }\n\n if (type === 'card') {\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: 'var(--lm-bg-hover)',\n }\n }\n\n // rounded\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: 'var(--lm-bg-hover)',\n }\n }\n\n const renderTab = (item: LMTabItem) => {\n const isActive = item.key === activeKey\n\n const baseClasses = `\n ${type === 'line' ? tabPaddingClasses[resolvedSize] : cardPaddingClasses[resolvedSize]}\n ${SIZE_TEXT_CLASSES[resolvedSize]}\n flex items-center ${SIZE_GAP_CLASSES[resolvedSize]}\n font-medium transition-all duration-200\n outline-none focus:ring-2 focus:ring-offset-1 focus:ring-[var(--lm-primary-400)]\n `\n\n const typeClasses = {\n line: '',\n card: `border border-b-0 rounded-t-lg ${isActive ? '-mb-px' : ''}`,\n rounded: 'rounded-full',\n }\n\n return (\n <button\n key={item.key}\n ref={(el) => {\n if (el) tabRefs.current.set(item.key, el)\n }}\n className={`${baseClasses} ${typeClasses[type]}`}\n style={getTabStyles(item, isActive)}\n onClick={() => handleTabClick(item)}\n disabled={item.disabled}\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={item.disabled}\n tabIndex={isActive ? 0 : -1}\n onMouseEnter={(e) => {\n if (!item.disabled && !isActive) {\n Object.assign(e.currentTarget.style, getTabHoverStyles(item, isActive))\n }\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getTabStyles(item, isActive))\n }}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n )\n }\n\n const activeItem = items.find((item) => item.key === activeKey)\n\n return (\n <div className={className}>\n {/* Tab bar */}\n <div\n className={`\n flex items-center\n ${centered ? 'justify-center' : 'justify-between'}\n ${type === 'line' ? 'border-b' : ''}\n ${type === 'card' ? 'border-b' : ''}\n `}\n style={{\n borderColor: type === 'line' || type === 'card' ? 'var(--lm-border-default)' : undefined,\n }}\n >\n {/* Tabs */}\n <div\n ref={tabsRef}\n className={`\n flex items-center relative\n ${type === 'rounded' ? `${SIZE_GAP_CLASSES[resolvedSize]} p-1 rounded-full` : ''}\n `}\n style={{\n backgroundColor: type === 'rounded' ? 'var(--lm-bg-paper)' : undefined,\n }}\n role=\"tablist\"\n >\n {items.map(renderTab)}\n\n {/* Ink bar for line type */}\n {type === 'line' && (\n <div\n className=\"absolute bottom-0 h-0.5 transition-all duration-300\"\n style={{\n ...inkStyle,\n backgroundColor: 'var(--lm-primary-500)',\n }}\n />\n )}\n </div>\n\n {/* Extra content */}\n {tabBarExtraContent && !centered && (\n <div className=\"flex-shrink-0 ml-4\">{tabBarExtraContent}</div>\n )}\n </div>\n\n {/* Tab content */}\n {activeItem?.children && (\n <div className=\"pt-4\" role=\"tabpanel\">\n {activeItem.children}\n </div>\n )}\n </div>\n )\n}\n\nexport default LMTabs\n","import React, { useEffect, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMDrawerProps {\n /** Visibility state */\n visible: boolean\n /** Drawer title */\n title?: React.ReactNode\n /** Drawer content */\n children: React.ReactNode\n /** Drawer placement */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /** Drawer width (for left/right placement) */\n width?: string | number\n /** Drawer height (for top/bottom placement) */\n height?: string | number\n /** Show close button */\n closable?: boolean\n /** Show mask */\n mask?: boolean\n /** Close on mask click */\n maskClosable?: boolean\n /** Footer content */\n footer?: React.ReactNode\n /** Close handler */\n onClose?: () => void\n /** Component size */\n size?: ComponentSize\n /** Extra content in header */\n extra?: React.ReactNode\n /** Custom class name */\n className?: string\n /** Z-index */\n zIndex?: number\n}\n\nconst CloseIcon: React.FC = () => (\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nconst LMDrawer: React.FC<LMDrawerProps> = ({\n visible,\n title,\n children,\n placement = 'right',\n width = 378,\n height = 378,\n closable = true,\n mask = true,\n maskClosable = true,\n footer,\n onClose,\n size = 'md',\n extra,\n className = '',\n zIndex = 1000,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const titleTextClasses: Record<ComponentSize, string> = {\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 // Handle ESC key\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && visible) {\n onClose?.()\n }\n },\n [visible, onClose]\n )\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n\n // Lock body scroll when visible\n useEffect(() => {\n if (visible) {\n const originalOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = originalOverflow\n }\n }\n }, [visible])\n\n const handleMaskClick = () => {\n if (maskClosable) {\n onClose?.()\n }\n }\n\n const getDrawerStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n backgroundColor: 'var(--lm-bg-elevated)',\n boxShadow: 'var(--lm-shadow-xl)',\n display: 'flex',\n flexDirection: 'column',\n zIndex: zIndex + 1,\n transition: 'transform 0.3s ease-in-out',\n }\n\n const widthValue = typeof width === 'number' ? `${width}px` : width\n const heightValue = typeof height === 'number' ? `${height}px` : height\n\n switch (placement) {\n case 'right':\n return {\n ...base,\n top: 0,\n right: 0,\n bottom: 0,\n width: widthValue,\n maxWidth: '100vw',\n transform: visible ? 'translateX(0)' : 'translateX(100%)',\n }\n case 'left':\n return {\n ...base,\n top: 0,\n left: 0,\n bottom: 0,\n width: widthValue,\n maxWidth: '100vw',\n transform: visible ? 'translateX(0)' : 'translateX(-100%)',\n }\n case 'top':\n return {\n ...base,\n top: 0,\n left: 0,\n right: 0,\n height: heightValue,\n maxHeight: '100vh',\n transform: visible ? 'translateY(0)' : 'translateY(-100%)',\n }\n case 'bottom':\n return {\n ...base,\n bottom: 0,\n left: 0,\n right: 0,\n height: heightValue,\n maxHeight: '100vh',\n transform: visible ? 'translateY(0)' : 'translateY(100%)',\n }\n default:\n return base\n }\n }\n\n if (typeof document === 'undefined') return null\n\n const drawerContent = (\n <div\n className={className}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n pointerEvents: visible ? 'auto' : 'none',\n }}\n >\n {/* Mask */}\n {mask && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\n opacity: visible ? 1 : 0,\n transition: 'opacity 0.3s ease-in-out',\n zIndex,\n }}\n onClick={handleMaskClick}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Drawer */}\n <div\n style={getDrawerStyles()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'drawer-title' : undefined}\n >\n {/* Header */}\n {(title || closable || extra) && (\n <div\n className={`flex items-center justify-between ${SIZE_PADDING_CLASSES[resolvedSize]} border-b`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {title && (\n <h3\n id=\"drawer-title\"\n className={`${titleTextClasses[resolvedSize]} font-semibold truncate`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </h3>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {extra}\n {closable && (\n <button\n className=\"p-1.5 rounded-lg transition-colors duration-200 hover:bg-[var(--lm-bg-hover)]\"\n style={{ color: 'var(--lm-text-secondary)' }}\n onClick={onClose}\n aria-label=\"关闭\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Body */}\n <div\n className={`flex-1 overflow-auto ${SIZE_PADDING_CLASSES[resolvedSize]}`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div\n className={`flex items-center justify-end gap-2 ${SIZE_PADDING_CLASSES[resolvedSize]} border-t`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n )\n\n return createPortal(drawerContent, document.body)\n}\n\nexport default LMDrawer\n","import React, { useState, useCallback } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMMenuItem {\n /** Unique key */\n key: string\n /** Menu item label */\n label: React.ReactNode\n /** Icon before label */\n icon?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Sub menu items */\n children?: LMMenuItem[]\n /** Item type: group or divider */\n type?: 'group' | 'divider'\n}\n\nexport interface LMMenuProps {\n /** Menu items */\n items: LMMenuItem[]\n /** Menu mode */\n mode?: 'vertical' | 'horizontal' | 'inline'\n /** Menu theme */\n theme?: 'light' | 'dark'\n /** Selected keys (controlled) */\n selectedKeys?: string[]\n /** Default selected keys */\n defaultSelectedKeys?: string[]\n /** Open keys (controlled) */\n openKeys?: string[]\n /** Default open keys */\n defaultOpenKeys?: string[]\n /** Collapsed state (for inline mode) */\n collapsed?: boolean\n /** Collapsed width */\n collapsedWidth?: number\n /** Selection handler */\n onSelect?: (key: string, keyPath: string[]) => void\n /** Open change handler */\n onOpenChange?: (openKeys: string[]) => void\n /** Component size */\n size?: ComponentSize\n /** Custom class name */\n className?: string\n}\n\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-4 h-4'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n)\n\n\nconst LMMenu: React.FC<LMMenuProps> = ({\n items,\n mode = 'inline',\n theme = 'light',\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n collapsed = false,\n collapsedWidth = 64,\n onSelect,\n onOpenChange,\n size = 'md',\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const itemPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-3 py-1.5',\n sm: 'px-3 py-2',\n md: 'px-4 py-2.5',\n lg: 'px-5 py-3',\n xl: 'px-6 py-3.5',\n '2xl': 'px-8 py-4',\n }\n\n const collapsedPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1.5',\n sm: 'px-2.5 py-2',\n md: 'px-3 py-2.5',\n lg: 'px-3.5 py-3',\n xl: 'px-4 py-3.5',\n '2xl': 'px-5 py-4',\n }\n\n const iconSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-4 h-4',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-5 h-5',\n xl: 'w-6 h-6',\n '2xl': 'w-6 h-6',\n }\n\n const handleSelect = useCallback((key: string, keyPath: string[]) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key, keyPath)\n }, [controlledSelectedKeys, onSelect])\n\n const handleOpenChange = useCallback((key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n }, [openKeys, controlledOpenKeys, onOpenChange])\n\n const getItemStyles = (isSelected: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled) {\n return {\n color: theme === 'dark' ? 'var(--lm-gray-600)' : 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (isSelected) {\n return {\n color: theme === 'dark' ? 'white' : 'var(--lm-primary-600)',\n backgroundColor: theme === 'dark' ? 'var(--lm-primary-600)' : 'var(--lm-primary-50)',\n }\n }\n\n return {\n color: theme === 'dark' ? 'var(--lm-gray-200)' : 'var(--lm-text-primary)',\n backgroundColor: 'transparent',\n }\n }\n\n const getHoverStyles = (isSelected: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled || isSelected) return {}\n\n return {\n backgroundColor: theme === 'dark' ? 'var(--lm-gray-700)' : 'var(--lm-bg-hover)',\n }\n }\n\n const renderMenuItem = (item: LMMenuItem, level: number = 0, keyPath: string[] = []) => {\n if (item.type === 'divider') {\n return (\n <div\n key={item.key}\n className=\"my-2 mx-3 border-t\"\n style={{ borderColor: theme === 'dark' ? 'var(--lm-gray-700)' : 'var(--lm-border-light)' }}\n />\n )\n }\n\n if (item.type === 'group') {\n return (\n <div key={item.key} className=\"py-2\">\n <div\n className={`${collapsed ? collapsedPaddingClasses[resolvedSize] : itemPaddingClasses[resolvedSize]} text-xs font-semibold uppercase tracking-wider`}\n style={{ color: theme === 'dark' ? 'var(--lm-gray-500)' : 'var(--lm-text-tertiary)' }}\n >\n {!collapsed && item.label}\n </div>\n {item.children?.map((child) => renderMenuItem(child, level, [...keyPath, item.key]))}\n </div>\n )\n }\n\n const hasChildren = !!(item.children && item.children.length > 0)\n const isOpen = openKeys.includes(item.key)\n const isSelected = selectedKeys.includes(item.key)\n const currentKeyPath = [...keyPath, item.key]\n const indentStyle = !collapsed && mode === 'inline' ? { paddingLeft: `${16 + level * 16}px` } : {}\n\n return (\n <div key={item.key}>\n <MenuItem\n item={item}\n size={resolvedSize}\n collapsed={collapsed}\n hasChildren={hasChildren}\n isOpen={isOpen}\n isSelected={isSelected}\n theme={theme}\n mode={mode}\n paddingClass={collapsed ? collapsedPaddingClasses[resolvedSize] : itemPaddingClasses[resolvedSize]}\n textClass={SIZE_TEXT_CLASSES[resolvedSize]}\n gapClass={SIZE_GAP_CLASSES[resolvedSize]}\n iconClass={iconSizeClasses[resolvedSize]}\n indentStyle={indentStyle}\n getStyles={getItemStyles}\n getHoverStyles={getHoverStyles}\n onSelect={() => {\n if (!item.disabled && !hasChildren) {\n handleSelect(item.key, currentKeyPath)\n }\n }}\n onToggle={() => {\n if (hasChildren && !item.disabled) {\n handleOpenChange(item.key)\n }\n }}\n />\n\n {/* Sub menu */}\n {hasChildren && isOpen && !collapsed && mode === 'inline' && (\n <div className=\"overflow-hidden transition-all duration-200\">\n {item.children?.map((child) => renderMenuItem(child, level + 1, currentKeyPath))}\n </div>\n )}\n </div>\n )\n }\n\n const containerStyles: React.CSSProperties = {\n width: collapsed ? collapsedWidth : undefined,\n backgroundColor: theme === 'dark' ? 'var(--lm-gray-900)' : 'var(--lm-bg-elevated)',\n transition: 'width 0.2s ease-in-out',\n }\n\n const flexDirection = mode === 'horizontal' ? 'row' : 'column'\n\n return (\n <nav\n className={`flex ${className}`}\n style={{\n ...containerStyles,\n flexDirection,\n }}\n role=\"menu\"\n >\n {items.map((item) => renderMenuItem(item))}\n </nav>\n )\n}\n\n// Separate MenuItem component for hover state\ninterface MenuItemInternalProps {\n item: LMMenuItem\n size: ComponentSize\n collapsed: boolean\n hasChildren: boolean\n isOpen: boolean\n isSelected: boolean\n theme: 'light' | 'dark'\n mode: 'vertical' | 'horizontal' | 'inline'\n paddingClass: string\n textClass: string\n gapClass: string\n iconClass: string\n indentStyle: React.CSSProperties\n getStyles: (isSelected: boolean, isDisabled: boolean) => React.CSSProperties\n getHoverStyles: (isSelected: boolean, isDisabled: boolean) => React.CSSProperties\n onSelect: () => void\n onToggle: () => void\n}\n\nconst MenuItem: React.FC<MenuItemInternalProps> = ({\n item,\n collapsed,\n hasChildren,\n isOpen,\n isSelected,\n paddingClass,\n textClass,\n gapClass,\n iconClass,\n indentStyle,\n getStyles,\n getHoverStyles,\n onSelect,\n onToggle,\n}) => {\n const [isHovered, setIsHovered] = useState(false)\n\n const baseStyles = getStyles(isSelected, item.disabled || false)\n const hoverStyles = isHovered ? getHoverStyles(isSelected, item.disabled || false) : {}\n\n return (\n <div\n className={`\n ${paddingClass} ${textClass}\n flex items-center ${gapClass}\n cursor-pointer transition-colors duration-150\n rounded-lg mx-2 my-0.5\n ${collapsed ? 'justify-center' : ''}\n `}\n style={{\n ...baseStyles,\n ...hoverStyles,\n ...indentStyle,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => {\n if (hasChildren) {\n onToggle()\n } else {\n onSelect()\n }\n }}\n role=\"menuitem\"\n aria-disabled={item.disabled || undefined}\n aria-expanded={hasChildren ? isOpen : undefined}\n title={collapsed ? (typeof item.label === 'string' ? item.label : undefined) : undefined}\n >\n {item.icon && (\n <span className={`flex-shrink-0 ${iconClass}`}>{item.icon}</span>\n )}\n\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{item.label}</span>\n\n {hasChildren && (\n <span\n className={`flex-shrink-0 transition-transform duration-200 ${\n isOpen ? 'rotate-180' : ''\n }`}\n >\n <ChevronDownIcon className=\"w-4 h-4\" />\n </span>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport default LMMenu\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_INPUT_CONFIG,\n clampComponentSize,\n} from '../../utils/componentSizes'\nimport type { ComponentSize } from '../../utils/componentSizes'\n\nexport interface LMDatePickerProps {\n /** Selected date value */\n value?: Date | string | null\n /** Default value */\n defaultValue?: Date | string\n /** Change handler */\n onChange?: (date: Date | null, dateString: string) => void\n /** Date format */\n format?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Component size */\n size?: ComponentSize\n /** Allow clear */\n allowClear?: boolean\n /** Disable specific dates */\n disabledDate?: (date: Date) => boolean\n /** Picker type (reserved for future use) */\n picker?: 'date' | 'month' | 'year'\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Custom class name */\n className?: string\n}\n\nconst CalendarIcon: 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=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n)\n\nconst ClearIcon: 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=\"M6 18L18 6M6 6l12 12\" />\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 WEEKDAYS = ['日', '一', '二', '三', '四', '五', '六']\nconst MONTHS = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n\nconst formatDate = (date: Date, format: string): string => {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n}\n\nconst parseDate = (value: Date | string | null | undefined): Date | null => {\n if (!value) return null\n if (value instanceof Date) return value\n const parsed = new Date(value)\n return isNaN(parsed.getTime()) ? null : parsed\n}\n\nconst LMDatePicker: React.FC<LMDatePickerProps> = ({\n value,\n defaultValue,\n onChange,\n format = 'YYYY-MM-DD',\n placeholder = '请选择日期',\n disabled = false,\n size = 'md',\n allowClear = true,\n disabledDate,\n picker: _picker = 'date',\n error = false,\n errorMessage,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const inputConfig = SIZE_INPUT_CONFIG[resolvedSize]\n\n const [isOpen, setIsOpen] = useState(false)\n const [internalValue, setInternalValue] = useState<Date | null>(() => parseDate(defaultValue))\n const [viewDate, setViewDate] = useState<Date>(() => parseDate(defaultValue) || new Date())\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [isHovered, setIsHovered] = useState(false)\n\n const triggerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n const selectedDate = value !== undefined ? parseDate(value) : internalValue\n\n const displayValue = selectedDate ? formatDate(selectedDate, format) : ''\n\n // Update position\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !dropdownRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const dropdownRect = dropdownRef.current.getBoundingClientRect()\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n\n let top = triggerRect.bottom + scrollY + 4\n let left = triggerRect.left + scrollX\n\n // Boundary check\n if (left + dropdownRect.width > window.innerWidth + scrollX) {\n left = window.innerWidth + scrollX - dropdownRect.width - 8\n }\n if (top + dropdownRect.height > window.innerHeight + scrollY) {\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n }\n\n setPosition({ top, left })\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n updatePosition()\n }\n }, [isOpen, updatePosition])\n\n useEffect(() => {\n if (isOpen) {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(e.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n const handleScroll = () => updatePosition()\n\n document.addEventListener('mousedown', handleClickOutside)\n window.addEventListener('scroll', handleScroll, true)\n window.addEventListener('resize', handleScroll)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n window.removeEventListener('scroll', handleScroll, true)\n window.removeEventListener('resize', handleScroll)\n }\n }\n }, [isOpen, updatePosition])\n\n const handleDateSelect = (date: Date) => {\n if (disabledDate?.(date)) return\n\n const newDate = new Date(date)\n\n if (value === undefined) {\n setInternalValue(newDate)\n }\n onChange?.(newDate, formatDate(newDate, format))\n setIsOpen(false)\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (value === undefined) {\n setInternalValue(null)\n }\n onChange?.(null, '')\n }\n\n const handlePrevMonth = () => {\n setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() - 1, 1))\n }\n\n const handleNextMonth = () => {\n setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() + 1, 1))\n }\n\n const handlePrevYear = () => {\n setViewDate((prev) => new Date(prev.getFullYear() - 1, prev.getMonth(), 1))\n }\n\n const handleNextYear = () => {\n setViewDate((prev) => new Date(prev.getFullYear() + 1, prev.getMonth(), 1))\n }\n\n // Generate calendar days\n const calendarDays = useMemo(() => {\n const year = viewDate.getFullYear()\n const month = viewDate.getMonth()\n\n const firstDay = new Date(year, month, 1)\n const lastDay = new Date(year, month + 1, 0)\n\n const days: { date: Date; isCurrentMonth: boolean }[] = []\n\n // Previous month days\n const firstDayOfWeek = firstDay.getDay()\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(year, month, -i)\n days.push({ date, isCurrentMonth: false })\n }\n\n // Current month days\n for (let i = 1; i <= lastDay.getDate(); i++) {\n const date = new Date(year, month, i)\n days.push({ date, isCurrentMonth: true })\n }\n\n // Next month days\n const remainingDays = 42 - days.length\n for (let i = 1; i <= remainingDays; i++) {\n const date = new Date(year, month + 1, i)\n days.push({ date, isCurrentMonth: false })\n }\n\n return days\n }, [viewDate])\n\n const isToday = (date: Date) => {\n const today = new Date()\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n )\n }\n\n const isSelected = (date: Date) => {\n if (!selectedDate) return false\n return (\n date.getFullYear() === selectedDate.getFullYear() &&\n date.getMonth() === selectedDate.getMonth() &&\n date.getDate() === selectedDate.getDate()\n )\n }\n\n const getInputStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error ? 'var(--lm-error-300)' : 'var(--lm-border-default)',\n color: 'var(--lm-text-primary)',\n }\n\n if (disabled) {\n return {\n ...base,\n backgroundColor: 'var(--lm-bg-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n\n return base\n }\n\n const getDayStyles = (day: { date: Date; isCurrentMonth: boolean }): React.CSSProperties => {\n const isDisabled = disabledDate?.(day.date)\n const selected = isSelected(day.date)\n const today = isToday(day.date)\n\n if (isDisabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (selected) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n }\n }\n\n if (today) {\n return {\n color: 'var(--lm-primary-600)',\n fontWeight: 600,\n }\n }\n\n if (!day.isCurrentMonth) {\n return {\n color: 'var(--lm-text-tertiary)',\n }\n }\n\n return {\n color: 'var(--lm-text-primary)',\n }\n }\n\n const calendar = (\n <div\n ref={dropdownRef}\n className=\"rounded-xl border backdrop-blur-md shadow-lg p-3\"\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 1000,\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n width: '280px',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handlePrevYear}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronLeftIcon />\n <ChevronLeftIcon />\n </button>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handlePrevMonth}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronLeftIcon />\n </button>\n <span\n className=\"font-medium\"\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {viewDate.getFullYear()} 年 {MONTHS[viewDate.getMonth()]}\n </span>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handleNextMonth}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronRightIcon />\n </button>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handleNextYear}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronRightIcon />\n <ChevronRightIcon />\n </button>\n </div>\n\n {/* Weekdays */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {WEEKDAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium py-1\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Days */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => {\n const isDisabled = disabledDate?.(day.date)\n return (\n <button\n key={index}\n className={`\n w-8 h-8 rounded-lg text-sm flex items-center justify-center\n transition-colors duration-150\n ${!isDisabled ? 'hover:bg-[var(--lm-bg-hover)]' : ''}\n `}\n style={getDayStyles(day)}\n onClick={() => handleDateSelect(day.date)}\n disabled={isDisabled}\n >\n {day.date.getDate()}\n </button>\n )\n })}\n </div>\n\n {/* Today button */}\n <div className=\"mt-3 pt-3 border-t\" style={{ borderColor: 'var(--lm-border-light)' }}>\n <button\n className=\"w-full py-1.5 text-sm rounded-lg hover:bg-[var(--lm-bg-hover)] transition-colors\"\n style={{ color: 'var(--lm-primary-600)' }}\n onClick={() => handleDateSelect(new Date())}\n >\n 今天\n </button>\n </div>\n </div>\n )\n\n return (\n <div className={`inline-block ${className}`}>\n <div\n ref={triggerRef}\n className={`\n ${inputConfig.padding} ${inputConfig.height} ${inputConfig.fontSize}\n rounded-xl border backdrop-blur-md\n flex items-center gap-2\n transition-all duration-200\n ${disabled ? '' : 'cursor-pointer'}\n `}\n style={getInputStyles()}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <span\n className=\"flex-1 truncate\"\n style={{ color: displayValue ? 'var(--lm-text-primary)' : 'var(--lm-text-tertiary)' }}\n >\n {displayValue || placeholder}\n </span>\n\n {allowClear && displayValue && isHovered && !disabled ? (\n <span\n className=\"flex-shrink-0 p-0.5 rounded hover:bg-[var(--lm-bg-hover)]\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n onClick={handleClear}\n >\n <ClearIcon />\n </span>\n ) : (\n <span\n className=\"flex-shrink-0\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n <CalendarIcon />\n </span>\n )}\n </div>\n\n {/* Error message */}\n {error && errorMessage && (\n <p\n className={`mt-1 ${SIZE_TEXT_CLASSES[resolvedSize]}`}\n style={{ color: 'var(--lm-error-500)' }}\n >\n {errorMessage}\n </p>\n )}\n\n {/* Calendar dropdown */}\n {isOpen && typeof document !== 'undefined' && createPortal(calendar, document.body)}\n </div>\n )\n}\n\nexport default LMDatePicker\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":["sizeConfig","CloseIcon","LMButton","ClearIcon","ChevronLeftIcon","ChevronRightIcon","MenuItem"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/componentSizes.ts","../src/components/General/LMButton/LMButton.tsx","../src/components/General/LMBadge/LMBadge.tsx","../src/components/Form/LMInput/LMInput.tsx","../src/components/Form/LMTextarea/LMTextarea.tsx","../src/components/Form/LMNumberInput/LMNumberInput.tsx","../src/components/Form/LMSearchInput/LMSearchInput.tsx","../src/components/Form/LMSelect/LMSelect.tsx","../src/components/Form/LMCheckbox/LMCheckbox.tsx","../src/components/Form/LMRadio/LMRadio.tsx","../src/components/Form/LMSwitch/LMSwitch.tsx","../src/components/Form/LMField/LMField.tsx","../src/components/Form/LMDatePicker/LMDatePicker.tsx","../src/components/Form/LMUpload/LMUpload.tsx","../src/components/DataDisplay/LMTable/LMTable.tsx","../src/components/DataDisplay/LMStatCard/LMStatCard.tsx","../src/components/DataDisplay/LMTooltip/LMTooltip.tsx","../src/components/DataDisplay/LMCard/LMCard.tsx","../src/components/DataDisplay/LMTabs/LMTabs.tsx","../src/components/DataDisplay/LMEmpty/LMEmpty.tsx","../src/components/Navigation/LMMenu/LMMenu.tsx","../src/components/Navigation/LMDropdown/LMDropdown.tsx","../src/components/Navigation/LMPagination/LMPagination.tsx","../src/components/Feedback/LMMessage/LMMessage.tsx","../src/hooks/useMessage.ts","../src/components/Feedback/LMModal/LMModal.tsx","../src/components/Feedback/LMConfirm/LMConfirm.tsx","../src/hooks/useConfirm.ts","../src/components/Feedback/LMDrawer/LMDrawer.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\nconst LoadingSpinner: React.FC<{ style?: React.CSSProperties }> = ({ style }) => (\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={style}\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\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 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 style={getIconStyles()} />\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 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' | 'xl' | '2xl'\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 xl: {\n padding: 'px-5 py-2.5',\n fontSize: 'text-base',\n dotSize: 'w-3 h-3',\n iconSize: 'text-base',\n },\n '2xl': {\n padding: 'px-6 py-3',\n fontSize: 'text-lg',\n dotSize: 'w-3.5 h-3.5',\n iconSize: 'text-lg',\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, { useId } 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 = `lm-input-err-${useId()}`\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'\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 useId,\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 = `lm-ni-err-${useId()}`\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'\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 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 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 currentSize = sizeConfig[size]\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 ${currentSize.container} 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={`${currentSize.label} font-medium transition-colors duration-200`}\n style={getLabelStyles()}\n >\n {label}\n </label>\n {description && (\n <p className={currentSize.description} style={getDescriptionStyles()}>\n {description}\n </p>\n )}\n </div>\n </div>\n\n {errorMessage && (\n <p\n id={errId}\n className={`${currentSize.errorMessage} 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'\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, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_INPUT_CONFIG,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface TimePickerOptions {\n /** Show hour selector */\n showHour?: boolean\n /** Show minute selector */\n showMinute?: boolean\n /** Show second selector */\n showSecond?: boolean\n /** Hour step */\n hourStep?: number\n /** Minute step */\n minuteStep?: number\n /** Second step */\n secondStep?: number\n /** Use 12-hour format */\n use12Hours?: boolean\n}\n\nexport interface LMDatePickerProps {\n /** Selected date value */\n value?: Date | string | null\n /** Default value */\n defaultValue?: Date | string\n /** Change handler */\n onChange?: (date: Date | null, dateString: string) => void\n /** Date format */\n format?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Component size */\n size?: ComponentSize\n /** Allow clear */\n allowClear?: boolean\n /** Disable specific dates */\n disabledDate?: (date: Date) => boolean\n /** Picker type (reserved for future use) */\n picker?: 'date' | 'month' | 'year'\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Custom class name */\n className?: string\n /** Enable time picker */\n showTime?: boolean | TimePickerOptions\n}\n\nconst CalendarIcon: 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=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n)\n\nconst ClearIcon: 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=\"M6 18L18 6M6 6l12 12\" />\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 DoubleChevronLeftIcon: 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=\"M18 19l-7-7 7-7\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11 19l-7-7 7-7\" />\n </svg>\n)\n\nconst DoubleChevronRightIcon: 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=\"M6 5l7 7-7 7\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 5l7 7-7 7\" />\n </svg>\n)\n\nconst WEEKDAYS = ['日', '一', '二', '三', '四', '五', '六']\nconst MONTHS = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n\n// TimeColumn component moved outside to avoid re-creation during render\nconst TimeColumn: React.FC<{\n options: number[]\n value: number\n onChange: (val: number) => void\n listRef: React.RefObject<HTMLDivElement | null>\n}> = ({ options, value, onChange, listRef }) => (\n <div\n ref={listRef as React.RefObject<HTMLDivElement>}\n className=\"flex-1 h-[168px] overflow-y-auto scrollbar-thin\"\n style={{ scrollbarWidth: 'thin' }}\n >\n {options.map((opt) => (\n <button\n key={opt}\n className={`\n w-full h-7 text-sm flex items-center justify-center\n transition-colors duration-150\n hover:bg-[var(--lm-bg-hover)]\n `}\n style={{\n backgroundColor: opt === value ? 'var(--lm-primary-500)' : 'transparent',\n color: opt === value ? 'white' : 'var(--lm-text-primary)',\n }}\n onClick={() => onChange(opt)}\n >\n {String(opt).padStart(2, '0')}\n </button>\n ))}\n </div>\n)\n\nconst formatDate = (date: Date, format: string): string => {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n const hours = String(date.getHours()).padStart(2, '0')\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n .replace('HH', hours)\n .replace('mm', minutes)\n .replace('ss', seconds)\n}\n\nconst parseDate = (value: Date | string | null | undefined): Date | null => {\n if (!value) return null\n if (value instanceof Date) return value\n const parsed = new Date(value)\n return isNaN(parsed.getTime()) ? null : parsed\n}\n\nconst LMDatePicker: React.FC<LMDatePickerProps> = ({\n value,\n defaultValue,\n onChange,\n format: formatProp,\n placeholder = '请选择日期',\n disabled = false,\n size = 'md',\n allowClear = true,\n disabledDate,\n picker: _picker = 'date',\n error = false,\n errorMessage,\n className = '',\n showTime = false,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const inputConfig = SIZE_INPUT_CONFIG[resolvedSize]\n\n // Parse time options\n const timeOptions: TimePickerOptions = typeof showTime === 'object' ? showTime : {}\n const {\n showHour = true,\n showMinute = true,\n showSecond = true,\n hourStep = 1,\n minuteStep = 1,\n secondStep = 1,\n } = timeOptions\n const hasTime = showTime !== false\n\n // Auto-determine format\n const format = formatProp || (hasTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD')\n\n const [isOpen, setIsOpen] = useState(false)\n const [internalValue, setInternalValue] = useState<Date | null>(() => parseDate(defaultValue))\n const [viewDate, setViewDate] = useState<Date>(() => parseDate(defaultValue) || new Date())\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [isHovered, setIsHovered] = useState(false)\n\n // Time state for pending selection\n const [tempDate, setTempDate] = useState<Date | null>(null)\n // Track user-modified time separately from selected date time\n const [userModifiedTime, setUserModifiedTime] = useState<{hour: number, minute: number, second: number} | null>(null)\n\n const triggerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const hourListRef = useRef<HTMLDivElement>(null)\n const minuteListRef = useRef<HTMLDivElement>(null)\n const secondListRef = useRef<HTMLDivElement>(null)\n\n const selectedDate = value !== undefined ? parseDate(value) : internalValue\n\n const displayValue = selectedDate ? formatDate(selectedDate, format) : ''\n\n // Derive temp time values - use user modified values if set, otherwise from selectedDate\n const tempHour = userModifiedTime?.hour ?? selectedDate?.getHours() ?? 0\n const tempMinute = userModifiedTime?.minute ?? selectedDate?.getMinutes() ?? 0\n const tempSecond = userModifiedTime?.second ?? selectedDate?.getSeconds() ?? 0\n\n // Reset user modified time when panel closes or selection changes\n const prevSelectedDateRef = useRef(selectedDate)\n if (prevSelectedDateRef.current !== selectedDate) {\n prevSelectedDateRef.current = selectedDate\n if (userModifiedTime !== null) {\n setUserModifiedTime(null)\n }\n }\n\n // Scroll time columns to selected values when panel opens\n useEffect(() => {\n if (isOpen && hasTime) {\n setTimeout(() => {\n const scrollToSelected = (ref: React.RefObject<HTMLDivElement | null>, value: number, step: number) => {\n if (ref.current) {\n const index = Math.floor(value / step)\n const itemHeight = 28 // height of each item\n ref.current.scrollTop = index * itemHeight\n }\n }\n scrollToSelected(hourListRef, tempHour, hourStep)\n scrollToSelected(minuteListRef, tempMinute, minuteStep)\n scrollToSelected(secondListRef, tempSecond, secondStep)\n }, 50)\n }\n }, [isOpen, hasTime, tempHour, tempMinute, tempSecond, hourStep, minuteStep, secondStep])\n\n // Update position\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !dropdownRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const dropdownRect = dropdownRef.current.getBoundingClientRect()\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n\n let top = triggerRect.bottom + scrollY + 4\n let left = triggerRect.left + scrollX\n\n // Boundary check\n if (left + dropdownRect.width > window.innerWidth + scrollX) {\n left = window.innerWidth + scrollX - dropdownRect.width - 8\n }\n if (top + dropdownRect.height > window.innerHeight + scrollY) {\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n }\n\n setPosition({ top, left })\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n updatePosition()\n }\n }, [isOpen, updatePosition])\n\n useEffect(() => {\n if (isOpen) {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(e.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n const handleScroll = () => updatePosition()\n\n document.addEventListener('mousedown', handleClickOutside)\n window.addEventListener('scroll', handleScroll, true)\n window.addEventListener('resize', handleScroll)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n window.removeEventListener('scroll', handleScroll, true)\n window.removeEventListener('resize', handleScroll)\n }\n }\n }, [isOpen, updatePosition])\n\n const handleDateSelect = (date: Date) => {\n if (disabledDate?.(date)) return\n\n if (hasTime) {\n // When time picker is enabled, store temp date and wait for confirm\n setTempDate(date)\n const newDate = new Date(date)\n newDate.setHours(tempHour, tempMinute, tempSecond)\n setTempDate(newDate)\n } else {\n // No time picker, confirm immediately\n const newDate = new Date(date)\n if (value === undefined) {\n setInternalValue(newDate)\n }\n onChange?.(newDate, formatDate(newDate, format))\n setIsOpen(false)\n }\n }\n\n const handleTimeChange = (type: 'hour' | 'minute' | 'second', val: number) => {\n setUserModifiedTime(prev => ({\n hour: type === 'hour' ? val : (prev?.hour ?? tempHour),\n minute: type === 'minute' ? val : (prev?.minute ?? tempMinute),\n second: type === 'second' ? val : (prev?.second ?? tempSecond),\n }))\n }\n\n const handleConfirm = () => {\n const baseDate = tempDate || selectedDate || new Date()\n const newDate = new Date(baseDate)\n newDate.setHours(tempHour, tempMinute, tempSecond)\n\n if (value === undefined) {\n setInternalValue(newDate)\n }\n onChange?.(newDate, formatDate(newDate, format))\n setIsOpen(false)\n }\n\n const handleNow = () => {\n const now = new Date()\n setUserModifiedTime({\n hour: now.getHours(),\n minute: now.getMinutes(),\n second: now.getSeconds(),\n })\n setTempDate(now)\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (value === undefined) {\n setInternalValue(null)\n }\n onChange?.(null, '')\n }\n\n const handlePrevMonth = () => {\n setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() - 1, 1))\n }\n\n const handleNextMonth = () => {\n setViewDate((prev) => new Date(prev.getFullYear(), prev.getMonth() + 1, 1))\n }\n\n const handlePrevYear = () => {\n setViewDate((prev) => new Date(prev.getFullYear() - 1, prev.getMonth(), 1))\n }\n\n const handleNextYear = () => {\n setViewDate((prev) => new Date(prev.getFullYear() + 1, prev.getMonth(), 1))\n }\n\n // Generate calendar days\n const calendarDays = useMemo(() => {\n const year = viewDate.getFullYear()\n const month = viewDate.getMonth()\n\n const firstDay = new Date(year, month, 1)\n const lastDay = new Date(year, month + 1, 0)\n\n const days: { date: Date; isCurrentMonth: boolean }[] = []\n\n // Previous month days\n const firstDayOfWeek = firstDay.getDay()\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(year, month, -i)\n days.push({ date, isCurrentMonth: false })\n }\n\n // Current month days\n for (let i = 1; i <= lastDay.getDate(); i++) {\n const date = new Date(year, month, i)\n days.push({ date, isCurrentMonth: true })\n }\n\n // Next month days\n const remainingDays = 42 - days.length\n for (let i = 1; i <= remainingDays; i++) {\n const date = new Date(year, month + 1, i)\n days.push({ date, isCurrentMonth: false })\n }\n\n return days\n }, [viewDate])\n\n const isToday = (date: Date) => {\n const today = new Date()\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n )\n }\n\n const isSelected = (date: Date) => {\n // In time picker mode, check tempDate first for pending selection\n const checkDate = hasTime && tempDate ? tempDate : selectedDate\n if (!checkDate) return false\n return (\n date.getFullYear() === checkDate.getFullYear() &&\n date.getMonth() === checkDate.getMonth() &&\n date.getDate() === checkDate.getDate()\n )\n }\n\n const getInputStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error ? 'var(--lm-error-300)' : 'var(--lm-border-default)',\n color: 'var(--lm-text-primary)',\n }\n\n if (disabled) {\n return {\n ...base,\n backgroundColor: 'var(--lm-bg-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n\n return base\n }\n\n const getDayStyles = (day: { date: Date; isCurrentMonth: boolean }): React.CSSProperties => {\n const isDisabled = disabledDate?.(day.date)\n const selected = isSelected(day.date)\n const today = isToday(day.date)\n\n if (isDisabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (selected) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n }\n }\n\n if (today) {\n return {\n color: 'var(--lm-primary-600)',\n fontWeight: 600,\n }\n }\n\n if (!day.isCurrentMonth) {\n return {\n color: 'var(--lm-text-tertiary)',\n }\n }\n\n return {\n color: 'var(--lm-text-primary)',\n }\n }\n\n // Generate time options\n const generateTimeOptions = (max: number, step: number) => {\n const options: number[] = []\n for (let i = 0; i < max; i += step) {\n options.push(i)\n }\n return options\n }\n\n const hourOptions = generateTimeOptions(24, hourStep)\n const minuteOptions = generateTimeOptions(60, minuteStep)\n const secondOptions = generateTimeOptions(60, secondStep)\n\n const calendar = (\n <div\n ref={dropdownRef}\n className=\"rounded-xl border backdrop-blur-md shadow-lg p-3\"\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 1000,\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n width: hasTime ? '420px' : '280px',\n }}\n >\n <div className={hasTime ? 'flex gap-3' : ''}>\n {/* Calendar Panel */}\n <div style={{ width: '256px' }}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handlePrevYear}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <DoubleChevronLeftIcon />\n </button>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handlePrevMonth}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronLeftIcon />\n </button>\n <span\n className=\"font-medium\"\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {viewDate.getFullYear()} 年 {MONTHS[viewDate.getMonth()]}\n </span>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handleNextMonth}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <ChevronRightIcon />\n </button>\n <button\n className=\"p-1 rounded hover:bg-[var(--lm-bg-hover)] transition-colors\"\n onClick={handleNextYear}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n <DoubleChevronRightIcon />\n </button>\n </div>\n\n {/* Weekdays */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {WEEKDAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium py-1\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Days */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => {\n const isDisabled = disabledDate?.(day.date)\n return (\n <button\n key={index}\n className={`\n w-8 h-8 rounded-lg text-sm flex items-center justify-center\n transition-colors duration-150\n ${!isDisabled ? 'hover:bg-[var(--lm-bg-hover)]' : ''}\n `}\n style={getDayStyles(day)}\n onClick={() => handleDateSelect(day.date)}\n disabled={isDisabled}\n >\n {day.date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Time Picker Panel */}\n {hasTime && (\n <div\n className=\"border-l pl-3\"\n style={{ borderColor: 'var(--lm-border-light)', width: '130px' }}\n >\n <div\n className=\"text-xs font-medium mb-2 text-center\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n 选择时间\n </div>\n <div className=\"flex gap-1\">\n {showHour && (\n <TimeColumn\n options={hourOptions}\n value={tempHour}\n onChange={(val) => handleTimeChange('hour', val)}\n listRef={hourListRef}\n />\n )}\n {showMinute && (\n <TimeColumn\n options={minuteOptions}\n value={tempMinute}\n onChange={(val) => handleTimeChange('minute', val)}\n listRef={minuteListRef}\n />\n )}\n {showSecond && (\n <TimeColumn\n options={secondOptions}\n value={tempSecond}\n onChange={(val) => handleTimeChange('second', val)}\n listRef={secondListRef}\n />\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"mt-3 pt-3 border-t flex items-center justify-between\" style={{ borderColor: 'var(--lm-border-light)' }}>\n <button\n className=\"py-1.5 px-3 text-sm rounded-lg hover:bg-[var(--lm-bg-hover)] transition-colors\"\n style={{ color: 'var(--lm-primary-600)' }}\n onClick={hasTime ? handleNow : () => handleDateSelect(new Date())}\n >\n {hasTime ? '此刻' : '今天'}\n </button>\n {hasTime && (\n <button\n className=\"py-1.5 px-4 text-sm rounded-lg transition-colors\"\n style={{\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n }}\n onClick={handleConfirm}\n >\n 确定\n </button>\n )}\n </div>\n </div>\n )\n\n return (\n <div className={`inline-block ${className}`}>\n <div\n ref={triggerRef}\n className={`\n ${inputConfig.padding} ${inputConfig.height} ${inputConfig.fontSize}\n rounded-xl border backdrop-blur-md\n flex items-center gap-2\n transition-all duration-200\n ${disabled ? '' : 'cursor-pointer'}\n `}\n style={getInputStyles()}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <span\n className=\"flex-1 truncate\"\n style={{ color: displayValue ? 'var(--lm-text-primary)' : 'var(--lm-text-tertiary)' }}\n >\n {displayValue || placeholder}\n </span>\n\n {allowClear && displayValue && isHovered && !disabled ? (\n <span\n className=\"flex-shrink-0 p-0.5 rounded hover:bg-[var(--lm-bg-hover)]\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n onClick={handleClear}\n >\n <ClearIcon />\n </span>\n ) : (\n <span\n className=\"flex-shrink-0\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n <CalendarIcon />\n </span>\n )}\n </div>\n\n {/* Error message */}\n {error && errorMessage && (\n <p\n className={`mt-1 ${SIZE_TEXT_CLASSES[resolvedSize]}`}\n style={{ color: 'var(--lm-error-500)' }}\n >\n {errorMessage}\n </p>\n )}\n\n {/* Calendar dropdown */}\n {isOpen && typeof document !== 'undefined' && createPortal(calendar, document.body)}\n </div>\n )\n}\n\nexport default LMDatePicker\n","import React, { useState, useRef, useCallback, useId } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMUploadFile {\n /** Unique file ID */\n uid: string\n /** File name */\n name: string\n /** File size in bytes */\n size: number\n /** File type */\n type: string\n /** Upload status */\n status: 'uploading' | 'done' | 'error'\n /** Upload progress (0-100) */\n percent?: number\n /** Error message */\n error?: string\n /** Original file object */\n originFile?: File\n /** Preview URL (for images) */\n url?: string\n}\n\nexport interface LMUploadProps {\n /** File list (controlled) */\n fileList?: LMUploadFile[]\n /** Default file list */\n defaultFileList?: LMUploadFile[]\n /** Accept file types (e.g., \"image/*,.pdf\") */\n accept?: string\n /** Allow multiple files */\n multiple?: boolean\n /** Max file count */\n maxCount?: number\n /** Max file size in bytes */\n maxSize?: number\n /** Disabled state */\n disabled?: boolean\n /** Show file list */\n showFileList?: boolean\n /** Upload mode: drag area or button */\n listType?: 'text' | 'picture'\n /** Component size */\n size?: ComponentSize\n /** Custom upload handler */\n customRequest?: (file: File) => Promise<string>\n /** Change handler */\n onChange?: (fileList: LMUploadFile[]) => void\n /** Before upload hook, return false to prevent upload */\n beforeUpload?: (file: File) => boolean | Promise<boolean>\n /** Remove handler */\n onRemove?: (file: LMUploadFile) => void | boolean | Promise<boolean>\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Placeholder text */\n placeholder?: string\n /** Hint text below the upload area */\n hint?: string\n /** Custom class name */\n className?: string\n /** Children for custom trigger */\n children?: React.ReactNode\n}\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-8 h-8'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5\" />\n </svg>\n)\n\nconst FileIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-5 h-5'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\" />\n </svg>\n)\n\nconst ImageIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-5 h-5'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 001.5-1.5V6a1.5 1.5 0 00-1.5-1.5H3.75A1.5 1.5 0 002.25 6v12a1.5 1.5 0 001.5 1.5zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\" />\n </svg>\n)\n\nconst DeleteIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-4 h-4'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nconst CheckIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-4 h-4'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n)\n\nconst ErrorIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-4 h-4'} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zm-1.72 6.97a.75.75 0 10-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 101.06 1.06L12 13.06l1.72 1.72a.75.75 0 101.06-1.06L13.06 12l1.72-1.72a.75.75 0 10-1.06-1.06L12 10.94l-1.72-1.72z\" clipRule=\"evenodd\" />\n </svg>\n)\n\nlet fileIdCounter = 0\nconst generateFileId = () => `upload-${++fileIdCounter}-${Date.now()}`\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`\n}\n\nconst isImageFile = (file: LMUploadFile): boolean => {\n return file.type.startsWith('image/') || /\\.(jpg|jpeg|png|gif|webp|svg|bmp)$/i.test(file.name)\n}\n\nconst LMUpload: React.FC<LMUploadProps> = ({\n fileList: controlledFileList,\n defaultFileList = [],\n accept,\n multiple = false,\n maxCount,\n maxSize,\n disabled = false,\n showFileList = true,\n listType = 'text',\n size = 'md',\n customRequest,\n onChange,\n beforeUpload,\n onRemove,\n error = false,\n errorMessage,\n placeholder = '点击或拖拽文件到此区域上传',\n hint,\n className = '',\n children,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const inputId = useId()\n const inputRef = useRef<HTMLInputElement>(null)\n const [internalFileList, setInternalFileList] = useState<LMUploadFile[]>(defaultFileList)\n const [isDragging, setIsDragging] = useState(false)\n\n const fileList = controlledFileList ?? internalFileList\n\n const updateFileList = useCallback((newFileList: LMUploadFile[]) => {\n if (controlledFileList === undefined) {\n setInternalFileList(newFileList)\n }\n onChange?.(newFileList)\n }, [controlledFileList, onChange])\n\n const uploadFile = useCallback(async (file: File) => {\n const uid = generateFileId()\n const newFile: LMUploadFile = {\n uid,\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'uploading',\n percent: 0,\n originFile: file,\n }\n\n // Create preview URL for images\n if (file.type.startsWith('image/')) {\n newFile.url = URL.createObjectURL(file)\n }\n\n // Add file to list\n const updatedList = [...fileList, newFile]\n updateFileList(updatedList)\n\n if (customRequest) {\n try {\n const url = await customRequest(file)\n updateFileList([...updatedList.slice(0, -1), { ...newFile, status: 'done', percent: 100, url }])\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '上传失败'\n updateFileList([...updatedList.slice(0, -1), { ...newFile, status: 'error', error: errorMsg }])\n }\n } else {\n // Simulate upload progress\n let progress = 0\n const interval = setInterval(() => {\n progress += Math.random() * 30\n if (progress >= 100) {\n progress = 100\n clearInterval(interval)\n setInternalFileList(prev => prev.map(f =>\n f.uid === uid ? { ...f, status: 'done' as const, percent: 100 } : f\n ))\n } else {\n setInternalFileList(prev => prev.map(f =>\n f.uid === uid ? { ...f, percent: Math.round(progress) } : f\n ))\n }\n }, 200)\n }\n }, [fileList, customRequest, updateFileList])\n\n const handleFiles = useCallback(async (files: FileList | null) => {\n if (!files || files.length === 0 || disabled) return\n\n const fileArray = Array.from(files)\n\n for (const file of fileArray) {\n // Check max count\n if (maxCount && fileList.length >= maxCount) {\n console.warn(`Max file count (${maxCount}) reached`)\n break\n }\n\n // Check max size\n if (maxSize && file.size > maxSize) {\n console.warn(`File ${file.name} exceeds max size (${formatFileSize(maxSize)})`)\n continue\n }\n\n // Before upload hook\n if (beforeUpload) {\n const result = await beforeUpload(file)\n if (!result) continue\n }\n\n await uploadFile(file)\n }\n }, [disabled, maxCount, maxSize, fileList.length, beforeUpload, uploadFile])\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // Reset input value to allow selecting the same file again\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragging(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragging(false)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragging(false)\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n }\n\n const handleRemove = async (file: LMUploadFile) => {\n if (onRemove) {\n const result = await onRemove(file)\n if (result === false) return\n }\n\n // Revoke object URL to prevent memory leaks\n if (file.url?.startsWith('blob:')) {\n URL.revokeObjectURL(file.url)\n }\n\n const newFileList = fileList.filter(f => f.uid !== file.uid)\n updateFileList(newFileList)\n }\n\n const handleClick = () => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }\n\n const iconSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-6 h-6',\n sm: 'w-7 h-7',\n md: 'w-8 h-8',\n lg: 'w-10 h-10',\n xl: 'w-12 h-12',\n '2xl': 'w-14 h-14',\n }\n\n const thumbSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-10 h-10',\n sm: 'w-12 h-12',\n md: 'w-14 h-14',\n lg: 'w-16 h-16',\n xl: 'w-20 h-20',\n '2xl': 'w-24 h-24',\n }\n\n const getDropzoneStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error ? 'var(--lm-error-300)' : 'var(--lm-border-default)',\n }\n\n if (disabled) {\n return {\n ...base,\n backgroundColor: 'var(--lm-bg-paper)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n\n if (isDragging) {\n return {\n ...base,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-400)',\n }\n }\n\n return base\n }\n\n const renderFileItem = (file: LMUploadFile) => {\n const isImage = isImageFile(file)\n\n return (\n <div\n key={file.uid}\n className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} ${SIZE_PADDING_CLASSES[resolvedSize]} rounded-xl border transition-all duration-200`}\n style={{\n backgroundColor: file.status === 'error' ? 'var(--lm-error-50)' : 'var(--lm-bg-paper)',\n borderColor: file.status === 'error' ? 'var(--lm-error-200)' : 'var(--lm-border-light)',\n }}\n >\n {/* Thumbnail / Icon */}\n {listType === 'picture' && isImage && file.url ? (\n <div\n className={`${thumbSizeClasses[resolvedSize]} rounded-lg overflow-hidden flex-shrink-0`}\n style={{ backgroundColor: 'var(--lm-bg-elevated)' }}\n >\n <img\n src={file.url}\n alt={file.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div\n className=\"p-2 rounded-lg flex-shrink-0\"\n style={{\n backgroundColor: file.status === 'error' ? 'var(--lm-error-100)' : 'var(--lm-bg-elevated)',\n color: file.status === 'error' ? 'var(--lm-error-500)' : 'var(--lm-text-secondary)',\n }}\n >\n {isImage ? <ImageIcon className=\"w-5 h-5\" /> : <FileIcon className=\"w-5 h-5\" />}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span\n className={`${SIZE_TEXT_CLASSES[resolvedSize]} font-medium truncate`}\n style={{ color: file.status === 'error' ? 'var(--lm-error-700)' : 'var(--lm-text-primary)' }}\n title={file.name}\n >\n {file.name}\n </span>\n {file.status === 'done' && (\n <span style={{ color: 'var(--lm-success-500)' }}>\n <CheckIcon className=\"w-4 h-4\" />\n </span>\n )}\n {file.status === 'error' && (\n <span style={{ color: 'var(--lm-error-500)' }}>\n <ErrorIcon className=\"w-4 h-4\" />\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs\" style={{ color: 'var(--lm-text-tertiary)' }}>\n {formatFileSize(file.size)}\n </span>\n {file.status === 'error' && file.error && (\n <span className=\"text-xs\" style={{ color: 'var(--lm-error-500)' }}>\n {file.error}\n </span>\n )}\n </div>\n\n {/* Progress bar */}\n {file.status === 'uploading' && (\n <div className=\"mt-2\">\n <div\n className=\"h-1.5 rounded-full overflow-hidden\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n >\n <div\n className=\"h-full rounded-full transition-all duration-300\"\n style={{\n width: `${file.percent || 0}%`,\n backgroundColor: 'var(--lm-primary-500)',\n }}\n />\n </div>\n </div>\n )}\n </div>\n\n {/* Remove button */}\n <button\n type=\"button\"\n className=\"p-1.5 rounded-lg transition-colors duration-200 hover:bg-[var(--lm-bg-hover)] flex-shrink-0\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n onClick={() => handleRemove(file)}\n aria-label={`删除 ${file.name}`}\n >\n <DeleteIcon />\n </button>\n </div>\n )\n }\n\n return (\n <div className={className}>\n {/* Hidden file input */}\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"hidden\"\n aria-describedby={errorMessage ? `${inputId}-error` : undefined}\n />\n\n {/* Upload area */}\n {children ? (\n <div onClick={handleClick} style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}>\n {children}\n </div>\n ) : (\n <div\n className={`\n ${SIZE_PADDING_CLASSES[resolvedSize]}\n border-2 border-dashed rounded-2xl\n flex flex-col items-center justify-center\n transition-all duration-200\n ${disabled ? '' : 'cursor-pointer hover:border-[var(--lm-primary-400)]'}\n `}\n style={getDropzoneStyles()}\n onClick={handleClick}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n >\n <div\n className=\"mb-3\"\n style={{ color: isDragging ? 'var(--lm-primary-500)' : 'var(--lm-text-tertiary)' }}\n >\n <UploadIcon className={iconSizeClasses[resolvedSize]} />\n </div>\n <p\n className={`${SIZE_TEXT_CLASSES[resolvedSize]} font-medium text-center`}\n style={{ color: isDragging ? 'var(--lm-primary-600)' : 'var(--lm-text-secondary)' }}\n >\n {placeholder}\n </p>\n {hint && (\n <p\n className=\"text-xs mt-2 text-center\"\n style={{ color: 'var(--lm-text-tertiary)' }}\n >\n {hint}\n </p>\n )}\n </div>\n )}\n\n {/* Error message */}\n {error && errorMessage && (\n <p\n id={`${inputId}-error`}\n className=\"text-xs flex items-center gap-1 mt-2\"\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\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\n {/* File list */}\n {showFileList && fileList.length > 0 && (\n <div className={`mt-4 space-y-2`}>\n {fileList.map(renderFileItem)}\n </div>\n )}\n </div>\n )\n}\n\nexport default LMUpload\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 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","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, { useState } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Card title */\n title?: React.ReactNode\n /** Extra content in the top-right corner */\n extra?: React.ReactNode\n /** Card content */\n children: React.ReactNode\n /** Card size */\n size?: ComponentSize\n /** Show border */\n bordered?: boolean\n /** Hoverable effect */\n hoverable?: boolean\n /** Loading state - shows skeleton */\n loading?: boolean\n /** Cover image at top */\n cover?: React.ReactNode\n /** Actions at bottom */\n actions?: React.ReactNode[]\n /** Visual variant */\n variant?: 'default' | 'elevated' | 'outline' | 'soft'\n /** Custom class name */\n className?: string\n}\n\nconst LMCard: React.FC<LMCardProps> = ({\n title,\n extra,\n children,\n size = 'md',\n bordered = true,\n hoverable = false,\n loading = false,\n cover,\n actions,\n variant = 'default',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [isHovered, setIsHovered] = useState(false)\n\n const titleTextClasses: Record<ComponentSize, string> = {\n xs: 'text-sm',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n }\n\n const roundedClasses = 'rounded-2xl'\n const borderClasses = bordered ? 'border' : ''\n const hoverableClasses = hoverable ? 'cursor-pointer transition-all duration-300' : ''\n\n const baseClassName = `\n ${roundedClasses} ${borderClasses} ${hoverableClasses}\n backdrop-blur-md transition-all duration-300 overflow-hidden\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const getCardStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseStyles,\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'none',\n }\n case 'soft':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n boxShadow: 'none',\n }\n default:\n return baseStyles\n }\n }\n\n const getHoverStyles = (): React.CSSProperties => {\n if (!hoverable) return {}\n\n const baseHover: React.CSSProperties = {\n boxShadow: 'var(--lm-shadow-lg)',\n borderColor: 'var(--lm-border-strong)',\n transform: 'translateY(-2px)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseHover,\n boxShadow: 'var(--lm-shadow-xl)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'soft':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return baseHover\n }\n }\n\n const currentStyles = isHovered && hoverable ? { ...getCardStyles(), ...getHoverStyles() } : getCardStyles()\n\n // Loading skeleton\n const renderSkeleton = () => (\n <div className=\"animate-pulse\">\n {title && (\n <div className=\"mb-4\">\n <div\n className=\"h-4 rounded w-1/3\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n )}\n <div className=\"space-y-3\">\n <div\n className=\"h-4 rounded w-full\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-5/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-4/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n </div>\n )\n\n // Header section\n const renderHeader = () => {\n if (!title && !extra) return null\n\n return (\n <div\n className={`flex items-center justify-between ${SIZE_GAP_CLASSES[resolvedSize]} border-b`}\n style={{\n borderColor: 'var(--lm-border-light)',\n padding: `${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[0].replace('px-', '')}rem ${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[1]?.replace('py-', '') || '1'}rem`,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n paddingTop: '0.75rem',\n paddingBottom: '0.75rem',\n }}\n >\n {title && (\n <div\n className={`${titleTextClasses[resolvedSize]} font-semibold`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </div>\n )}\n {extra && (\n <div\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {extra}\n </div>\n )}\n </div>\n )\n }\n\n // Actions section\n const renderActions = () => {\n if (!actions || actions.length === 0) return null\n\n return (\n <div\n className=\"flex items-center border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n >\n {actions.map((action, index) => (\n <div\n key={index}\n className={`flex-1 flex items-center justify-center py-3 transition-colors duration-200 hover:bg-[var(--lm-bg-hover)] ${\n index !== actions.length - 1 ? 'border-r' : ''\n }`}\n style={{\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-secondary)',\n }}\n >\n {action}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={baseClassName}\n style={currentStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...rest}\n >\n {/* Cover image */}\n {cover && (\n <div className=\"w-full overflow-hidden\">\n {cover}\n </div>\n )}\n\n {/* Header */}\n {renderHeader()}\n\n {/* Body */}\n <div className={SIZE_PADDING_CLASSES[resolvedSize]}>\n {loading ? renderSkeleton() : children}\n </div>\n\n {/* Actions */}\n {renderActions()}\n </div>\n )\n}\n\nexport default LMCard\n","import React, { useState, useRef, useEffect, useCallback } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMTabItem {\n /** Unique key */\n key: string\n /** Tab label */\n label: React.ReactNode\n /** Tab content */\n children?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Icon before label */\n icon?: React.ReactNode\n}\n\nexport interface LMTabsProps {\n /** Controlled active key */\n activeKey?: string\n /** Default active key */\n defaultActiveKey?: string\n /** Tab items */\n items: LMTabItem[]\n /** Tab style type */\n type?: 'line' | 'card' | 'rounded'\n /** Component size */\n size?: ComponentSize\n /** Center tabs */\n centered?: boolean\n /** Extra content on the right */\n tabBarExtraContent?: React.ReactNode\n /** Active key change handler */\n onChange?: (activeKey: string) => void\n /** Tab click handler */\n onTabClick?: (key: string) => void\n /** Custom class name */\n className?: string\n}\n\nconst LMTabs: React.FC<LMTabsProps> = ({\n activeKey: controlledActiveKey,\n defaultActiveKey,\n items,\n type = 'line',\n size = 'md',\n centered = false,\n tabBarExtraContent,\n onChange,\n onTabClick,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || items[0]?.key || ''\n )\n const [inkStyle, setInkStyle] = useState<React.CSSProperties>({})\n const tabsRef = useRef<HTMLDivElement>(null)\n const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n\n const activeKey = controlledActiveKey ?? internalActiveKey\n\n const tabPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-3 py-1.5',\n md: 'px-4 py-2',\n lg: 'px-5 py-2.5',\n xl: 'px-6 py-3',\n '2xl': 'px-8 py-4',\n }\n\n const cardPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-3 py-1.5',\n md: 'px-4 py-2',\n lg: 'px-5 py-2.5',\n xl: 'px-6 py-3',\n '2xl': 'px-8 py-4',\n }\n\n const updateInkBar = useCallback(() => {\n if (type !== 'line') return\n\n const activeTab = tabRefs.current.get(activeKey)\n const container = tabsRef.current\n\n if (activeTab && container) {\n const containerRect = container.getBoundingClientRect()\n const tabRect = activeTab.getBoundingClientRect()\n\n setInkStyle({\n left: tabRect.left - containerRect.left,\n width: tabRect.width,\n })\n }\n }, [activeKey, type])\n\n useEffect(() => {\n updateInkBar()\n }, [updateInkBar])\n\n useEffect(() => {\n const handleResize = () => updateInkBar()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [updateInkBar])\n\n const handleTabClick = (item: LMTabItem) => {\n if (item.disabled) return\n\n onTabClick?.(item.key)\n\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(item.key)\n }\n onChange?.(item.key)\n }\n\n const getTabStyles = (item: LMTabItem, isActive: boolean): React.CSSProperties => {\n if (item.disabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (type === 'line') {\n return {\n color: isActive ? 'var(--lm-primary-600)' : 'var(--lm-text-secondary)',\n backgroundColor: 'transparent',\n }\n }\n\n if (type === 'card') {\n return {\n color: isActive ? 'var(--lm-primary-600)' : 'var(--lm-text-secondary)',\n backgroundColor: isActive ? 'var(--lm-bg-elevated)' : 'transparent',\n borderColor: isActive ? 'var(--lm-border-default)' : 'transparent',\n borderBottomColor: isActive ? 'var(--lm-bg-elevated)' : 'transparent',\n }\n }\n\n // rounded\n return {\n color: isActive ? 'white' : 'var(--lm-text-secondary)',\n backgroundColor: isActive ? 'var(--lm-primary-500)' : 'transparent',\n }\n }\n\n const getTabHoverStyles = (item: LMTabItem, isActive: boolean): React.CSSProperties => {\n if (item.disabled || isActive) return {}\n\n if (type === 'line') {\n return {\n color: 'var(--lm-text-primary)',\n }\n }\n\n if (type === 'card') {\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: 'var(--lm-bg-hover)',\n }\n }\n\n // rounded\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: 'var(--lm-bg-hover)',\n }\n }\n\n const renderTab = (item: LMTabItem) => {\n const isActive = item.key === activeKey\n\n const baseClasses = `\n ${type === 'line' ? tabPaddingClasses[resolvedSize] : cardPaddingClasses[resolvedSize]}\n ${SIZE_TEXT_CLASSES[resolvedSize]}\n flex items-center ${SIZE_GAP_CLASSES[resolvedSize]}\n font-medium transition-all duration-200\n outline-none focus:ring-2 focus:ring-offset-1 focus:ring-[var(--lm-primary-400)]\n `\n\n const typeClasses = {\n line: '',\n card: `border border-b-0 rounded-t-lg ${isActive ? '-mb-px' : ''}`,\n rounded: 'rounded-full',\n }\n\n return (\n <button\n key={item.key}\n ref={(el) => {\n if (el) tabRefs.current.set(item.key, el)\n }}\n className={`${baseClasses} ${typeClasses[type]}`}\n style={getTabStyles(item, isActive)}\n onClick={() => handleTabClick(item)}\n disabled={item.disabled}\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={item.disabled}\n tabIndex={isActive ? 0 : -1}\n onMouseEnter={(e) => {\n if (!item.disabled && !isActive) {\n Object.assign(e.currentTarget.style, getTabHoverStyles(item, isActive))\n }\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getTabStyles(item, isActive))\n }}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n )\n }\n\n const activeItem = items.find((item) => item.key === activeKey)\n\n return (\n <div className={className}>\n {/* Tab bar */}\n <div\n className={`\n flex items-center\n ${centered ? 'justify-center' : 'justify-between'}\n ${type === 'line' ? 'border-b' : ''}\n ${type === 'card' ? 'border-b' : ''}\n `}\n style={{\n borderColor: type === 'line' || type === 'card' ? 'var(--lm-border-default)' : undefined,\n }}\n >\n {/* Tabs */}\n <div\n ref={tabsRef}\n className={`\n flex items-center relative\n ${type === 'rounded' ? `${SIZE_GAP_CLASSES[resolvedSize]} p-1 rounded-full` : ''}\n `}\n style={{\n backgroundColor: type === 'rounded' ? 'var(--lm-bg-paper)' : undefined,\n }}\n role=\"tablist\"\n >\n {items.map(renderTab)}\n\n {/* Ink bar for line type */}\n {type === 'line' && (\n <div\n className=\"absolute bottom-0 h-0.5 transition-all duration-300\"\n style={{\n ...inkStyle,\n backgroundColor: 'var(--lm-primary-500)',\n }}\n />\n )}\n </div>\n\n {/* Extra content */}\n {tabBarExtraContent && !centered && (\n <div className=\"flex-shrink-0 ml-4\">{tabBarExtraContent}</div>\n )}\n </div>\n\n {/* Tab content */}\n {activeItem?.children && (\n <div className=\"pt-4\" role=\"tabpanel\">\n {activeItem.children}\n </div>\n )}\n </div>\n )\n}\n\nexport default LMTabs\n","import React from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMEmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Custom image or preset type */\n image?: React.ReactNode | 'default' | 'simple'\n /** Custom image style */\n imageStyle?: React.CSSProperties\n /** Description text */\n description?: React.ReactNode\n /** Actions or extra content below description */\n children?: React.ReactNode\n /** Component size */\n size?: ComponentSize\n}\n\n/** Default empty illustration */\nconst DefaultImage: React.FC<{ size: ComponentSize }> = ({ size }) => {\n const sizeMap: Record<ComponentSize, number> = {\n xs: 64,\n sm: 80,\n md: 100,\n lg: 120,\n xl: 140,\n '2xl': 160,\n }\n const dimension = sizeMap[size]\n\n return (\n <svg\n width={dimension}\n height={dimension}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Box base */}\n <path\n d=\"M20 40L50 25L80 40V70L50 85L20 70V40Z\"\n fill=\"var(--lm-bg-paper)\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Box lid */}\n <path\n d=\"M20 40L50 55L80 40\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Center line */}\n <path\n d=\"M50 55V85\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Decorative circles */}\n <circle cx=\"35\" cy=\"20\" r=\"3\" fill=\"var(--lm-border-light)\" />\n <circle cx=\"65\" cy=\"18\" r=\"2\" fill=\"var(--lm-border-light)\" />\n <circle cx=\"75\" cy=\"28\" r=\"2.5\" fill=\"var(--lm-border-light)\" />\n </svg>\n )\n}\n\n/** Simple empty illustration */\nconst SimpleImage: React.FC<{ size: ComponentSize }> = ({ size }) => {\n const sizeMap: Record<ComponentSize, number> = {\n xs: 48,\n sm: 56,\n md: 64,\n lg: 72,\n xl: 80,\n '2xl': 88,\n }\n const dimension = sizeMap[size]\n\n return (\n <svg\n width={dimension}\n height={dimension}\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Simple file icon */}\n <rect\n x=\"16\"\n y=\"8\"\n width=\"32\"\n height=\"48\"\n rx=\"4\"\n fill=\"var(--lm-bg-paper)\"\n stroke=\"var(--lm-border-default)\"\n strokeWidth=\"2\"\n />\n {/* Lines */}\n <line\n x1=\"24\"\n y1=\"24\"\n x2=\"40\"\n y2=\"24\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"32\"\n x2=\"40\"\n y2=\"32\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"40\"\n x2=\"32\"\n y2=\"40\"\n stroke=\"var(--lm-border-light)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\nconst LMEmpty: React.FC<LMEmptyProps> = ({\n image = 'default',\n imageStyle,\n description = '暂无数据',\n children,\n size = 'md',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const descriptionTextClasses: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n\n const paddingClasses: Record<ComponentSize, string> = {\n xs: 'py-4',\n sm: 'py-6',\n md: 'py-8',\n lg: 'py-10',\n xl: 'py-12',\n '2xl': 'py-16',\n }\n\n const baseClassName = `\n flex flex-col items-center justify-center\n ${paddingClasses[resolvedSize]}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, ' ')\n\n const renderImage = () => {\n if (image === 'default') {\n return <DefaultImage size={resolvedSize} />\n }\n if (image === 'simple') {\n return <SimpleImage size={resolvedSize} />\n }\n return image\n }\n\n return (\n <div className={baseClassName} {...rest}>\n {/* Image */}\n {image && (\n <div\n className={`mb-4 ${SIZE_GAP_CLASSES[resolvedSize]}`}\n style={imageStyle}\n >\n {renderImage()}\n </div>\n )}\n\n {/* Description */}\n {description && (\n <p\n className={`${descriptionTextClasses[resolvedSize]} text-center`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {description}\n </p>\n )}\n\n {/* Actions */}\n {children && (\n <div className={`mt-4 ${SIZE_GAP_CLASSES[resolvedSize]}`}>\n {children}\n </div>\n )}\n </div>\n )\n}\n\nexport default LMEmpty\n","import React, { useState, useCallback } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMMenuItem {\n /** Unique key */\n key: string\n /** Menu item label */\n label: React.ReactNode\n /** Icon before label */\n icon?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Sub menu items */\n children?: LMMenuItem[]\n /** Item type: group or divider */\n type?: 'group' | 'divider'\n}\n\nexport interface LMMenuProps {\n /** Menu items */\n items: LMMenuItem[]\n /** Menu mode */\n mode?: 'vertical' | 'horizontal' | 'inline'\n /** Menu theme */\n theme?: 'light' | 'dark'\n /** Selected keys (controlled) */\n selectedKeys?: string[]\n /** Default selected keys */\n defaultSelectedKeys?: string[]\n /** Open keys (controlled) */\n openKeys?: string[]\n /** Default open keys */\n defaultOpenKeys?: string[]\n /** Collapsed state (for inline mode) */\n collapsed?: boolean\n /** Collapsed width */\n collapsedWidth?: number\n /** Selection handler */\n onSelect?: (key: string, keyPath: string[]) => void\n /** Open change handler */\n onOpenChange?: (openKeys: string[]) => void\n /** Component size */\n size?: ComponentSize\n /** Custom class name */\n className?: string\n}\n\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg className={className || 'w-4 h-4'} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n)\n\n\nconst LMMenu: React.FC<LMMenuProps> = ({\n items,\n mode = 'inline',\n theme = 'light',\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n collapsed = false,\n collapsedWidth = 64,\n onSelect,\n onOpenChange,\n size = 'md',\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const itemPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-3 py-1.5',\n sm: 'px-3 py-2',\n md: 'px-4 py-2.5',\n lg: 'px-5 py-3',\n xl: 'px-6 py-3.5',\n '2xl': 'px-8 py-4',\n }\n\n const collapsedPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1.5',\n sm: 'px-2.5 py-2',\n md: 'px-3 py-2.5',\n lg: 'px-3.5 py-3',\n xl: 'px-4 py-3.5',\n '2xl': 'px-5 py-4',\n }\n\n const iconSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-4 h-4',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-5 h-5',\n xl: 'w-6 h-6',\n '2xl': 'w-6 h-6',\n }\n\n const handleSelect = useCallback((key: string, keyPath: string[]) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key, keyPath)\n }, [controlledSelectedKeys, onSelect])\n\n const handleOpenChange = useCallback((key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n }, [openKeys, controlledOpenKeys, onOpenChange])\n\n const getItemStyles = (isSelected: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled) {\n return {\n color: theme === 'dark' ? 'var(--lm-gray-600)' : 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n\n if (isSelected) {\n return {\n color: theme === 'dark' ? 'white' : 'var(--lm-primary-600)',\n backgroundColor: theme === 'dark' ? 'var(--lm-primary-600)' : 'var(--lm-primary-50)',\n }\n }\n\n return {\n color: theme === 'dark' ? 'var(--lm-gray-200)' : 'var(--lm-text-primary)',\n backgroundColor: 'transparent',\n }\n }\n\n const getHoverStyles = (isSelected: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled || isSelected) return {}\n\n return {\n backgroundColor: theme === 'dark' ? 'var(--lm-gray-700)' : 'var(--lm-bg-hover)',\n }\n }\n\n const renderMenuItem = (item: LMMenuItem, level: number = 0, keyPath: string[] = []) => {\n if (item.type === 'divider') {\n return (\n <div\n key={item.key}\n className=\"my-2 mx-3 border-t\"\n style={{ borderColor: theme === 'dark' ? 'var(--lm-gray-700)' : 'var(--lm-border-light)' }}\n />\n )\n }\n\n if (item.type === 'group') {\n return (\n <div key={item.key} className=\"py-2\">\n <div\n className={`${collapsed ? collapsedPaddingClasses[resolvedSize] : itemPaddingClasses[resolvedSize]} text-xs font-semibold uppercase tracking-wider`}\n style={{ color: theme === 'dark' ? 'var(--lm-gray-500)' : 'var(--lm-text-tertiary)' }}\n >\n {!collapsed && item.label}\n </div>\n {item.children?.map((child) => renderMenuItem(child, level, [...keyPath, item.key]))}\n </div>\n )\n }\n\n const hasChildren = !!(item.children && item.children.length > 0)\n const isOpen = openKeys.includes(item.key)\n const isSelected = selectedKeys.includes(item.key)\n const currentKeyPath = [...keyPath, item.key]\n const indentStyle = !collapsed && mode === 'inline' ? { paddingLeft: `${16 + level * 16}px` } : {}\n\n return (\n <div key={item.key}>\n <MenuItem\n item={item}\n size={resolvedSize}\n collapsed={collapsed}\n hasChildren={hasChildren}\n isOpen={isOpen}\n isSelected={isSelected}\n theme={theme}\n mode={mode}\n paddingClass={collapsed ? collapsedPaddingClasses[resolvedSize] : itemPaddingClasses[resolvedSize]}\n textClass={SIZE_TEXT_CLASSES[resolvedSize]}\n gapClass={SIZE_GAP_CLASSES[resolvedSize]}\n iconClass={iconSizeClasses[resolvedSize]}\n indentStyle={indentStyle}\n getStyles={getItemStyles}\n getHoverStyles={getHoverStyles}\n onSelect={() => {\n if (!item.disabled && !hasChildren) {\n handleSelect(item.key, currentKeyPath)\n }\n }}\n onToggle={() => {\n if (hasChildren && !item.disabled) {\n handleOpenChange(item.key)\n }\n }}\n />\n\n {/* Sub menu */}\n {hasChildren && isOpen && !collapsed && mode === 'inline' && (\n <div className=\"overflow-hidden transition-all duration-200\">\n {item.children?.map((child) => renderMenuItem(child, level + 1, currentKeyPath))}\n </div>\n )}\n </div>\n )\n }\n\n const containerStyles: React.CSSProperties = {\n width: collapsed ? collapsedWidth : undefined,\n backgroundColor: theme === 'dark' ? 'var(--lm-gray-900)' : 'var(--lm-bg-elevated)',\n transition: 'width 0.2s ease-in-out',\n }\n\n const flexDirection = mode === 'horizontal' ? 'row' : 'column'\n\n return (\n <nav\n className={`flex ${className}`}\n style={{\n ...containerStyles,\n flexDirection,\n }}\n role=\"menu\"\n >\n {items.map((item) => renderMenuItem(item))}\n </nav>\n )\n}\n\n// Separate MenuItem component for hover state\ninterface MenuItemInternalProps {\n item: LMMenuItem\n size: ComponentSize\n collapsed: boolean\n hasChildren: boolean\n isOpen: boolean\n isSelected: boolean\n theme: 'light' | 'dark'\n mode: 'vertical' | 'horizontal' | 'inline'\n paddingClass: string\n textClass: string\n gapClass: string\n iconClass: string\n indentStyle: React.CSSProperties\n getStyles: (isSelected: boolean, isDisabled: boolean) => React.CSSProperties\n getHoverStyles: (isSelected: boolean, isDisabled: boolean) => React.CSSProperties\n onSelect: () => void\n onToggle: () => void\n}\n\nconst MenuItem: React.FC<MenuItemInternalProps> = ({\n item,\n collapsed,\n hasChildren,\n isOpen,\n isSelected,\n paddingClass,\n textClass,\n gapClass,\n iconClass,\n indentStyle,\n getStyles,\n getHoverStyles,\n onSelect,\n onToggle,\n}) => {\n const [isHovered, setIsHovered] = useState(false)\n\n const baseStyles = getStyles(isSelected, item.disabled || false)\n const hoverStyles = isHovered ? getHoverStyles(isSelected, item.disabled || false) : {}\n\n return (\n <div\n className={`\n ${paddingClass} ${textClass}\n flex items-center ${gapClass}\n cursor-pointer transition-colors duration-150\n rounded-lg mx-2 my-0.5\n ${collapsed ? 'justify-center' : ''}\n `}\n style={{\n ...baseStyles,\n ...hoverStyles,\n ...indentStyle,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => {\n if (hasChildren) {\n onToggle()\n } else {\n onSelect()\n }\n }}\n role=\"menuitem\"\n aria-disabled={item.disabled || undefined}\n aria-expanded={hasChildren ? isOpen : undefined}\n title={collapsed ? (typeof item.label === 'string' ? item.label : undefined) : undefined}\n >\n {item.icon && (\n <span className={`flex-shrink-0 ${iconClass}`}>{item.icon}</span>\n )}\n\n {!collapsed && (\n <>\n <span className=\"flex-1 truncate\">{item.label}</span>\n\n {hasChildren && (\n <span\n className={`flex-shrink-0 transition-transform duration-200 ${\n isOpen ? 'rotate-180' : ''\n }`}\n >\n <ChevronDownIcon className=\"w-4 h-4\" />\n </span>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport default LMMenu\n","import React, { useState, useRef, useEffect, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMDropdownMenuItem {\n /** Unique key */\n key: string\n /** Menu item label */\n label: React.ReactNode\n /** Icon before label */\n icon?: React.ReactNode\n /** Disabled state */\n disabled?: boolean\n /** Danger style (red) */\n danger?: boolean\n /** Show as divider */\n divider?: boolean\n}\n\nexport interface LMDropdownProps {\n /** Trigger type */\n trigger?: 'click' | 'hover' | 'contextMenu'\n /** Menu items */\n menu: LMDropdownMenuItem[]\n /** Dropdown placement */\n placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight'\n /** Disabled state */\n disabled?: boolean\n /** Component size */\n size?: ComponentSize\n /** Trigger element */\n children: React.ReactNode\n /** Selection callback */\n onSelect?: (key: string) => void\n /** Visibility change callback */\n onVisibleChange?: (visible: boolean) => void\n /** Custom class name */\n className?: string\n}\n\nconst LMDropdown: React.FC<LMDropdownProps> = ({\n trigger = 'click',\n menu,\n placement = 'bottomLeft',\n disabled = false,\n size = 'md',\n children,\n onSelect,\n onVisibleChange,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const hoverTimeoutRef = useRef<number | null>(null)\n\n const itemPaddingClasses: Record<ComponentSize, string> = {\n xs: 'px-2 py-1',\n sm: 'px-2.5 py-1.5',\n md: 'px-3 py-2',\n lg: 'px-4 py-2.5',\n xl: 'px-5 py-3',\n '2xl': 'px-6 py-4',\n }\n\n const minWidthClasses: Record<ComponentSize, string> = {\n xs: 'min-w-[100px]',\n sm: 'min-w-[120px]',\n md: 'min-w-[140px]',\n lg: 'min-w-[160px]',\n xl: 'min-w-[180px]',\n '2xl': 'min-w-[200px]',\n }\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !dropdownRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const dropdownRect = dropdownRef.current.getBoundingClientRect()\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n\n let top = 0\n let left = 0\n\n switch (placement) {\n case 'bottomLeft':\n top = triggerRect.bottom + scrollY + 4\n left = triggerRect.left + scrollX\n break\n case 'bottomRight':\n top = triggerRect.bottom + scrollY + 4\n left = triggerRect.right + scrollX - dropdownRect.width\n break\n case 'topLeft':\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n left = triggerRect.left + scrollX\n break\n case 'topRight':\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n left = triggerRect.right + scrollX - dropdownRect.width\n break\n }\n\n // Boundary check\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n if (left + dropdownRect.width > viewportWidth + scrollX) {\n left = viewportWidth + scrollX - dropdownRect.width - 8\n }\n if (left < scrollX) {\n left = scrollX + 8\n }\n if (top + dropdownRect.height > viewportHeight + scrollY) {\n top = triggerRect.top + scrollY - dropdownRect.height - 4\n }\n if (top < scrollY) {\n top = triggerRect.bottom + scrollY + 4\n }\n\n setPosition({ top, left })\n }, [placement])\n\n const show = useCallback(() => {\n if (disabled) return\n setVisible(true)\n onVisibleChange?.(true)\n }, [disabled, onVisibleChange])\n\n const hide = useCallback(() => {\n setVisible(false)\n onVisibleChange?.(false)\n }, [onVisibleChange])\n\n const toggle = useCallback(() => {\n if (visible) {\n hide()\n } else {\n show()\n }\n }, [visible, show, hide])\n\n // Handle click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current &&\n !triggerRef.current.contains(e.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n hide()\n }\n }\n\n if (visible) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [visible, hide])\n\n // Update position when visible\n useEffect(() => {\n if (visible) {\n updatePosition()\n }\n }, [visible, updatePosition])\n\n // Handle scroll and resize\n useEffect(() => {\n if (visible) {\n const handleScrollResize = () => updatePosition()\n window.addEventListener('scroll', handleScrollResize, true)\n window.addEventListener('resize', handleScrollResize)\n return () => {\n window.removeEventListener('scroll', handleScrollResize, true)\n window.removeEventListener('resize', handleScrollResize)\n }\n }\n }, [visible, updatePosition])\n\n const handleTriggerClick = () => {\n if (trigger === 'click') {\n toggle()\n }\n }\n\n const handleTriggerMouseEnter = () => {\n if (trigger === 'hover') {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n show()\n }\n }\n\n const handleTriggerMouseLeave = () => {\n if (trigger === 'hover') {\n hoverTimeoutRef.current = window.setTimeout(() => {\n hide()\n }, 100)\n }\n }\n\n const handleDropdownMouseEnter = () => {\n if (trigger === 'hover' && hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n }\n\n const handleDropdownMouseLeave = () => {\n if (trigger === 'hover') {\n hoverTimeoutRef.current = window.setTimeout(() => {\n hide()\n }, 100)\n }\n }\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (trigger === 'contextMenu') {\n e.preventDefault()\n toggle()\n }\n }\n\n const handleItemClick = (item: LMDropdownMenuItem) => {\n if (item.disabled || item.divider) return\n onSelect?.(item.key)\n hide()\n }\n\n const getItemStyles = (item: LMDropdownMenuItem, isHovered: boolean): React.CSSProperties => {\n if (item.disabled) {\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n if (item.danger) {\n return {\n color: isHovered ? 'white' : 'var(--lm-error-600)',\n backgroundColor: isHovered ? 'var(--lm-error-500)' : 'transparent',\n }\n }\n return {\n color: 'var(--lm-text-primary)',\n backgroundColor: isHovered ? 'var(--lm-bg-hover)' : 'transparent',\n }\n }\n\n const dropdownContent = visible && (\n <div\n ref={dropdownRef}\n className={`\n ${minWidthClasses[resolvedSize]}\n rounded-xl border backdrop-blur-md\n shadow-lg py-1\n `}\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 1000,\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n }}\n onMouseEnter={handleDropdownMouseEnter}\n onMouseLeave={handleDropdownMouseLeave}\n >\n {menu.map((item, index) => {\n if (item.divider) {\n return (\n <div\n key={item.key || `divider-${index}`}\n className=\"my-1 mx-2 border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n />\n )\n }\n\n return (\n <MenuItem\n key={item.key}\n item={item}\n size={resolvedSize}\n paddingClass={itemPaddingClasses[resolvedSize]}\n textClass={SIZE_TEXT_CLASSES[resolvedSize]}\n gapClass={SIZE_GAP_CLASSES[resolvedSize]}\n getStyles={getItemStyles}\n onClick={handleItemClick}\n />\n )\n })}\n </div>\n )\n\n return (\n <>\n <div\n ref={triggerRef}\n className={`inline-block ${className}`}\n onClick={handleTriggerClick}\n onMouseEnter={handleTriggerMouseEnter}\n onMouseLeave={handleTriggerMouseLeave}\n onContextMenu={handleContextMenu}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {children}\n </div>\n {typeof document !== 'undefined' && createPortal(dropdownContent, document.body)}\n </>\n )\n}\n\n// Separate MenuItem component for hover state\ninterface MenuItemProps {\n item: LMDropdownMenuItem\n size: ComponentSize\n paddingClass: string\n textClass: string\n gapClass: string\n getStyles: (item: LMDropdownMenuItem, isHovered: boolean) => React.CSSProperties\n onClick: (item: LMDropdownMenuItem) => void\n}\n\nconst MenuItem: React.FC<MenuItemProps> = ({\n item,\n paddingClass,\n textClass,\n gapClass,\n getStyles,\n onClick,\n}) => {\n const [isHovered, setIsHovered] = useState(false)\n\n return (\n <div\n className={`\n ${paddingClass} ${textClass}\n flex items-center ${gapClass}\n transition-colors duration-150\n cursor-pointer\n `}\n style={getStyles(item, isHovered)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onClick(item)}\n role=\"menuitem\"\n aria-disabled={item.disabled}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n </div>\n )\n}\n\nexport default LMDropdown\n","import React, { useState, useCallback, useMemo } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMPaginationProps {\n /** Current page number */\n current: number\n /** Total number of items */\n total: number\n /** Number of items per page */\n pageSize?: number\n /** Page size options */\n pageSizeOptions?: number[]\n /** Show quick jumper */\n showQuickJumper?: boolean\n /** Show page size changer */\n showSizeChanger?: boolean\n /** Show total count */\n showTotal?: boolean | ((total: number, range: [number, number]) => React.ReactNode)\n /** Component size */\n size?: ComponentSize\n /** Simple mode - only shows prev/next */\n simple?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Change handler */\n onChange?: (page: number, pageSize: number) => void\n /** Custom class name */\n className?: string\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 MoreIcon: 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=\"M5 12h.01M12 12h.01M19 12h.01\" />\n </svg>\n)\n\nconst LMPagination: React.FC<LMPaginationProps> = ({\n current,\n total,\n pageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n showQuickJumper = false,\n showSizeChanger = false,\n showTotal = false,\n size = 'md',\n simple = false,\n disabled = false,\n onChange,\n className = '',\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [jumpValue, setJumpValue] = useState('')\n const [internalPageSize, setInternalPageSize] = useState(pageSize)\n\n const totalPages = Math.ceil(total / internalPageSize)\n\n const buttonSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-7 h-7 text-sm',\n md: 'w-8 h-8 text-sm',\n lg: 'w-9 h-9 text-base',\n xl: 'w-10 h-10 text-base',\n '2xl': 'w-12 h-12 text-lg',\n }\n\n const inputSizeClasses: Record<ComponentSize, string> = {\n xs: 'w-10 h-6 text-xs px-1',\n sm: 'w-12 h-7 text-sm px-1',\n md: 'w-14 h-8 text-sm px-2',\n lg: 'w-16 h-9 text-base px-2',\n xl: 'w-18 h-10 text-base px-2',\n '2xl': 'w-20 h-12 text-lg px-3',\n }\n\n const handlePageChange = useCallback((page: number) => {\n if (disabled || page < 1 || page > totalPages || page === current) return\n onChange?.(page, internalPageSize)\n }, [disabled, totalPages, current, onChange, internalPageSize])\n\n const handlePageSizeChange = useCallback((newSize: number) => {\n setInternalPageSize(newSize)\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = Math.min(current, newTotalPages)\n onChange?.(newCurrent, newSize)\n }, [total, current, onChange])\n\n const handleJump = useCallback(() => {\n const page = parseInt(jumpValue, 10)\n if (!isNaN(page) && page >= 1 && page <= totalPages) {\n handlePageChange(page)\n }\n setJumpValue('')\n }, [jumpValue, totalPages, handlePageChange])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n handleJump()\n }\n }, [handleJump])\n\n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const pages: (number | 'prev-more' | 'next-more')[] = []\n const showPrevMore = current > 4\n const showNextMore = current < totalPages - 3\n\n if (totalPages <= 7) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n\n if (showPrevMore) {\n pages.push('prev-more')\n }\n\n const start = showPrevMore ? Math.max(2, current - 1) : 2\n const end = showNextMore ? Math.min(totalPages - 1, current + 1) : totalPages - 1\n\n for (let i = start; i <= end; i++) {\n if (i > 1 && i < totalPages) {\n pages.push(i)\n }\n }\n\n if (showNextMore) {\n pages.push('next-more')\n }\n\n if (totalPages > 1) {\n pages.push(totalPages)\n }\n }\n\n return pages\n }, [current, totalPages])\n\n const getButtonStyles = (isActive: boolean, isDisabled: boolean): React.CSSProperties => {\n if (isDisabled) {\n return {\n backgroundColor: 'transparent',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n }\n }\n if (isActive) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'var(--lm-primary-500)',\n }\n }\n return {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }\n }\n\n const getButtonHoverStyles = (): React.CSSProperties => ({\n backgroundColor: 'var(--lm-bg-hover)',\n borderColor: 'var(--lm-primary-400)',\n color: 'var(--lm-primary-600)',\n })\n\n const range: [number, number] = [\n Math.min((current - 1) * internalPageSize + 1, total),\n Math.min(current * internalPageSize, total),\n ]\n\n // Simple mode\n if (simple) {\n return (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} ${className}`}>\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current <= 1)}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current <= 1}\n onMouseEnter={(e) => {\n if (!disabled && current > 1) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current <= 1))\n }}\n >\n <ChevronLeftIcon />\n </button>\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {current} / {totalPages}\n </span>\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current >= totalPages)}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current >= totalPages}\n onMouseEnter={(e) => {\n if (!disabled && current < totalPages) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current >= totalPages))\n }}\n >\n <ChevronRightIcon />\n </button>\n </div>\n )\n }\n\n return (\n <div className={`flex items-center flex-wrap ${SIZE_GAP_CLASSES[resolvedSize]} ${className}`}>\n {/* Total count */}\n {showTotal && (\n <span\n className={`${SIZE_TEXT_CLASSES[resolvedSize]} mr-2`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {typeof showTotal === 'function'\n ? showTotal(total, range)\n : `共 ${total} 条`}\n </span>\n )}\n\n {/* Previous button */}\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current <= 1)}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current <= 1}\n aria-label=\"上一页\"\n onMouseEnter={(e) => {\n if (!disabled && current > 1) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current <= 1))\n }}\n >\n <ChevronLeftIcon />\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) => {\n if (page === 'prev-more' || page === 'next-more') {\n return (\n <button\n key={`more-${index}`}\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg flex items-center justify-center`}\n style={{ color: 'var(--lm-text-secondary)' }}\n onClick={() => handlePageChange(page === 'prev-more' ? current - 5 : current + 5)}\n disabled={disabled}\n >\n <MoreIcon />\n </button>\n )\n }\n\n const isActive = page === current\n return (\n <button\n key={page}\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(isActive, disabled)}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n aria-current={isActive ? 'page' : undefined}\n onMouseEnter={(e) => {\n if (!disabled && !isActive) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(isActive, disabled))\n }}\n >\n {page}\n </button>\n )\n })}\n\n {/* Next button */}\n <button\n className={`${buttonSizeClasses[resolvedSize]} rounded-lg border flex items-center justify-center transition-all duration-200`}\n style={getButtonStyles(false, disabled || current >= totalPages)}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current >= totalPages}\n aria-label=\"下一页\"\n onMouseEnter={(e) => {\n if (!disabled && current < totalPages) Object.assign(e.currentTarget.style, getButtonHoverStyles())\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, getButtonStyles(false, disabled || current >= totalPages))\n }}\n >\n <ChevronRightIcon />\n </button>\n\n {/* Page size changer */}\n {showSizeChanger && (\n <select\n className={`${inputSizeClasses[resolvedSize]} rounded-lg border outline-none transition-all duration-200`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n value={internalPageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option} 条/页\n </option>\n ))}\n </select>\n )}\n\n {/* Quick jumper */}\n {showQuickJumper && (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]}`}>\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n 跳至\n </span>\n <input\n type=\"text\"\n className={`${inputSizeClasses[resolvedSize]} rounded-lg border outline-none text-center transition-all duration-200`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n value={jumpValue}\n onChange={(e) => setJumpValue(e.target.value.replace(/\\D/g, ''))}\n onBlur={handleJump}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <span\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n 页\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport default LMPagination\n","import React, { useEffect, useMemo } 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\nexport default LMMessage\n","import { useState, useCallback } from 'react'\nimport type { LMMessageItem } from '../components/Feedback/LMMessage/LMMessage'\n\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","import React, { useEffect, useRef, useCallback, memo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { LMButton } from '../../General/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\nconst CloseIcon: React.FC = () => (\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\nconst WindowIcon: React.FC = () => (\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\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 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, { useState, useEffect, useRef } 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 const animationFrameRef = useRef<number>()\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>()\n\n useEffect(() => {\n // Cleanup previous timers\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n if (visible) {\n setIsVisible(true)\n animationFrameRef.current = requestAnimationFrame(() => {\n setIsAnimating(true)\n })\n } else {\n setIsAnimating(false)\n timeoutRef.current = setTimeout(() => {\n setIsVisible(false)\n }, 200)\n }\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\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\nexport default LMConfirm\n","import React, { useState, useCallback } from 'react'\nimport type { LMConfirmProps } from '../components/Feedback/LMConfirm/LMConfirm'\nimport LMConfirm from '../components/Feedback/LMConfirm/LMConfirm'\n\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 React.createElement(LMConfirm, {\n visible,\n ...config,\n onConfirm: handleConfirm,\n onCancel: handleCancel,\n })\n }, [visible, config, handleConfirm, handleCancel])\n\n return {\n visible,\n config,\n confirm,\n ConfirmDialog,\n }\n}\n","import React, { useEffect, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nexport interface LMDrawerProps {\n /** Visibility state */\n visible: boolean\n /** Drawer title */\n title?: React.ReactNode\n /** Drawer content */\n children: React.ReactNode\n /** Drawer placement */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /** Drawer width (for left/right placement) */\n width?: string | number\n /** Drawer height (for top/bottom placement) */\n height?: string | number\n /** Show close button */\n closable?: boolean\n /** Show mask */\n mask?: boolean\n /** Close on mask click */\n maskClosable?: boolean\n /** Footer content */\n footer?: React.ReactNode\n /** Close handler */\n onClose?: () => void\n /** Component size */\n size?: ComponentSize\n /** Extra content in header */\n extra?: React.ReactNode\n /** Custom class name */\n className?: string\n /** Z-index */\n zIndex?: number\n}\n\nconst CloseIcon: React.FC = () => (\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nconst LMDrawer: React.FC<LMDrawerProps> = ({\n visible,\n title,\n children,\n placement = 'right',\n width = 378,\n height = 378,\n closable = true,\n mask = true,\n maskClosable = true,\n footer,\n onClose,\n size = 'md',\n extra,\n className = '',\n zIndex = 1000,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const titleTextClasses: Record<ComponentSize, string> = {\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 // Handle ESC key\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && visible) {\n onClose?.()\n }\n },\n [visible, onClose]\n )\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n\n // Lock body scroll when visible\n useEffect(() => {\n if (visible) {\n const originalOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = originalOverflow\n }\n }\n }, [visible])\n\n const handleMaskClick = () => {\n if (maskClosable) {\n onClose?.()\n }\n }\n\n const getDrawerStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n backgroundColor: 'var(--lm-bg-elevated)',\n boxShadow: 'var(--lm-shadow-xl)',\n display: 'flex',\n flexDirection: 'column',\n zIndex: zIndex + 1,\n transition: 'transform 0.3s ease-in-out',\n }\n\n const widthValue = typeof width === 'number' ? `${width}px` : width\n const heightValue = typeof height === 'number' ? `${height}px` : height\n\n switch (placement) {\n case 'right':\n return {\n ...base,\n top: 0,\n right: 0,\n bottom: 0,\n width: widthValue,\n maxWidth: '100vw',\n transform: visible ? 'translateX(0)' : 'translateX(100%)',\n }\n case 'left':\n return {\n ...base,\n top: 0,\n left: 0,\n bottom: 0,\n width: widthValue,\n maxWidth: '100vw',\n transform: visible ? 'translateX(0)' : 'translateX(-100%)',\n }\n case 'top':\n return {\n ...base,\n top: 0,\n left: 0,\n right: 0,\n height: heightValue,\n maxHeight: '100vh',\n transform: visible ? 'translateY(0)' : 'translateY(-100%)',\n }\n case 'bottom':\n return {\n ...base,\n bottom: 0,\n left: 0,\n right: 0,\n height: heightValue,\n maxHeight: '100vh',\n transform: visible ? 'translateY(0)' : 'translateY(100%)',\n }\n default:\n return base\n }\n }\n\n if (typeof document === 'undefined') return null\n\n const drawerContent = (\n <div\n className={className}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n pointerEvents: visible ? 'auto' : 'none',\n }}\n >\n {/* Mask */}\n {mask && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\n opacity: visible ? 1 : 0,\n transition: 'opacity 0.3s ease-in-out',\n zIndex,\n }}\n onClick={handleMaskClick}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Drawer */}\n <div\n style={getDrawerStyles()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'drawer-title' : undefined}\n >\n {/* Header */}\n {(title || closable || extra) && (\n <div\n className={`flex items-center justify-between ${SIZE_PADDING_CLASSES[resolvedSize]} border-b`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {title && (\n <h3\n id=\"drawer-title\"\n className={`${titleTextClasses[resolvedSize]} font-semibold truncate`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </h3>\n )}\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {extra}\n {closable && (\n <button\n className=\"p-1.5 rounded-lg transition-colors duration-200 hover:bg-[var(--lm-bg-hover)]\"\n style={{ color: 'var(--lm-text-secondary)' }}\n onClick={onClose}\n aria-label=\"关闭\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Body */}\n <div\n className={`flex-1 overflow-auto ${SIZE_PADDING_CLASSES[resolvedSize]}`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div\n className={`flex items-center justify-end gap-2 ${SIZE_PADDING_CLASSES[resolvedSize]} border-t`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n )\n\n return createPortal(drawerContent, document.body)\n}\n\nexport default LMDrawer\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":["sizeConfig","ClearIcon","CheckIcon","ChevronLeftIcon","ChevronRightIcon","value","MenuItem","CloseIcon","LMButton"],"mappings":"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"}