smart-dropzone-react
Version:
🚀 A production-ready React dropzone component with smart defaults, drag & drop reordering, chunked uploads, resume functionality, and comprehensive provider support (Cloudinary, AWS S3, Supabase)
1 lines • 8.89 kB
Source Map (JSON)
{"version":3,"sources":["../src/core/config.ts"],"names":["FILE_SIZE","TIMING","QUALITY","DIMENSIONS","UPLOAD","PERFORMANCE","LAYOUT","FORMATS","COLORS","TESTING","VIDEO","ConfigValidator","size","quality","width","height","attempts","timeout","DEFAULT_CONFIG"],"mappings":"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","file":"chunk-SMFYABWO.cjs","sourcesContent":["/**\r\n * Smart Dropzone Configuration Constants\r\n *\r\n * This file centralizes all configuration values to eliminate magic numbers\r\n * and provide a single source of truth for all configurable settings.\r\n */\r\n\r\n// File size constants (in bytes)\r\nexport const FILE_SIZE = {\r\n DEFAULT_MAX_SIZE: 10 * 1024 * 1024, // 10MB\r\n CHUNK_SIZE: 1024 * 1024, // 1MB chunks for upload resume\r\n BYTES_PER_KB: 1024,\r\n BYTES_PER_MB: 1024 * 1024,\r\n BYTES_PER_GB: 1024 * 1024 * 1024,\r\n BYTES_PER_TB: 1024 * 1024 * 1024 * 1024,\r\n} as const;\r\n\r\n// Animation and timing constants (in milliseconds)\r\nexport const TIMING = {\r\n ANIMATION_DURATION: 300,\r\n DRAG_TRANSITION_DURATION: 200,\r\n DEBOUNCE_DELAY: 300,\r\n RETRY_DELAY: 1000,\r\n RETRY_EXPONENTIAL_BASE: 2,\r\n PROGRESS_UPDATE_INTERVAL: 100,\r\n PERFORMANCE_TIMEOUT: 3000,\r\n TEST_TIMEOUT: 10000,\r\n STRESS_TEST_TIMEOUT: 30000,\r\n} as const;\r\n\r\n// Quality and compression settings\r\nexport const QUALITY = {\r\n DEFAULT_IMAGE_QUALITY: 0.8,\r\n HIGH_IMAGE_QUALITY: 0.9,\r\n THUMBNAIL_QUALITY: 0.8,\r\n VIDEO_THUMBNAIL_QUALITY: 0.9,\r\n GZIP_COMPRESSION_RATIO: 0.3,\r\n MINIFICATION_RATIO: 0.7,\r\n} as const;\r\n\r\n// Default dimensions and sizes\r\nexport const DIMENSIONS = {\r\n DEFAULT_MAX_WIDTH: 800,\r\n DEFAULT_MAX_HEIGHT: 600,\r\n THUMBNAIL_SIZE: 200,\r\n CUSTOM_THUMBNAIL_SIZE: 150,\r\n ACCESSIBILITY_HIDDEN_POSITION: -10000, // px\r\n DRAG_PREVIEW_Z_INDEX: 9999,\r\n PREVIEW_OPACITY: 0.8,\r\n} as const;\r\n\r\n// Upload and retry settings\r\nexport const UPLOAD = {\r\n MAX_RETRY_ATTEMPTS: 3,\r\n MAX_CONCURRENT_CHUNKS: 3,\r\n DEFAULT_MAX_FILES: 10,\r\n UPLOAD_SIMULATION_DELAY_MIN: 500,\r\n UPLOAD_SIMULATION_DELAY_RANGE: 1000,\r\n CLOUDINARY_POLLING_INTERVAL: 200,\r\n} as const;\r\n\r\n// Performance and bundle settings\r\nexport const PERFORMANCE = {\r\n ESTIMATED_BUNDLE_SIZE: 40 * 1024, // 40KB\r\n FILES_PER_SECOND_CALCULATION_DIVISOR: 1000,\r\n MEMORY_WARNING_THRESHOLD: 0.8,\r\n CPU_USAGE_POLLING_INTERVAL: 1000,\r\n PERFORMANCE_SCORE_MAX: 100,\r\n RENDER_TIME_WEIGHT: 10,\r\n UPLOAD_SPEED_WEIGHT: 1000000,\r\n MEMORY_USAGE_WEIGHT: 1000000,\r\n} as const;\r\n\r\n// Grid and layout settings\r\nexport const LAYOUT = {\r\n DRAG_THRESHOLD: 5,\r\n GRID_SIZE: 10,\r\n BORDER_RADIUS: 8, // px\r\n PADDING_SMALL: 4, // px\r\n PADDING_MEDIUM: 6, // px\r\n PADDING_LARGE: 8, // px\r\n} as const;\r\n\r\n// Image format settings\r\nexport const FORMATS = {\r\n DEFAULT_FORMAT: \"webp\" as const,\r\n FALLBACK_FORMAT: \"png\" as const,\r\n VIDEO_THUMBNAIL_FORMAT: \"webp\" as const,\r\n SUPPORTED_IMAGE_FORMATS: [\r\n \"image/jpeg\",\r\n \"image/jpg\",\r\n \"image/png\",\r\n \"image/webp\",\r\n \"image/gif\",\r\n \"image/bmp\",\r\n ] as const,\r\n SUPPORTED_VIDEO_FORMATS: [\r\n \"video/mp4\",\r\n \"video/webm\",\r\n \"video/ogg\",\r\n \"video/quicktime\",\r\n \"video/x-msvideo\",\r\n ] as const,\r\n} as const;\r\n\r\n// Color scheme constants\r\nexport const COLORS = {\r\n PRIMARY_BLUE: \"#3b82f6\",\r\n PRIMARY_BLUE_HOVER: \"#2563eb\",\r\n BACKGROUND_LIGHT: \"#ffffff\",\r\n BACKGROUND_DARK: \"#1f2937\",\r\n BACKGROUND_GRAY: \"#f9fafb\",\r\n BORDER_LIGHT: \"#d1d5db\",\r\n BORDER_FOCUS: \"#3b82f6\",\r\n TEXT_LIGHT: \"#374151\",\r\n TEXT_DARK: \"#ffffff\",\r\n ERROR_RED: \"#ef4444\",\r\n SUCCESS_GREEN: \"#10b981\",\r\n WARNING_YELLOW: \"#f59e0b\",\r\n} as const;\r\n\r\n// Test and development constants\r\nexport const TESTING = {\r\n LARGE_ARRAY_SIZE: 1000,\r\n STRESS_TEST_OPERATIONS: 100,\r\n CONCURRENT_OPERATIONS: 50,\r\n PERFORMANCE_BENCHMARK_THRESHOLD: 2000, // ms\r\n FILENAME_MAX_LENGTH: 300,\r\n} as const;\r\n\r\n// Video processing constants\r\nexport const VIDEO = {\r\n THUMBNAIL_SEEK_PERCENTAGE: 0.25, // 25% into video\r\n FALLBACK_SEEK_TIME: 1, // 1 second\r\n ESTIMATED_FRAME_RATE: 30,\r\n CODEC_DETECTION_MAP: {\r\n \"video/mp4\": \"H.264/AVC\",\r\n \"video/webm\": \"VP8/VP9\",\r\n \"video/ogg\": \"Theora\",\r\n \"video/quicktime\": \"H.264/HEVC\",\r\n \"video/x-msvideo\": \"MPEG-4\",\r\n } as const,\r\n} as const;\r\n\r\n/**\r\n * Configuration validation utilities\r\n */\r\nexport class ConfigValidator {\r\n static validateFileSize(size: number): boolean {\r\n return size > 0 && size <= FILE_SIZE.BYTES_PER_TB;\r\n }\r\n\r\n static validateQuality(quality: number): boolean {\r\n return quality >= 0 && quality <= 1;\r\n }\r\n\r\n static validateDimensions(width: number, height: number): boolean {\r\n return width > 0 && height > 0 && width <= 8192 && height <= 8192;\r\n }\r\n\r\n static validateRetryAttempts(attempts: number): boolean {\r\n return attempts >= 0 && attempts <= 10;\r\n }\r\n\r\n static validateTimeout(timeout: number): boolean {\r\n return timeout > 0 && timeout <= 300000; // Max 5 minutes\r\n }\r\n}\r\n\r\n/**\r\n * Type definitions for configuration objects\r\n */\r\nexport type FileFormatType =\r\n | (typeof FORMATS.SUPPORTED_IMAGE_FORMATS)[number]\r\n | (typeof FORMATS.SUPPORTED_VIDEO_FORMATS)[number];\r\nexport type ImageFormat = \"webp\" | \"jpeg\" | \"png\";\r\nexport type ColorTheme = \"light\" | \"dark\" | \"custom\";\r\nexport type ComponentSize = \"sm\" | \"md\" | \"lg\";\r\nexport type ComponentVariant = \"outlined\" | \"filled\" | \"minimal\";\r\n\r\n/**\r\n * Default configuration object combining all settings\r\n */\r\nexport const DEFAULT_CONFIG = {\r\n fileSize: FILE_SIZE,\r\n timing: TIMING,\r\n quality: QUALITY,\r\n dimensions: DIMENSIONS,\r\n upload: UPLOAD,\r\n performance: PERFORMANCE,\r\n layout: LAYOUT,\r\n formats: FORMATS,\r\n colors: COLORS,\r\n testing: TESTING,\r\n video: VIDEO,\r\n} as const;\r\n\r\nexport default DEFAULT_CONFIG;\r\n"]}