img-upload-kit 1.1.1 → 2.0.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.
Files changed (111) hide show
  1. package/CHANGELOG.md +89 -74
  2. package/MIGRATION.md +192 -0
  3. package/README.md +243 -259
  4. package/dist/bin.js +1186 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/blur.cjs +40 -412
  7. package/dist/blur.cjs.map +1 -1
  8. package/dist/blur.d.cts +5 -5
  9. package/dist/blur.d.ts +5 -5
  10. package/dist/blur.js +39 -393
  11. package/dist/blur.js.map +1 -1
  12. package/dist/blurDataUtils-DveBRtqE.d.cts +43 -0
  13. package/dist/blurDataUtils-yx9Q6HlU.d.ts +43 -0
  14. package/dist/blurService-D5TpMNji.d.ts +83 -0
  15. package/dist/blurService-DacwylJx.d.cts +83 -0
  16. package/dist/chunk-25GYKQ6J.js +158 -0
  17. package/dist/chunk-25GYKQ6J.js.map +1 -0
  18. package/dist/chunk-34L4TEE3.cjs +226 -0
  19. package/dist/chunk-34L4TEE3.cjs.map +1 -0
  20. package/dist/chunk-DFCSN3X7.cjs +158 -0
  21. package/dist/chunk-DFCSN3X7.cjs.map +1 -0
  22. package/dist/chunk-EWVIL57J.js +294 -0
  23. package/dist/chunk-EWVIL57J.js.map +1 -0
  24. package/dist/chunk-FP5YIWG5.cjs +135 -0
  25. package/dist/chunk-FP5YIWG5.cjs.map +1 -0
  26. package/dist/chunk-HILELQGS.js +226 -0
  27. package/dist/chunk-HILELQGS.js.map +1 -0
  28. package/dist/chunk-IDLLCVGB.js +2370 -0
  29. package/dist/chunk-IDLLCVGB.js.map +1 -0
  30. package/dist/chunk-J6A44Y3W.js +514 -0
  31. package/dist/chunk-J6A44Y3W.js.map +1 -0
  32. package/dist/chunk-LOSVFO56.cjs +145 -0
  33. package/dist/chunk-LOSVFO56.cjs.map +1 -0
  34. package/dist/chunk-MBQJ6NVJ.cjs +294 -0
  35. package/dist/chunk-MBQJ6NVJ.cjs.map +1 -0
  36. package/dist/chunk-MHGQEBPW.js +145 -0
  37. package/dist/chunk-MHGQEBPW.js.map +1 -0
  38. package/dist/chunk-QHU7FUO4.cjs +37 -0
  39. package/dist/chunk-QHU7FUO4.cjs.map +1 -0
  40. package/dist/chunk-S2IFAWJK.js +37 -0
  41. package/dist/chunk-S2IFAWJK.js.map +1 -0
  42. package/dist/chunk-TA5Y64JM.cjs +2370 -0
  43. package/dist/chunk-TA5Y64JM.cjs.map +1 -0
  44. package/dist/chunk-VYVZVUNI.js +135 -0
  45. package/dist/chunk-VYVZVUNI.js.map +1 -0
  46. package/dist/chunk-XKQMCY5Z.cjs +514 -0
  47. package/dist/chunk-XKQMCY5Z.cjs.map +1 -0
  48. package/dist/cli.cjs +273 -76
  49. package/dist/cli.cjs.map +1 -1
  50. package/dist/cli.js +269 -73
  51. package/dist/cli.js.map +1 -1
  52. package/dist/headless.cjs +8 -1880
  53. package/dist/headless.cjs.map +1 -1
  54. package/dist/headless.d.cts +3 -1
  55. package/dist/headless.d.ts +3 -1
  56. package/dist/headless.js +25 -1886
  57. package/dist/headless.js.map +1 -1
  58. package/dist/index-BIdnqtW8.d.ts +234 -0
  59. package/dist/index-Brk_uHs6.d.cts +234 -0
  60. package/dist/{index-FVXXKf2v.d.ts → index-CPMlaQsC.d.ts} +76 -153
  61. package/dist/{index-FVXXKf2v.d.cts → index-DHINe-rA.d.cts} +76 -153
  62. package/dist/index.cjs +64 -532
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +7 -4
  65. package/dist/index.d.ts +7 -4
  66. package/dist/index.js +63 -504
  67. package/dist/index.js.map +1 -1
  68. package/dist/{memoryAdapter-CBu7_3Pp.d.ts → memoryAdapter-Ck0ccZbF.d.cts} +3 -2
  69. package/dist/{memoryAdapter-BJjyLR-1.d.cts → memoryAdapter-DxEKaG0b.d.ts} +3 -2
  70. package/dist/placeholders-C4ftwaII.d.ts +5 -0
  71. package/dist/placeholders-x_3rt65M.d.cts +5 -0
  72. package/dist/react.cjs +1952 -3257
  73. package/dist/react.cjs.map +1 -1
  74. package/dist/react.d.cts +188 -50
  75. package/dist/react.d.ts +188 -50
  76. package/dist/react.js +1763 -3013
  77. package/dist/react.js.map +1 -1
  78. package/dist/server-handler.cjs +14 -0
  79. package/dist/server-handler.cjs.map +1 -0
  80. package/dist/server-handler.d.cts +3 -0
  81. package/dist/server-handler.d.ts +3 -0
  82. package/dist/server-handler.js +14 -0
  83. package/dist/server-handler.js.map +1 -0
  84. package/dist/server.cjs +1096 -532
  85. package/dist/server.cjs.map +1 -1
  86. package/dist/server.d.cts +77 -154
  87. package/dist/server.d.ts +77 -154
  88. package/dist/server.js +1050 -448
  89. package/dist/server.js.map +1 -1
  90. package/dist/storage.cjs +239 -232
  91. package/dist/storage.cjs.map +1 -1
  92. package/dist/storage.d.cts +21 -5
  93. package/dist/storage.d.ts +21 -5
  94. package/dist/storage.js +227 -207
  95. package/dist/storage.js.map +1 -1
  96. package/dist/styles/animated-image.css +112 -0
  97. package/dist/styles/dropzone-and-tiles.css +247 -0
  98. package/dist/styles/modals-and-dock.css +248 -0
  99. package/dist/styles/primitives.css +197 -0
  100. package/dist/styles/quality-and-inputs.css +184 -0
  101. package/dist/styles/tokens.css +123 -0
  102. package/dist/styles.css +235 -220
  103. package/dist/types-BrP-o9nd.d.cts +85 -0
  104. package/dist/types-sZ3KoFQY.d.ts +85 -0
  105. package/dist/types-yShGNQnW.d.cts +61 -0
  106. package/dist/types-yShGNQnW.d.ts +61 -0
  107. package/dist/{types-CiLY0DwB.d.cts → upload-C5Trd6Dh.d.cts} +27 -53
  108. package/dist/{types-CiLY0DwB.d.ts → upload-C5Trd6Dh.d.ts} +27 -53
  109. package/package.json +92 -32
  110. package/dist/blurService-DqsnfPTd.d.cts +0 -172
  111. package/dist/blurService-DqsnfPTd.d.ts +0 -172
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/utils/slotStyles.ts","../src/react/i18n/ar.ts","../src/react/i18n/en.ts","../src/react/i18n.ts","../src/react/context.tsx","../src/blur/lruCache.ts","../src/blur/pathMapper.ts","../src/blur/placeholders.ts","../src/blur/blurService.ts","../src/react/hooks/useBlurService.ts","../src/react/hooks/useDragAndDrop.ts","../src/react/hooks/useFilePreview.ts","../src/types/quality.ts","../src/types/presets.ts","../src/utils/formatters.ts","../src/react/hooks/xhrUpload.ts","../src/react/hooks/useImageUpload.ts","../src/react/hooks/index.ts","../src/utils/color.ts","../src/utils/validators.ts","../src/react/utils/sessionMetaCache.ts","../src/react/hooks/useSingleImageState.ts","../src/react/headless/useSingleUpload.ts","../src/react/hooks/useMultiImageState.ts","../src/react/headless/useMultiUpload.ts","../src/react/headless/HeadlessSingleUpload.tsx","../src/react/headless/HeadlessMultiUpload.tsx","../src/react/components/AltTextInput.tsx","../src/blur/blurDataUtils.ts","../src/react/components/BlurImage.tsx","../src/react/components/AltTextModal.tsx","../src/react/components/AnimatedImage/placeholder.ts","../src/react/components/AnimatedImage/useImageReveal.ts","../src/react/components/AnimatedImage/AnimatedImage.tsx","../src/react/components/BlurServiceDebugger.tsx","../src/react/utils/canvasSampler.ts","../src/react/components/BlurColorControls.tsx","../src/react/components/SaveButton.tsx","../src/react/components/BlurVisualizationModal.tsx","../src/react/components/MultiDropzoneViews.tsx","../src/react/components/MultiUploadHeaderAlerts.tsx","../src/react/components/PreviewTile.tsx","../src/react/components/QualitySelector.tsx","../src/react/components/UploadProgressPanel.tsx","../src/react/components/MultiImageUpload.tsx","../src/react/components/SingleDropzoneContent.tsx","../src/react/components/SingleImageUpload.tsx","../src/react/components/ImageUpload.tsx"],"names":["createContext","useMemo","jsx","useContext","useState","useCallback","useRef","useEffect","DEFAULT_ACCEPT","Fragment","useId","jsxs","TypeIcon","isBlurhashValid","decodeBlurHash","X","CheckCircle2","createPortal","PenTool","Wand2","Eye","ImagePlus","Upload","FolderOpen","Trash2","Loader2","XCircle","AlertTriangle","Save","Palette","Check","Zap","Info","ChevronUp","ChevronDown","Download","Minus"],"mappings":"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","file":"react.cjs","sourcesContent":["import type { CSSProperties } from 'react';\nimport type { UploadVisualState } from '../styling';\n\n/**\n * Inline style applied to `<input type=\"file\">` when `unstyled` mode is active\n * so hidden file inputs remain invisible even when `image-upload-kit/styles.css` is not imported.\n */\nexport const HIDDEN_INPUT_STYLE: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\n/**\n * Joins truthy CSS class names cleanly.\n */\nexport function cx(\n ...classes: Array<string | false | null | undefined>\n): string {\n return classes.filter(Boolean).join(' ');\n}\n\n/**\n * Resolves a component slot's final `className`:\n * - When `unstyled` is `false` (default): includes `defaultClass` followed by provider & prop overrides.\n * - When `unstyled` is `true`: strips `defaultClass` (`iuk-*`) and applies only user-supplied classes.\n */\nexport function resolveSlotClass(\n defaultClass: string | undefined,\n unstyled: boolean | undefined,\n ...customClasses: Array<string | false | null | undefined>\n): string | undefined {\n const merged = unstyled\n ? cx(...customClasses)\n : cx(defaultClass, ...customClasses);\n return merged || undefined;\n}\n\n/**\n * Merges multiple optional inline `CSSProperties` objects for a slot.\n */\nexport function resolveSlotStyle(\n ...styles: Array<CSSProperties | undefined>\n): CSSProperties | undefined {\n let result: CSSProperties | undefined;\n for (const style of styles) {\n if (style) {\n result = result ? { ...result, ...style } : { ...style };\n }\n }\n return result;\n}\n\n/**\n * Computes a deterministic semantic state string for `data-state=\"...\"` styling\n * (e.g. Tailwind `data-[state=dragging]:border-indigo-500` or CSS `[data-state=\"uploading\"]`).\n */\nexport function resolveUploadDataState(flags: {\n disabled?: boolean;\n hasError?: boolean;\n isUploading?: boolean;\n isDragging?: boolean;\n hasContent?: boolean;\n}): UploadVisualState {\n if (flags.disabled) return 'disabled';\n if (flags.isDragging) return 'dragging';\n if (flags.isUploading) return 'uploading';\n if (flags.hasError) return 'error';\n if (flags.hasContent) return 'ready';\n return 'idle';\n}\n","import type { UploadTranslations } from './types';\n\nexport const arTranslations: UploadTranslations = {\n uploadWindow: 'نافذة الرفع',\n tapToResume: 'اضغط للاستئناف',\n restoreUploadWindow: 'استعادة نافذة الرفع',\n minimize: 'تصغير',\n minimizeUploader: 'تصغير نافذة الرفع',\n close: 'إغلاق',\n editPrefix: 'تعديل - {title}',\n uploadImage: 'رفع صورة',\n uploadImages: 'رفع صور',\n noValidImageFiles:\n 'لم يتم العثور على ملفات صور صالحة. يرجى اختيار صور (JPEG, PNG, WebP, AVIF, SVG).',\n selectedImagesSkipped:\n 'تم اختيار {imageCount} صورة. وتم تجاهل {skippedCount} ملف غير صوري.',\n queued: 'في الانتظار...',\n retrying: 'جاري إعادة المحاولة...',\n preparingUpload: 'جاري تجهيز الرفع...',\n uploadFailed: 'فشل الرفع',\n failedCreatePreview: 'تعذر إنشاء المعاينة',\n failedCreatePreviewFor: 'تعذر إنشاء معاينة للملف: {file}',\n selectAll: 'تحديد الكل',\n deselectAll: 'إلغاء تحديد الكل',\n removeSelected: 'حذف المحدد',\n uploading: 'جارٍ الرفع',\n someUploadsFailed: 'فشل رفع بعض الملفات.',\n retryFailedUploads: 'إعادة رفع الملفات الفاشلة',\n needsAltBeforeSave:\n 'يوجد {count} صورة بدون نص بديل. أضف وصفًا قبل الحفظ من زر الوصف على كل صورة.',\n selectFilesAria: 'اختيار ملفات',\n selectMoreFilesAria: 'اختيار ملفات إضافية',\n selectFolderAria: 'اختيار مجلد',\n dropImagesHere: 'أسقط الصور هنا',\n releaseToUpload: 'اترك للإفلات والرفع',\n dragDropOrChoose: 'اسحب وأفلت الصور هنا، أو اختر طريقة الرفع من الأسفل',\n selectFiles: 'اختيار ملفات',\n selectFolder: 'اختيار مجلد',\n supportsFormats: 'الصيغ المدعومة: JPEG, PNG, WebP, AVIF, SVG',\n maxPerFile: 'الحد الأقصى {size}MB لكل ملف',\n upToSizeMB: 'حتى {size} ميجابايت',\n dropHere: 'أسقط هنا',\n addMore: 'إضافة المزيد',\n files: 'ملفات',\n folder: 'مجلد',\n withoutAltText: '{count} بدون نص بديل',\n saveImages: 'حفظ الصور',\n addAltBeforeSaving:\n 'يرجى إضافة نص بديل قبل الحفظ. اضغط زر الوصف على الصورة.',\n missingDescription: 'الوصف مفقود',\n saveImage: 'حفظ الصورة',\n downloadImage: 'تحميل الصورة',\n dragDropOrClickToUpload: 'اسحب وأفلت أو انقر للرفع',\n browseFiles: 'تصفح الملفات',\n image: 'صورة',\n processing: 'جارٍ المعالجة...',\n uploadImageAria: 'رفع صورة',\n fileInputAria: 'حقل اختيار ملف',\n uploadingAlt: 'جارٍ الرفع',\n previewAlt: 'معاينة',\n addImageDescription: 'إضافة وصف للصورة',\n describeImagePlaceholder: 'صف هذه الصورة لإمكانية الوصول...',\n characters: 'حرف',\n usedForA11ySeo: 'يُستخدم لإمكانية الوصول وتحسين الظهور في البحث',\n cancel: 'إلغاء',\n saveDescription: 'حفظ الوصف',\n selectImageAria: 'تحديد الصورة',\n editAltTextAria: 'تعديل النص البديل',\n addAltTextAria: 'إضافة نص بديل',\n addDescriptionForA11y: 'أضف وصفًا لإمكانية الوصول',\n adjustBlurColorAria: 'ضبط التمويه واللون',\n adjustBlurColorTitle: 'معاينة بيانات التمويه وضبط الألوان',\n removeImageAria: 'حذف الصورة',\n blurModal: {\n title: 'معاينة التمويه واللون السائد',\n closeModal: 'إغلاق المعاينة',\n adjustColor: 'لون الخلفية السائد',\n clickToSample: 'انقر في أي مكان على الصورة لالتقاط لون البكسل',\n pickColorNote:\n 'اختر لونًا من الأداة، أو أدخل كود HEX، أو التقط مباشرة من الصورة',\n enterHexColor: 'أدخل كود اللون HEX',\n hexPlaceholder: 'F5F5F5',\n enablePenMode: 'التقاط لون من الصورة',\n disablePenMode: 'إيقاف الالتقاط',\n penModeActive: 'وضع الالتقاط مفعل',\n resetToDetected: 'استعادة اللون التلقائي',\n sampled: 'تم التقاط',\n livePreview: 'معاينة حية للتمويه والصورة',\n showingOriginal: 'عرض الصورة الأصلية (لا يتوفر تمويه بعد)',\n saved: 'التوفير في الحجم:',\n accessibility: 'إمكانية الوصول ومحركات البحث',\n altText: 'النص البديل للصورة (Alt Text)',\n altTextPlaceholder: 'صف محتوى الصورة لقارئات الشاشة ومحركات البحث...',\n saveAndClose: 'حفظ وإغلاق',\n },\n};\n","import type { UploadTranslations } from './types';\n\nexport const enTranslations: UploadTranslations = {\n uploadWindow: 'Upload window',\n tapToResume: 'Tap to resume',\n restoreUploadWindow: 'Restore upload window',\n minimize: 'Minimize',\n minimizeUploader: 'Minimize uploader',\n close: 'Close',\n editPrefix: 'Edit - {title}',\n uploadImage: 'Upload Image',\n uploadImages: 'Upload Images',\n noValidImageFiles:\n 'No valid image files found. Please select image files (JPEG, PNG, WebP, AVIF, SVG).',\n selectedImagesSkipped:\n '{imageCount} image{imageSuffix} selected. {skippedCount} non-image file{skippedSuffix} skipped.',\n queued: 'Queued...',\n retrying: 'Retrying...',\n preparingUpload: 'Preparing upload...',\n uploadFailed: 'Upload failed',\n failedCreatePreview: 'Failed to create preview',\n failedCreatePreviewFor: 'Failed to create preview for {file}',\n selectAll: 'Select All',\n deselectAll: 'Deselect All',\n removeSelected: 'Remove Selected',\n uploading: 'Uploading',\n someUploadsFailed: 'Some uploads failed.',\n retryFailedUploads: 'Retry Failed Uploads',\n needsAltBeforeSave:\n '{count} image{suffix} need{verbSuffix} alt text before saving. Click the description button on each image.',\n selectFilesAria: 'Select files',\n selectMoreFilesAria: 'Select more files',\n selectFolderAria: 'Select folder',\n dropImagesHere: 'Drop images here',\n releaseToUpload: 'Release to upload',\n dragDropOrChoose: 'Drag and drop images here, or choose an option below',\n selectFiles: 'Select Files',\n selectFolder: 'Select Folder',\n supportsFormats: 'Supports: JPEG, PNG, WebP, AVIF, SVG',\n maxPerFile: 'Max {size}MB per file',\n upToSizeMB: 'Up to {size} MB',\n dropHere: 'Drop here',\n addMore: 'Add More',\n files: 'Files',\n folder: 'Folder',\n withoutAltText: '{count} without alt text',\n saveImages: 'Save Images',\n addAltBeforeSaving:\n 'Please add alt text before saving. Click the description button on the image.',\n missingDescription: 'Missing description',\n saveImage: 'Save Image',\n downloadImage: 'Download Image',\n dragDropOrClickToUpload: 'Drag & drop or click to upload',\n browseFiles: 'Browse Files',\n image: 'Image',\n processing: 'Processing...',\n uploadImageAria: 'Upload image',\n fileInputAria: 'File input',\n uploadingAlt: 'Uploading',\n previewAlt: 'Preview',\n addImageDescription: 'Add Image Description',\n describeImagePlaceholder: 'Describe this image for accessibility...',\n characters: 'characters',\n usedForA11ySeo: 'Used for accessibility & SEO',\n cancel: 'Cancel',\n saveDescription: 'Save Description',\n selectImageAria: 'Select image',\n editAltTextAria: 'Edit alt text',\n addAltTextAria: 'Add alt text',\n addDescriptionForA11y: 'Add description for accessibility',\n adjustBlurColorAria: 'Adjust blur and color',\n adjustBlurColorTitle: 'Visualize blur data and adjust colors',\n removeImageAria: 'Remove image',\n blurModal: {\n title: 'Blur & Dominant Color Inspector',\n closeModal: 'Close inspector',\n adjustColor: 'Dominant Backdrop Color',\n clickToSample: 'Click anywhere on the image preview to sample a pixel color',\n pickColorNote:\n 'Use the picker, enter a HEX code, or sample directly from the image',\n enterHexColor: 'Enter HEX color',\n hexPlaceholder: 'F5F5F5',\n enablePenMode: 'Eyedropper Sample',\n disablePenMode: 'Exit Eyedropper',\n penModeActive: 'Sampling Active',\n resetToDetected: 'Reset to Detected',\n sampled: 'Sampled',\n livePreview: 'Live Placeholder & Image Preview',\n showingOriginal: 'Showing original image (blur placeholder not generated yet)',\n saved: 'Size Saved:',\n accessibility: 'Accessibility & SEO',\n altText: 'Image Alt Text',\n altTextPlaceholder:\n 'Describe this image for screen readers and search engines...',\n saveAndClose: 'Save & Close',\n },\n};\n","import type { UploadLocale } from '../types';\nimport { arTranslations } from './i18n/ar';\nimport { enTranslations } from './i18n/en';\nimport type {\n BlurModalTranslations,\n UploadTranslations,\n} from './i18n/types';\n\nexport { arTranslations, enTranslations };\nexport type { BlurModalTranslations, UploadTranslations };\n\nexport function normalizeUploadLocale(locale?: string): UploadLocale {\n if (locale && locale.toLowerCase().startsWith('ar')) {\n return 'ar';\n }\n if (typeof document !== 'undefined') {\n const docLang =\n document.documentElement.getAttribute('lang') ||\n document.documentElement.getAttribute('dir');\n if (!locale && (docLang === 'ar' || docLang === 'rtl')) {\n return 'ar';\n }\n }\n return 'en';\n}\n\nexport const uploadText: Record<UploadLocale, UploadTranslations> = {\n en: enTranslations,\n ar: arTranslations,\n};\n\nexport function resolveTranslations(\n locale?: UploadLocale,\n overrides?: Partial<UploadTranslations>,\n): UploadTranslations {\n const base = uploadText[normalizeUploadLocale(locale)];\n if (!overrides) return base;\n return {\n ...base,\n ...overrides,\n blurModal: {\n ...base.blurModal,\n ...(overrides.blurModal || {}),\n },\n };\n}\n","import { createContext, type ReactNode, useContext, useMemo } from 'react';\nimport type { UploadLocale } from '../types';\nimport type { UploadTranslations } from './i18n';\nimport type {\n MultiUploadClassNames,\n MultiUploadStyles,\n SingleUploadClassNames,\n SingleUploadStyles,\n} from './styling';\nimport type { CustomImageRenderer, CustomUploaderFn } from './types';\n\nexport interface ImageUploadContextValue {\n endpoint: string;\n uploader?: CustomUploaderFn;\n headers?: Record<string, string>;\n withCredentials?: boolean;\n locale: UploadLocale;\n translations?: Partial<UploadTranslations>;\n renderImage?: CustomImageRenderer;\n storageKeyPrefix: string;\n requireAltText: boolean;\n unstyled: boolean;\n singleClassNames?: SingleUploadClassNames;\n singleStyles?: SingleUploadStyles;\n multiClassNames?: MultiUploadClassNames;\n multiStyles?: MultiUploadStyles;\n}\n\nconst DEFAULT_CONTEXT: ImageUploadContextValue = {\n endpoint: '/api/upload',\n locale: 'en',\n storageKeyPrefix: 'iuk',\n requireAltText: true,\n unstyled: false,\n};\n\nconst ImageUploadContext =\n createContext<ImageUploadContextValue>(DEFAULT_CONTEXT);\n\nexport interface ImageUploadProviderProps {\n children: ReactNode;\n /** Default server endpoint for uploads (defaults to `'/api/upload'`) */\n endpoint?: string;\n /** Custom async uploader function used across all upload components */\n uploader?: CustomUploaderFn;\n /** Custom HTTP headers attached to FormData upload requests */\n headers?: Record<string, string>;\n /** Send credentials/cookies with XHR/fetch requests */\n withCredentials?: boolean;\n /** Default UI locale (`'en' | 'ar'`) */\n locale?: UploadLocale;\n /** Global translation overrides */\n translations?: Partial<UploadTranslations>;\n /** Custom image component renderer (e.g. for custom CDN or framework `<Image />`) */\n renderImage?: CustomImageRenderer;\n /** Prefix used for sessionStorage metadata cache keys (defaults to `'iuk'`) */\n storageKeyPrefix?: string;\n /** Require alt text before saving in modal mode (defaults to `true`) */\n requireAltText?: boolean;\n /** Globally strip default `iuk-*` classes across all Single/Multi upload components */\n unstyled?: boolean;\n /** Global default slot `classNames` applied to all `<SingleImageUpload />` instances */\n singleClassNames?: SingleUploadClassNames;\n /** Global default slot `styles` applied to all `<SingleImageUpload />` instances */\n singleStyles?: SingleUploadStyles;\n /** Global default slot `classNames` applied to all `<MultiImageUpload />` instances */\n multiClassNames?: MultiUploadClassNames;\n /** Global default slot `styles` applied to all `<MultiImageUpload />` instances */\n multiStyles?: MultiUploadStyles;\n}\n\nexport function ImageUploadProvider({\n children,\n endpoint = '/api/upload',\n uploader,\n headers,\n withCredentials,\n locale = 'en',\n translations,\n renderImage,\n storageKeyPrefix = 'iuk',\n requireAltText = true,\n unstyled = false,\n singleClassNames,\n singleStyles,\n multiClassNames,\n multiStyles,\n}: ImageUploadProviderProps) {\n const value = useMemo<ImageUploadContextValue>(\n () => ({\n endpoint,\n uploader,\n headers,\n withCredentials,\n locale,\n translations,\n renderImage,\n storageKeyPrefix,\n requireAltText,\n unstyled,\n singleClassNames,\n singleStyles,\n multiClassNames,\n multiStyles,\n }),\n [\n endpoint,\n uploader,\n headers,\n withCredentials,\n locale,\n translations,\n renderImage,\n storageKeyPrefix,\n requireAltText,\n unstyled,\n singleClassNames,\n singleStyles,\n multiClassNames,\n multiStyles,\n ],\n );\n\n return (\n <ImageUploadContext.Provider value={value}>\n {children}\n </ImageUploadContext.Provider>\n );\n}\n\nexport function useImageUploadContext(): ImageUploadContextValue {\n return useContext(ImageUploadContext);\n}\n","export class LRUCache<K, V> {\n private readonly maxSize: number;\n private readonly cache: Map<K, V>;\n\n constructor(maxSize: number = 500) {\n this.maxSize = Math.max(1, maxSize);\n this.cache = new Map();\n }\n\n get(key: K): V | undefined {\n if (!this.cache.has(key)) return undefined;\n\n const value = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, value);\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(key, value);\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n","export const DEFAULT_CDN_PATTERNS: RegExp[] = [\n /^https?:\\/\\/[^/]+\\.supabase\\.co\\/storage\\/v1\\/object\\/public\\/([^/]+)\\/(.+)$/,\n /^https?:\\/\\/[^/]+\\.r2\\.dev\\/(.+)$/,\n /^https?:\\/\\/[^/]+\\.amazonaws\\.com\\/(.+)$/,\n /^https?:\\/\\/[^/]+\\.cloudflare\\.com\\/(.+)$/,\n /^https?:\\/\\/cdn\\.[^/]+\\/(.+)$/,\n];\n\nexport interface NormalizePathOptions {\n cdnPatterns?: RegExp[];\n stripPrefixes?: string[];\n}\n\nexport interface PathInfo {\n normalizedPath: string;\n folder?: string;\n filename?: string;\n extension?: string;\n isExternal: boolean;\n originalPath: string;\n}\n\n/**\n * Project-agnostic image URL / path normalizer.\n * Strips query parameters, leading `/public/`, relative `./`, and common CDN prefixes\n * so manifest keys match consistently across local and CDN environments.\n */\nexport function normalizeImagePath(\n imageSrc: string,\n options: NormalizePathOptions = {},\n): PathInfo {\n const originalPath = imageSrc;\n let normalizedPath = imageSrc;\n let isExternal = false;\n\n try {\n if (imageSrc.startsWith('data:') || imageSrc.startsWith('blob:')) {\n return {\n normalizedPath: imageSrc,\n isExternal: false,\n originalPath,\n };\n }\n\n const patterns = options.cdnPatterns || DEFAULT_CDN_PATTERNS;\n\n if (imageSrc.startsWith('http://') || imageSrc.startsWith('https://')) {\n const url = new URL(imageSrc);\n isExternal = true;\n const cleanUrlNoQuery = `${url.origin}${url.pathname}`;\n\n for (const pattern of patterns) {\n const match = cleanUrlNoQuery.match(pattern);\n if (match) {\n const pathPart = match[match.length - 1];\n normalizedPath = '/' + pathPart.replace(/^\\/+/, '');\n break;\n }\n }\n\n if (normalizedPath === imageSrc) {\n normalizedPath = url.pathname;\n }\n } else {\n normalizedPath = normalizedPath.split('?')[0].split('#')[0];\n }\n\n normalizedPath = normalizedPath.replace(/\\\\/g, '/').replace(/^\\.\\.?\\//g, '');\n\n if (!normalizedPath.startsWith('/')) {\n normalizedPath = '/' + normalizedPath;\n }\n\n const prefixesToStrip = options.stripPrefixes || ['/public/'];\n for (const prefix of prefixesToStrip) {\n if (normalizedPath.startsWith(prefix)) {\n normalizedPath = '/' + normalizedPath.slice(prefix.length).replace(/^\\/+/, '');\n }\n }\n\n const segments = normalizedPath.split('/').filter(Boolean);\n const filename = segments[segments.length - 1];\n const folder =\n segments.length > 1 ? segments.slice(0, -1).join('/') : undefined;\n const dotIdx = filename ? filename.lastIndexOf('.') : -1;\n const extension =\n filename && dotIdx > 0 ? filename.slice(dotIdx + 1).toLowerCase() : undefined;\n\n return {\n normalizedPath,\n folder,\n filename,\n extension,\n isExternal,\n originalPath,\n };\n } catch {\n return {\n normalizedPath: imageSrc,\n isExternal: false,\n originalPath,\n };\n }\n}\n","import type { BlurPlaceholderType } from './types';\n\nexport const DEFAULT_PLACEHOLDERS: Record<BlurPlaceholderType, string> = {\n default:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdmlld0JveD0iMCAwIDE1MCAxNTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudCIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3R5bGU9InN0b3AtY29sb3I6IzJhMzIzZDtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdHlsZT0ic3RvcC1jb2xvcjojMjEyNzMwO3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdHlsZT0ic3RvcC1jb2xvcjojMTgxZDI0O3N0b3Atb3BhY2l0eToxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3Qgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIGZpbGw9InVybCgjZ3JhZGllbnQpIi8+PC9zdmc+',\n hero:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkyMCIgaGVpZ2h0PSIxMDgwIiB2aWV3Qm94PSIwIDAgMTkyMCAxMDgwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaGVyb0dyYWRpZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdHlsZT0ic3RvcC1jb2xvcjojMmQzNzQ4O3N0b3Atb3BhY2l0eToxIi8+PHN0b3Agb2Zmc2V0PSIzMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiMyMzJiMzg7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjcwJSIgc3R5bGU9InN0b3AtY29sb3I6IzFlMjUzMDtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3R5bGU9InN0b3AtY29sb3I6IzE3MWQyNztzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHdpZHRoPSIxOTIwIiBoZWlnaHQ9IjEwODAiIGZpbGw9InVybCgjaGVyb0dyYWRpZW50KSIvPjwvc3ZnPg==',\n card:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDQwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJjYXJkR3JhZGllbnQiIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiMyYTMyM2Q7c3RvcC1vcGFjaXR5OjEiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiMxYzIyMmI7c3RvcC1vcGFjaXR5OjEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgZmlsbD0idXJsKCNjYXJkR3JhZGllbnQpIi8+PC9zdmc+',\n thumbnail:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9IiMyNDJiMzUiLz48L3N2Zz4=',\n};\n","import { LRUCache } from './lruCache';\nimport { normalizeImagePath, type NormalizePathOptions } from './pathMapper';\nimport { DEFAULT_PLACEHOLDERS } from './placeholders';\nimport type {\n BlurCacheEntry,\n BlurManifestData,\n BlurManifestEntry,\n BlurPlaceholderType,\n BlurServiceMetrics,\n BlurSize,\n} from './types';\n\nexport interface BlurServiceOptions {\n cacheSize?: number;\n manifest?: BlurManifestData | Record<string, BlurManifestEntry>;\n pathOptions?: NormalizePathOptions;\n}\n\nexport class BlurService {\n private blurData: Record<string, BlurManifestEntry>;\n private readonly cache: LRUCache<string, BlurCacheEntry>;\n private readonly pathOptions?: NormalizePathOptions;\n private metadata: {\n version: string;\n generatedAt: string;\n totalImages: number;\n };\n private metrics: BlurServiceMetrics;\n\n constructor(options: BlurServiceOptions = {}) {\n this.blurData = {};\n this.pathOptions = options.pathOptions;\n this.metadata = {\n version: '2.0',\n generatedAt: new Date().toISOString(),\n totalImages: 0,\n };\n this.cache = new LRUCache(options.cacheSize ?? 500);\n this.metrics = {\n totalRequests: 0,\n cacheHits: 0,\n cacheMisses: 0,\n errors: 0,\n };\n\n if (options.manifest) {\n this.loadManifest(options.manifest);\n }\n }\n\n /**\n * Hydrate the service with a generated `blur-hashes.json` manifest or hash map.\n */\n loadManifest(\n manifest: BlurManifestData | Record<string, BlurManifestEntry>,\n ): void {\n this.cache.clear();\n\n if ('hashes' in manifest && typeof manifest.hashes === 'object' && manifest.hashes !== null) {\n const typed = manifest as BlurManifestData;\n this.blurData = { ...typed.hashes };\n this.metadata = {\n version: typed.version || '2.0',\n generatedAt: typed.generatedAt || new Date().toISOString(),\n totalImages: Object.keys(this.blurData).length,\n };\n } else {\n this.blurData = { ...(manifest as Record<string, BlurManifestEntry>) };\n this.metadata = {\n version: '2.0',\n generatedAt: new Date().toISOString(),\n totalImages: Object.keys(this.blurData).length,\n };\n }\n }\n\n /**\n * Register or update a single image's blur data at runtime.\n */\n registerEntry(imagePath: string, entry: BlurManifestEntry): void {\n this.blurData[imagePath] = entry;\n this.metadata.totalImages = Object.keys(this.blurData).length;\n this.cache.clear();\n }\n\n getDefaultPlaceholder(type: BlurPlaceholderType = 'default'): string {\n return DEFAULT_PLACEHOLDERS[type];\n }\n\n private findBlurDataByPath(imageSrc: string): BlurManifestEntry | null {\n let data = this.blurData[imageSrc];\n if (data) return data;\n\n const pathInfo = normalizeImagePath(imageSrc, this.pathOptions);\n data = this.blurData[pathInfo.normalizedPath];\n if (data) return data;\n\n const withSlash = pathInfo.normalizedPath.startsWith('/')\n ? pathInfo.normalizedPath\n : '/' + pathInfo.normalizedPath;\n const withoutSlash = pathInfo.normalizedPath.replace(/^\\/+/, '');\n\n data = this.blurData[withSlash] || this.blurData[withoutSlash];\n if (data) return data;\n\n if (pathInfo.isExternal && pathInfo.originalPath !== imageSrc) {\n data = this.blurData[pathInfo.originalPath];\n if (data) return data;\n }\n\n return null;\n }\n\n getDominantColor(imageSrc: string): string {\n const data = this.findBlurDataByPath(imageSrc);\n return data?.color || '#E5E7EB';\n }\n\n getBlurDataURL(\n imageSrc: string,\n options: {\n type?: BlurPlaceholderType;\n size?: BlurSize;\n } = {},\n ): string {\n const { type = 'default', size = 'small' } = options;\n\n this.metrics.totalRequests++;\n\n const cacheKey = `${imageSrc}-${size}`;\n if (this.cache.has(cacheKey)) {\n this.metrics.cacheHits++;\n return this.cache.get(cacheKey)!.dataUrl;\n }\n\n this.metrics.cacheMisses++;\n\n if (Object.keys(this.blurData).length === 0) {\n return this.getDefaultPlaceholder(type);\n }\n\n const data = this.findBlurDataByPath(imageSrc);\n if (!data) {\n return this.getDefaultPlaceholder(type);\n }\n\n const blurDataURL =\n data.variants?.[size] ||\n data.variants?.small ||\n this.getDefaultPlaceholder(type);\n\n this.cache.set(cacheKey, {\n dataUrl: blurDataURL,\n timestamp: Date.now(),\n });\n\n return blurDataURL;\n }\n\n getBulkBlurData(\n imageSrcs: string[],\n options: {\n type?: BlurPlaceholderType;\n size?: BlurSize;\n } = {},\n ): Record<string, string> {\n const result: Record<string, string> = {};\n for (const imageSrc of imageSrcs) {\n result[imageSrc] = this.getBlurDataURL(imageSrc, options);\n }\n return result;\n }\n\n getProgressiveData(imageSrc: string, size: BlurSize = 'small') {\n return {\n color: this.getDominantColor(imageSrc),\n blur: this.getBlurDataURL(imageSrc, { size }),\n hasBlur: this.hasBlurHash(imageSrc),\n };\n }\n\n hasBlurHash(imageSrc: string): boolean {\n return Boolean(this.findBlurDataByPath(imageSrc));\n }\n\n getMetadata() {\n const cacheHitRate =\n this.metrics.totalRequests > 0\n ? (\n (this.metrics.cacheHits / this.metrics.totalRequests) *\n 100\n ).toFixed(2)\n : '0.00';\n\n return {\n ...this.metadata,\n cacheSize: this.cache.size,\n metrics: {\n ...this.metrics,\n cacheHitRate: `${cacheHitRate}%`,\n },\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n getBlurHash(imageSrc: string): string | null {\n const data = this.findBlurDataByPath(imageSrc);\n return data?.hash || null;\n }\n\n preloadBlurData(imageSrcs: string[], size: BlurSize = 'small'): void {\n for (const imageSrc of imageSrcs) {\n this.getBlurDataURL(imageSrc, { size });\n }\n }\n\n async fetchBlurDataForImage(\n imageSrc: string,\n type: BlurPlaceholderType = 'default',\n ): Promise<string> {\n return Promise.resolve(this.getBlurDataURL(imageSrc, { type }));\n }\n\n getAvailableKeys(): string[] {\n return Object.keys(this.blurData);\n }\n\n findMatchingKeys(searchTerm: string): string[] {\n const lower = searchTerm.toLowerCase();\n return Object.keys(this.blurData).filter((key) =>\n key.toLowerCase().includes(lower),\n );\n }\n}\n\nexport function createBlurService(options?: BlurServiceOptions): BlurService {\n return new BlurService(options);\n}\n\nexport const blurService = new BlurService();\n","import { useMemo } from 'react';\nimport { blurService } from '../../blur/blurService';\nimport { DEFAULT_PLACEHOLDERS } from '../../blur/placeholders';\nimport type { BlurPlaceholderType, BlurSize } from '../../blur/types';\n\nexport function useBlurDataURL(\n imageSrc: string | undefined,\n options: {\n type?: BlurPlaceholderType;\n size?: BlurSize;\n } = {},\n): string {\n const { type = 'default', size = 'small' } = options;\n\n return useMemo(() => {\n if (!imageSrc) return DEFAULT_PLACEHOLDERS[type];\n return blurService.getBlurDataURL(imageSrc, { type, size });\n }, [imageSrc, type, size]);\n}\n\nexport function useBulkBlurData(\n imageSrcs: string[],\n options: {\n type?: BlurPlaceholderType;\n size?: BlurSize;\n } = {},\n): Record<string, string> {\n const { type = 'default', size = 'small' } = options;\n\n return useMemo(() => {\n return blurService.getBulkBlurData(imageSrcs, { type, size });\n }, [imageSrcs, type, size]);\n}\n\nexport function useProgressiveBlur(\n imageSrc: string | undefined,\n size: BlurSize = 'small',\n) {\n return useMemo(() => {\n if (!imageSrc) {\n return {\n color: '#E5E7EB',\n blur: DEFAULT_PLACEHOLDERS.default,\n hasBlur: false,\n };\n }\n return blurService.getProgressiveData(imageSrc, size);\n }, [imageSrc, size]);\n}\n\nexport function useHasBlurHash(imageSrc: string | undefined): boolean {\n return useMemo(() => {\n if (!imageSrc) return false;\n return blurService.hasBlurHash(imageSrc);\n }, [imageSrc]);\n}\n\nexport function useDominantColor(imageSrc: string | undefined): string {\n return useMemo(() => {\n if (!imageSrc) return '#E5E7EB';\n return blurService.getDominantColor(imageSrc);\n }, [imageSrc]);\n}\n\nexport function useBlurMetadata() {\n return useMemo(() => {\n return blurService.getMetadata();\n }, []);\n}\n\nexport function useBlurHash(imageSrc: string | undefined): string | null {\n return useMemo(() => {\n if (!imageSrc) return null;\n return blurService.getBlurHash(imageSrc);\n }, [imageSrc]);\n}\n\nexport function useBlurDataWithColor(\n imageSrc: string | undefined,\n size: BlurSize = 'small',\n): {\n blurDataUrl: string;\n blurColor: string;\n hasBlur: boolean;\n} {\n return useMemo(() => {\n if (!imageSrc) {\n return {\n blurDataUrl: DEFAULT_PLACEHOLDERS.default,\n blurColor: '#E5E7EB',\n hasBlur: false,\n };\n }\n const progressive = blurService.getProgressiveData(imageSrc, size);\n return {\n blurDataUrl: progressive.blur,\n blurColor: progressive.color,\n hasBlur: progressive.hasBlur,\n };\n }, [imageSrc, size]);\n}\n\nexport function useBlurVariant(\n imageSrc: string | undefined,\n size: BlurSize = 'small',\n type: BlurPlaceholderType = 'default',\n): string {\n return useMemo(() => {\n if (!imageSrc) return DEFAULT_PLACEHOLDERS[type];\n return blurService.getBlurDataURL(imageSrc, { type, size });\n }, [imageSrc, size, type]);\n}\n\nexport { blurService, DEFAULT_PLACEHOLDERS };\nexport type { BlurPlaceholderType, BlurSize };\n","import { type DragEvent, useCallback, useState } from 'react';\n\nexport interface UseDragAndDropOptions {\n disabled?: boolean;\n onDrop: (files: FileList) => void;\n}\n\nexport function useDragAndDrop({ disabled, onDrop }: UseDragAndDropOptions) {\n const [isDragging, setIsDragging] = useState(false);\n\n const handleDragEnter = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) {\n setIsDragging(true);\n }\n },\n [disabled],\n );\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n if (disabled) return;\n\n const files = e.dataTransfer.files;\n if (files && files.length > 0) {\n onDrop(files);\n }\n },\n [disabled, onDrop],\n );\n\n return {\n isDragging,\n dragHandlers: {\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n },\n };\n}\n","import { useCallback } from 'react';\n\nexport function useFilePreview() {\n const createPreview = useCallback((file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result as string);\n };\n reader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n reader.readAsDataURL(file);\n });\n }, []);\n\n return { createPreview };\n}\n","export type UploadLocale = 'en' | 'ar';\n\nexport type ImageOutputFormat = 'avif' | 'webp' | 'jpeg' | 'png' | 'svg';\n\nexport type ExplicitOutputFormat = 'avif' | 'webp' | 'jpeg' | 'png';\n\nexport type QualityLevel = 'low' | 'medium' | 'high' | 'maximum';\n\nexport interface QualityPreset {\n label: string;\n labelAr: string;\n value: number;\n description: string;\n descriptionAr: string;\n /** Rough fraction of original bytes after modern AVIF/WebP compression */\n compressionRatio: number;\n}\n\nexport const QUALITY_PRESETS: Record<QualityLevel, QualityPreset> = {\n low: {\n label: 'Low',\n labelAr: 'منخفضة',\n value: 50,\n description: 'Smallest file — best for tiny thumbnails and icons',\n descriptionAr: 'أصغر حجم — مناسب للمصغرات والأيقونات الصغيرة',\n compressionRatio: 0.12,\n },\n medium: {\n label: 'Medium',\n labelAr: 'متوسطة',\n value: 72,\n description: 'Balanced size and quality — suitable for most web images',\n descriptionAr: 'توازن بين الحجم والجودة — مناسب لمعظم صور الويب',\n compressionRatio: 0.22,\n },\n high: {\n label: 'High',\n labelAr: 'عالية',\n value: 85,\n description: 'Recommended — sharp visuals with excellent compression',\n descriptionAr: 'موصى به — جودة عالية وضغط ممتاز',\n compressionRatio: 0.3,\n },\n maximum: {\n label: 'Maximum',\n labelAr: 'أقصى جودة',\n value: 95,\n description: 'Closest to original — large file, use for hero / print',\n descriptionAr: 'أقرب للأصل — حجم كبير، مناسب للصور الرئيسية والطباعة',\n compressionRatio: 0.55,\n },\n};\n\nexport interface ImageDimensions {\n width: number;\n height: number;\n}\n","import type {\n ExplicitOutputFormat,\n ImageDimensions,\n QualityLevel,\n} from './quality';\n\n/**\n * Universal visual role presets (project-agnostic).\n * Consumers can define their own presets via `defineUploadPresets` / `createImageUploader({ presets })`\n * or augment `UploadKitRegister` for global type-safety.\n */\nexport type StandardPresetName =\n | 'thumbnail'\n | 'avatar'\n | 'card'\n | 'cover'\n | 'hero'\n | 'logo'\n | 'original';\n\n/**\n * Module augmentation hook for global preset autocomplete across a project:\n * ```ts\n * declare module 'img-upload-kit' {\n * interface UploadKitRegister {\n * presets: 'product-main' | 'product-thumb' | 'user-avatar';\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface UploadKitRegister {}\n\nexport type UploadPresetName = UploadKitRegister extends {\n presets: infer TCustom extends string;\n}\n ? TCustom\n : StandardPresetName | (string & {});\n\nexport interface UploadPresetConfig {\n /** Target storage bucket for this preset */\n bucket?: string;\n /** Default folder prefix within the bucket (e.g. 'avatars' or 'products/thumbnails') */\n folder?: string;\n /** Maximum bounding box dimensions (aspect ratio preserved, never enlarged) */\n maxDimensions?: ImageDimensions;\n /** Maximum allowed source file size in MB */\n maxSizeMB?: number;\n /** Allowed source MIME types */\n allowedFormats?: string[];\n /** Force a specific output format; omit for smart size-guarded AVIF/WebP optimization */\n outputFormat?: ExplicitOutputFormat;\n /** Default compression quality (1–100) */\n quality?: number;\n /** Recommended UI quality tab for React `<QualitySelector />` */\n recommendedQualityLevel?: QualityLevel;\n /** Optional guidance note shown in `<QualitySelector />` */\n recommendationNote?: { en: string; ar?: string };\n /** Generate compact BlurHash string alongside WebP LQIP data URL */\n includeBlurHash?: boolean;\n /** Optional local directory to mirror uploaded files into */\n mirrorDir?: string;\n /** Optional public URL prefix when `mirrorDir` is used */\n publicUrlBase?: string;\n}\n\nexport const DEFAULT_ALLOWED_FORMATS: string[] = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/avif',\n 'image/svg+xml',\n];\n\nexport const RASTER_ALLOWED_FORMATS: string[] = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/avif',\n];\n\nexport const DEFAULT_IMAGE_DIMENSIONS: ImageDimensions = {\n width: 1920,\n height: 1080,\n};\n\nexport const STANDARD_PRESETS: Record<StandardPresetName, UploadPresetConfig> = {\n thumbnail: {\n folder: 'thumbnails',\n maxDimensions: { width: 600, height: 600 },\n maxSizeMB: 5,\n quality: 78,\n recommendedQualityLevel: 'medium',\n allowedFormats: RASTER_ALLOWED_FORMATS,\n recommendationNote: {\n en: 'Thumbnails display at compact sizes — Medium quality keeps pages fast',\n ar: 'المصغرات تعرض بأحجام صغيرة — الجودة المتوسطة تحافظ على سرعة الصفحة',\n },\n },\n avatar: {\n folder: 'avatars',\n maxDimensions: { width: 512, height: 512 },\n maxSizeMB: 5,\n quality: 80,\n recommendedQualityLevel: 'medium',\n allowedFormats: RASTER_ALLOWED_FORMATS,\n recommendationNote: {\n en: 'Avatars display small — Medium quality balances sharpness and speed',\n ar: 'الصور الشخصية صغيرة — الجودة المتوسطة توازن بين الوضوح والسرعة',\n },\n },\n card: {\n folder: 'cards',\n maxDimensions: { width: 1200, height: 900 },\n maxSizeMB: 8,\n quality: 85,\n recommendedQualityLevel: 'high',\n allowedFormats: DEFAULT_ALLOWED_FORMATS,\n },\n cover: {\n folder: 'covers',\n maxDimensions: { width: 1920, height: 1080 },\n maxSizeMB: 10,\n quality: 88,\n recommendedQualityLevel: 'high',\n allowedFormats: DEFAULT_ALLOWED_FORMATS,\n },\n hero: {\n folder: 'hero',\n maxDimensions: { width: 2560, height: 1440 },\n maxSizeMB: 15,\n quality: 92,\n recommendedQualityLevel: 'maximum',\n allowedFormats: DEFAULT_ALLOWED_FORMATS,\n recommendationNote: {\n en: 'Full-width hero visuals benefit from Maximum quality to preserve fine detail',\n ar: 'الصور الرئيسية بعرض كامل تستفيد من الجودة القصوى للحفاظ على التفاصيل الدقيقة',\n },\n },\n logo: {\n folder: 'logos',\n maxDimensions: { width: 800, height: 800 },\n maxSizeMB: 5,\n quality: 90,\n recommendedQualityLevel: 'high',\n allowedFormats: DEFAULT_ALLOWED_FORMATS,\n recommendationNote: {\n en: 'Prefer SVG for vector logos — High quality preserves crisp edges on raster logos',\n ar: 'يفضل SVG للشعارات المتجهة — الجودة العالية تحافظ على حواف واضحة',\n },\n },\n original: {\n folder: 'originals',\n maxDimensions: { width: 4096, height: 4096 },\n maxSizeMB: 25,\n quality: 95,\n recommendedQualityLevel: 'maximum',\n allowedFormats: DEFAULT_ALLOWED_FORMATS,\n },\n};\n\n/**\n * Type-safe helper to define project-specific upload presets with full key inference.\n */\nexport function defineUploadPresets<\n T extends Record<string, UploadPresetConfig>,\n>(presets: T): T {\n return presets;\n}\n","import type { QualityLevel, UploadLocale } from '../types';\nimport { QUALITY_PRESETS } from '../types';\n\nexport function formatFileSize(bytes: number): string {\n if (bytes <= 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.min(\n sizes.length - 1,\n Math.floor(Math.log(bytes) / Math.log(k)),\n );\n return `${Math.round((bytes / Math.pow(k, i)) * 100) / 100} ${sizes[i]}`;\n}\n\nexport function calculateReduction(\n original: number,\n optimized: number,\n): number {\n if (original <= 0) return 0;\n return Math.round(((original - optimized) / original) * 100);\n}\n\nexport function estimateOutputSize(\n originalBytes: number,\n level: QualityLevel,\n): number {\n return Math.round(originalBytes * QUALITY_PRESETS[level].compressionRatio);\n}\n\nconst creativeMessages = [\n 'Sprinkling digital magic ✨',\n 'Painting pixels with perfection 🎨',\n 'Launching to the cloud 🚀',\n 'Creating something beautiful ⭐',\n 'Transforming your vision ⚡',\n 'Weaving visual excellence 💫',\n 'Crafting your masterpiece 🎭',\n 'Working our magic 🔮',\n 'Making it pixel-perfect ✨',\n 'Keep calm, creating magic 🎪',\n 'Hitting the sweet spot 🎯',\n 'Artist mode activated 🎨',\n 'Shooting for the stars 🌠',\n 'Compressing with love 💝',\n 'Enhancing quality 💎',\n 'Polishing to perfection ✨',\n];\n\nconst creativeMessagesAr = [\n 'نضيف لمسة رقمية ساحرة ✨',\n 'ننسق البكسلات بإتقان 🎨',\n 'الرفع جارٍ إلى السحابة 🚀',\n 'نصنع شيئاً جميلاً ⭐',\n 'نحوّل رؤيتك إلى واقع ⚡',\n 'نبني تجربة بصرية مميزة 💫',\n 'نصقل عملك باحتراف 🎭',\n 'السحر جارٍ الآن 🔮',\n 'نضبط كل بكسل بعناية ✨',\n 'اهدأ، نحن نهتم بالتفاصيل 🎪',\n 'نقترب من النتيجة المثالية 🎯',\n 'وضع الإبداع مفعل 🎨',\n 'نستهدف أفضل نتيجة 🌠',\n 'ضغط ذكي مع الحفاظ على الجودة 💝',\n 'تحسين الجودة مستمر 💎',\n 'اللمسات الأخيرة قيد التنفيذ ✨',\n];\n\nlet lastMessageIndex = -1;\n\nexport function getStatusMessage(\n progress: number,\n locale: UploadLocale = 'en',\n): string {\n const list = locale === 'ar' ? creativeMessagesAr : creativeMessages;\n const clampedProgress = Math.max(0, Math.min(99, progress));\n const messageIndex = Math.floor((clampedProgress / 100) * list.length);\n\n const useRandom = Math.random() > 0.7;\n let selectedIndex = useRandom\n ? Math.floor(Math.random() * list.length)\n : messageIndex;\n\n if (selectedIndex === lastMessageIndex && list.length > 1) {\n selectedIndex = (selectedIndex + 1) % list.length;\n }\n\n lastMessageIndex = selectedIndex;\n\n if (progress >= 95) {\n return locale === 'ar' ? '🎉 اقتربنا جداً...' : '🎉 Almost there...';\n }\n if (progress >= 85) {\n return locale === 'ar'\n ? '✨ نضع اللمسات الأخيرة...'\n : '✨ Polishing the final details...';\n }\n\n return list[selectedIndex];\n}\n\nexport function createSuccessMessage(\n originalSize: number,\n optimizedSize: number,\n compact: boolean = false,\n locale: UploadLocale = 'en',\n): string {\n const reduction = calculateReduction(originalSize, optimizedSize);\n const original = formatFileSize(originalSize);\n const optimized = formatFileSize(optimizedSize);\n\n if (compact) {\n if (reduction > 50) {\n return locale === 'ar'\n ? `🎉 أصغر بنسبة ${reduction}%! (${original} → ${optimized})`\n : `🎉 ${reduction}% smaller! (${original} → ${optimized})`;\n }\n if (reduction > 0) {\n return locale === 'ar'\n ? `✓ أصغر بنسبة ${reduction}% (${original} → ${optimized})`\n : `✓ ${reduction}% smaller (${original} → ${optimized})`;\n }\n return `✓ ${optimized}`;\n }\n\n if (reduction > 70) {\n return locale === 'ar'\n ? `🎉 رائع! تم تقليل الحجم بنسبة ${reduction}% (${original} → ${optimized})`\n : `🎉 Amazing! Reduced by ${reduction}% (${original} → ${optimized})`;\n }\n if (reduction > 50) {\n return locale === 'ar'\n ? `✨ ممتاز! تم تقليل الحجم بنسبة ${reduction}% (${original} → ${optimized})`\n : `✨ Great! Reduced by ${reduction}% (${original} → ${optimized})`;\n }\n if (reduction > 20) {\n return locale === 'ar'\n ? `✓ اكتمل الرفع! تم تقليل الحجم بنسبة ${reduction}% (${original} → ${optimized})`\n : `✓ Upload complete! Reduced by ${reduction}% (${original} → ${optimized})`;\n }\n return locale === 'ar'\n ? `✓ اكتمل الرفع! (${original} → ${optimized})`\n : `✓ Upload complete! (${original} → ${optimized})`;\n}\n\nexport function getFriendlyErrorMessage(\n error: string,\n locale: UploadLocale = 'en',\n): string {\n const lower = error.toLowerCase();\n if (lower.includes('size') || lower.includes('large') || lower.includes('exceeds')) {\n return locale === 'ar'\n ? 'الملف كبير جداً. يرجى اختيار صورة أصغر.'\n : 'File is too large. Please choose a smaller image.';\n }\n if (lower.includes('type') || lower.includes('format')) {\n return locale === 'ar'\n ? 'نوع الملف غير صالح. يرجى رفع صورة صالحة (JPEG, PNG, WebP, AVIF, SVG).'\n : 'Invalid file type. Please upload a valid image (JPEG, PNG, WebP, AVIF, SVG).';\n }\n if (lower.includes('network') || lower.includes('fetch')) {\n return locale === 'ar'\n ? 'حدث خطأ في الشبكة. يرجى التحقق من الاتصال والمحاولة مرة أخرى.'\n : 'Network error. Please check your connection and try again.';\n }\n if (lower.includes('timeout') || lower.includes('timed out')) {\n return locale === 'ar'\n ? 'انتهت مهلة الرفع. يرجى المحاولة مرة أخرى.'\n : 'Upload timed out. Please try again.';\n }\n if (error) return error;\n return locale === 'ar'\n ? 'فشل الرفع. يرجى المحاولة مرة أخرى.'\n : 'Upload failed. Please try again.';\n}\n","import type {\n ExplicitOutputFormat,\n ImageDimensions,\n UploadedImageData,\n} from '../../types';\n\nexport interface XhrUploadOptions {\n headers?: Record<string, string>;\n withCredentials?: boolean;\n fallbackErrorLabel?: string;\n onUploadProgress?: (percent: number) => void;\n}\n\nexport interface UploadFormFields {\n preset?: string;\n folder?: string;\n bucket?: string;\n altText?: string;\n customFilename?: string;\n outputFormat?: ExplicitOutputFormat;\n quality?: number;\n maxDimensions?: ImageDimensions;\n metadata?: Record<string, string>;\n}\n\nexport function parseErrorPayload(\n status: number,\n rawBody: string,\n fallbackLabel = 'Upload failed',\n): string {\n const statusInfo = `status ${status}`;\n let parsed: Record<string, unknown> | undefined;\n try {\n const json = JSON.parse(rawBody);\n if (json && typeof json === 'object') {\n parsed = json as Record<string, unknown>;\n }\n } catch {\n parsed = undefined;\n }\n\n const candidateKeys = ['error', 'message', 'detail', 'details'] as const;\n if (parsed) {\n for (const key of candidateKeys) {\n const val = parsed[key];\n if (typeof val === 'string' && val.trim()) {\n return `${val.trim()} (${statusInfo})`;\n }\n }\n }\n\n if (rawBody && rawBody.trim()) {\n return `${rawBody.trim()} (${statusInfo})`;\n }\n\n return `${fallbackLabel} (${statusInfo})`;\n}\n\nexport function buildUploadFormData(\n file: File | Blob,\n fields: UploadFormFields = {},\n): FormData {\n const {\n preset,\n folder,\n bucket,\n altText,\n customFilename,\n outputFormat,\n quality,\n maxDimensions,\n metadata,\n } = fields;\n\n const formData = new FormData();\n formData.append('file', file);\n if (preset) formData.append('preset', preset);\n if (folder) formData.append('folder', folder);\n if (bucket) formData.append('bucket', bucket);\n if (altText) formData.append('altText', altText);\n if (customFilename) formData.append('customFilename', customFilename);\n if (outputFormat) formData.append('outputFormat', outputFormat);\n if (quality !== undefined) formData.append('quality', String(quality));\n if (maxDimensions) {\n formData.append('maxWidth', String(maxDimensions.width));\n formData.append('maxHeight', String(maxDimensions.height));\n }\n if (metadata && Object.keys(metadata).length > 0) {\n formData.append('metadata', JSON.stringify(metadata));\n }\n\n return formData;\n}\n\nexport function uploadViaXhr(\n endpoint: string,\n formData: FormData,\n options: XhrUploadOptions = {},\n): Promise<UploadedImageData> {\n const fallbackLabel = options.fallbackErrorLabel || 'Upload failed';\n\n if (typeof XMLHttpRequest === 'undefined') {\n return fetch(endpoint, {\n method: 'POST',\n body: formData,\n headers: options.headers,\n credentials: options.withCredentials ? 'include' : 'same-origin',\n }).then(async (res) => {\n const text = await res.text();\n if (!res.ok) {\n throw new Error(parseErrorPayload(res.status, text, fallbackLabel));\n }\n return JSON.parse(text) as UploadedImageData;\n });\n }\n\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', endpoint, true);\n xhr.withCredentials = Boolean(options.withCredentials);\n\n if (options.headers) {\n for (const [key, value] of Object.entries(options.headers)) {\n xhr.setRequestHeader(key, value);\n }\n }\n\n xhr.upload.onprogress = (event) => {\n if (event.lengthComputable && event.total > 0) {\n const pct = Math.min(\n 85,\n Math.round((event.loaded / event.total) * 85),\n );\n options.onUploadProgress?.(pct);\n }\n };\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const parsed = JSON.parse(xhr.responseText) as UploadedImageData;\n resolve(parsed);\n } catch {\n reject(new Error('Invalid JSON response from upload endpoint'));\n }\n } else {\n reject(\n new Error(\n parseErrorPayload(xhr.status, xhr.responseText, fallbackLabel),\n ),\n );\n }\n };\n\n xhr.onerror = () => {\n reject(new Error('Network error during image upload'));\n };\n\n xhr.send(formData);\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type {\n ExplicitOutputFormat,\n ImageDimensions,\n UploadedImageData,\n UploadLocale,\n} from '../../types';\nimport {\n createSuccessMessage,\n getStatusMessage,\n} from '../../utils/formatters';\nimport { useImageUploadContext } from '../context';\nimport { normalizeUploadLocale, resolveTranslations } from '../i18n';\nimport type { CustomUploaderFn } from '../types';\nimport { buildUploadFormData, uploadViaXhr } from './xhrUpload';\n\nexport interface UseImageUploadOptions {\n preset?: string;\n folder?: string;\n bucket?: string;\n metadata?: Record<string, string>;\n altText?: string;\n outputFormat?: ExplicitOutputFormat;\n /** 1–100. When omitted, the server picks the preset or format default. */\n quality?: number;\n maxDimensions?: ImageDimensions;\n customFilename?: string;\n endpoint?: string;\n uploader?: CustomUploaderFn;\n headers?: Record<string, string>;\n withCredentials?: boolean;\n locale?: UploadLocale;\n onSuccess?: (data: UploadedImageData, file?: File) => void;\n onError?: (error: string, file?: File) => void;\n onProgress?: (progress: number, message: string, file?: File) => void;\n}\n\nexport function useImageUpload({\n preset,\n folder,\n bucket,\n metadata,\n altText,\n outputFormat,\n quality,\n maxDimensions,\n customFilename: defaultCustomFilename,\n endpoint: propEndpoint,\n uploader: propUploader,\n headers: propHeaders,\n withCredentials: propWithCredentials,\n locale: propLocale,\n onSuccess,\n onError,\n onProgress,\n}: UseImageUploadOptions = {}) {\n const ctx = useImageUploadContext();\n const uploadLocale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(uploadLocale, ctx.translations);\n\n const resolvedEndpoint = propEndpoint || ctx.endpoint || '/api/upload';\n const resolvedUploader = propUploader || ctx.uploader;\n const resolvedHeaders = propHeaders || ctx.headers;\n const resolvedCredentials = propWithCredentials ?? ctx.withCredentials;\n\n const [isUploading, setIsUploading] = useState(false);\n const [progress, setProgress] = useState(0);\n const [uploadMessage, setUploadMessage] = useState('');\n\n const isMountedRef = useRef(true);\n const timeoutsRef = useRef<Set<ReturnType<typeof setTimeout>>>(new Set());\n const activeIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearProgressInterval = useCallback(() => {\n if (activeIntervalRef.current) {\n clearInterval(activeIntervalRef.current);\n activeIntervalRef.current = null;\n }\n }, []);\n\n const clearAllTimeouts = useCallback(() => {\n timeoutsRef.current.forEach((t) => clearTimeout(t));\n timeoutsRef.current.clear();\n }, []);\n\n const safeSetTimeout = useCallback((fn: () => void, ms: number) => {\n const handle = setTimeout(() => {\n timeoutsRef.current.delete(handle);\n if (isMountedRef.current) {\n fn();\n }\n }, ms);\n timeoutsRef.current.add(handle);\n return handle;\n }, []);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n clearProgressInterval();\n clearAllTimeouts();\n };\n }, [clearProgressInterval, clearAllTimeouts]);\n\n const uploadImage = useCallback(\n async (\n file: File,\n customAltText?: string,\n overrideCustomFilename?: string,\n ): Promise<UploadedImageData | null> => {\n clearProgressInterval();\n clearAllTimeouts();\n\n const originalSize = file.size;\n setIsUploading(true);\n setProgress(0);\n setUploadMessage(ui.preparingUpload);\n onProgress?.(0, ui.preparingUpload, file);\n\n const reportProgress = (nextPct: number) => {\n if (!isMountedRef.current) return;\n setProgress((prev) => {\n const clamped = Math.max(prev, Math.min(94, nextPct));\n const msg = getStatusMessage(clamped, uploadLocale);\n setUploadMessage(msg);\n onProgress?.(clamped, msg, file);\n return clamped;\n });\n };\n\n try {\n activeIntervalRef.current = setInterval(() => {\n if (!isMountedRef.current) {\n clearProgressInterval();\n return;\n }\n setProgress((prev) => {\n const nextProgress = Math.min(prev + 6, 92);\n const msg = getStatusMessage(nextProgress, uploadLocale);\n setUploadMessage(msg);\n onProgress?.(nextProgress, msg, file);\n return nextProgress;\n });\n }, 300);\n\n const finalAlt = customAltText || altText || undefined;\n const finalCustomFilename =\n overrideCustomFilename || defaultCustomFilename || undefined;\n\n const requestFields = {\n preset,\n folder,\n bucket,\n altText: finalAlt,\n customFilename: finalCustomFilename,\n outputFormat,\n quality,\n maxDimensions,\n metadata,\n };\n\n const data = resolvedUploader\n ? await resolvedUploader(file, {\n ...requestFields,\n onUploadProgress: reportProgress,\n })\n : await uploadViaXhr(\n resolvedEndpoint,\n buildUploadFormData(file, requestFields),\n {\n headers: resolvedHeaders,\n withCredentials: resolvedCredentials,\n fallbackErrorLabel: ui.uploadFailed,\n onUploadProgress: reportProgress,\n },\n );\n\n clearProgressInterval();\n if (!isMountedRef.current) return data;\n\n setProgress(100);\n const successMsg = createSuccessMessage(\n originalSize,\n data.size,\n false,\n uploadLocale,\n );\n setUploadMessage(successMsg);\n onProgress?.(100, successMsg, file);\n\n safeSetTimeout(() => {\n setUploadMessage('');\n }, 5000);\n\n onSuccess?.(data, file);\n return data;\n } catch (err) {\n clearProgressInterval();\n if (!isMountedRef.current) return null;\n const errorMsg = err instanceof Error ? err.message : ui.uploadFailed;\n setUploadMessage('');\n onError?.(errorMsg, file);\n return null;\n } finally {\n clearProgressInterval();\n if (isMountedRef.current) {\n setIsUploading(false);\n safeSetTimeout(() => {\n setProgress(0);\n }, 1000);\n }\n }\n },\n [\n preset,\n folder,\n bucket,\n metadata,\n altText,\n outputFormat,\n quality,\n maxDimensions,\n defaultCustomFilename,\n resolvedEndpoint,\n resolvedUploader,\n resolvedHeaders,\n resolvedCredentials,\n uploadLocale,\n ui.preparingUpload,\n ui.uploadFailed,\n onSuccess,\n onError,\n onProgress,\n clearProgressInterval,\n clearAllTimeouts,\n safeSetTimeout,\n ],\n );\n\n const reset = useCallback(() => {\n clearProgressInterval();\n clearAllTimeouts();\n setIsUploading(false);\n setProgress(0);\n setUploadMessage('');\n }, [clearProgressInterval, clearAllTimeouts]);\n\n return {\n uploadImage,\n isUploading,\n progress,\n uploadMessage,\n reset,\n };\n}\n","import { useEffect } from 'react';\nimport {\n blurService,\n type BlurSize,\n useProgressiveBlur,\n} from './useBlurService';\n\nexport * from './useBlurService';\nexport {\n useDragAndDrop,\n type UseDragAndDropOptions,\n} from './useDragAndDrop';\nexport { useFilePreview } from './useFilePreview';\nexport {\n useImageUpload,\n type UseImageUploadOptions,\n} from './useImageUpload';\nexport {\n buildUploadFormData,\n parseErrorPayload,\n type UploadFormFields,\n uploadViaXhr,\n type XhrUploadOptions,\n} from './xhrUpload';\n\nexport const useProgressiveImage = useProgressiveBlur;\n\nexport function useBlurPreload(\n imageSrcs: string[],\n size: BlurSize = 'small',\n): void {\n useEffect(() => {\n if (imageSrcs.length > 0) {\n blurService.preloadBlurData(imageSrcs, size);\n }\n }, [imageSrcs, size]);\n}\n","export const DEFAULT_BLUR_COLOR = '#F5F5F5';\n\nexport function normalizeColorInput(value?: string | null): string | null {\n if (!value) return null;\n let next = value.trim();\n if (!next) return null;\n if (!next.startsWith('#')) {\n next = `#${next}`;\n }\n const threeHex = /^#([0-9a-fA-F]{3})$/;\n const sixHex = /^#([0-9a-fA-F]{6})$/;\n if (threeHex.test(next)) {\n const [, triplet] = next.match(threeHex) ?? [];\n if (triplet) {\n next = `#${triplet\n .split('')\n .map((char) => char + char)\n .join('')}`;\n }\n } else if (!sixHex.test(next)) {\n return null;\n }\n return next.toUpperCase();\n}\n\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } {\n const normalized = hex.replace('#', '');\n const expanded =\n normalized.length === 3\n ? normalized\n .split('')\n .map((char) => char + char)\n .join('')\n : normalized;\n const padded = expanded.padEnd(6, '0').slice(0, 6);\n const value = Number.parseInt(padded, 16);\n if (Number.isNaN(value)) {\n return { r: 245, g: 245, b: 245 };\n }\n return {\n r: (value >> 16) & 255,\n g: (value >> 8) & 255,\n b: value & 255,\n };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const clamp = (v: number) => Math.max(0, Math.min(255, Math.round(v)));\n const value = (clamp(r) << 16) | (clamp(g) << 8) | clamp(b);\n return `#${value.toString(16).padStart(6, '0').toUpperCase()}`;\n}\n\nfunction encodeBase64Ascii(str: string): string {\n if (typeof btoa === 'function') {\n return btoa(str);\n }\n return Buffer.from(str, 'utf8').toString('base64');\n}\n\nexport function generateColorSvgDataURL(color: string = DEFAULT_BLUR_COLOR): string {\n const safeColor = normalizeColorInput(color) || DEFAULT_BLUR_COLOR;\n const svg = `<svg width=\"100\" height=\"100\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"100%\" height=\"100%\" fill=\"${safeColor}\"/></svg>`;\n return `data:image/svg+xml;base64,${encodeBase64Ascii(svg)}`;\n}\n","import type { UploadLocale } from '../types';\n\nexport interface FileLike {\n name?: string;\n size: number;\n type: string;\n}\n\nexport function validateImageFileStrict(\n file: FileLike,\n maxSizeMB: number,\n allowedFormats: string[],\n): { valid: boolean; error?: string } {\n const maxBytes = maxSizeMB * 1024 * 1024;\n if (file.size > maxBytes) {\n return {\n valid: false,\n error: `File size (${(file.size / 1024 / 1024).toFixed(2)}MB) exceeds maximum of ${maxSizeMB}MB`,\n };\n }\n\n if (allowedFormats.length > 0 && !allowedFormats.includes(file.type)) {\n return {\n valid: false,\n error: `File type ${file.type || 'unknown'} is not allowed. Allowed: ${allowedFormats.join(', ')}`,\n };\n }\n\n return { valid: true };\n}\n\nexport function validateImageFile(\n file: FileLike,\n maxSizeMB: number,\n locale: UploadLocale = 'en',\n allowedFormats?: string[],\n): string | null {\n if (!file.type || !file.type.startsWith('image/')) {\n return locale === 'ar'\n ? 'يرجى اختيار ملف صورة صالح'\n : 'Please select a valid image file';\n }\n\n if (allowedFormats && allowedFormats.length > 0 && !allowedFormats.includes(file.type)) {\n return locale === 'ar'\n ? `صيغة الملف غير مدعومة (${file.type})`\n : `Unsupported image format (${file.type})`;\n }\n\n const fileSizeMB = file.size / (1024 * 1024);\n if (fileSizeMB > maxSizeMB) {\n return locale === 'ar'\n ? `يجب ألا يتجاوز حجم الملف ${maxSizeMB}MB`\n : `File size must be less than ${maxSizeMB}MB`;\n }\n\n return null;\n}\n\nexport function validateImageFileWithName(\n file: FileLike & { name: string },\n maxSizeMB: number,\n locale: UploadLocale = 'en',\n): string | null {\n if (!file.type || !file.type.startsWith('image/')) {\n return locale === 'ar'\n ? `${file.name}: ليس ملف صورة صالحاً`\n : `${file.name}: Not a valid image file`;\n }\n\n const fileSizeMB = file.size / (1024 * 1024);\n if (fileSizeMB > maxSizeMB) {\n return locale === 'ar'\n ? `${file.name}: يجب ألا يتجاوز حجم الملف ${maxSizeMB}MB`\n : `${file.name}: File size must be less than ${maxSizeMB}MB`;\n }\n\n return null;\n}\n\nexport function validateMultipleFiles(\n files: Array<FileLike & { name: string }>,\n maxSizeMB: number,\n currentCount: number,\n maxImages: number,\n locale: UploadLocale = 'en',\n): string | null {\n if (currentCount + files.length > maxImages) {\n return locale === 'ar'\n ? `يمكن رفع ${maxImages} صورة فقط. المتبقي: ${maxImages - currentCount}.`\n : `Can only upload ${maxImages} images. ${maxImages - currentCount} remaining.`;\n }\n\n const oversizedFiles: string[] = [];\n for (const file of files) {\n const fileSizeMB = file.size / (1024 * 1024);\n if (fileSizeMB > maxSizeMB) {\n oversizedFiles.push(file.name);\n }\n }\n\n if (oversizedFiles.length > 0) {\n if (locale === 'ar') {\n return `الملفات التالية أكبر من الحد المسموح (${maxSizeMB}MB): ${oversizedFiles.join(', ')}`;\n }\n return `The following file${\n oversizedFiles.length > 1 ? 's are' : ' is'\n } too large (max ${maxSizeMB}MB): ${oversizedFiles.join(', ')}`;\n }\n\n return null;\n}\n","import type { ImageOutputFormat } from '../../types';\n\nexport interface SessionMetaLookup {\n url?: string | null;\n contentHash?: string | null;\n}\n\nexport interface CachedBlurMeta {\n blurDataUrl?: string;\n blurColor?: string;\n}\n\nexport interface UploadSessionCache {\n writeAltMetaFor: (info: SessionMetaLookup, alt: string) => void;\n readAltMetaFor: (info: SessionMetaLookup) => string | null;\n writeBlurMetaFor: (info: SessionMetaLookup, meta: CachedBlurMeta) => void;\n readBlurMetaFor: (info: SessionMetaLookup) => CachedBlurMeta | null;\n}\n\nexport function readSessionJson<T>(key: string): T | null {\n if (typeof window === 'undefined') return null;\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : null;\n } catch {\n return null;\n }\n}\n\nexport function writeSessionJson(key: string, value: unknown): void {\n if (typeof window === 'undefined') return;\n try {\n window.sessionStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Ignore storage quota errors\n }\n}\n\nexport function createUploadSessionCache(\n storagePrefix = 'iuk',\n): UploadSessionCache {\n const altKey = (id: string) => `${storagePrefix}:alt-meta:${id}`;\n const blurKey = (id: string) => `${storagePrefix}:blur-meta:${id}`;\n\n const writeAltMetaFor = (info: SessionMetaLookup, alt: string): void => {\n if (!alt?.trim()) return;\n if (info.url) writeSessionJson(altKey(info.url), alt);\n if (info.contentHash) writeSessionJson(altKey(info.contentHash), alt);\n };\n\n const readAltMetaFor = (info: SessionMetaLookup): string | null => {\n if (info.contentHash) {\n const byHash = readSessionJson<string>(altKey(info.contentHash));\n if (byHash) return byHash;\n }\n if (info.url) {\n const byUrl = readSessionJson<string>(altKey(info.url));\n if (byUrl) return byUrl;\n }\n return null;\n };\n\n const writeBlurMetaFor = (\n info: SessionMetaLookup,\n meta: CachedBlurMeta,\n ): void => {\n if (info.url) writeSessionJson(blurKey(info.url), meta);\n if (info.contentHash) writeSessionJson(blurKey(info.contentHash), meta);\n };\n\n const readBlurMetaFor = (info: SessionMetaLookup): CachedBlurMeta | null => {\n if (info.contentHash) {\n const byHash = readSessionJson<CachedBlurMeta>(blurKey(info.contentHash));\n if (byHash?.blurDataUrl || byHash?.blurColor) return byHash;\n }\n if (info.url) {\n const byUrl = readSessionJson<CachedBlurMeta>(blurKey(info.url));\n if (byUrl?.blurDataUrl || byUrl?.blurColor) return byUrl;\n }\n return null;\n };\n\n return {\n writeAltMetaFor,\n readAltMetaFor,\n writeBlurMetaFor,\n readBlurMetaFor,\n };\n}\n\nconst MIME_TO_EXT: Record<string, ImageOutputFormat | 'jpg'> = {\n 'image/avif': 'avif',\n 'image/webp': 'webp',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n};\n\nexport async function downloadImageWithFallback(\n url: string,\n format?: ImageOutputFormat,\n): Promise<void> {\n if (!url || typeof window === 'undefined') return;\n try {\n const sep = url.includes('?') ? '&' : '?';\n const fetchUrl = `${url}${sep}t=${Date.now()}`;\n const res = await fetch(fetchUrl, { cache: 'no-store' });\n const blob = await res.blob();\n const objectUrl = URL.createObjectURL(blob);\n\n const ext: ImageOutputFormat | 'jpg' =\n format ?? MIME_TO_EXT[blob.type] ?? 'avif';\n\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.download = `image-${Date.now()}.${ext}`;\n anchor.click();\n URL.revokeObjectURL(objectUrl);\n } catch {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { QualityLevel, StandardPresetName, UploadedImageData, UploadPresetConfig, UploadPresetName } from '../../types';\nimport { QUALITY_PRESETS, STANDARD_PRESETS } from '../../types';\nimport { DEFAULT_BLUR_COLOR, normalizeColorInput } from '../../utils/color';\nimport { validateImageFile } from '../../utils/validators';\nimport { useImageUploadContext } from '../context';\nimport { normalizeUploadLocale, resolveTranslations } from '../i18n';\nimport type { SingleImageUploadProps } from '../types';\nimport { createUploadSessionCache, downloadImageWithFallback } from '../utils/sessionMetaCache';\nimport { useFilePreview } from './useFilePreview';\nimport { useImageUpload } from './useImageUpload';\n\nfunction resolveInitialQualityLevel(quality?: number, preset?: UploadPresetConfig): QualityLevel {\n const q = quality ?? preset?.quality;\n if (!q) return preset?.recommendedQualityLevel || 'high';\n if (q <= 55) return 'low';\n if (q <= 78) return 'medium';\n return q <= 90 ? 'high' : 'maximum';\n}\n\nexport function useSingleImageState<TPreset extends string = UploadPresetName>(\n props: SingleImageUploadProps<TPreset>,\n) {\n const {\n value, onChange, preset, folder, bucket, metadata, endpoint, uploader,\n headers, withCredentials, locale: propLocale, translations,\n initialAltText: propInitialAltText, maxSizeMB: propMaxSizeMB,\n maxDimensions, requireAltText: propRequireAltText, isOpen, onClose,\n outputFormat, quality: initialQualityProp, customFilename,\n } = props;\n\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(locale, translations || ctx.translations);\n const requireAltText = propRequireAltText ?? ctx.requireAltText;\n const standardPreset = preset ? STANDARD_PRESETS[preset as StandardPresetName] : undefined;\n const maxSizeMB = propMaxSizeMB ?? standardPreset?.maxSizeMB ?? 10;\n const requiresManualCommit = Boolean(isOpen);\n const cache = useMemo(() => createUploadSessionCache(ctx.storageKeyPrefix || 'iuk'), [ctx.storageKeyPrefix]);\n\n const objVal = typeof value === 'object' && value ? value : null;\n const initPreview = typeof value === 'string' ? value : objVal?.url || null;\n const initAlt = objVal?.altText || propInitialAltText || '';\n const initColor = objVal?.blurColor || DEFAULT_BLUR_COLOR;\n\n const [preview, setPreview] = useState<string | null>(initPreview);\n const [altText, setAltText] = useState<string>(initAlt);\n const [blurColor, setBlurColor] = useState<string>(initColor);\n const [detectedBlurColor, setDetectedBlurColor] = useState<string>(initColor);\n const [blurDataUrlState, setBlurDataUrlState] = useState<string>(objVal?.blurDataUrl || '');\n const [hasColorOverride, setHasColorOverride] = useState(false);\n const [validationError, setValidationError] = useState<string>('');\n const [showMissingAltWarning, setShowMissingAltWarning] = useState(false);\n const [editingAltText, setEditingAltText] = useState(false);\n const [sizeInfo, setSizeInfo] = useState<{ original: number; optimized: number } | null>(null);\n const [uploadedData, setUploadedData] = useState<UploadedImageData | null>(objVal && 'url' in objVal ? objVal : null);\n const [isBlurModalOpen, setIsBlurModalOpen] = useState(false);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [qualityLevel, setQualityLevel] = useState<QualityLevel>(() => resolveInitialQualityLevel(initialQualityProp, standardPreset));\n const fileInputRef = useRef<HTMLInputElement>(null);\n const lastAltRef = useRef<string>(initAlt);\n\n const resetColorAndErrorState = () => {\n setValidationError('');\n setHasColorOverride(false);\n setBlurColor(DEFAULT_BLUR_COLOR);\n setDetectedBlurColor(DEFAULT_BLUR_COLOR);\n setIsBlurModalOpen(false);\n };\n\n const { createPreview } = useFilePreview();\n const { uploadImage, isUploading, progress, uploadMessage, reset } = useImageUpload({\n preset, folder, bucket, metadata, outputFormat, maxDimensions, customFilename,\n quality: QUALITY_PRESETS[qualityLevel].value,\n endpoint, uploader, headers, withCredentials, locale,\n onSuccess: (data) => {\n const nextPreviewUrl = /^(?:blob:|data:)/i.test(data.url)\n ? data.url\n : `${data.url}${data.url.includes('?') ? '&' : '?'}t=${Date.now()}`;\n setPreview(nextPreviewUrl);\n setSizeInfo({ original: data.originalSize || 0, optimized: data.size });\n const normColor = data.blurColor || DEFAULT_BLUR_COLOR;\n setBlurColor(normColor);\n setDetectedBlurColor(normColor);\n setHasColorOverride(false);\n setBlurDataUrlState(data.blurDataUrl || '');\n const keyInfo = { url: data.url, contentHash: data.contentHash };\n cache.writeBlurMetaFor(keyInfo, { blurDataUrl: data.blurDataUrl || '', blurColor: normColor });\n const payload: UploadedImageData = { ...data, altText, blurColor: normColor };\n setUploadedData(payload);\n lastAltRef.current = altText;\n cache.writeAltMetaFor(keyInfo, altText);\n if (!requiresManualCommit) onChange(payload);\n },\n onError: (errorMsg) => {\n setValidationError(errorMsg);\n setPreview(null);\n setUploadedData(null);\n },\n });\n\n useEffect(() => {\n const incomingObj = typeof value === 'object' && value ? value : null;\n const nextPreview = typeof value === 'string' ? value : incomingObj?.url || null;\n const rawAlt = incomingObj?.altText || propInitialAltText || '';\n const cachedAlt = cache.readAltMetaFor({ url: incomingObj ? incomingObj.url : nextPreview, contentHash: incomingObj?.contentHash ?? null });\n const nextAlt =\n rawAlt.trim() === '' && nextPreview === preview && (lastAltRef.current.trim() !== '' || cachedAlt?.trim())\n ? lastAltRef.current.trim() || cachedAlt || rawAlt\n : rawAlt;\n const nextColor = incomingObj?.blurColor || DEFAULT_BLUR_COLOR;\n\n const stripCacheQuery = (u: string | null) =>\n u && !/^(?:blob:|data:)/i.test(u) ? u.split('?')[0] : u;\n if (stripCacheQuery(nextPreview) !== stripCacheQuery(preview)) setPreview(nextPreview);\n if (nextAlt !== altText && (nextPreview !== preview || nextAlt.trim() !== '' || !altText.trim())) setAltText(nextAlt);\n\n const nextIsFallback = nextColor === DEFAULT_BLUR_COLOR;\n if (nextColor !== blurColor && (nextPreview !== preview || (!hasColorOverride && (!nextIsFallback || blurColor === DEFAULT_BLUR_COLOR)))) {\n setBlurColor(nextColor);\n setDetectedBlurColor(nextColor);\n setHasColorOverride(false);\n }\n const nextBlurUrl = incomingObj?.blurDataUrl || '';\n if (nextPreview !== preview || (nextBlurUrl && nextBlurUrl !== blurDataUrlState)) {\n setBlurDataUrlState(nextBlurUrl);\n }\n\n if (nextPreview) {\n const cached = cache.readBlurMetaFor({\n url: nextPreview,\n contentHash: incomingObj?.contentHash || uploadedData?.contentHash,\n });\n if (cached?.blurDataUrl && !nextBlurUrl) setBlurDataUrlState(cached.blurDataUrl);\n if (cached?.blurColor && nextIsFallback && blurColor === DEFAULT_BLUR_COLOR) {\n setBlurColor(cached.blurColor);\n setDetectedBlurColor(cached.blurColor);\n }\n }\n\n if (!value) {\n setUploadedData(null);\n setBlurDataUrlState('');\n setSizeInfo(null);\n setSelectedFile(null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n } else if (incomingObj?.url) {\n setUploadedData((prev) => (prev?.url === incomingObj.url ? prev : incomingObj));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, propInitialAltText]);\n\n const buildExistingImagePayload = (overrides: Partial<UploadedImageData> = {}): UploadedImageData | null => {\n const base: UploadedImageData | null = uploadedData\n ? { ...uploadedData }\n : objVal\n ? { ...objVal }\n : typeof value === 'string' && value.trim()\n ? { url: value, blurDataUrl: '', blurColor: DEFAULT_BLUR_COLOR, altText: '', width: 0, height: 0, format: 'webp', size: 0, contentHash: 'existing-image', uploadedAt: new Date().toISOString() }\n : null;\n if (!base) return null;\n return {\n ...base,\n ...overrides,\n url: (overrides.url ?? base.url) || preview || '',\n altText: overrides.altText ?? altText ?? base.altText ?? '',\n blurColor: overrides.blurColor ?? blurColor ?? base.blurColor ?? DEFAULT_BLUR_COLOR,\n blurDataUrl: overrides.blurDataUrl ?? base.blurDataUrl ?? blurDataUrlState ?? '',\n };\n };\n\n const commitIfAuto = (overrides: Partial<UploadedImageData>) => {\n if (!requiresManualCommit) {\n const payload = buildExistingImagePayload(overrides);\n if (payload) onChange(payload);\n }\n };\n\n const applyBlurColor = (color: string, options: { markOverride?: boolean } = {}) => {\n const normalized = normalizeColorInput(color);\n if (!normalized) return;\n setBlurColor(normalized);\n setHasColorOverride(options.markOverride !== false);\n setUploadedData((prev) => (prev ? { ...prev, blurColor: normalized } : prev));\n if (preview) cache.writeBlurMetaFor({ url: preview, contentHash: uploadedData?.contentHash }, { blurDataUrl: blurDataUrlState, blurColor: normalized });\n commitIfAuto({ blurColor: normalized });\n };\n\n const handleResetColor = () => {\n if (detectedBlurColor) applyBlurColor(detectedBlurColor, { markOverride: false });\n };\n\n const handleFileSelect = async (files: FileList) => {\n const file = files[0];\n if (!file) return;\n setSelectedFile(file);\n resetColorAndErrorState();\n const err = validateImageFile(file, maxSizeMB, locale);\n if (err) {\n setValidationError(err);\n return;\n }\n try {\n setPreview(await createPreview(file));\n setAltText('');\n lastAltRef.current = '';\n } catch {\n setValidationError(ui.failedCreatePreview);\n return;\n }\n await uploadImage(file, altText);\n };\n\n const handleRemoveTile = () => {\n setPreview(null);\n setAltText('');\n setBlurDataUrlState('');\n setSizeInfo(null);\n setUploadedData(null);\n setSelectedFile(null);\n resetColorAndErrorState();\n reset();\n if (fileInputRef.current) fileInputRef.current.value = '';\n if (!requiresManualCommit) onChange(null);\n };\n\n const handleAltTextSave = (newAltText: string) => {\n setAltText(newAltText);\n lastAltRef.current = newAltText;\n if (preview) cache.writeAltMetaFor({ url: preview, contentHash: uploadedData?.contentHash }, newAltText);\n setShowMissingAltWarning(false);\n setEditingAltText(false);\n commitIfAuto({ altText: newAltText });\n };\n\n const handleSaveImage = () => {\n if (requireAltText && preview && !altText?.trim()) {\n setShowMissingAltWarning(true);\n setValidationError(ui.addAltBeforeSaving);\n return;\n }\n setShowMissingAltWarning(false);\n setValidationError('');\n const payload = buildExistingImagePayload();\n if (payload) {\n lastAltRef.current = payload.altText || lastAltRef.current;\n cache.writeAltMetaFor({ url: payload.url, contentHash: payload.contentHash }, payload.altText || '');\n onChange(payload);\n }\n onClose?.();\n };\n\n const downloadUrl = uploadedData?.url ?? (typeof value === 'string' ? value : objVal?.url) ?? null;\n const handleDownload = useCallback(async () => {\n if (downloadUrl) await downloadImageWithFallback(downloadUrl, uploadedData?.format);\n }, [downloadUrl, uploadedData?.format]);\n\n return {\n locale, ui, requireAltText, maxSizeMB, fileInputRef,\n preview, altText, blurColor, detectedBlurColor, blurDataUrlState,\n validationError, showMissingAltWarning, editingAltText, setEditingAltText,\n sizeInfo, uploadedData, isBlurModalOpen, setIsBlurModalOpen,\n selectedFile, qualityLevel, setQualityLevel, isUploading, progress, uploadMessage,\n currentImageData: uploadedData ?? objVal, canDownload: Boolean(downloadUrl),\n applyBlurColor, handleResetColor, handleFileSelect, handleRemoveTile,\n handleAltTextSave, handleSaveImage, handleDownload,\n };\n}\n","import type { HTMLAttributes, InputHTMLAttributes } from 'react';\nimport type { UploadPresetName } from '../../types';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\nimport { useSingleImageState } from '../hooks/useSingleImageState';\nimport { HIDDEN_INPUT_STYLE, resolveUploadDataState } from '../utils/slotStyles';\nimport type {\n HeadlessDropzoneProps,\n HeadlessFileInputProps,\n SingleUploadController,\n UseSingleUploadOptions,\n} from './types';\n\nconst DEFAULT_ACCEPT = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml';\n\nexport function useSingleUpload<TPreset extends string = UploadPresetName>(\n options: UseSingleUploadOptions<TPreset>,\n): SingleUploadController {\n const { accept = DEFAULT_ACCEPT, disabled = false, error: externalError } = options;\n\n const {\n locale, ui, maxSizeMB, fileInputRef, preview, altText, blurColor,\n detectedBlurColor, blurDataUrlState, validationError, sizeInfo,\n uploadedData, qualityLevel, setQualityLevel, isUploading, progress,\n uploadMessage, currentImageData, canDownload, applyBlurColor,\n handleResetColor, handleFileSelect, handleRemoveTile,\n handleAltTextSave, handleSaveImage, handleDownload,\n } = useSingleImageState(options);\n\n const { isDragging, dragHandlers } = useDragAndDrop({\n disabled,\n onDrop: (files) => { void handleFileSelect(files); },\n });\n\n const displayError = externalError || validationError || '';\n const blurDataUrl = blurDataUrlState || currentImageData?.blurDataUrl || '';\n\n const state = resolveUploadDataState({\n disabled,\n hasError: Boolean(displayError),\n isUploading,\n isDragging,\n hasContent: Boolean(preview),\n });\n\n const openFileDialog = () => {\n if (!disabled) fileInputRef.current?.click();\n };\n\n const getDropzoneProps = (\n overrides?: HTMLAttributes<HTMLElement>,\n ): HeadlessDropzoneProps => ({\n ...overrides,\n role: overrides?.role ?? 'button',\n tabIndex: overrides?.tabIndex ?? (disabled ? -1 : 0),\n 'aria-label': overrides?.['aria-label'] ?? ui.uploadImageAria,\n 'aria-disabled': disabled || undefined,\n 'data-state': state,\n 'data-dragging': isDragging || undefined,\n 'data-uploading': isUploading || undefined,\n 'data-disabled': disabled || undefined,\n 'data-error': Boolean(displayError) || undefined,\n onClick: (event) => {\n if (event.target === fileInputRef.current) return;\n overrides?.onClick?.(event);\n if (!event.defaultPrevented && !disabled) openFileDialog();\n },\n onKeyDown: (event) => {\n overrides?.onKeyDown?.(event);\n if (\n !event.defaultPrevented &&\n !disabled &&\n event.target === event.currentTarget &&\n (event.key === 'Enter' || event.key === ' ')\n ) {\n event.preventDefault();\n openFileDialog();\n }\n },\n onDragEnter: (event) => { overrides?.onDragEnter?.(event); dragHandlers.onDragEnter(event); },\n onDragLeave: (event) => { overrides?.onDragLeave?.(event); dragHandlers.onDragLeave(event); },\n onDragOver: (event) => { overrides?.onDragOver?.(event); dragHandlers.onDragOver(event); },\n onDrop: (event) => { overrides?.onDrop?.(event); dragHandlers.onDrop(event); },\n });\n\n const getInputProps = (\n overrides?: InputHTMLAttributes<HTMLInputElement>,\n ): HeadlessFileInputProps => ({\n ...overrides,\n ref: fileInputRef,\n type: 'file',\n accept: overrides?.accept ?? accept,\n disabled: overrides?.disabled ?? disabled,\n 'aria-label': overrides?.['aria-label'] ?? ui.fileInputAria,\n style: overrides?.style ? { ...HIDDEN_INPUT_STYLE, ...overrides.style } : HIDDEN_INPUT_STYLE,\n onClick: (event) => {\n overrides?.onClick?.(event);\n event.stopPropagation();\n },\n onChange: (event) => {\n overrides?.onChange?.(event);\n if (!event.defaultPrevented) {\n const files = event.target.files;\n if (files && files.length > 0) void handleFileSelect(files);\n event.target.value = '';\n }\n },\n });\n\n return {\n state, preview, uploadedData, altText, blurColor, detectedBlurColor,\n blurDataUrl, isDragging, isUploading, progress, uploadMessage,\n error: displayError, sizeInfo, qualityLevel, maxSizeMB, disabled,\n canDownload, locale, ui, openFileDialog,\n selectFiles: handleFileSelect,\n remove: handleRemoveTile,\n save: handleSaveImage,\n download: handleDownload,\n setQualityLevel,\n setAltText: handleAltTextSave,\n setBlurColor: (hex: string) => applyBlurColor(hex),\n resetBlurColor: handleResetColor,\n getDropzoneProps,\n getInputProps,\n };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { QualityLevel, StandardPresetName, UploadedImageData, UploadPresetName } from '../../types';\nimport { QUALITY_PRESETS, STANDARD_PRESETS } from '../../types';\nimport { validateMultipleFiles } from '../../utils/validators';\nimport { useImageUploadContext } from '../context';\nimport { normalizeUploadLocale, resolveTranslations } from '../i18n';\nimport type { ImagePreview, MultiImageUploadProps } from '../types';\nimport { useFilePreview } from './useFilePreview';\nimport { useImageUpload } from './useImageUpload';\n\nconst EMPTY_IMAGES: UploadedImageData[] = [];\n\nexport interface MultiUploadStats { total: number; completed: number; failed: number; }\n\nexport type UseMultiImageStateOptions<TPreset extends string = UploadPresetName> =\n Omit<MultiImageUploadProps<TPreset>, 'mode'> & { mode?: 'multiple' };\n\nfunction mapUploadedToPreview(img: UploadedImageData, prev?: ImagePreview): ImagePreview {\n const altText = prev?.altText && !img.altText?.trim() ? prev.altText : img.altText;\n return {\n id: img.url, url: img.url, file: null, uploadMessage: null,\n originalSize: img.originalSize, optimizedSize: img.size,\n data: { ...img, altText }, altText, blurColor: img.blurColor || prev?.blurColor,\n };\n}\n\nfunction resolveInitialQuality(q?: number, fallback: QualityLevel = 'high'): QualityLevel {\n if (!q) return fallback;\n return q <= 55 ? 'low' : q <= 78 ? 'medium' : q <= 90 ? 'high' : 'maximum';\n}\n\nfunction collectUploadedData(list: ImagePreview[], readyOnly: boolean): UploadedImageData[] {\n return list\n .filter((p) => p.data && (!readyOnly || !p.isUploading))\n .map((p) => ({ ...p.data!, altText: p.altText ?? p.data!.altText, blurColor: p.blurColor ?? p.data!.blurColor }));\n}\n\nexport function useMultiImageState<TPreset extends string = UploadPresetName>(\n options: UseMultiImageStateOptions<TPreset>,\n) {\n const { onChange, preset, isOpen, onClose } = options;\n const value = options.value ?? EMPTY_IMAGES;\n const maxImages = options.maxImages ?? 999;\n const maxParallelUploads = options.maxParallelUploads ?? 2;\n\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(options.locale || ctx.locale);\n const ui = resolveTranslations(locale, options.translations || ctx.translations);\n const requireAltText = options.requireAltText ?? ctx.requireAltText;\n const standardPreset = preset ? STANDARD_PRESETS[preset as StandardPresetName] : undefined;\n const maxSizeMB = options.maxSizeMB ?? standardPreset?.maxSizeMB ?? 10;\n const requiresManualCommit = Boolean(isOpen);\n\n const [previews, setPreviews] = useState<ImagePreview[]>(() => value.map((img) => mapUploadedToPreview(img)));\n const previewsRef = useRef<ImagePreview[]>(previews);\n previewsRef.current = previews;\n const [validationError, setValidationError] = useState('');\n const [infoMessage, setInfoMessage] = useState('');\n const [selectedPreviews, setSelectedPreviews] = useState<Set<string>>(() => new Set());\n const [uploadStats, setUploadStats] = useState<MultiUploadStats>({ total: 0, completed: 0, failed: 0 });\n const [editingAltTextId, setEditingAltTextId] = useState<string | null>(null);\n const [showMissingAltWarning, setShowMissingAltWarning] = useState(false);\n const [qualityLevel, setQualityLevel] = useState<QualityLevel>(() =>\n resolveInitialQuality(options.quality ?? standardPreset?.quality, standardPreset?.recommendedQualityLevel),\n );\n\n const { createPreview } = useFilePreview();\n\n const infoTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (infoTimeoutRef.current) clearTimeout(infoTimeoutRef.current);\n };\n }, []);\n\n useEffect(() => {\n setPreviews((current) => {\n const prevMap = new Map<string, ImagePreview>();\n current.forEach((p) => {\n prevMap.set(p.id, p);\n if (p.url) prevMap.set(p.url, p);\n });\n const synced = value.map((img) => mapUploadedToPreview(img, prevMap.get(img.url)));\n const pending = current.filter(\n (p) =>\n !value.some((img) => img.url === p.id || (p.url && img.url === p.url)) &&\n (p.isUploading || Boolean(p.error)),\n );\n const next = [...synced, ...pending];\n const isSame =\n next.length === current.length &&\n next.every((it, idx) => {\n const p = current[idx];\n return (\n p &&\n p.id === it.id &&\n p.url === it.url &&\n p.altText === it.altText &&\n p.blurColor === it.blurColor &&\n p.isUploading === it.isUploading\n );\n });\n const resolved = isSame ? current : next;\n previewsRef.current = resolved;\n return resolved;\n });\n }, [value]);\n\n const emitImmediateChange = (nextPreviews: ImagePreview[]) => {\n if (!requiresManualCommit) onChange(collectUploadedData(nextPreviews, true));\n };\n\n const patchByFile = (file: File | undefined, patch: Partial<ImagePreview>, emit = false) => {\n const next = previewsRef.current.map((p) => (p.file === file ? { ...p, ...patch } : p));\n previewsRef.current = next;\n setPreviews(next);\n if (emit) emitImmediateChange(next);\n };\n\n const patchPreview = (id: string, patch: (p: ImagePreview) => ImagePreview) => {\n const next = previewsRef.current.map((p) => (p.id === id ? patch(p) : p));\n previewsRef.current = next;\n setPreviews(next);\n emitImmediateChange(next);\n };\n\n const { uploadImage } = useImageUpload({\n preset, folder: options.folder, bucket: options.bucket, metadata: options.metadata,\n outputFormat: options.outputFormat, quality: QUALITY_PRESETS[qualityLevel].value,\n maxDimensions: options.maxDimensions, customFilename: options.customFilename,\n endpoint: options.endpoint, uploader: options.uploader,\n headers: options.headers, withCredentials: options.withCredentials, locale,\n onSuccess: (data, file) => {\n patchByFile(file, {\n url: data.url, uploadMessage: undefined, originalSize: data.originalSize,\n optimizedSize: data.size, data, blurColor: data.blurColor,\n error: undefined, isUploading: false, progress: 100,\n }, true);\n setUploadStats((s) => ({ ...s, completed: s.completed + 1 }));\n },\n onError: (error, file) => {\n patchByFile(file, { uploadMessage: undefined, error, isUploading: false, progress: 0 });\n setUploadStats((s) => ({ ...s, failed: s.failed + 1 }));\n },\n onProgress: (progress, uploadMessage, file) => {\n patchByFile(file, { uploadMessage, progress, isUploading: true });\n },\n });\n\n const handleFileSelect = async (files: FileList) => {\n setValidationError('');\n setInfoMessage('');\n const allFiles = Array.from(files);\n const imageFiles = allFiles.filter((file) => file.type.startsWith('image/'));\n if (imageFiles.length === 0) {\n setValidationError(ui.noValidImageFiles);\n return;\n }\n if (allFiles.length > imageFiles.length) {\n const skipped = allFiles.length - imageFiles.length;\n const msg = ui.selectedImagesSkipped\n .replace('{imageCount}', String(imageFiles.length))\n .replace('{imageSuffix}', imageFiles.length > 1 ? 's' : '')\n .replace('{skippedCount}', String(skipped))\n .replace('{skippedSuffix}', skipped > 1 ? 's' : '');\n setInfoMessage(msg);\n if (infoTimeoutRef.current) clearTimeout(infoTimeoutRef.current);\n infoTimeoutRef.current = setTimeout(() => setInfoMessage(''), 5000);\n }\n const validationResult = validateMultipleFiles(imageFiles, maxSizeMB, previews.length, maxImages, locale);\n if (validationResult) {\n setValidationError(validationResult);\n return;\n }\n\n setUploadStats({ total: imageFiles.length, completed: 0, failed: 0 });\n const newPreviews: ImagePreview[] = [];\n for (const file of imageFiles) {\n try {\n const url = await createPreview(file);\n newPreviews.push({\n id: `temp-${Date.now()}-${Math.random()}`, url, file, fileName: file.name,\n uploadMessage: ui.queued, originalSize: file.size, optimizedSize: null,\n isUploading: true, progress: 0,\n });\n } catch {\n setValidationError(ui.failedCreatePreviewFor.replace('{file}', file.name));\n return;\n }\n }\n const nextBatch = [...previewsRef.current, ...newPreviews];\n previewsRef.current = nextBatch;\n setPreviews(nextBatch);\n\n let nextIndex = 0;\n const workerCount = Math.max(1, Math.min(maxParallelUploads, imageFiles.length));\n await Promise.all(\n Array.from({ length: workerCount }, async () => {\n while (nextIndex < imageFiles.length) {\n const file = imageFiles[nextIndex];\n nextIndex += 1;\n await uploadImage(file);\n }\n }),\n );\n };\n\n const removeIds = (ids: Set<string>) => {\n const next = previewsRef.current.filter((p) => !ids.has(p.id));\n previewsRef.current = next;\n setPreviews(next);\n emitImmediateChange(next);\n };\n\n const handleRemove = (id: string) => {\n removeIds(new Set([id]));\n setSelectedPreviews((prev) => {\n if (!prev.has(id)) return prev;\n const copy = new Set(prev);\n copy.delete(id);\n return copy;\n });\n };\n\n const handleRemoveSelected = () => {\n removeIds(new Set(selectedPreviews));\n setSelectedPreviews(new Set());\n };\n\n const toggleSelect = (id: string) => {\n setSelectedPreviews((prev) => {\n const copy = new Set(prev);\n if (copy.has(id)) copy.delete(id);\n else copy.add(id);\n return copy;\n });\n };\n\n const handleRetryFailed = async () => {\n for (const item of previews.filter((p) => p.error && p.file)) {\n if (item.file) {\n patchByFile(item.file, { error: undefined, isUploading: true, uploadMessage: ui.retrying });\n await uploadImage(item.file);\n }\n }\n };\n\n const handleAltTextSave = (previewId: string, altText: string) => {\n patchPreview(previewId, (p) => ({ ...p, altText, data: p.data ? { ...p.data, altText } : p.data }));\n setEditingAltTextId(null);\n setShowMissingAltWarning(false);\n };\n\n const handleColorChange = (previewId: string, blurColor: string) => {\n patchPreview(previewId, (p) => ({ ...p, blurColor, data: p.data ? { ...p.data, blurColor } : p.data }));\n };\n\n const isUploading = previews.some((p) => p.isUploading);\n const hasFailedUploads = previews.some((p) => Boolean(p.error));\n const uploadingPreviews = previews.filter((p) => p.isUploading);\n const completedPreviews = previews.filter((p) => Boolean(p.data) && !p.isUploading);\n const imagesWithoutAlt = completedPreviews.filter((p) => !p.altText || !p.altText.trim());\n const editingTarget = editingAltTextId ? (previews.find((p) => p.id === editingAltTextId) ?? null) : null;\n\n const handleSaveImages = () => {\n if (requireAltText && imagesWithoutAlt.length > 0) {\n const count = imagesWithoutAlt.length;\n setShowMissingAltWarning(true);\n setValidationError(\n ui.needsAltBeforeSave.replace('{count}', String(count)).replace('{suffix}', count > 1 ? 's' : '').replace('{verbSuffix}', count > 1 ? '' : 's'),\n );\n return;\n }\n setShowMissingAltWarning(false);\n setValidationError('');\n onChange(collectUploadedData(previews, false));\n onClose?.();\n };\n\n return {\n locale, ui, requireAltText, maxSizeMB,\n previews, validationError, infoMessage,\n selectedPreviews, setSelectedPreviews, uploadStats,\n editingAltTextId, setEditingAltTextId, showMissingAltWarning,\n qualityLevel, setQualityLevel,\n isUploading, hasFailedUploads, uploadingPreviews,\n completedPreviews, imagesWithoutAlt, editingTarget,\n handleFileSelect, handleRemove, handleRemoveSelected,\n toggleSelect, handleRetryFailed, handleAltTextSave,\n handleColorChange, handleSaveImages,\n };\n}\n","import { type HTMLAttributes, type InputHTMLAttributes, type RefObject, useRef } from 'react';\nimport type { UploadPresetName } from '../../types';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\nimport { useMultiImageState } from '../hooks/useMultiImageState';\nimport { HIDDEN_INPUT_STYLE, resolveUploadDataState } from '../utils/slotStyles';\nimport type {\n HeadlessDropzoneProps,\n HeadlessFileInputProps,\n MultiUploadController,\n UseMultiUploadOptions,\n} from './types';\n\nconst DEFAULT_ACCEPT = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml';\n\nexport function useMultiUpload<TPreset extends string = UploadPresetName>(\n options: UseMultiUploadOptions<TPreset>,\n): MultiUploadController {\n const {\n accept = DEFAULT_ACCEPT,\n disabled = false,\n error: externalError,\n maxImages = 999,\n } = options;\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const folderInputRef = useRef<HTMLInputElement>(null);\n\n const {\n locale, ui, maxSizeMB, previews, validationError, infoMessage,\n selectedPreviews, setSelectedPreviews, uploadStats, qualityLevel,\n setQualityLevel, isUploading, hasFailedUploads, uploadingPreviews,\n completedPreviews, handleFileSelect, handleRemove, handleRemoveSelected,\n toggleSelect, handleRetryFailed, handleAltTextSave, handleColorChange,\n handleSaveImages,\n } = useMultiImageState(options);\n\n const { isDragging, dragHandlers } = useDragAndDrop({\n disabled,\n onDrop: (files) => { void handleFileSelect(files); },\n });\n\n const displayError = externalError || validationError || '';\n const remainingCount = Math.max(0, maxImages - previews.length);\n\n const state = resolveUploadDataState({\n disabled,\n hasError: Boolean(displayError),\n isUploading,\n isDragging,\n hasContent: previews.length > 0,\n });\n\n const openFileDialog = () => { if (!disabled) fileInputRef.current?.click(); };\n const openFolderDialog = () => { if (!disabled) folderInputRef.current?.click(); };\n\n const getDropzoneProps = (\n overrides?: HTMLAttributes<HTMLElement>,\n ): HeadlessDropzoneProps => ({\n ...overrides,\n role: overrides?.role ?? 'button',\n tabIndex: overrides?.tabIndex ?? (disabled ? -1 : 0),\n 'aria-label': overrides?.['aria-label'] ?? ui.selectFilesAria,\n 'aria-disabled': disabled || undefined,\n 'data-state': state,\n 'data-dragging': isDragging || undefined,\n 'data-uploading': isUploading || undefined,\n 'data-disabled': disabled || undefined,\n 'data-error': Boolean(displayError) || undefined,\n onClick: (event) => {\n if (event.target === fileInputRef.current || event.target === folderInputRef.current) return;\n overrides?.onClick?.(event);\n if (!event.defaultPrevented && !disabled) openFileDialog();\n },\n onKeyDown: (event) => {\n overrides?.onKeyDown?.(event);\n if (\n !event.defaultPrevented &&\n !disabled &&\n event.target === event.currentTarget &&\n (event.key === 'Enter' || event.key === ' ')\n ) {\n event.preventDefault();\n openFileDialog();\n }\n },\n onDragEnter: (event) => { overrides?.onDragEnter?.(event); dragHandlers.onDragEnter(event); },\n onDragLeave: (event) => { overrides?.onDragLeave?.(event); dragHandlers.onDragLeave(event); },\n onDragOver: (event) => { overrides?.onDragOver?.(event); dragHandlers.onDragOver(event); },\n onDrop: (event) => { overrides?.onDrop?.(event); dragHandlers.onDrop(event); },\n });\n\n const buildInputProps = (\n ref: RefObject<HTMLInputElement | null>,\n defaultAriaLabel: string,\n isFolder: boolean,\n overrides?: InputHTMLAttributes<HTMLInputElement>,\n ): HeadlessFileInputProps => ({\n ...overrides,\n ...(isFolder ? { webkitdirectory: '', directory: '' } : {}),\n ref,\n type: 'file',\n multiple: overrides?.multiple ?? true,\n accept: overrides?.accept ?? accept,\n disabled: overrides?.disabled ?? disabled,\n 'aria-label': overrides?.['aria-label'] ?? defaultAriaLabel,\n style: overrides?.style ? { ...HIDDEN_INPUT_STYLE, ...overrides.style } : HIDDEN_INPUT_STYLE,\n onClick: (event) => {\n overrides?.onClick?.(event);\n event.stopPropagation();\n },\n onChange: (event) => {\n overrides?.onChange?.(event);\n if (!event.defaultPrevented) {\n const files = event.target.files;\n if (files && files.length > 0) void handleFileSelect(files);\n event.target.value = '';\n }\n },\n });\n\n return {\n state,\n items: previews,\n completedItems: completedPreviews,\n uploadingItems: uploadingPreviews,\n selectedIds: selectedPreviews,\n stats: uploadStats,\n isDragging, isUploading, hasFailedUploads,\n error: displayError, infoMessage, qualityLevel,\n maxSizeMB, maxImages, remainingCount, disabled, locale, ui,\n openFileDialog, openFolderDialog,\n selectFiles: handleFileSelect,\n remove: handleRemove,\n removeSelected: handleRemoveSelected,\n toggleSelect,\n selectAll: () => setSelectedPreviews(new Set(previews.map((p) => p.id))),\n clearSelection: () => setSelectedPreviews(new Set()),\n retryFailed: handleRetryFailed,\n save: handleSaveImages,\n setQualityLevel,\n setAltText: handleAltTextSave,\n setBlurColor: handleColorChange,\n getDropzoneProps,\n getInputProps: (overrides) => buildInputProps(fileInputRef, ui.selectFilesAria, false, overrides),\n getFolderInputProps: (overrides) => buildInputProps(folderInputRef, ui.selectFolderAria, true, overrides),\n };\n}\n","import type { ReactElement } from 'react';\nimport type { UploadPresetName } from '../../types';\nimport type { HeadlessSingleUploadProps } from './types';\nimport { useSingleUpload } from './useSingleUpload';\n\n/**\n * Headless render-prop primitive for single-image upload workflows.\n * Renders zero DOM elements of its own and delegates 100% of markup and styling to `children(controller)`.\n */\nexport function HeadlessSingleUpload<\n TPreset extends string = UploadPresetName,\n>(props: HeadlessSingleUploadProps<TPreset>): ReactElement {\n const controller = useSingleUpload<TPreset>(props);\n return <>{props.children(controller)}</>;\n}\n\nexport default HeadlessSingleUpload;\n","import type { ReactElement } from 'react';\nimport type { UploadPresetName } from '../../types';\nimport type { HeadlessMultiUploadProps } from './types';\nimport { useMultiUpload } from './useMultiUpload';\n\n/**\n * Headless render-prop primitive for multi-image and folder upload workflows.\n * Renders zero DOM elements of its own and delegates 100% of markup and styling to `children(controller)`.\n */\nexport function HeadlessMultiUpload<\n TPreset extends string = UploadPresetName,\n>(props: HeadlessMultiUploadProps<TPreset>): ReactElement {\n const controller = useMultiUpload<TPreset>(props);\n return <>{props.children(controller)}</>;\n}\n\nexport default HeadlessMultiUpload;\n","import { Type as TypeIcon } from 'lucide-react';\nimport { useId } from 'react';\nimport type { UploadLocale } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport {\n normalizeUploadLocale,\n resolveTranslations,\n type UploadTranslations,\n} from '../i18n';\n\nexport interface AltTextInputProps {\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n placeholder?: string;\n maxLength?: number;\n label?: string;\n showHint?: boolean;\n locale?: UploadLocale;\n translations?: Partial<UploadTranslations>;\n}\n\nexport function AltTextInput({\n value,\n onChange,\n disabled = false,\n placeholder,\n maxLength = 200,\n label,\n showHint = true,\n locale: propLocale,\n translations,\n}: AltTextInputProps) {\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(locale, translations || ctx.translations);\n const resolvedPlaceholder = placeholder || ui.describeImagePlaceholder;\n const resolvedLabel = label || ui.addImageDescription;\n const inputId = useId();\n const hintId = showHint ? `${inputId}-hint` : undefined;\n\n return (\n <div className=\"iuk-alt-input\" dir={locale === 'ar' ? 'rtl' : 'ltr'}>\n <div className=\"iuk-alt-input__header\">\n <TypeIcon size={16} />\n <label htmlFor={inputId} className=\"iuk-alt-input__label\">\n {resolvedLabel}\n </label>\n </div>\n <input\n id={inputId}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={resolvedPlaceholder}\n className=\"iuk-alt-input__field\"\n disabled={disabled}\n maxLength={maxLength}\n aria-label={ui.addAltTextAria}\n aria-describedby={hintId}\n />\n {showHint && (\n <p className=\"iuk-alt-input__hint\" id={hintId}>\n <span>\n {value.length}/{maxLength} {ui.characters}\n </span>\n <span>{ui.usedForA11ySeo}</span>\n </p>\n )}\n </div>\n );\n}\n\nexport default AltTextInput;\n","import { decode as decodeBlurHash, isBlurhashValid } from 'blurhash';\nimport type { BlurData, BlurImageSource } from './types';\n\nexport interface BlurPlaceholderStyle {\n backgroundColor: string;\n backgroundImage?: string;\n backgroundSize?: string;\n backgroundPosition?: string;\n backgroundRepeat?: string;\n filter?: string;\n transform?: string;\n}\n\nexport function getBlurData(\n image: BlurImageSource | null | undefined,\n): BlurData {\n if (!image) {\n return {\n blurDataUrl: '',\n blurColor: '#E5E7EB',\n hasBlur: false,\n };\n }\n\n return {\n blurDataUrl: image.blurDataUrl || '',\n blurColor: image.blurColor || '#E5E7EB',\n ...(image.blurHash ? { blurHash: image.blurHash } : {}),\n hasBlur: Boolean(image.blurDataUrl || image.blurHash),\n };\n}\n\nexport function getImagePropsWithBlur(\n image: BlurImageSource | null | undefined,\n) {\n if (!image?.url) {\n return null;\n }\n\n const blurData = getBlurData(image);\n\n return {\n src: image.url,\n alt: image.altText || '',\n width: image.width || 1920,\n height: image.height || 1080,\n ...(blurData.blurDataUrl && {\n placeholder: 'blur' as const,\n blurDataURL: blurData.blurDataUrl,\n }),\n };\n}\n\nexport function getBackgroundPropsWithBlur(\n image: BlurImageSource | null | undefined,\n): BlurPlaceholderStyle {\n if (!image?.url) {\n return {\n backgroundColor: '#E5E7EB',\n };\n }\n\n const blurData = getBlurData(image);\n\n return {\n backgroundColor: blurData.blurColor,\n backgroundImage: `url(${image.url})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n };\n}\n\nexport function getBlurPlaceholderStyle(\n image: BlurImageSource | null | undefined,\n): BlurPlaceholderStyle {\n const blurData = getBlurData(image);\n\n if (!blurData.blurDataUrl) {\n return {\n backgroundColor: blurData.blurColor,\n };\n }\n\n return {\n backgroundColor: blurData.blurColor,\n backgroundImage: `url(${blurData.blurDataUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n filter: 'blur(20px)',\n transform: 'scale(1.1)',\n };\n}\n\nexport function hasBlurData(\n image: BlurImageSource | null | undefined,\n): boolean {\n return Boolean(image?.blurDataUrl || image?.blurColor || image?.blurHash);\n}\n\nexport function getBulkBlurData(\n images: Array<BlurImageSource | null | undefined>,\n): BlurData[] {\n return images.map(getBlurData);\n}\n\nexport function createSrcSetWithBlur(\n image: BlurImageSource | null | undefined,\n): string {\n if (!image?.url) return '';\n\n const blurData = getBlurData(image);\n if (!blurData.blurDataUrl) {\n return image.url;\n }\n\n return `${blurData.blurDataUrl} 40w, ${image.url} ${image.width || 1920}w`;\n}\n\nexport function preloadImageWithBlur(\n image: BlurImageSource | null | undefined,\n): void {\n if (!image?.url || typeof document === 'undefined') return;\n\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = image.url;\n\n const blurData = getBlurData(image);\n if (blurData.blurDataUrl) {\n link.setAttribute('imagesrcset', blurData.blurDataUrl);\n }\n\n document.head.appendChild(link);\n}\n\nexport function extractImageUrls(\n image: BlurImageSource | null | undefined,\n): string[] {\n if (!image?.url) return [];\n return [image.url];\n}\n\n/**\n * Browser helper: Decodes a compact BlurHash string (e.g. \"LEHV6nWB2yk8pyo0adR*.7kCMdnj\")\n * into a `data:image/png;base64,...` URL using an offscreen `<canvas>`.\n */\nexport function decodeBlurHashToDataURL(\n hash: string,\n width: number = 32,\n height: number = 32,\n punch: number = 1,\n): string | null {\n if (!hash || typeof document === 'undefined') return null;\n const validation = isBlurhashValid(hash);\n if (!validation.result) return null;\n\n try {\n const pixels = decodeBlurHash(hash, width, height, punch);\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n const imageData = ctx.createImageData(width, height);\n imageData.data.set(pixels);\n ctx.putImageData(imageData, 0, 0);\n return canvas.toDataURL('image/png');\n } catch {\n return null;\n }\n}\n","import {\n type CSSProperties,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { decodeBlurHashToDataURL } from '../../blur/blurDataUtils';\nimport { useImageUploadContext } from '../context';\nimport type { CustomImageRenderer } from '../types';\n\nexport interface BlurImageProps {\n src: string;\n alt: string;\n blurDataUrl?: string | null;\n blurColor?: string | null;\n blurHash?: string | null;\n objectFit?: CSSProperties['objectFit'];\n className?: string;\n imageClassName?: string;\n style?: CSSProperties;\n renderImage?: CustomImageRenderer;\n onImageLoad?: (img: HTMLImageElement | null) => void;\n}\n\nexport function BlurImage({\n src,\n alt,\n blurDataUrl,\n blurColor,\n blurHash,\n objectFit = 'cover',\n className = '',\n imageClassName = '',\n style,\n renderImage: propRenderImage,\n onImageLoad,\n}: BlurImageProps) {\n const ctx = useImageUploadContext();\n const renderImage = propRenderImage || ctx.renderImage;\n const [loadedSrc, setLoadedSrc] = useState<string | null>(null);\n const imgRef = useRef<HTMLImageElement | null>(null);\n\n const decodedHashUrl = useMemo(() => {\n if (blurDataUrl || !blurHash) return null;\n return decodeBlurHashToDataURL(blurHash, 32, 32);\n }, [blurDataUrl, blurHash]);\n\n const effectiveBlurUrl = blurDataUrl || decodedHashUrl || undefined;\n const isLoaded = loadedSrc === src;\n\n useEffect(() => {\n const el = imgRef.current;\n if (el && el.complete && el.naturalWidth > 0) {\n setLoadedSrc(src);\n onImageLoad?.(el);\n }\n }, [src, onImageLoad]);\n\n const imgStyle: CSSProperties = {\n width: '100%',\n height: '100%',\n objectFit,\n opacity: isLoaded || !effectiveBlurUrl ? 1 : 0,\n transition: 'opacity 0.28s ease-out',\n };\n\n return (\n <div\n className={`iuk-blur-image-wrap ${className}`.trim()}\n style={{\n backgroundColor: blurColor || 'var(--iuk-placeholder-bg, #f3f4f6)',\n ...style,\n }}\n >\n {effectiveBlurUrl && (\n <div\n aria-hidden=\"true\"\n className={`iuk-blur-image-backdrop ${isLoaded ? 'iuk-blur-image-backdrop--hidden' : ''}`}\n style={{\n backgroundImage: `url(${effectiveBlurUrl})`,\n backgroundSize: objectFit === 'contain' ? 'contain' : 'cover',\n }}\n />\n )}\n\n {renderImage ? (\n renderImage({\n src,\n alt,\n className: `iuk-blur-image-el ${imageClassName}`.trim(),\n style: imgStyle,\n onLoad: (el) => {\n setLoadedSrc(src);\n onImageLoad?.(el);\n },\n })\n ) : (\n <img\n ref={imgRef}\n src={src}\n alt={alt}\n loading=\"lazy\"\n decoding=\"async\"\n className={`iuk-blur-image-el ${imageClassName}`.trim()}\n style={imgStyle}\n onLoad={(e) => {\n setLoadedSrc(src);\n onImageLoad?.(e.currentTarget);\n }}\n />\n )}\n </div>\n );\n}\n\nexport default BlurImage;\n","import { CheckCircle2, Type as TypeIcon, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { UploadLocale } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport {\n normalizeUploadLocale,\n resolveTranslations,\n type UploadTranslations,\n} from '../i18n';\nimport type { CustomImageRenderer } from '../types';\nimport { BlurImage } from './BlurImage';\n\nexport interface AltTextModalProps {\n imageUrl: string;\n initialAltText?: string;\n onSave: (altText: string) => void;\n onClose: () => void;\n locale?: UploadLocale;\n translations?: Partial<UploadTranslations>;\n renderImage?: CustomImageRenderer;\n}\n\nexport function AltTextModal({\n imageUrl,\n initialAltText = '',\n onSave,\n onClose,\n locale: propLocale,\n translations,\n renderImage,\n}: AltTextModalProps) {\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(locale, translations || ctx.translations);\n const [localAltText, setLocalAltText] = useState(initialAltText);\n\n const handleSave = () => {\n onSave(localAltText);\n onClose();\n };\n\n const content = (\n <div\n className=\"iuk-modal-backdrop\"\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\n onClick={onClose}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div\n className=\"iuk-alt-modal\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"iuk-alt-modal__header\">\n <div className=\"iuk-alt-modal__title\">\n <TypeIcon size={18} />\n <span>{ui.addImageDescription}</span>\n </div>\n <button\n type=\"button\"\n className=\"iuk-icon-btn\"\n onClick={onClose}\n title={ui.close}\n aria-label={ui.close}\n >\n <X size={18} />\n </button>\n </div>\n\n <div className=\"iuk-alt-modal__preview\">\n <BlurImage\n src={imageUrl}\n alt={ui.previewAlt}\n objectFit=\"contain\"\n renderImage={renderImage}\n />\n </div>\n\n <input\n type=\"text\"\n className=\"iuk-alt-input__field\"\n value={localAltText}\n onChange={(e) => setLocalAltText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n }}\n placeholder={ui.describeImagePlaceholder}\n maxLength={200}\n autoFocus\n />\n\n <div className=\"iuk-alt-input__hint\">\n <span>\n {localAltText.length}/200 {ui.characters}\n </span>\n <span>{ui.usedForA11ySeo}</span>\n </div>\n\n <div className=\"iuk-alt-modal__actions\">\n <button\n type=\"button\"\n className=\"iuk-btn iuk-btn--secondary\"\n onClick={onClose}\n >\n {ui.cancel}\n </button>\n <button\n type=\"button\"\n className=\"iuk-btn iuk-btn--primary\"\n onClick={handleSave}\n >\n <CheckCircle2 size={16} />\n <span>{ui.saveDescription}</span>\n </button>\n </div>\n </div>\n </div>\n );\n\n if (typeof document !== 'undefined') {\n return createPortal(content, document.body);\n }\n return content;\n}\n\nexport default AltTextModal;\n","import { decodeBlurHashToDataURL } from '../../../blur/blurDataUtils';\n\n/**\n * Colors that carry no real information about the image (common DB defaults\n * or \"empty\" values). They are replaced by a neutral slate gradient so the\n * placeholder never flashes pitch-black or stark white.\n */\nconst NEUTRAL_COLORS = new Set(['#1a1a1a', '#121212', '#000000', '#000', '#e5e7eb', '#ffffff', '#fff']);\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst FUNC_COLOR = /^(?:rgb|rgba|hsl|hsla|oklch|oklab)\\([\\d\\s.,%/+-]+\\)$/i;\n\n/** Returns a safe, meaningful color or `undefined` when the value is empty/neutral/invalid. */\nexport function resolveMeaningfulColor(color?: string | null): string | undefined {\n const value = color?.trim();\n if (!value) return undefined;\n if (NEUTRAL_COLORS.has(value.toLowerCase())) return undefined;\n // Guard against CSS/SVG injection: only accept plain color literals.\n if (!HEX_COLOR.test(value) && !FUNC_COLOR.test(value)) return undefined;\n return value;\n}\n\n/**\n * Inline SVG data URL that renders a soft gradient placeholder.\n * Uses the dominant color when provided, otherwise a neutral slate gradient.\n */\nexport function createFallbackBlurSvg(color?: string | null): string {\n const meaningful = resolveMeaningfulColor(color);\n const stop1 = meaningful ?? '#2c3340';\n const stop2 = meaningful ?? '#1e242d';\n const svg =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" width=\"100%\" height=\"100%\">' +\n '<defs><linearGradient id=\"g\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">' +\n `<stop offset=\"0%\" stop-color=\"${stop1}\" stop-opacity=\"0.95\"/>` +\n `<stop offset=\"100%\" stop-color=\"${stop2}\" stop-opacity=\"0.9\"/>` +\n '</linearGradient></defs>' +\n '<rect width=\"100%\" height=\"100%\" fill=\"url(#g)\"/></svg>';\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nexport interface PlaceholderSources {\n blurDataUrl?: string | null;\n blurHash?: string | null;\n blurColor?: string | null;\n}\n\n/**\n * Resolves the best available placeholder in priority order:\n * 1. `blurDataUrl` (LQIP data URL / remote URL)\n * 2. `blurHash` (decoded client-side; browser only)\n * 3. Gradient SVG derived from `blurColor` (or neutral fallback)\n */\nexport function resolvePlaceholderUrl({ blurDataUrl, blurHash, blurColor }: PlaceholderSources): string {\n const dataUrl = blurDataUrl?.trim();\n if (dataUrl) return dataUrl;\n if (blurHash && typeof document !== 'undefined') {\n try {\n const decoded = decodeBlurHashToDataURL(blurHash, 32, 32);\n if (decoded) return decoded;\n } catch {\n // Invalid hash: fall through to color gradient.\n }\n }\n return createFallbackBlurSvg(blurColor);\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseImageRevealOptions {\n /** Identity of the current source; a change resets the reveal state. */\n srcKey: string;\n /** Crossfade duration in ms. */\n animationDuration: number;\n onLoad?: (img: HTMLImageElement | null) => void;\n}\n\nexport interface ImageRevealState {\n /** True once the sharp image is decoded and ready to fade in. */\n isLoaded: boolean;\n /** Whether the placeholder layer is still mounted (kept until fade completes). */\n showPlaceholder: boolean;\n /** True when the image failed to load. */\n hasError: boolean;\n /** Callback ref to attach to the underlying `<img>` element. */\n imgRef: (node: HTMLImageElement | null) => void;\n handleLoad: (img?: HTMLImageElement | null) => void;\n handleError: () => void;\n}\n\n/**\n * Framework-agnostic reveal state machine for blur-up images:\n * - resets synchronously when `srcKey` changes (no stale 1-frame flash)\n * - pre-decodes via `HTMLImageElement.decode()` before crossfading\n * - detects already-cached images after the first paint\n * - keeps the placeholder mounted until the crossfade finishes, then unmounts it\n * - clears all timers / animation frames on unmount\n */\nexport function useImageReveal({ srcKey, animationDuration, onLoad }: UseImageRevealOptions): ImageRevealState {\n const [prevSrc, setPrevSrc] = useState(srcKey);\n const [isLoaded, setIsLoaded] = useState(false);\n const [showPlaceholder, setShowPlaceholder] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [node, setNode] = useState<HTMLImageElement | null>(null);\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const mountedRef = useRef(true);\n const srcRef = useRef(srcKey);\n const onLoadRef = useRef(onLoad);\n useEffect(() => {\n onLoadRef.current = onLoad;\n }, [onLoad]);\n\n const clearTimer = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n\n // Synchronous reset during render when the source changes.\n if (prevSrc !== srcKey) {\n setPrevSrc(srcKey);\n setIsLoaded(false);\n setShowPlaceholder(true);\n setHasError(false);\n }\n\n useEffect(() => {\n srcRef.current = srcKey;\n clearTimer();\n }, [srcKey]);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n clearTimer();\n };\n }, []);\n\n const handleLoad = useCallback(\n (img?: HTMLImageElement | null) => {\n const el = img ?? node;\n const loadedFor = srcRef.current;\n const reveal = () => {\n // Ignore stale decodes from a previous src or after unmount.\n if (!mountedRef.current || loadedFor !== srcRef.current) return;\n setIsLoaded(true);\n clearTimer();\n timeoutRef.current = setTimeout(() => {\n if (mountedRef.current) setShowPlaceholder(false);\n timeoutRef.current = null;\n }, animationDuration + 200);\n onLoadRef.current?.(el ?? null);\n };\n if (el && typeof el.decode === 'function') {\n el.decode().then(reveal, reveal);\n } else {\n reveal();\n }\n },\n [animationDuration, node],\n );\n\n const handleError = useCallback(() => {\n if (!mountedRef.current) return;\n clearTimer();\n setHasError(true);\n setIsLoaded(true);\n setShowPlaceholder(false);\n }, []);\n\n // Cached images may finish before React attaches onLoad: wait one frame so\n // the placeholder paints first, then reveal.\n useEffect(() => {\n if (!node || !node.complete || node.naturalWidth === 0) return;\n if (typeof requestAnimationFrame !== 'function') {\n handleLoad(node);\n return;\n }\n const rafId = requestAnimationFrame(() => handleLoad(node));\n return () => cancelAnimationFrame(rafId);\n }, [node, srcKey, handleLoad]);\n\n return { isLoaded, showPlaceholder, hasError, imgRef: setNode, handleLoad, handleError };\n}\n","import {\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ImgHTMLAttributes,\n type SyntheticEvent,\n useMemo,\n} from 'react';\nimport { cx } from '../../utils/slotStyles';\nimport { resolveMeaningfulColor, resolvePlaceholderUrl } from './placeholder';\nimport { useImageReveal } from './useImageReveal';\n\nexport type AnimatedImageObjectFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n\nexport interface AnimatedImageSource {\n url: string;\n altText?: string | null;\n blurDataUrl?: string | null;\n blurHash?: string | null;\n blurColor?: string | null;\n width?: number;\n height?: number;\n}\n\ninterface AnimatedImageBaseProps\n extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt' | 'onLoad' | 'onError' | 'placeholder'> {\n /** LQIP data URL (e.g. `UploadedImageData.blurDataUrl`). Highest priority placeholder. */\n blurDataUrl?: string | null;\n /** BlurHash string, decoded client-side when no `blurDataUrl` is given. */\n blurHash?: string | null;\n /** Dominant color (e.g. `UploadedImageData.blurColor`) used as background & gradient fallback. */\n blurColor?: string | null;\n /** Absolutely fill the nearest positioned parent (like `next/image` `fill`). */\n fill?: boolean;\n objectFit?: AnimatedImageObjectFit;\n objectPosition?: CSSProperties['objectPosition'];\n /** Show an animated shimmer while loading. Default `false`. */\n showShimmer?: boolean;\n /** Crossfade duration in ms. Default `700`. */\n animationDuration?: number;\n /** Render a custom image component (e.g. `next/image`, Gatsby, Astro). Receives all img props. */\n as?: ElementType;\n /** Extra props forwarded only to the `as` component (e.g. `{ quality: 80, priority: true }`). */\n imageComponentProps?: Record<string, unknown>;\n /** Strip all default `iuk-animated-image*` classes (bring your own CSS). */\n unstyled?: boolean;\n wrapperClassName?: string;\n wrapperStyle?: CSSProperties;\n wrapperProps?: HTMLAttributes<HTMLDivElement>;\n placeholderClassName?: string;\n /** Called after the image is decoded and the fade-in starts. */\n onLoad?: (img: HTMLImageElement | null) => void;\n onError?: (event: SyntheticEvent<HTMLImageElement, Event>) => void;\n}\n\nexport type AnimatedImageProps = AnimatedImageBaseProps &\n (\n | {\n /** Direct `UploadedImageData` object returned by `<SingleImageUpload>` or `<MultiImageUpload>`. */\n image: AnimatedImageSource;\n src?: string;\n alt?: string;\n }\n | {\n image?: undefined;\n /** Image URL. */\n src: string;\n /** Accessible alt text (use `\"\"` for decorative images). */\n alt: string;\n }\n );\n\nconst preventDrag = (event: SyntheticEvent) => event.preventDefault();\nconst cn = (...classes: Parameters<typeof cx>) => cx(...classes) || undefined;\n\n/**\n * Blur-up image with a smooth, GPU-friendly crossfade from placeholder to sharp image.\n * Pure React, SSR-safe, framework-agnostic — plug in `next/image` via `as`.\n */\nexport function AnimatedImage({\n image,\n src: srcProp,\n alt: altProp,\n blurDataUrl: blurDataUrlProp,\n blurHash: blurHashProp,\n blurColor: blurColorProp,\n width: widthProp,\n height: heightProp,\n fill = false,\n objectFit = 'cover',\n objectPosition = 'center',\n showShimmer = false,\n animationDuration = 700,\n as: ImageComponent,\n imageComponentProps,\n unstyled = false,\n wrapperClassName,\n wrapperStyle,\n wrapperProps,\n placeholderClassName,\n className,\n style,\n loading = 'lazy',\n decoding = 'async',\n draggable = false,\n onLoad,\n onError,\n ...imgProps\n}: AnimatedImageProps) {\n const src = srcProp ?? image?.url ?? '';\n const alt = altProp ?? image?.altText ?? '';\n const blurDataUrl = blurDataUrlProp ?? image?.blurDataUrl;\n const blurHash = blurHashProp ?? image?.blurHash;\n const blurColor = blurColorProp ?? image?.blurColor;\n const width = widthProp ?? (!fill ? image?.width : undefined);\n const height = heightProp ?? (!fill ? image?.height : undefined);\n\n const { isLoaded, showPlaceholder, hasError, imgRef, handleLoad, handleError } = useImageReveal({\n srcKey: src,\n animationDuration,\n onLoad,\n });\n\n const placeholderUrl = useMemo(\n () => resolvePlaceholderUrl({ blurDataUrl, blurHash, blurColor }),\n [blurDataUrl, blurHash, blurColor],\n );\n\n const state = hasError ? 'error' : isLoaded ? 'loaded' : 'loading';\n const isContain = objectFit === 'contain';\n const cls = (name: string) => (unstyled ? undefined : name);\n const duration = Math.max(0, animationDuration);\n\n const containerStyle: CSSProperties = {\n backgroundColor:\n resolveMeaningfulColor(blurColor) ??\n (unstyled ? undefined : 'var(--iuk-animated-image-bg, rgba(38, 45, 56, 0.4))'),\n ...(unstyled ? undefined : { ['--iuk-animated-image-duration' as string]: `${duration}ms` }),\n ...wrapperStyle,\n };\n\n // Staggered fade: keep the placeholder opaque for the first 25% so the\n // background never \"dips\" through mid-transition.\n const placeholderStyle: CSSProperties = {\n objectFit: isContain ? 'contain' : 'cover',\n transitionDuration: `${Math.round(duration * 0.75)}ms`,\n transitionDelay: isLoaded ? `${Math.round(duration * 0.25)}ms` : '0ms',\n };\n\n const imageStyle: CSSProperties = {\n objectFit,\n objectPosition,\n transitionDuration: `${duration}ms`,\n ...style,\n };\n\n const sharedImgProps = {\n ...imgProps,\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n src,\n alt,\n loading,\n decoding,\n draggable,\n ref: imgRef,\n className: cn(cls('iuk-animated-image__img'), className),\n style: imageStyle,\n 'data-state': state,\n onDragStart: imgProps.onDragStart ?? preventDrag,\n onLoad: (event: SyntheticEvent<HTMLImageElement>) => handleLoad(event.currentTarget),\n onError: (event: SyntheticEvent<HTMLImageElement, Event>) => {\n handleError();\n onError?.(event);\n },\n };\n\n return (\n <div\n {...wrapperProps}\n className={cn(\n cls('iuk-animated-image'),\n fill && cls('iuk-animated-image--fill'),\n isContain && cls('iuk-animated-image--contain'),\n wrapperClassName,\n wrapperProps?.className,\n )}\n style={{ ...containerStyle, ...wrapperProps?.style }}\n data-slot=\"animated-image\"\n data-state={state}\n aria-busy={!isLoaded || undefined}\n >\n {showPlaceholder && (\n <img\n src={placeholderUrl}\n alt=\"\"\n aria-hidden=\"true\"\n draggable={false}\n onDragStart={preventDrag}\n data-slot=\"animated-image-placeholder\"\n className={cn(\n cls('iuk-animated-image__placeholder'),\n isLoaded && cls('iuk-animated-image__placeholder--hidden'),\n placeholderClassName,\n )}\n style={placeholderStyle}\n />\n )}\n\n {showShimmer && showPlaceholder && (\n <div\n aria-hidden=\"true\"\n data-slot=\"animated-image-shimmer\"\n className={cn(\n cls('iuk-animated-image__shimmer'),\n isLoaded && cls('iuk-animated-image__shimmer--hidden'),\n )}\n />\n )}\n\n {ImageComponent ? (\n <ImageComponent {...sharedImgProps} {...(fill ? { fill: true } : {})} {...imageComponentProps} />\n ) : (\n <img {...sharedImgProps} />\n )}\n </div>\n );\n}\n\nexport default AnimatedImage;\n","import { useEffect } from 'react';\nimport { blurService } from '../../blur/blurService';\n\ndeclare global {\n interface Window {\n blurService?: typeof blurService;\n }\n}\n\nexport function BlurServiceDebugger() {\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.blurService = blurService;\n }\n }, []);\n\n return null;\n}\n\nexport default BlurServiceDebugger;\n","import type { PointerEvent as ReactPointerEvent, RefObject } from 'react';\nimport { rgbToHex } from '../../utils/color';\n\nexport function drawImageToCanvas(\n img: HTMLImageElement,\n canvasRef: RefObject<HTMLCanvasElement | null>,\n): void {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (!canvas || !ctx) return;\n const width = img.naturalWidth || img.width;\n const height = img.naturalHeight || img.height;\n if (!width || !height) return;\n canvas.width = width;\n canvas.height = height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n try {\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n } catch {\n // Tainted cross-origin canvas ignored gracefully\n }\n}\n\nexport function sampleCanvasPixelHex(\n event: ReactPointerEvent<HTMLElement>,\n canvasRef: RefObject<HTMLCanvasElement | null>,\n): string | null {\n const canvas = canvasRef.current;\n const context = canvas?.getContext('2d');\n if (!canvas || !context || canvas.width === 0 || canvas.height === 0) {\n return null;\n }\n\n const rect = event.currentTarget.getBoundingClientRect();\n if (!rect.width || !rect.height) return null;\n\n const relX = (event.clientX - rect.left) / rect.width;\n const relY = (event.clientY - rect.top) / rect.height;\n if (relX < 0 || relY < 0 || relX > 1 || relY > 1) return null;\n\n const x = Math.min(\n Math.max(Math.floor(relX * canvas.width), 0),\n canvas.width - 1,\n );\n const y = Math.min(\n Math.max(Math.floor(relY * canvas.height), 0),\n canvas.height - 1,\n );\n\n let pixel: Uint8ClampedArray;\n try {\n pixel = context.getImageData(x, y, 1, 1).data;\n } catch {\n return null;\n }\n\n const [r, g, b, alpha] = pixel;\n if (alpha === 0) return null;\n\n return rgbToHex(r, g, b);\n}\n","import { PenTool, Wand2 } from 'lucide-react';\nimport type { ChangeEvent } from 'react';\nimport type { BlurModalTranslations } from '../i18n';\n\nexport interface BlurColorControlsProps {\n localColor: string;\n hexInput: string;\n penModeActive: boolean;\n detectedColor?: string;\n sampledColor: string | null;\n tModal: BlurModalTranslations;\n onColorPickerChange: (event: ChangeEvent<HTMLInputElement>) => void;\n onHexInputChange: (event: ChangeEvent<HTMLInputElement>) => void;\n onTogglePenMode: () => void;\n onUseDetectedColor: () => void;\n}\n\nexport function BlurColorControls({\n localColor,\n hexInput,\n penModeActive,\n detectedColor,\n sampledColor,\n tModal,\n onColorPickerChange,\n onHexInputChange,\n onTogglePenMode,\n onUseDetectedColor,\n}: BlurColorControlsProps) {\n return (\n <div className=\"iuk-blur-modal__controls\">\n <h3 className=\"iuk-blur-modal__section-title\">{tModal.adjustColor}</h3>\n <p className=\"iuk-blur-modal__subtitle\">\n {penModeActive ? `🎨 ${tModal.clickToSample}` : tModal.pickColorNote}\n </p>\n\n <div className=\"iuk-blur-modal__picker-row\">\n <label className=\"iuk-blur-modal__color-well\">\n <input\n type=\"color\"\n value={localColor}\n onChange={onColorPickerChange}\n aria-label={tModal.adjustColor}\n />\n </label>\n\n <div className=\"iuk-blur-modal__hex-group\">\n <div className=\"iuk-blur-modal__hex-field\">\n <span>#</span>\n <input\n type=\"text\"\n value={hexInput}\n onChange={onHexInputChange}\n maxLength={6}\n spellCheck={false}\n aria-label={tModal.enterHexColor}\n placeholder={tModal.hexPlaceholder}\n />\n </div>\n <div className=\"iuk-blur-modal__swatch-chip\">\n <span\n className=\"iuk-blur-modal__swatch-dot\"\n style={{ backgroundColor: localColor }}\n aria-hidden=\"true\"\n />\n <code>{localColor}</code>\n </div>\n </div>\n </div>\n\n <div className=\"iuk-blur-modal__actions-row\">\n <button\n type=\"button\"\n onClick={onTogglePenMode}\n className={`iuk-btn iuk-btn--secondary ${penModeActive ? 'iuk-btn--active' : ''}`}\n aria-label={\n penModeActive ? tModal.disablePenMode : tModal.enablePenMode\n }\n >\n <PenTool size={14} />\n <span>\n {penModeActive ? tModal.penModeActive : tModal.enablePenMode}\n </span>\n </button>\n\n {detectedColor && (\n <button\n type=\"button\"\n className=\"iuk-btn iuk-btn--secondary\"\n onClick={onUseDetectedColor}\n >\n <Wand2 size={14} />\n <span>{tModal.resetToDetected}</span>\n <code>{detectedColor.toUpperCase()}</code>\n </button>\n )}\n\n {sampledColor && (\n <span className=\"iuk-badge iuk-badge--accent\">\n <PenTool size={12} />\n <span>\n {tModal.sampled} {sampledColor}\n </span>\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { resolveSlotClass } from '../utils/slotStyles';\n\nexport interface SaveButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: ReactNode;\n unstyled?: boolean;\n children: ReactNode;\n}\n\nexport function SaveButton({\n icon,\n unstyled = false,\n children,\n className = '',\n type = 'button',\n ...rest\n}: SaveButtonProps) {\n return (\n <button\n type={type}\n className={resolveSlotClass('iuk-save-button', unstyled, className)}\n {...rest}\n >\n {icon && (\n <span className={resolveSlotClass('iuk-save-button__icon', unstyled)}>\n {icon}\n </span>\n )}\n <span>{children}</span>\n </button>\n );\n}\n\nexport default SaveButton;\n","import { Eye, X } from 'lucide-react';\nimport type { ChangeEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { UploadLocale } from '../../types';\nimport { normalizeColorInput } from '../../utils/color';\nimport { formatFileSize } from '../../utils/formatters';\nimport { useImageUploadContext } from '../context';\nimport { normalizeUploadLocale, resolveTranslations, type UploadTranslations } from '../i18n';\nimport type { CustomImageRenderer } from '../types';\nimport { drawImageToCanvas, sampleCanvasPixelHex } from '../utils/canvasSampler';\nimport { BlurColorControls } from './BlurColorControls';\nimport { BlurImage } from './BlurImage';\nimport { SaveButton } from './SaveButton';\n\nexport interface BlurVisualizationModalProps {\n isOpen: boolean;\n onClose: () => void;\n imageUrl: string;\n blurDataUrl?: string;\n blurColor?: string;\n altText?: string;\n originalSize?: number;\n optimizedSize?: number | null;\n detectedColor?: string;\n onChangeColor?: (hex: string) => void;\n onUseDetectedColor?: () => void;\n onChangeAltText?: (altText: string) => void;\n locale?: UploadLocale;\n translations?: Partial<UploadTranslations>;\n renderImage?: CustomImageRenderer;\n}\n\nexport function BlurVisualizationModal({\n isOpen, onClose, imageUrl, blurDataUrl, blurColor, altText,\n originalSize, optimizedSize, detectedColor, onChangeColor,\n onUseDetectedColor, onChangeAltText, locale: propLocale,\n translations, renderImage,\n}: BlurVisualizationModalProps) {\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const tModal = resolveTranslations(locale, translations || ctx.translations).blurModal;\n\n const baseColor = useMemo(() => (blurColor || detectedColor || '#F5F5F5').toUpperCase(), [blurColor, detectedColor]);\n const [localColor, setLocalColor] = useState(baseColor);\n const [hexInput, setHexInput] = useState(baseColor.replace('#', ''));\n const [sampledColor, setSampledColor] = useState<string | null>(null);\n const [penModeActive, setPenModeActive] = useState(false);\n const [localAltText, setLocalAltText] = useState(altText || '');\n const liveCanvasRef = useRef<HTMLCanvasElement | null>(null);\n\n useEffect(() => {\n if (!isOpen) return;\n const frame = requestAnimationFrame(() => {\n setLocalColor(baseColor);\n setHexInput(baseColor.replace('#', ''));\n setLocalAltText(altText || '');\n });\n return () => cancelAnimationFrame(frame);\n }, [isOpen, baseColor, altText, blurDataUrl, imageUrl, blurColor]);\n\n useEffect(() => {\n if (!isOpen) return;\n const srcToLoad = imageUrl || blurDataUrl;\n if (!srcToLoad) return;\n const img = new window.Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => drawImageToCanvas(img, liveCanvasRef);\n img.onerror = () => {\n if (blurDataUrl && srcToLoad !== blurDataUrl) {\n const fallbackImg = new window.Image();\n fallbackImg.onload = () => drawImageToCanvas(fallbackImg, liveCanvasRef);\n fallbackImg.src = blurDataUrl;\n }\n };\n img.src = srcToLoad;\n return () => { img.onload = null; img.onerror = null; };\n }, [imageUrl, blurDataUrl, isOpen]);\n\n useEffect(() => {\n if (!sampledColor) return;\n const timer = window.setTimeout(() => setSampledColor(null), 2000);\n return () => window.clearTimeout(timer);\n }, [sampledColor]);\n\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen || typeof document === 'undefined') return null;\n\n const syncLocalHex = (hex: string, notify = true) => {\n setLocalColor(hex);\n setHexInput(hex.replace('#', ''));\n if (notify) onChangeColor?.(hex);\n };\n\n const handleColorPickerChange = (e: ChangeEvent<HTMLInputElement>) => syncLocalHex(e.target.value.toUpperCase());\n\n const handleHexInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const sanitized = event.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n setHexInput(sanitized.toUpperCase());\n if (sanitized.length === 3 || sanitized.length === 6) {\n const normalized = normalizeColorInput(`#${sanitized}`);\n if (normalized) {\n setLocalColor(normalized);\n onChangeColor?.(normalized);\n }\n }\n };\n\n const handlePenSample = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!penModeActive) {\n if (event.pointerType === 'pen') setPenModeActive(true);\n else return;\n }\n const sampled = sampleCanvasPixelHex(event, liveCanvasRef);\n if (!sampled) return;\n setSampledColor(sampled);\n syncLocalHex(sampled);\n };\n\n const handleUseDetectedColor = () => {\n if (!detectedColor) return;\n onUseDetectedColor?.();\n const normalized = normalizeColorInput(detectedColor);\n if (normalized) syncLocalHex(normalized, false);\n };\n\n const displayColor = localColor || blurColor || '#F5F5F5';\n\n return createPortal(\n <div\n className=\"iuk-modal-backdrop\" dir={locale === 'ar' ? 'rtl' : 'ltr'} onClick={onClose}\n role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"iuk-blur-modal-title\"\n >\n <div className=\"iuk-blur-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"iuk-blur-modal__header\">\n <div className=\"iuk-blur-modal__title-row\">\n <Eye size={20} className=\"iuk-blur-modal__title-icon\" />\n <h2 id=\"iuk-blur-modal-title\" className=\"iuk-blur-modal__title\">{tModal.title}</h2>\n {optimizedSize ? <span className=\"iuk-badge\">{formatFileSize(optimizedSize)}</span> : null}\n </div>\n <button type=\"button\" onClick={onClose} className=\"iuk-icon-btn\" aria-label={tModal.closeModal}>\n <X size={18} />\n </button>\n </div>\n\n <div className=\"iuk-blur-modal__body\">\n <div className=\"iuk-blur-modal__grid\">\n <BlurColorControls\n localColor={localColor}\n hexInput={hexInput}\n penModeActive={penModeActive}\n detectedColor={detectedColor}\n sampledColor={sampledColor}\n tModal={tModal}\n onColorPickerChange={handleColorPickerChange}\n onHexInputChange={handleHexInputChange}\n onTogglePenMode={() => setPenModeActive((prev) => !prev)}\n onUseDetectedColor={handleUseDetectedColor}\n />\n\n <div className=\"iuk-blur-modal__preview-col\">\n <h3 className=\"iuk-blur-modal__section-title\">{tModal.livePreview}</h3>\n <div\n className={`iuk-blur-modal__stage ${penModeActive ? 'iuk-blur-modal__stage--sampling' : ''}`}\n style={{ backgroundColor: displayColor }}\n onPointerDown={handlePenSample}\n >\n <BlurImage\n src={imageUrl}\n alt={altText || tModal.livePreview}\n blurDataUrl={blurDataUrl}\n blurColor={displayColor}\n objectFit=\"contain\"\n renderImage={renderImage}\n onImageLoad={(img) => { if (img) drawImageToCanvas(img, liveCanvasRef); }}\n />\n {!blurDataUrl && <div className=\"iuk-blur-modal__no-blur-note\">{tModal.showingOriginal}</div>}\n </div>\n\n {optimizedSize && originalSize && originalSize > optimizedSize ? (\n <div className=\"iuk-blur-modal__savings\">\n <span>{tModal.saved}</span>\n <strong>\n {formatFileSize(originalSize - optimizedSize)} (\n {Math.round(((originalSize - optimizedSize) / originalSize) * 100)}%)\n </strong>\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"iuk-blur-modal__alt-section\">\n <label htmlFor=\"iuk-modal-alt-textarea\" className=\"iuk-blur-modal__section-title\">\n {tModal.accessibility} — {tModal.altText}\n </label>\n <textarea\n id=\"iuk-modal-alt-textarea\"\n value={localAltText}\n onChange={(e) => { setLocalAltText(e.target.value); onChangeAltText?.(e.target.value); }}\n className=\"iuk-blur-modal__textarea\"\n placeholder={tModal.altTextPlaceholder}\n rows={2}\n />\n </div>\n\n <canvas ref={liveCanvasRef} style={{ display: 'none' }} aria-hidden=\"true\" />\n </div>\n\n <div className=\"iuk-blur-modal__footer\">\n <SaveButton onClick={onClose}>{tModal.saveAndClose}</SaveButton>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\nexport default BlurVisualizationModal;\n","import { FolderOpen, ImagePlus, Upload } from 'lucide-react';\nimport type { DragEvent } from 'react';\nimport type { UploadTranslations } from '../i18n';\nimport type {\n MultiUploadClassNames,\n MultiUploadSlot,\n MultiUploadStyles,\n UploadVisualState,\n} from '../styling';\nimport {\n cx,\n resolveSlotClass,\n resolveSlotStyle,\n resolveUploadDataState,\n} from '../utils/slotStyles';\n\nexport interface DropzoneDragHandlers {\n onDragEnter: (e: DragEvent) => void;\n onDragLeave: (e: DragEvent) => void;\n onDragOver: (e: DragEvent) => void;\n onDrop: (e: DragEvent) => void;\n}\n\nexport interface MultiDropzoneSlotProps {\n unstyled?: boolean;\n providerClassNames?: MultiUploadClassNames;\n classNames?: MultiUploadClassNames;\n providerStyles?: MultiUploadStyles;\n styles?: MultiUploadStyles;\n}\n\nexport interface MultiEmptyDropzoneProps extends MultiDropzoneSlotProps {\n isDragging: boolean;\n disabled?: boolean;\n hasError?: boolean;\n visualState?: UploadVisualState;\n allowFolder?: boolean;\n maxSizeMB: number;\n ui: UploadTranslations;\n dragHandlers: DropzoneDragHandlers;\n onSelectFiles: () => void;\n onSelectFolder: () => void;\n}\n\nexport function MultiEmptyDropzone({\n isDragging,\n disabled = false,\n hasError = false,\n visualState: propVisualState,\n allowFolder = true,\n maxSizeMB,\n ui,\n dragHandlers,\n onSelectFiles,\n onSelectFolder,\n unstyled,\n providerClassNames: pCls,\n classNames: cCls,\n providerStyles: pSty,\n styles: cSty,\n}: MultiEmptyDropzoneProps) {\n const visualState =\n propVisualState ?? resolveUploadDataState({ disabled, hasError, isDragging });\n\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, pCls?.[slot], cCls?.[slot]);\n const slotStyle = (slot: MultiUploadSlot) =>\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\n\n const rootClassName = resolveSlotClass(\n cx(\n 'iuk-multi__empty',\n isDragging && 'iuk-multi__empty--dragging',\n disabled && 'iuk-multi__empty--disabled',\n hasError && 'iuk-multi__empty--error',\n ),\n unstyled,\n pCls?.emptyDropzone, cCls?.emptyDropzone,\n isDragging && pCls?.emptyDropzoneDragging, isDragging && cCls?.emptyDropzoneDragging,\n disabled && pCls?.emptyDropzoneDisabled, disabled && cCls?.emptyDropzoneDisabled,\n hasError && pCls?.emptyDropzoneError, hasError && cCls?.emptyDropzoneError,\n );\n\n const rootStyle = resolveSlotStyle(\n pSty?.emptyDropzone, cSty?.emptyDropzone,\n isDragging ? pSty?.emptyDropzoneDragging : undefined,\n isDragging ? cSty?.emptyDropzoneDragging : undefined,\n disabled ? pSty?.emptyDropzoneDisabled : undefined,\n disabled ? cSty?.emptyDropzoneDisabled : undefined,\n hasError ? pSty?.emptyDropzoneError : undefined,\n hasError ? cSty?.emptyDropzoneError : undefined,\n );\n\n return (\n <div\n data-slot=\"empty-dropzone\"\n data-state={visualState}\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n data-error={hasError || undefined}\n className={rootClassName}\n style={rootStyle}\n {...dragHandlers}\n >\n <div className={resolveSlotClass('iuk-dropzone__prompt', unstyled)}>\n <div className={resolveSlotClass('iuk-dropzone__icon', unstyled)}>\n <ImagePlus size={40} strokeWidth={1.5} />\n </div>\n <h3\n data-slot=\"empty-title\"\n className={slotClass('emptyTitle', 'iuk-multi__title')}\n style={slotStyle('emptyTitle')}\n >\n {isDragging ? ui.dropImagesHere : ui.uploadImages}\n </h3>\n <p\n data-slot=\"empty-hint\"\n className={slotClass('emptyHint', 'iuk-dropzone__hint')}\n style={slotStyle('emptyHint')}\n >\n {isDragging ? ui.releaseToUpload : ui.dragDropOrChoose}\n </p>\n\n {!isDragging && (\n <div\n data-slot=\"empty-actions\"\n className={slotClass('emptyActions', 'iuk-multi__btn-row')}\n style={slotStyle('emptyActions')}\n >\n <button\n type=\"button\"\n onClick={onSelectFiles}\n className={slotClass('primaryButton', 'iuk-btn iuk-btn--primary')}\n style={slotStyle('primaryButton')}\n disabled={disabled}\n >\n <Upload size={16} />\n <span>{ui.selectFiles}</span>\n </button>\n {allowFolder && (\n <button\n type=\"button\"\n onClick={onSelectFolder}\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary')}\n style={slotStyle('secondaryButton')}\n disabled={disabled}\n >\n <FolderOpen size={16} />\n <span>{ui.selectFolder}</span>\n </button>\n )}\n </div>\n )}\n\n {!isDragging && (\n <p\n data-slot=\"empty-subtext\"\n className={slotClass('emptySubtext', 'iuk-multi__subtext')}\n style={slotStyle('emptySubtext')}\n >\n {ui.supportsFormats} •{' '}\n {ui.maxPerFile.replace('{size}', String(maxSizeMB))}\n </p>\n )}\n </div>\n </div>\n );\n}\n\nexport interface MultiAddMoreTileProps extends MultiDropzoneSlotProps {\n isDragging: boolean;\n disabled?: boolean;\n allowFolder?: boolean;\n ui: UploadTranslations;\n dragHandlers: DropzoneDragHandlers;\n onSelectFiles: () => void;\n onSelectFolder: () => void;\n}\n\nexport function MultiAddMoreTile({\n isDragging,\n disabled = false,\n allowFolder = true,\n ui,\n dragHandlers,\n onSelectFiles,\n onSelectFolder,\n unstyled,\n providerClassNames: pCls,\n classNames: cCls,\n providerStyles: pSty,\n styles: cSty,\n}: MultiAddMoreTileProps) {\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, pCls?.[slot], cCls?.[slot]);\n const slotStyle = (slot: MultiUploadSlot) =>\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\n\n const rootClassName = resolveSlotClass(\n cx(\n 'iuk-tile iuk-tile--add-more',\n isDragging && 'iuk-tile--dragging',\n disabled && 'iuk-tile--disabled',\n ),\n unstyled,\n pCls?.addMoreTile, cCls?.addMoreTile,\n isDragging && pCls?.addMoreTileDragging, isDragging && cCls?.addMoreTileDragging,\n );\n\n const rootStyle = resolveSlotStyle(\n pSty?.addMoreTile, cSty?.addMoreTile,\n isDragging ? pSty?.addMoreTileDragging : undefined,\n isDragging ? cSty?.addMoreTileDragging : undefined,\n );\n\n return (\n <div\n data-slot=\"add-more\"\n data-dragging={isDragging || undefined}\n data-disabled={disabled || undefined}\n className={rootClassName}\n style={rootStyle}\n {...dragHandlers}\n >\n <div\n data-slot=\"add-more-content\"\n className={slotClass('addMoreContent', 'iuk-tile__add-content')}\n style={slotStyle('addMoreContent')}\n >\n <ImagePlus size={28} strokeWidth={1.5} />\n <p>{isDragging ? ui.dropHere : ui.addMore}</p>\n {!isDragging && (\n <div\n data-slot=\"add-more-actions\"\n className={slotClass('addMoreActions', 'iuk-tile__add-btns')}\n style={slotStyle('addMoreActions')}\n >\n <button\n type=\"button\"\n onClick={onSelectFiles}\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\n style={slotStyle('secondaryButton')}\n disabled={disabled}\n >\n <Upload size={13} />\n <span>{ui.files}</span>\n </button>\n {allowFolder && (\n <button\n type=\"button\"\n onClick={onSelectFolder}\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\n style={slotStyle('secondaryButton')}\n disabled={disabled}\n >\n <FolderOpen size={13} />\n <span>{ui.folder}</span>\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import {\n AlertTriangle, CheckCircle2, Loader2, Save, Trash2, XCircle,\n} from 'lucide-react';\nimport type { MultiUploadStats } from '../hooks/useMultiImageState';\nimport type { UploadTranslations } from '../i18n';\nimport type {\n MultiUploadClassNames, MultiUploadSlot, MultiUploadStyles,\n} from '../styling';\nimport { cx, resolveSlotClass, resolveSlotStyle } from '../utils/slotStyles';\nimport { SaveButton } from './SaveButton';\n\nexport interface MultiSlotStylingProps {\n unstyled?: boolean;\n providerClassNames?: MultiUploadClassNames;\n classNames?: MultiUploadClassNames;\n providerStyles?: MultiUploadStyles;\n styles?: MultiUploadStyles;\n}\n\nexport interface MultiUploadHeaderAlertsProps extends MultiSlotStylingProps {\n label?: string;\n required?: boolean;\n disabled?: boolean;\n totalCount: number;\n selectedCount: number;\n uploadingCount: number;\n missingAltCount: number;\n isUploading: boolean;\n hasFailedUploads: boolean;\n infoMessage: string;\n showMissingAltWarning: boolean;\n uploadStats: MultiUploadStats;\n ui: UploadTranslations;\n onSelectAll: () => void;\n onDeselectAll: () => void;\n onRemoveSelected: () => void;\n onRetryFailed: () => void;\n}\n\nexport function MultiUploadHeaderAlerts({\n label, required = false, disabled = false,\n totalCount, selectedCount, uploadingCount, missingAltCount,\n isUploading, hasFailedUploads, infoMessage, showMissingAltWarning,\n uploadStats, ui, onSelectAll, onDeselectAll, onRemoveSelected, onRetryFailed,\n unstyled, providerClassNames, classNames, providerStyles, styles,\n}: MultiUploadHeaderAlertsProps) {\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\n const slotStyle = (slot: MultiUploadSlot) =>\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\n\n return (\n <>\n <div\n data-slot=\"header\"\n className={slotClass('header', 'iuk-multi__header')}\n style={slotStyle('header')}\n >\n {(label || ui.uploadImages) && (\n <label\n data-slot=\"label\"\n className={slotClass('label', 'iuk-label')}\n style={slotStyle('label')}\n >\n <span>{label || ui.uploadImages}</span>\n {required && <span className={resolveSlotClass('iuk-required', unstyled)}>*</span>}\n {totalCount > 0 && (\n <span\n data-slot=\"count\"\n className={slotClass('count', 'iuk-multi__count')}\n style={slotStyle('count')}\n >\n ({totalCount})\n </span>\n )}\n </label>\n )}\n\n {totalCount > 0 && (\n <div\n data-slot=\"bulk-actions\"\n className={slotClass('bulkActions', 'iuk-multi__bulk')}\n style={slotStyle('bulkActions')}\n >\n {selectedCount === 0 ? (\n <button\n type=\"button\"\n onClick={onSelectAll}\n className={slotClass('bulkButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\n style={slotStyle('bulkButton')}\n disabled={disabled}\n >\n {ui.selectAll}\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={onDeselectAll}\n className={slotClass('bulkButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\n style={slotStyle('bulkButton')}\n disabled={disabled}\n >\n {ui.deselectAll} ({selectedCount})\n </button>\n <button\n type=\"button\"\n onClick={onRemoveSelected}\n className={slotClass('bulkDangerButton', 'iuk-btn iuk-btn--danger iuk-btn--sm')}\n style={slotStyle('bulkDangerButton')}\n disabled={disabled}\n >\n <Trash2 size={14} />\n <span>{ui.removeSelected}</span>\n </button>\n </>\n )}\n </div>\n )}\n </div>\n\n {isUploading && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--info')}\n style={slotStyle('alert')}\n >\n <span className={resolveSlotClass('iuk-alert__row', unstyled)}>\n <Loader2 size={16} className={resolveSlotClass('iuk-spin', unstyled)} />\n <span>\n {ui.uploading} {uploadingCount}{' '}\n {uploadingCount !== 1 ? ui.uploadImages : ui.uploadImage}...\n </span>\n </span>\n {uploadStats.total > 0 && (\n <strong>\n {uploadStats.completed + uploadStats.failed} / {uploadStats.total}\n </strong>\n )}\n </div>\n )}\n\n {hasFailedUploads && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--error')}\n style={slotStyle('alert')}\n >\n <XCircle size={16} />\n <span>\n {ui.someUploadsFailed}{' '}\n <button\n type=\"button\"\n onClick={onRetryFailed}\n className={resolveSlotClass('iuk-link-btn', unstyled)}\n >\n {ui.retryFailedUploads}\n </button>\n </span>\n </div>\n )}\n\n {infoMessage && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--success')}\n style={slotStyle('alert')}\n >\n <CheckCircle2 size={16} />\n <span>{infoMessage}</span>\n </div>\n )}\n\n {showMissingAltWarning && missingAltCount > 0 && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--warning')}\n style={slotStyle('alert')}\n >\n <AlertTriangle size={16} />\n <span>\n {ui.needsAltBeforeSave\n .replace('{count}', String(missingAltCount))\n .replace('{suffix}', missingAltCount > 1 ? 's' : '')\n .replace('{verbSuffix}', missingAltCount > 1 ? '' : 's')}\n </span>\n </div>\n )}\n </>\n );\n}\n\nexport interface MultiFooterSectionProps extends MultiSlotStylingProps {\n helperText?: string;\n displayError?: string;\n isOpen?: boolean;\n hasPreviews: boolean;\n hasCompletedPreviews: boolean;\n isUploading: boolean;\n disabled: boolean;\n requireAltText: boolean;\n missingAltCount: number;\n onSave: () => void;\n ui: UploadTranslations;\n}\n\nexport function MultiFooterSection({\n helperText, displayError, isOpen, hasPreviews, hasCompletedPreviews,\n isUploading, disabled, requireAltText, missingAltCount, onSave, ui,\n unstyled, providerClassNames, classNames, providerStyles, styles,\n}: MultiFooterSectionProps) {\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\n const slotStyle = (slot: MultiUploadSlot) =>\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\n\n return (\n <>\n {(helperText || displayError) && (\n <p\n data-slot={displayError ? 'error-text' : 'helper-text'}\n className={resolveSlotClass(\n cx('iuk-helper-text', Boolean(displayError) && 'iuk-helper-text--error'),\n unstyled,\n providerClassNames?.helperText, classNames?.helperText,\n Boolean(displayError) && providerClassNames?.errorText,\n Boolean(displayError) && classNames?.errorText,\n )}\n style={resolveSlotStyle(\n providerStyles?.helperText, styles?.helperText,\n displayError ? providerStyles?.errorText : undefined,\n displayError ? styles?.errorText : undefined,\n )}\n >\n {displayError || helperText}\n </p>\n )}\n\n {isOpen && hasPreviews && (\n <div\n data-slot=\"commit-bar\"\n className={slotClass('commitBar', 'iuk-commit-bar')}\n style={slotStyle('commitBar')}\n >\n {requireAltText && missingAltCount > 0 && (\n <div className={resolveSlotClass('iuk-badge iuk-badge--warning', unstyled)}>\n <AlertTriangle size={13} />\n <span>{ui.withoutAltText.replace('{count}', String(missingAltCount))}</span>\n </div>\n )}\n <SaveButton\n unstyled={unstyled}\n className={slotClass('saveButton')}\n style={slotStyle('saveButton')}\n onClick={onSave}\n disabled={\n isUploading || disabled || !hasCompletedPreviews ||\n (requireAltText && missingAltCount > 0)\n }\n icon={<Save size={16} />}\n >\n {ui.saveImages}\n </SaveButton>\n </div>\n )}\n </>\n );\n}\n","import {\n CheckCircle2,\n Loader2,\n Palette,\n Type as TypeIcon,\n X,\n XCircle,\n} from 'lucide-react';\nimport { type CSSProperties, useMemo, useState } from 'react';\nimport type { BlurPlaceholderType } from '../../blur/types';\nimport type { UploadLocale } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport { useBlurDataURL } from '../hooks/useBlurService';\nimport {\n normalizeUploadLocale,\n resolveTranslations,\n type UploadTranslations,\n} from '../i18n';\nimport type { CustomImageRenderer, ImagePreview } from '../types';\nimport { cx, resolveSlotClass } from '../utils/slotStyles';\nimport { BlurImage } from './BlurImage';\nimport { BlurVisualizationModal } from './BlurVisualizationModal';\n\nexport interface PreviewTileProps {\n preview: ImagePreview;\n onRemove: (id: string) => void;\n disabled?: boolean;\n blurType?: BlurPlaceholderType;\n isSelected?: boolean;\n onToggleSelect?: (id: string) => void;\n onEditAltText?: (id: string) => void;\n showCheckbox?: boolean;\n onAdjustColor?: (id: string) => void;\n onChangeColor?: (id: string, color: string) => void;\n onChangeAltText?: (id: string, altText: string) => void;\n locale?: UploadLocale;\n translations?: Partial<UploadTranslations>;\n renderImage?: CustomImageRenderer;\n unstyled?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function PreviewTile({\n preview,\n onRemove,\n disabled = false,\n blurType = 'card',\n isSelected = false,\n onToggleSelect,\n onEditAltText,\n showCheckbox = true,\n onAdjustColor,\n onChangeColor,\n onChangeAltText,\n locale: propLocale,\n translations,\n renderImage,\n unstyled: propUnstyled,\n className,\n style,\n}: PreviewTileProps) {\n const ctx = useImageUploadContext();\n const isUnstyled = propUnstyled ?? ctx.unstyled;\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(locale, translations || ctx.translations);\n const [showBlurModal, setShowBlurModal] = useState(false);\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\n\n const isSvg = Boolean(\n preview.url?.toLowerCase().includes('.svg') ||\n preview.data?.format === 'svg' ||\n preview.url?.includes('image/svg+xml'),\n );\n\n const [sessionBuster] = useState(() => Date.now());\n\n const displayUrl = useMemo(() => {\n const url = preview.url;\n if (!url || url.startsWith('data:') || url.startsWith('blob:')) return url;\n if (url.includes('?v=') || url.includes('&v=') || url.includes('?t=') || url.includes('&t=')) {\n return url;\n }\n const buster = preview.data?.contentHash || preview.data?.uploadedAt || sessionBuster;\n return `${url}${url.includes('?') ? '&' : '?'}t=${buster}`;\n }, [preview.url, preview.data?.contentHash, preview.data?.uploadedAt, sessionBuster]);\n\n const fallbackBlurDataURL = useBlurDataURL(preview.url, {\n type: blurType,\n size: 'small',\n });\n\n const actualBlurDataUrl = preview.data?.blurDataUrl || fallbackBlurDataURL;\n const actualBlurColor = preview.blurColor || preview.data?.blurColor;\n\n const isUploading = Boolean(preview.isUploading);\n const hasError = Boolean(preview.error);\n const isSuccess = Boolean(\n !isUploading && !hasError && preview.originalSize && preview.optimizedSize,\n );\n\n const reductionPercent =\n isSuccess && preview.originalSize && preview.optimizedSize\n ? Math.round(\n ((preview.originalSize - preview.optimizedSize) / preview.originalSize) * 100,\n )\n : 0;\n\n return (\n <div\n data-slot=\"tile\"\n data-selected={isSelected || undefined}\n data-uploading={isUploading || undefined}\n data-error={hasError || undefined}\n className={resolveSlotClass(\n cx(\n 'iuk-tile',\n isSelected && 'iuk-tile--selected',\n hasError && 'iuk-tile--error',\n ),\n isUnstyled,\n className,\n )}\n style={style}\n onClick={() => onToggleSelect && !disabled && onToggleSelect(preview.id)}\n >\n <div className={cls('iuk-tile__media')}>\n <BlurImage\n src={displayUrl}\n alt={preview.altText || ui.previewAlt}\n blurDataUrl={!isSvg ? actualBlurDataUrl : undefined}\n blurColor={actualBlurColor}\n blurHash={preview.data?.blurHash}\n objectFit={isSvg ? 'contain' : 'cover'}\n style={isSvg ? { padding: '8px' } : undefined}\n renderImage={renderImage}\n />\n\n {showCheckbox && !disabled && !isUploading && onToggleSelect && (\n <div\n className={cls('iuk-tile__checkbox')}\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => onToggleSelect(preview.id)}\n aria-label={ui.selectImageAria}\n />\n </div>\n )}\n\n {!disabled && onEditAltText && (\n <button\n type=\"button\"\n className={cls(\n cx(\n 'iuk-tile__action iuk-tile__action--alt',\n Boolean(preview.altText) && 'iuk-tile__action--has-alt',\n ),\n )}\n onClick={(e) => {\n e.stopPropagation();\n onEditAltText(preview.id);\n }}\n aria-label={preview.altText ? ui.editAltTextAria : ui.addAltTextAria}\n title={\n preview.altText\n ? ui.editPrefix.replace('{title}', preview.altText)\n : ui.addDescriptionForA11y\n }\n >\n {preview.altText ? <CheckCircle2 size={14} /> : <TypeIcon size={14} />}\n </button>\n )}\n\n {!disabled && !isUploading && (\n <button\n type=\"button\"\n className={cls('iuk-tile__action iuk-tile__action--blur')}\n onClick={(e) => {\n e.stopPropagation();\n if (onAdjustColor) onAdjustColor(preview.id);\n else setShowBlurModal(true);\n }}\n aria-label={ui.adjustBlurColorAria}\n title={ui.adjustBlurColorTitle}\n >\n <Palette size={14} />\n </button>\n )}\n\n {!disabled && !isUploading && (\n <button\n type=\"button\"\n className={cls('iuk-tile__action iuk-tile__action--remove')}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(preview.id);\n }}\n aria-label={ui.removeImageAria}\n >\n <X size={15} />\n </button>\n )}\n\n {isUploading && (\n <div className={cls('iuk-tile__overlay')}>\n <Loader2 size={24} className={cls('iuk-spin')} />\n <p className={cls('iuk-tile__status')}>\n {preview.uploadMessage || `${ui.uploading}...`}\n </p>\n {preview.progress !== undefined && preview.progress > 0 && (\n <div className={cls('iuk-progress-bar')}>\n <div\n className={cls('iuk-progress-bar__fill')}\n style={{ width: `${preview.progress}%` }}\n />\n </div>\n )}\n </div>\n )}\n\n {isSuccess && (\n <div className={cls('iuk-tile__badge iuk-tile__badge--success')}>\n <CheckCircle2 size={13} />\n {reductionPercent > 0 && <span>-{reductionPercent}%</span>}\n </div>\n )}\n\n {!disabled && !isUploading && !hasError && actualBlurColor && (\n <div className={cls('iuk-tile__badge iuk-tile__badge--color')}>\n <span\n className={cls('iuk-tile__color-dot')}\n style={{ backgroundColor: actualBlurColor }}\n />\n <code>{actualBlurColor.toUpperCase()}</code>\n </div>\n )}\n\n {hasError && (\n <div className={cls('iuk-tile__overlay iuk-tile__overlay--error')}>\n <XCircle size={22} />\n <p>{preview.error}</p>\n </div>\n )}\n </div>\n\n <BlurVisualizationModal\n isOpen={showBlurModal}\n onClose={() => setShowBlurModal(false)}\n imageUrl={preview.url}\n blurDataUrl={actualBlurDataUrl}\n blurColor={actualBlurColor}\n detectedColor={preview.data?.blurColor}\n altText={preview.altText}\n originalSize={preview.originalSize}\n optimizedSize={preview.optimizedSize}\n locale={locale}\n translations={translations}\n renderImage={renderImage}\n onChangeColor={(hex) => onChangeColor?.(preview.id, hex)}\n onChangeAltText={(nextAlt) => onChangeAltText?.(preview.id, nextAlt)}\n />\n </div>\n );\n}\n\nexport default PreviewTile;\n","import { Check, Info, Zap } from 'lucide-react';\nimport type {\n QualityLevel,\n StandardPresetName,\n UploadLocale,\n} from '../../types';\nimport { QUALITY_PRESETS, STANDARD_PRESETS } from '../../types';\nimport { estimateOutputSize } from '../../utils/formatters';\n\nfunction formatBytesCompact(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n}\n\nexport interface QualitySelectorProps {\n value: QualityLevel;\n onChange: (level: QualityLevel) => void;\n preset?: string;\n recommendedLevel?: QualityLevel;\n recommendationNote?: { en: string; ar?: string };\n originalFileSize?: number;\n locale?: UploadLocale;\n disabled?: boolean;\n}\n\nexport function QualitySelector({\n value,\n onChange,\n preset,\n recommendedLevel,\n recommendationNote,\n originalFileSize,\n locale = 'en',\n disabled = false,\n}: QualitySelectorProps) {\n const isAr = locale === 'ar';\n const standardPreset = preset\n ? STANDARD_PRESETS[preset as StandardPresetName]\n : undefined;\n\n const recommended: QualityLevel =\n recommendedLevel || standardPreset?.recommendedQualityLevel || 'high';\n const note = recommendationNote || standardPreset?.recommendationNote;\n\n const selected = QUALITY_PRESETS[value];\n const levels = Object.keys(QUALITY_PRESETS) as QualityLevel[];\n const estimatedSize =\n originalFileSize !== undefined\n ? estimateOutputSize(originalFileSize, value)\n : null;\n const saving = Math.round((1 - selected.compressionRatio) * 100);\n\n return (\n <div\n className=\"iuk-quality\"\n dir={isAr ? 'rtl' : 'ltr'}\n aria-label={isAr ? 'جودة الضغط' : 'Compression quality'}\n >\n <div className=\"iuk-quality__header\">\n <span className=\"iuk-quality__title\">\n {isAr ? 'جودة الضغط' : 'Compression Quality'}\n </span>\n <span className={`iuk-quality__pill iuk-quality__pill--${value}`}>\n {isAr ? selected.labelAr : selected.label} · Q{selected.value}\n </span>\n </div>\n\n <div\n className=\"iuk-quality__tabs\"\n role=\"radiogroup\"\n aria-label={isAr ? 'مستوى الجودة' : 'Quality level'}\n >\n {levels.map((level) => {\n const item = QUALITY_PRESETS[level];\n const isSelected = value === level;\n const isRecommended = level === recommended;\n return (\n <button\n key={level}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={disabled}\n onClick={() => !disabled && onChange(level)}\n className={[\n 'iuk-quality__tab',\n isSelected ? 'iuk-quality__tab--selected' : '',\n isRecommended && !isSelected\n ? 'iuk-quality__tab--recommended'\n : '',\n disabled ? 'iuk-quality__tab--disabled' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {isSelected && (\n <Check size={11} strokeWidth={3} aria-hidden=\"true\" />\n )}\n <span>{isAr ? item.labelAr : item.label}</span>\n {isRecommended && !isSelected && (\n <span className=\"iuk-quality__star\" aria-hidden=\"true\">\n ★\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n <div className={`iuk-quality__detail iuk-quality__detail--${value}`}>\n <p className=\"iuk-quality__desc\">\n {isAr ? selected.descriptionAr : selected.description}\n </p>\n <div className=\"iuk-quality__meta\">\n <span className=\"iuk-quality__tag\">Q{selected.value}</span>\n {estimatedSize !== null && (\n <>\n <span className=\"iuk-quality__dot\" aria-hidden=\"true\" />\n <Zap size={11} aria-hidden=\"true\" />\n <span>~{formatBytesCompact(estimatedSize)}</span>\n <span className=\"iuk-quality__dot\" aria-hidden=\"true\" />\n <span className=\"iuk-quality__saving\">\n {saving}% {isAr ? 'توفير' : 'saved'}\n </span>\n </>\n )}\n {value === recommended && (\n <span className=\"iuk-quality__rec-badge\">\n {isAr ? '⭐ موصى به' : '⭐ Recommended'}\n </span>\n )}\n </div>\n </div>\n\n {note && (\n <div className=\"iuk-quality__note\">\n <Info size={12} aria-hidden=\"true\" className=\"iuk-quality__note-icon\" />\n <span>{isAr ? note.ar || note.en : note.en}</span>\n </div>\n )}\n </div>\n );\n}\n\nexport default QualitySelector;\n","import { ChevronDown, ChevronUp, Loader2 } from 'lucide-react';\nimport { useState } from 'react';\nimport type { UploadLocale } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport {\n normalizeUploadLocale,\n resolveTranslations,\n type UploadTranslations,\n} from '../i18n';\nimport type { CustomImageRenderer } from '../types';\nimport { BlurImage } from './BlurImage';\n\nexport interface UploadItem {\n id: string;\n url: string;\n fileName?: string;\n message?: string;\n progress?: number;\n}\n\nexport interface UploadProgressPanelProps {\n items: UploadItem[];\n completedCount: number;\n totalCount: number;\n locale?: UploadLocale;\n translations?: Partial<UploadTranslations>;\n renderImage?: CustomImageRenderer;\n}\n\nexport function UploadProgressPanel({\n items,\n completedCount,\n totalCount,\n locale: propLocale,\n translations,\n renderImage,\n}: UploadProgressPanelProps) {\n const ctx = useImageUploadContext();\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\n const ui = resolveTranslations(locale, translations || ctx.translations);\n const [isMinimized, setIsMinimized] = useState(false);\n const uploadingCount = items.length;\n\n if (uploadingCount === 0) return null;\n\n return (\n <div\n data-upload-progress-dock\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\n className={`iuk-progress-dock ${isMinimized ? 'iuk-progress-dock--collapsed' : ''}`}\n >\n <div\n className={`iuk-progress-panel ${isMinimized ? 'iuk-progress-panel--minimized' : ''}`}\n >\n <button\n type=\"button\"\n className=\"iuk-progress-panel__header\"\n onClick={() => setIsMinimized((prev) => !prev)}\n >\n <span className=\"iuk-progress-panel__title\">\n <Loader2 size={16} className=\"iuk-spin\" />\n <span>\n {ui.uploading} {uploadingCount}{' '}\n {uploadingCount !== 1 ? ui.uploadImages : ui.uploadImage}\n </span>\n {totalCount > 0 && (\n <span className=\"iuk-progress-panel__count\">\n ({completedCount}/{totalCount})\n </span>\n )}\n </span>\n {isMinimized ? <ChevronUp size={18} /> : <ChevronDown size={18} />}\n </button>\n\n {!isMinimized && (\n <div className=\"iuk-progress-panel__body\">\n {items.map((item) => (\n <div key={item.id} className=\"iuk-progress-item\">\n <div className=\"iuk-progress-item__thumb\">\n <BlurImage\n src={item.url}\n alt={ui.uploadingAlt}\n objectFit=\"cover\"\n renderImage={renderImage}\n />\n </div>\n <div className=\"iuk-progress-item__info\">\n <div className=\"iuk-progress-item__name\">\n {item.fileName || ui.image}\n </div>\n <div className=\"iuk-progress-item__status\">\n {item.message || ui.processing}\n </div>\n {item.progress !== undefined && item.progress > 0 && (\n <div className=\"iuk-progress-bar\">\n <div\n className=\"iuk-progress-bar__fill\"\n style={{ width: `${item.progress}%` }}\n />\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default UploadProgressPanel;\n","import { type ChangeEvent, Fragment, type HTMLAttributes, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { UploadPresetName } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\nimport { useMultiImageState } from '../hooks/useMultiImageState';\nimport type { MultiUploadSlot } from '../styling';\nimport type { MultiImageUploadProps } from '../types';\nimport {\n HIDDEN_INPUT_STYLE,\n resolveSlotClass,\n resolveSlotStyle,\n resolveUploadDataState,\n} from '../utils/slotStyles';\nimport { AltTextModal } from './AltTextModal';\nimport { MultiAddMoreTile, MultiEmptyDropzone } from './MultiDropzoneViews';\nimport { MultiFooterSection, MultiUploadHeaderAlerts } from './MultiUploadHeaderAlerts';\nimport { PreviewTile } from './PreviewTile';\nimport { QualitySelector } from './QualitySelector';\nimport { type UploadItem, UploadProgressPanel } from './UploadProgressPanel';\n\nconst DEFAULT_ACCEPT = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml';\nconst FOLDER_INPUT_ATTRS: Record<string, string> = { webkitdirectory: '', directory: '' };\nconst PROGRESS_PANEL_DISMISS_DELAY_MS = 2500;\n\nexport function MultiImageUpload<TPreset extends string = UploadPresetName>(\n props: MultiImageUploadProps<TPreset>,\n) {\n const {\n preset, translations, renderImage, label, error, helperText, className, style,\n recommendedQuality, qualityNote, isOpen, maxImages = 999,\n accept = DEFAULT_ACCEPT, allowFolder = true, disabled = false,\n required = false, blurType = 'card', showQualitySelector = true,\n classNames: cCls, styles: cSty,\n renderHeader, renderEmptyDropzone, renderTile, renderAddMore,\n } = props;\n\n const ctx = useImageUploadContext();\n const isUnstyled = props.unstyled ?? ctx.unstyled;\n const pCls = ctx.multiClassNames;\n const pSty = ctx.multiStyles;\n\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, isUnstyled, pCls?.[slot], cCls?.[slot]);\n const slotStyle = (slot: MultiUploadSlot) =>\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\n\n const state = useMultiImageState(props);\n const {\n locale, ui, previews, selectedPreviews, uploadingPreviews, imagesWithoutAlt, editingTarget,\n } = state;\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const folderInputRef = useRef<HTMLInputElement>(null);\n\n const [retainedItems, setRetainedItems] = useState<UploadItem[] | null>(null);\n const activeBatchRef = useRef<Map<string, UploadItem>>(new Map());\n const dismissTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const prevUploadingCountRef = useRef(0);\n const isUploading = uploadingPreviews.length > 0;\n\n useEffect(() => {\n if (isUploading) {\n if (dismissTimerRef.current) {\n clearTimeout(dismissTimerRef.current);\n dismissTimerRef.current = null;\n activeBatchRef.current.clear();\n }\n setRetainedItems(null);\n for (const p of uploadingPreviews) {\n activeBatchRef.current.set(p.id, {\n id: p.id, url: p.url, fileName: p.fileName || p.file?.name,\n message: p.uploadMessage || undefined, progress: p.progress,\n });\n }\n } else if (prevUploadingCountRef.current > 0 && activeBatchRef.current.size > 0) {\n const completed: UploadItem[] = Array.from(activeBatchRef.current.values()).map((it) => {\n const found = previews.find((p) => p.id === it.id);\n return {\n ...it,\n progress: found?.progress ?? 100,\n message: found?.error ? found.error : (found?.uploadMessage || undefined),\n };\n });\n setRetainedItems(completed);\n dismissTimerRef.current = setTimeout(() => {\n setRetainedItems(null);\n activeBatchRef.current.clear();\n dismissTimerRef.current = null;\n }, PROGRESS_PANEL_DISMISS_DELAY_MS);\n }\n prevUploadingCountRef.current = uploadingPreviews.length;\n }, [isUploading, uploadingPreviews, previews]);\n\n useEffect(() => () => {\n if (dismissTimerRef.current) clearTimeout(dismissTimerRef.current);\n }, []);\n\n const { isDragging, dragHandlers } = useDragAndDrop({\n disabled,\n onDrop: (files) => void state.handleFileSelect(files),\n });\n\n const handleFilesInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n void state.handleFileSelect(e.target.files);\n }\n e.target.value = '';\n };\n\n const openFilePicker = () => { if (!disabled) fileInputRef.current?.click(); };\n const openFolderPicker = () => { if (!disabled) folderInputRef.current?.click(); };\n const selectAll = () => state.setSelectedPreviews(new Set(previews.map((p) => p.id)));\n const clearSelection = () => state.setSelectedPreviews(new Set());\n const retryFailed = () => void state.handleRetryFailed();\n\n const displayError = error || state.validationError;\n const hasError = Boolean(displayError) || state.hasFailedUploads;\n const visualState = resolveUploadDataState({\n disabled,\n hasError,\n isUploading: state.isUploading,\n isDragging,\n hasContent: previews.length > 0,\n });\n\n const dockItems: UploadItem[] = isUploading\n ? uploadingPreviews.map((p) => ({\n id: p.id, url: p.url, fileName: p.fileName || p.file?.name,\n message: p.uploadMessage || undefined, progress: p.progress,\n }))\n : (retainedItems ?? []);\n\n const dropzoneProps: HTMLAttributes<HTMLElement> = {\n ...dragHandlers,\n 'aria-disabled': disabled || undefined,\n };\n\n const slotStylingProps = {\n unstyled: isUnstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty,\n };\n const hiddenInputClass = resolveSlotClass('iuk-hidden-input', isUnstyled);\n const hiddenInputStyle = isUnstyled ? HIDDEN_INPUT_STYLE : undefined;\n\n return (\n <>\n <div\n data-slot=\"multi-root\" data-state={visualState} data-unstyled={isUnstyled || undefined}\n className={resolveSlotClass('iuk-multi', isUnstyled, pCls?.root, cCls?.root, className)}\n style={resolveSlotStyle(pSty?.root, cSty?.root, style)} dir={locale === 'ar' ? 'rtl' : 'ltr'}\n >\n {renderHeader ? (\n renderHeader({\n label, required, disabled, totalCount: previews.length,\n selectedCount: selectedPreviews.size, uploadingCount: uploadingPreviews.length,\n isUploading: state.isUploading, hasFailedUploads: state.hasFailedUploads,\n selectAll, clearSelection, removeSelected: state.handleRemoveSelected,\n retryFailed, locale, ui,\n })\n ) : (\n <MultiUploadHeaderAlerts\n label={label} required={required} disabled={disabled}\n totalCount={previews.length} selectedCount={selectedPreviews.size}\n uploadingCount={uploadingPreviews.length} missingAltCount={imagesWithoutAlt.length}\n isUploading={state.isUploading} hasFailedUploads={state.hasFailedUploads}\n infoMessage={state.infoMessage} showMissingAltWarning={state.showMissingAltWarning}\n uploadStats={state.uploadStats} ui={ui} onSelectAll={selectAll}\n onDeselectAll={clearSelection} onRemoveSelected={state.handleRemoveSelected}\n onRetryFailed={retryFailed} {...slotStylingProps}\n />\n )}\n\n {showQualitySelector && (\n <div data-slot=\"quality-selector\" className={slotClass('qualitySelector')} style={slotStyle('qualitySelector')}>\n <QualitySelector\n value={state.qualityLevel} onChange={state.setQualityLevel}\n preset={preset} recommendedLevel={recommendedQuality}\n recommendationNote={qualityNote} locale={locale}\n disabled={state.isUploading || disabled}\n />\n </div>\n )}\n\n <input\n ref={fileInputRef} type=\"file\" accept={accept} onChange={handleFilesInputChange}\n className={hiddenInputClass} style={hiddenInputStyle}\n disabled={disabled} multiple aria-label={ui.selectFilesAria}\n />\n <input\n ref={folderInputRef} type=\"file\" accept={accept} onChange={handleFilesInputChange}\n className={hiddenInputClass} style={hiddenInputStyle}\n disabled={disabled} {...FOLDER_INPUT_ATTRS} aria-label={ui.selectFolderAria}\n />\n\n {previews.length === 0 ? (\n renderEmptyDropzone ? (\n renderEmptyDropzone({\n state: visualState, isDragging, disabled, allowFolder,\n maxSizeMB: state.maxSizeMB, maxImages, error: displayError || undefined,\n openFileDialog: openFilePicker, openFolderDialog: openFolderPicker,\n dropzoneProps, locale, ui,\n })\n ) : (\n <MultiEmptyDropzone\n isDragging={isDragging} disabled={disabled} hasError={Boolean(displayError)}\n visualState={visualState} allowFolder={allowFolder} maxSizeMB={state.maxSizeMB}\n ui={ui} dragHandlers={dragHandlers} onSelectFiles={openFilePicker}\n onSelectFolder={openFolderPicker} {...slotStylingProps}\n />\n )\n ) : (\n <div\n data-slot=\"grid\"\n className={slotClass('grid', 'iuk-multi__grid')}\n style={slotStyle('grid')}\n >\n {previews.map((item, index) =>\n renderTile ? (\n <Fragment key={item.id}>\n {renderTile({\n item, index,\n isSelected: selectedPreviews.has(item.id),\n disabled,\n toggleSelect: () => state.toggleSelect(item.id),\n remove: () => state.handleRemove(item.id),\n openAltTextModal: () => state.setEditingAltTextId(item.id),\n setAltText: (altText) => state.handleAltTextSave(item.id, altText),\n setBlurColor: (hex) => state.handleColorChange(item.id, hex),\n locale, ui,\n })}\n </Fragment>\n ) : (\n <PreviewTile\n key={item.id} preview={item} onRemove={state.handleRemove}\n disabled={disabled} blurType={blurType} isSelected={selectedPreviews.has(item.id)}\n onToggleSelect={state.toggleSelect} onEditAltText={(id) => state.setEditingAltTextId(id)}\n onChangeAltText={state.handleAltTextSave} onChangeColor={state.handleColorChange}\n locale={locale} translations={translations} renderImage={renderImage}\n unstyled={isUnstyled} className={slotClass('tile')} style={slotStyle('tile')}\n />\n ),\n )}\n\n {renderAddMore ? (\n renderAddMore({\n isDragging, disabled, allowFolder,\n remainingCount: Math.max(0, maxImages - previews.length),\n openFileDialog: openFilePicker, openFolderDialog: openFolderPicker,\n dropzoneProps, locale, ui,\n })\n ) : (\n <MultiAddMoreTile\n isDragging={isDragging} disabled={disabled} allowFolder={allowFolder} ui={ui}\n dragHandlers={dragHandlers} onSelectFiles={openFilePicker} onSelectFolder={openFolderPicker}\n {...slotStylingProps}\n />\n )}\n </div>\n )}\n\n <MultiFooterSection\n helperText={helperText} displayError={displayError} isOpen={isOpen}\n hasPreviews={previews.length > 0} hasCompletedPreviews={state.completedPreviews.length > 0}\n isUploading={state.isUploading} disabled={disabled} requireAltText={state.requireAltText}\n missingAltCount={imagesWithoutAlt.length} onSave={state.handleSaveImages} ui={ui} {...slotStylingProps}\n />\n </div>\n\n {editingTarget && (\n <AltTextModal\n imageUrl={editingTarget.url} initialAltText={editingTarget.altText}\n onSave={(nextAlt) => state.handleAltTextSave(editingTarget.id, nextAlt)}\n onClose={() => state.setEditingAltTextId(null)}\n locale={locale} translations={translations} renderImage={renderImage}\n />\n )}\n\n {typeof document !== 'undefined' && dockItems.length > 0 &&\n createPortal(\n <UploadProgressPanel\n items={dockItems} completedCount={state.uploadStats.completed}\n totalCount={state.uploadStats.total} locale={locale}\n translations={translations} renderImage={renderImage}\n />,\n document.body,\n )}\n </>\n );\n}\n\nexport default MultiImageUpload;\n","import { AlertTriangle, Download, ImagePlus, Save, Upload } from 'lucide-react';\nimport type { CSSProperties } from 'react';\nimport type { UploadTranslations } from '../i18n';\nimport type {\n SingleUploadClassNames,\n SingleUploadSlot,\n SingleUploadStyles,\n} from '../styling';\nimport { cx, resolveSlotClass, resolveSlotStyle } from '../utils/slotStyles';\nimport { SaveButton } from './SaveButton';\n\nfunction formatCompactBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n}\n\nexport interface SingleSlotStylingProps {\n unstyled?: boolean;\n providerClassNames?: SingleUploadClassNames;\n classNames?: SingleUploadClassNames;\n providerStyles?: SingleUploadStyles;\n styles?: SingleUploadStyles;\n}\n\nexport function resolveSingleDropzoneSlot(\n flags: {\n isDragging: boolean;\n hasPreview: boolean;\n disabled: boolean;\n hasError: boolean;\n },\n styling: SingleSlotStylingProps,\n): { className?: string; style?: CSSProperties } {\n const { isDragging, hasPreview, disabled, hasError } = flags;\n const { unstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty } = styling;\n return {\n className: resolveSlotClass(\n cx(\n 'iuk-dropzone',\n isDragging && 'iuk-dropzone--dragging',\n hasPreview && 'iuk-dropzone--has-image',\n disabled && 'iuk-dropzone--disabled',\n hasError && 'iuk-dropzone--error',\n ),\n unstyled,\n pCls?.dropzone, cCls?.dropzone,\n isDragging && pCls?.dropzoneDragging, isDragging && cCls?.dropzoneDragging,\n hasPreview && pCls?.dropzoneHasImage, hasPreview && cCls?.dropzoneHasImage,\n disabled && pCls?.dropzoneDisabled, disabled && cCls?.dropzoneDisabled,\n hasError && pCls?.dropzoneError, hasError && cCls?.dropzoneError,\n ),\n style: resolveSlotStyle(\n pSty?.dropzone, cSty?.dropzone,\n isDragging ? pSty?.dropzoneDragging : undefined, isDragging ? cSty?.dropzoneDragging : undefined,\n hasPreview ? pSty?.dropzoneHasImage : undefined, hasPreview ? cSty?.dropzoneHasImage : undefined,\n disabled ? pSty?.dropzoneDisabled : undefined, disabled ? cSty?.dropzoneDisabled : undefined,\n hasError ? pSty?.dropzoneError : undefined, hasError ? cSty?.dropzoneError : undefined,\n ),\n };\n}\n\nexport interface SingleDropzoneEmptyPromptProps extends SingleSlotStylingProps {\n isUploading: boolean;\n uploadMessage: string;\n showProgress: boolean;\n progress: number;\n maxSizeMB: number;\n ui: UploadTranslations;\n}\n\nexport function SingleDropzoneEmptyPrompt({\n isUploading, uploadMessage, showProgress, progress, maxSizeMB, ui,\n unstyled, providerClassNames, classNames, providerStyles, styles,\n}: SingleDropzoneEmptyPromptProps) {\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\n const slotStyle = (slot: SingleUploadSlot) =>\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\n\n return (\n <div\n data-slot=\"dropzone-prompt\"\n className={slotClass('dropzonePrompt', 'iuk-dropzone__prompt')}\n style={slotStyle('dropzonePrompt')}\n >\n <div\n data-slot=\"dropzone-icon\"\n className={slotClass('dropzoneIcon', 'iuk-dropzone__icon')}\n style={slotStyle('dropzoneIcon')}\n >\n {isUploading ? (\n <div className={resolveSlotClass('iuk-spinner', unstyled)} />\n ) : (\n <ImagePlus size={36} strokeWidth={1.5} />\n )}\n </div>\n <p\n data-slot=\"dropzone-text\"\n className={slotClass('dropzoneText', 'iuk-dropzone__text')}\n style={slotStyle('dropzoneText')}\n >\n {isUploading ? uploadMessage || `${ui.uploading}...` : ui.dragDropOrClickToUpload}\n </p>\n {isUploading && showProgress && progress > 0 && (\n <p\n data-slot=\"dropzone-progress\"\n className={slotClass('dropzoneProgress', 'iuk-dropzone__progress')}\n style={slotStyle('dropzoneProgress')}\n >\n {progress}%\n </p>\n )}\n {!isUploading && (\n <>\n <p\n data-slot=\"dropzone-hint\"\n className={slotClass('dropzoneHint', 'iuk-dropzone__hint')}\n style={slotStyle('dropzoneHint')}\n >\n {ui.upToSizeMB.replace('{size}', String(maxSizeMB))}\n </p>\n <span\n data-slot=\"browse-button\"\n className={slotClass('browseButton', 'iuk-btn iuk-btn--secondary')}\n style={slotStyle('browseButton')}\n >\n <Upload size={15} />\n <span>{ui.browseFiles}</span>\n </span>\n </>\n )}\n </div>\n );\n}\n\nexport interface SingleStatusFooterProps extends SingleSlotStylingProps {\n showMissingAltWarning: boolean;\n hasPreview: boolean;\n hasAltText: boolean;\n uploadMessage: string;\n isUploading: boolean;\n sizeInfo: { original: number; optimized: number } | null;\n canDownload: boolean;\n onDownload: () => void;\n helperText?: string;\n displayError?: string;\n isOpen?: boolean;\n requireAltText?: boolean;\n disabled?: boolean;\n onSave?: () => void;\n ui: UploadTranslations;\n}\n\nexport function SingleStatusFooter({\n showMissingAltWarning, hasPreview, hasAltText, uploadMessage, isUploading,\n sizeInfo, canDownload, onDownload, helperText, displayError,\n isOpen, requireAltText, disabled, onSave, ui,\n unstyled, providerClassNames, classNames, providerStyles, styles,\n}: SingleStatusFooterProps) {\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\n const slotStyle = (slot: SingleUploadSlot) =>\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\n\n return (\n <>\n {showMissingAltWarning && hasPreview && !hasAltText && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--warning')}\n style={slotStyle('alert')}\n >\n <AlertTriangle size={16} />\n <span>{ui.addAltBeforeSaving}</span>\n </div>\n )}\n\n {uploadMessage && !isUploading && sizeInfo && (\n <div\n data-slot=\"alert\"\n className={slotClass('alert', 'iuk-alert iuk-alert--success')}\n style={slotStyle('alert')}\n >\n <span>{uploadMessage}</span>\n </div>\n )}\n\n {hasPreview && canDownload && (\n <button\n type=\"button\"\n data-slot=\"download-button\"\n className={slotClass('downloadButton', 'iuk-btn iuk-btn--secondary iuk-single__download')}\n style={slotStyle('downloadButton')}\n onClick={onDownload}\n disabled={isUploading}\n aria-label={ui.downloadImage}\n >\n <Download size={15} aria-hidden=\"true\" />\n <span>{ui.downloadImage}</span>\n {sizeInfo && (\n <span className={resolveSlotClass('iuk-badge', unstyled)}>\n {formatCompactBytes(sizeInfo.optimized)}\n </span>\n )}\n </button>\n )}\n\n {(helperText || displayError) && (\n <p\n data-slot={displayError ? 'error-text' : 'helper-text'}\n className={resolveSlotClass(\n cx('iuk-helper-text', Boolean(displayError) && 'iuk-helper-text--error'),\n unstyled,\n providerClassNames?.helperText, classNames?.helperText,\n Boolean(displayError) && providerClassNames?.errorText,\n Boolean(displayError) && classNames?.errorText,\n )}\n style={resolveSlotStyle(\n providerStyles?.helperText, styles?.helperText,\n displayError ? providerStyles?.errorText : undefined,\n displayError ? styles?.errorText : undefined,\n )}\n >\n {displayError || helperText}\n </p>\n )}\n\n {isOpen && hasPreview && onSave && (\n <div\n data-slot=\"commit-bar\"\n className={slotClass('commitBar', 'iuk-commit-bar')}\n style={slotStyle('commitBar')}\n >\n {requireAltText && !hasAltText && (\n <div className={resolveSlotClass('iuk-badge iuk-badge--warning', unstyled)}>\n <AlertTriangle size={13} />\n <span>{ui.missingDescription}</span>\n </div>\n )}\n <SaveButton\n unstyled={unstyled}\n className={slotClass('saveButton')}\n style={slotStyle('saveButton')}\n onClick={onSave}\n disabled={isUploading || disabled || Boolean(requireAltText && !hasAltText)}\n icon={<Save size={16} />}\n >\n {ui.saveImage}\n </SaveButton>\n </div>\n )}\n </>\n );\n}\n","import type { ChangeEvent, HTMLAttributes } from 'react';\nimport type { UploadPresetName } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\nimport { useSingleImageState } from '../hooks/useSingleImageState';\nimport type { SingleUploadSlot } from '../styling';\nimport type { SingleImageUploadProps } from '../types';\nimport {\n HIDDEN_INPUT_STYLE, resolveSlotClass, resolveSlotStyle, resolveUploadDataState,\n} from '../utils/slotStyles';\nimport { AltTextModal } from './AltTextModal';\nimport { BlurVisualizationModal } from './BlurVisualizationModal';\nimport { PreviewTile } from './PreviewTile';\nimport { QualitySelector } from './QualitySelector';\nimport {\n resolveSingleDropzoneSlot, SingleDropzoneEmptyPrompt, SingleStatusFooter,\n} from './SingleDropzoneContent';\n\nexport function SingleImageUpload<TPreset extends string = UploadPresetName>(\n props: SingleImageUploadProps<TPreset>,\n) {\n const {\n preset, translations, renderImage, label, error, helperText, className, style,\n accept = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml',\n disabled = false, required = false, blurType = 'card',\n showProgress = false, showQualitySelector = true,\n recommendedQuality, qualityNote, isOpen,\n classNames: cCls, styles: cSty, renderDropzone, renderPreview,\n } = props;\n\n const ctx = useImageUploadContext();\n const isUnstyled = props.unstyled ?? ctx.unstyled;\n const pCls = ctx.singleClassNames;\n const pSty = ctx.singleStyles;\n\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\n resolveSlotClass(defaultClass, isUnstyled, pCls?.[slot], cCls?.[slot]);\n const slotStyle = (slot: SingleUploadSlot) =>\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\n\n const state = useSingleImageState(props);\n const { isDragging, dragHandlers } = useDragAndDrop({ disabled, onDrop: state.handleFileSelect });\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (files && files.length > 0) void state.handleFileSelect(files);\n };\n\n const openFileDialog = () => { if (!disabled) state.fileInputRef.current?.click(); };\n const displayError = error || state.validationError;\n const hasPreview = Boolean(state.preview);\n const hasError = Boolean(displayError);\n const visualState = resolveUploadDataState({\n disabled, hasError, isUploading: state.isUploading, isDragging, hasContent: hasPreview,\n });\n\n const dropzoneProps: HTMLAttributes<HTMLElement> = {\n ...dragHandlers,\n onClick: () => { if (!disabled && !state.preview) openFileDialog(); },\n onKeyDown: (event) => {\n if (!disabled && !state.preview && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n openFileDialog();\n }\n },\n role: 'button',\n tabIndex: disabled ? -1 : 0,\n 'aria-label': state.ui.uploadImageAria,\n 'aria-disabled': disabled || undefined,\n };\n\n const slotStylingProps = {\n unstyled: isUnstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty,\n };\n const dropzoneSlot = resolveSingleDropzoneSlot(\n { isDragging, hasPreview, disabled, hasError }, slotStylingProps,\n );\n\n return (\n <div\n data-slot=\"single-root\"\n data-state={visualState}\n data-unstyled={isUnstyled || undefined}\n className={resolveSlotClass('iuk-single', isUnstyled, pCls?.root, cCls?.root, className)}\n style={resolveSlotStyle(pSty?.root, cSty?.root, style)}\n dir={state.locale === 'ar' ? 'rtl' : 'ltr'}\n >\n {(label || state.ui.uploadImage) && (\n <label data-slot=\"label\" className={slotClass('label', 'iuk-label')} style={slotStyle('label')}>\n <span>{label || state.ui.uploadImage}</span>\n {required && <span className={resolveSlotClass('iuk-required', isUnstyled)}>*</span>}\n </label>\n )}\n\n {showQualitySelector && !state.preview && (\n <div data-slot=\"quality-selector\" className={slotClass('qualitySelector')} style={slotStyle('qualitySelector')}>\n <QualitySelector\n value={state.qualityLevel} onChange={state.setQualityLevel} preset={preset}\n recommendedLevel={recommendedQuality} recommendationNote={qualityNote}\n originalFileSize={state.selectedFile?.size} locale={state.locale}\n disabled={disabled || state.isUploading}\n />\n </div>\n )}\n\n <input\n ref={state.fileInputRef} type=\"file\" accept={accept} onChange={handleInputChange}\n className={resolveSlotClass('iuk-hidden-input', isUnstyled)}\n style={isUnstyled ? HIDDEN_INPUT_STYLE : undefined}\n disabled={disabled} aria-label={state.ui.fileInputAria}\n />\n\n {!state.preview && renderDropzone ? (\n renderDropzone({\n state: visualState, isDragging, isUploading: state.isUploading,\n progress: state.progress, uploadMessage: state.uploadMessage,\n maxSizeMB: state.maxSizeMB, disabled, error: displayError || undefined,\n qualityLevel: state.qualityLevel, setQualityLevel: state.setQualityLevel,\n openFileDialog, dropzoneProps, locale: state.locale, ui: state.ui,\n })\n ) : (\n <div\n data-slot=\"dropzone\"\n data-state={visualState}\n data-dragging={isDragging || undefined}\n data-uploading={state.isUploading || undefined}\n data-disabled={disabled || undefined}\n data-error={hasError || undefined}\n className={dropzoneSlot.className}\n style={dropzoneSlot.style}\n {...dropzoneProps}\n >\n {state.preview ? (\n <div\n data-slot=\"preview-wrap\"\n className={slotClass('previewWrap', 'iuk-single__preview-wrap')}\n style={slotStyle('previewWrap')}\n onClick={(event) => event.stopPropagation()}\n >\n {renderPreview ? (\n renderPreview({\n previewUrl: state.preview,\n uploadedData: state.uploadedData,\n altText: state.altText,\n blurColor: state.uploadedData?.blurColor ?? state.blurColor,\n blurDataUrl: state.blurDataUrlState || state.currentImageData?.blurDataUrl || '',\n isUploading: state.isUploading,\n progress: state.progress,\n uploadMessage: state.uploadMessage,\n sizeInfo: state.sizeInfo,\n disabled,\n openFileDialog,\n remove: () => state.handleRemoveTile(),\n openAltTextModal: () => state.setEditingAltText(true),\n openBlurInspector: () => state.setIsBlurModalOpen(true),\n download: state.handleDownload,\n locale: state.locale,\n ui: state.ui,\n })\n ) : (\n <PreviewTile\n preview={{\n id: 'single', url: state.preview, altText: state.altText,\n isUploading: state.isUploading, progress: state.progress,\n uploadMessage: state.uploadMessage || null,\n originalSize: state.sizeInfo?.original,\n optimizedSize: state.sizeInfo?.optimized ?? null,\n data: state.uploadedData ?? undefined,\n blurColor: state.uploadedData?.blurColor ?? state.blurColor,\n }}\n onRemove={() => state.handleRemoveTile()}\n disabled={disabled} blurType={blurType} showCheckbox={false}\n onEditAltText={() => state.setEditingAltText(true)}\n onAdjustColor={() => state.setIsBlurModalOpen(true)}\n locale={state.locale} translations={translations} renderImage={renderImage}\n unstyled={isUnstyled} className={slotClass('tile')} style={slotStyle('tile')}\n />\n )}\n </div>\n ) : (\n <SingleDropzoneEmptyPrompt\n isUploading={state.isUploading} uploadMessage={state.uploadMessage}\n showProgress={showProgress} progress={state.progress}\n maxSizeMB={state.maxSizeMB} ui={state.ui} {...slotStylingProps}\n />\n )}\n </div>\n )}\n\n <SingleStatusFooter\n showMissingAltWarning={state.showMissingAltWarning}\n hasPreview={hasPreview} hasAltText={Boolean(state.altText?.trim())}\n uploadMessage={state.uploadMessage} isUploading={state.isUploading}\n sizeInfo={state.sizeInfo} canDownload={state.canDownload}\n onDownload={() => void state.handleDownload()}\n helperText={helperText} displayError={displayError}\n isOpen={isOpen} requireAltText={state.requireAltText}\n disabled={disabled} onSave={state.handleSaveImage}\n ui={state.ui} {...slotStylingProps}\n />\n\n {state.editingAltText && state.preview && (\n <AltTextModal\n imageUrl={state.preview} initialAltText={state.altText}\n onSave={state.handleAltTextSave}\n onClose={() => state.setEditingAltText(false)}\n locale={state.locale} translations={translations} renderImage={renderImage}\n />\n )}\n\n {state.preview && (\n <BlurVisualizationModal\n isOpen={state.isBlurModalOpen}\n onClose={() => state.setIsBlurModalOpen(false)}\n imageUrl={state.preview}\n blurDataUrl={state.blurDataUrlState || state.currentImageData?.blurDataUrl}\n blurColor={state.blurColor} altText={state.altText}\n originalSize={state.sizeInfo?.original ?? state.currentImageData?.originalSize}\n optimizedSize={state.sizeInfo?.optimized ?? state.currentImageData?.size ?? null}\n detectedColor={state.detectedBlurColor}\n onChangeColor={(hex) => state.applyBlurColor(hex)}\n onUseDetectedColor={state.handleResetColor}\n onChangeAltText={(nextAlt) => state.handleAltTextSave(nextAlt)}\n locale={state.locale} translations={translations} renderImage={renderImage}\n />\n )}\n </div>\n );\n}\n\nexport default SingleImageUpload;\n","import { ChevronUp, Loader2, Minus, X } from 'lucide-react';\nimport { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { UploadPresetName } from '../../types';\nimport { useImageUploadContext } from '../context';\nimport { normalizeUploadLocale, resolveTranslations } from '../i18n';\nimport type {\n ImageUploadProps,\n MultiImageUploadProps,\n SingleImageUploadProps,\n} from '../types';\nimport { MultiImageUpload } from './MultiImageUpload';\nimport { SingleImageUpload } from './SingleImageUpload';\n\nexport function ImageUpload<TPreset extends string = UploadPresetName>(\n props: ImageUploadProps<TPreset>,\n) {\n const ctx = useImageUploadContext();\n const uploadLocale = normalizeUploadLocale(props.locale || ctx.locale);\n const ui = resolveTranslations(\n uploadLocale,\n props.translations || ctx.translations,\n );\n const dir = uploadLocale === 'ar' ? 'rtl' : 'ltr';\n const { isOpen, onClose, title, modeVariant } = props;\n const [isMinimized, setIsMinimized] = useState(false);\n const [dockNode, setDockNode] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const updateDockReference = () => {\n const node = document.querySelector('[data-upload-progress-dock]');\n setDockNode((prev) =>\n node instanceof HTMLElement ? (node === prev ? prev : node) : null,\n );\n };\n\n updateDockReference();\n\n const observer = new MutationObserver(() => updateDockReference());\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n return () => observer.disconnect();\n }, []);\n\n const content =\n props.mode === 'multiple' ? (\n <MultiImageUpload {...(props as MultiImageUploadProps<TPreset>)} />\n ) : (\n <SingleImageUpload {...(props as SingleImageUploadProps<TPreset>)} />\n );\n\n if (isOpen === undefined) {\n return (\n <div className=\"iuk-root\" dir={dir} data-upload-locale={uploadLocale}>\n {content}\n </div>\n );\n }\n\n if (!isOpen) return null;\n\n const minimizedButton = (\n <button\n type=\"button\"\n className=\"iuk-minimized-pill\"\n onClick={() => setIsMinimized(false)}\n title={ui.restoreUploadWindow}\n >\n <Loader2 size={16} className=\"iuk-spin\" />\n <span className=\"iuk-minimized-pill__copy\">\n <span className=\"iuk-minimized-pill__primary\">{ui.uploadWindow}</span>\n <span className=\"iuk-minimized-pill__secondary\">{ui.tapToResume}</span>\n </span>\n <ChevronUp size={16} />\n </button>\n );\n\n return (\n <>\n <div\n className={`iuk-root iuk-modal-backdrop ${isMinimized ? 'iuk-modal-backdrop--hidden' : ''}`}\n dir={dir}\n data-upload-locale={uploadLocale}\n role=\"dialog\"\n aria-modal={!isMinimized}\n aria-hidden={isMinimized}\n >\n <div\n className={`iuk-upload-dialog ${isMinimized ? 'iuk-upload-dialog--hidden' : ''}`}\n >\n {onClose && (\n <div className=\"iuk-upload-dialog__controls\">\n <button\n type=\"button\"\n className=\"iuk-icon-btn iuk-icon-btn--floating\"\n onClick={() => setIsMinimized(true)}\n aria-label={ui.minimize}\n title={ui.minimizeUploader}\n >\n <Minus size={18} />\n </button>\n <button\n type=\"button\"\n className=\"iuk-icon-btn iuk-icon-btn--floating\"\n onClick={onClose}\n aria-label={ui.close}\n >\n <X size={18} />\n </button>\n </div>\n )}\n <div\n className=\"iuk-upload-dialog__card\"\n onClick={(e) => e.stopPropagation()}\n >\n {title && (\n <h3 className=\"iuk-upload-dialog__title\">\n {modeVariant === 'edit'\n ? ui.editPrefix.replace('{title}', title)\n : title}\n </h3>\n )}\n {content}\n </div>\n </div>\n </div>\n\n {isMinimized &&\n typeof document !== 'undefined' &&\n (dockNode ? (\n createPortal(\n <div className=\"iuk-minimized-portal\">{minimizedButton}</div>,\n dockNode,\n )\n ) : (\n <div className=\"iuk-minimized-dock\">{minimizedButton}</div>\n ))}\n </>\n );\n}\n\nexport const UnifiedImageUpload = ImageUpload;\nexport default ImageUpload;\n"]}
1
+ {"version":3,"sources":["e:\\Personal-Projects\\image-upload-kit\\dist\\react.cjs"],"names":[],"mappings":"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,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,4BAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,8BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,8BAAA;AACA,gCAAA;AACA,gCAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,YAAA;AACA,4BAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oCAAA;AACA,oCAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,wBAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,sBAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,oBAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,4BAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,wBAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gCAAA;AACA,kCAAA;AACA,kCAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,cAAA;AACA,8BAAA;AACA,gCAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kCAAA;AACA,oCAAA;AACA,oCAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,0CAAA;AACA,4BAAA;AACA,4BAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,gCAAA;AACA,8BAAA;AACA,4BAAA;AACA,0BAAA;AACA,0BAAA;AACA,wBAAA;AACA,sBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sCAAA;AACA,sCAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,cAAA;AACA,8BAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,oBAAA;AACA,oBAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,oBAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oCAAA;AACA,oCAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oCAAA;AACA,oCAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,oBAAA;AACA,oBAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,oBAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wCAAA;AACA,wCAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wCAAA;AACA,wCAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,8BAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,0BAAA;AACA,0BAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,wBAAA;AACA,wBAAA;AACA,MAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kCAAA;AACA,kCAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,gCAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oCAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,8BAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kCAAA;AACA,oCAAA;AACA,oCAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,gCAAA;AACA,gCAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,sBAAA;AACA,sBAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,sBAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,gCAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,0BAAA;AACA,0BAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,sBAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,QAAA;AACA,wBAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"E:\\Personal-Projects\\image-upload-kit\\dist\\react.cjs","sourcesContent":[null]}