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
package/dist/react.js.map CHANGED
@@ -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":["useMemo","useCallback","useState","useEffect","useRef","DEFAULT_ACCEPT","jsx","Fragment","TypeIcon","decodeBlurHash","jsxs","createPortal","X","CheckCircle2","Loader2","XCircle","ImagePlus","Upload","AlertTriangle","Save","ChevronUp"],"mappings":"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","file":"react.js","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":["../src/react/hooks/index.ts","../src/react/hooks/useBlurService.ts","../src/react/hooks/useDialog.ts","../src/react/icons.tsx","../src/react/components/AltTextInput.tsx","../src/react/components/AltTextModal.tsx","../src/react/components/BlurImage.tsx","../src/react/components/AnimatedImage/AnimatedImage.tsx","../src/react/components/AnimatedImage/placeholder.ts","../src/react/components/AnimatedImage/useImageReveal.ts","../src/react/components/BlurServiceDebugger.tsx","../src/react/components/BlurVisualizationModal.tsx","../src/react/utils/canvasSampler.ts","../src/react/components/BlurColorControls.tsx","../src/react/components/SaveButton.tsx","../src/react/components/ImageUpload.tsx","../src/react/components/MultiImageUpload.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/SingleImageUpload.tsx","../src/react/components/SingleDropzoneContent.tsx"],"sourcesContent":["import { useEffect } from 'react';\r\nimport {\r\n blurService,\r\n type BlurSize,\r\n useProgressiveBlur,\r\n} from './useBlurService';\r\n\r\nexport * from './useBlurService';\r\nexport {\r\n extractClipboardImageFiles,\r\n type PasteTargetMode,\r\n toFileListLike,\r\n useClipboardPaste,\r\n type UseClipboardPasteOptions,\r\n} from './useClipboardPaste';\r\nexport { useDialog, type UseDialogOptions } from './useDialog';\r\nexport {\r\n useDragAndDrop,\r\n type UseDragAndDropOptions,\r\n} from './useDragAndDrop';\r\nexport { useFilePreview, type UseFilePreviewOptions } from './useFilePreview';\r\nexport {\r\n type UploadCallOptions,\r\n useImageUpload,\r\n type UseImageUploadOptions,\r\n} from './useImageUpload';\r\nexport {\r\n buildUploadFormData,\r\n createUploadAbortError,\r\n isUploadAbortError,\r\n parseErrorPayload,\r\n type UploadFormFields,\r\n uploadViaXhr,\r\n type XhrUploadOptions,\r\n} from './xhrUpload';\r\n\r\nexport const useProgressiveImage = useProgressiveBlur;\r\n\r\nexport function useBlurPreload(\r\n imageSrcs: string[],\r\n size: BlurSize = 'small',\r\n): void {\r\n useEffect(() => {\r\n if (imageSrcs.length > 0) {\r\n blurService.preloadBlurData(imageSrcs, size);\r\n }\r\n }, [imageSrcs, size]);\r\n}\r\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 RefObject, useEffect, useId, useRef } from 'react';\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n 'button:not(:disabled)',\r\n '[href]',\r\n 'input:not(:disabled):not([type=\"hidden\"])',\r\n 'select:not(:disabled)',\r\n 'textarea:not(:disabled)',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n].join(', ');\r\n\r\nexport interface UseDialogOptions {\r\n isOpen: boolean;\r\n onClose?: () => void;\r\n initialFocusRef?: RefObject<HTMLElement | null>;\r\n lockScroll?: boolean;\r\n}\r\n\r\nexport function useDialog({\r\n isOpen,\r\n onClose,\r\n initialFocusRef,\r\n lockScroll = true,\r\n}: UseDialogOptions) {\r\n const dialogRef = useRef<HTMLDivElement | null>(null);\r\n const onCloseRef = useRef(onClose);\r\n onCloseRef.current = onClose;\r\n const titleId = useId();\r\n const descriptionId = useId();\r\n\r\n useEffect(() => {\r\n if (!isOpen || typeof document === 'undefined') return;\r\n\r\n const previouslyFocused =\r\n document.activeElement instanceof HTMLElement\r\n ? document.activeElement\r\n : null;\r\n\r\n const prevOverflow = document.body.style.overflow;\r\n if (lockScroll) {\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n const focusInitial = () => {\r\n const container = dialogRef.current;\r\n if (!container) return;\r\n if (initialFocusRef?.current) {\r\n initialFocusRef.current.focus();\r\n return;\r\n }\r\n if (\r\n document.activeElement &&\r\n container.contains(document.activeElement)\r\n ) {\r\n return;\r\n }\r\n const focusables = Array.from(\r\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\r\n );\r\n if (focusables.length > 0) {\r\n focusables[0].focus();\r\n } else {\r\n container.focus();\r\n }\r\n };\r\n\r\n focusInitial();\r\n\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && onCloseRef.current) {\r\n event.stopPropagation();\r\n onCloseRef.current();\r\n return;\r\n }\r\n\r\n if (event.key !== 'Tab') return;\r\n const container = dialogRef.current;\r\n if (!container) return;\r\n\r\n const focusables = Array.from(\r\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\r\n );\r\n if (focusables.length === 0) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n const active = document.activeElement as HTMLElement | null;\r\n\r\n if (event.shiftKey) {\r\n if (!active || active === first || !container.contains(active)) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else if (!active || active === last || !container.contains(active)) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown);\r\n if (lockScroll) {\r\n document.body.style.overflow = prevOverflow;\r\n }\r\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\r\n try {\r\n previouslyFocused.focus();\r\n } catch {\r\n // Ignore focus restore errors if node was detached\r\n }\r\n }\r\n };\r\n }, [isOpen, lockScroll, initialFocusRef]);\r\n\r\n return {\r\n dialogRef,\r\n titleId,\r\n descriptionId,\r\n };\r\n}\r\n","/**\r\n * Inline SVG icon set (24×24, stroke-based) used by the styled components.\r\n *\r\n * Replaces the former `lucide-react` dependency so consumers do not need to\r\n * install an icon library. Path data is derived from Lucide (ISC license,\r\n * https://lucide.dev/license). The prop API mirrors the subset of Lucide's\r\n * API the kit relied on: `size`, `strokeWidth`, `color`, `className` and any\r\n * other SVG attribute. Icons are decorative (`aria-hidden`) by default unless\r\n * an `aria-label` / `aria-labelledby` is supplied.\r\n */\r\nimport type { JSX, SVGProps } from 'react';\r\n\r\ntype IconTag = 'path' | 'circle';\r\ntype IconNode = ReadonlyArray<readonly [IconTag, Readonly<Record<string, string>>]>;\r\n\r\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'ref'> {\r\n /** Width & height in px (number) or any CSS length (string). Default 24. */\r\n size?: number | string;\r\n /** Stroke width. Default 2. */\r\n strokeWidth?: number | string;\r\n /** Stroke color. Default `currentColor`. */\r\n color?: string;\r\n}\r\n\r\nexport type IconComponent = ((props: IconProps) => JSX.Element) & {\r\n displayName?: string;\r\n};\r\n\r\nfunction createIcon(name: string, nodes: IconNode): IconComponent {\r\n const Icon = ({\r\n size = 24,\r\n strokeWidth = 2,\r\n color = 'currentColor',\r\n className,\r\n children,\r\n ...rest\r\n }: IconProps) => {\r\n const labelled =\r\n rest['aria-label'] !== undefined || rest['aria-labelledby'] !== undefined;\r\n const baseClass = `iuk-icon iuk-icon--${name}`;\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth={strokeWidth}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className={className ? `${baseClass} ${className}` : baseClass}\r\n aria-hidden={labelled ? undefined : true}\r\n focusable=\"false\"\r\n {...rest}\r\n >\r\n {nodes.map(([Tag, attrs], index) => (\r\n <Tag key={index} {...attrs} />\r\n ))}\r\n {children}\r\n </svg>\r\n );\r\n };\r\n Icon.displayName = `Icon(${name})`;\r\n return Icon;\r\n}\r\n\r\nconst p = (d: string) => ['path', { d }] as const;\r\nconst c = (cx: string, cy: string, r: string, fill?: string) => {\r\n const attrs: Record<string, string> = { cx, cy, r };\r\n if (fill) attrs.fill = fill;\r\n return ['circle', attrs] as const;\r\n};\r\n\r\nconst UPLOAD_TRAY = 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4';\r\n\r\nexport const UploadIcon = createIcon('upload', [\r\n p('M12 3v12'),\r\n p('m17 8-5-5-5 5'),\r\n p(UPLOAD_TRAY),\r\n]);\r\n\r\nexport const DownloadIcon = createIcon('download', [\r\n p('M12 15V3'),\r\n p(UPLOAD_TRAY),\r\n p('m7 10 5 5 5-5'),\r\n]);\r\n\r\nexport const ImagePlusIcon = createIcon('image-plus', [\r\n p('M16 5h6'),\r\n p('M19 2v6'),\r\n p('M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5'),\r\n p('m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21'),\r\n c('9', '9', '2'),\r\n]);\r\n\r\nexport const XIcon = createIcon('x', [p('M18 6 6 18'), p('m6 6 12 12')]);\r\n\r\nexport const CheckIcon = createIcon('check', [p('M20 6 9 17l-5-5')]);\r\n\r\nexport const MinusIcon = createIcon('minus', [p('M5 12h14')]);\r\n\r\nexport const LoaderIcon = createIcon('loader', [\r\n p('M21 12a9 9 0 1 1-6.219-8.56'),\r\n]);\r\n\r\nexport const ChevronUpIcon = createIcon('chevron-up', [p('m18 15-6-6-6 6')]);\r\n\r\nexport const ChevronDownIcon = createIcon('chevron-down', [p('m6 9 6 6 6-6')]);\r\n\r\nexport const AlertTriangleIcon = createIcon('alert-triangle', [\r\n p('m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3'),\r\n p('M12 9v4'),\r\n p('M12 17h.01'),\r\n]);\r\n\r\nexport const SaveIcon = createIcon('save', [\r\n p(\r\n 'M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',\r\n ),\r\n p('M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7'),\r\n p('M7 3v4a1 1 0 0 0 1 1h7'),\r\n]);\r\n\r\nexport const EyeIcon = createIcon('eye', [\r\n p(\r\n 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\r\n ),\r\n c('12', '12', '3'),\r\n]);\r\n\r\nexport const InfoIcon = createIcon('info', [\r\n c('12', '12', '10'),\r\n p('M12 16v-4'),\r\n p('M12 8h.01'),\r\n]);\r\n\r\nexport const ZapIcon = createIcon('zap', [\r\n p(\r\n 'M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z',\r\n ),\r\n]);\r\n\r\nexport const CheckCircleIcon = createIcon('check-circle', [\r\n c('12', '12', '10'),\r\n p('m9 12 2 2 4-4'),\r\n]);\r\n\r\nexport const XCircleIcon = createIcon('x-circle', [\r\n c('12', '12', '10'),\r\n p('m15 9-6 6'),\r\n p('m9 9 6 6'),\r\n]);\r\n\r\nexport const TypeIcon = createIcon('type', [\r\n p('M12 4v16'),\r\n p('M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2'),\r\n p('M9 20h6'),\r\n]);\r\n\r\nexport const FolderOpenIcon = createIcon('folder-open', [\r\n p(\r\n 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\r\n ),\r\n]);\r\n\r\nexport const PenToolIcon = createIcon('pen-tool', [\r\n p(\r\n 'M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z',\r\n ),\r\n p(\r\n 'm18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18',\r\n ),\r\n p('m2.3 2.3 7.286 7.286'),\r\n c('11', '11', '2'),\r\n]);\r\n\r\nexport const WandIcon = createIcon('wand', [\r\n p(\r\n 'm21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72',\r\n ),\r\n p('m14 7 3 3'),\r\n p('M5 6v4'),\r\n p('M19 14v4'),\r\n p('M10 2v2'),\r\n p('M7 8H3'),\r\n p('M21 16h-4'),\r\n p('M11 3H9'),\r\n]);\r\n\r\nexport const TrashIcon = createIcon('trash', [\r\n p('M10 11v6'),\r\n p('M14 11v6'),\r\n p('M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6'),\r\n p('M3 6h18'),\r\n p('M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2'),\r\n]);\r\n\r\nexport const PaletteIcon = createIcon('palette', [\r\n p(\r\n 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\r\n ),\r\n c('13.5', '6.5', '.5', 'currentColor'),\r\n c('17.5', '10.5', '.5', 'currentColor'),\r\n c('6.5', '12.5', '.5', 'currentColor'),\r\n c('8.5', '7.5', '.5', 'currentColor'),\r\n]);\r\n","import { TypeIcon } from '../icons';\r\nimport { useId } from 'react';\r\nimport type { UploadLocale } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport {\r\n normalizeUploadLocale,\r\n resolveTranslations,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport { resolveSlotClass } from '../utils/slotStyles';\r\n\r\nexport interface AltTextInputProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n maxLength?: number;\r\n label?: string;\r\n showHint?: boolean;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n unstyled?: boolean;\r\n}\r\n\r\nexport function AltTextInput({\r\n value,\r\n onChange,\r\n disabled = false,\r\n placeholder,\r\n maxLength = 200,\r\n label,\r\n showHint = true,\r\n locale: propLocale,\r\n translations,\r\n unstyled: propUnstyled,\r\n}: AltTextInputProps) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = propUnstyled ?? ctx.unstyled;\r\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\r\n const ui = resolveTranslations(locale, translations || ctx.translations);\r\n const resolvedPlaceholder = placeholder || ui.describeImagePlaceholder;\r\n const resolvedLabel = label || ui.addImageDescription;\r\n const inputId = useId();\r\n const hintId = showHint ? `${inputId}-hint` : undefined;\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n return (\r\n <div\r\n data-slot=\"alt-input\"\r\n data-unstyled={isUnstyled || undefined}\r\n className={cls('iuk-alt-input')}\r\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\r\n >\r\n <div className={cls('iuk-alt-input__header')}>\r\n <TypeIcon size={16} />\r\n <label htmlFor={inputId} className={cls('iuk-alt-input__label')}>\r\n {resolvedLabel}\r\n </label>\r\n </div>\r\n <input\r\n id={inputId}\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder={resolvedPlaceholder}\r\n className={cls('iuk-alt-input__field')}\r\n disabled={disabled}\r\n maxLength={maxLength}\r\n aria-describedby={hintId}\r\n />\r\n {showHint && (\r\n <p className={cls('iuk-alt-input__hint')} id={hintId}>\r\n <span>\r\n {value.length}/{maxLength} {ui.characters}\r\n </span>\r\n <span>{ui.usedForA11ySeo}</span>\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default AltTextInput;\r\n","import { CheckCircleIcon as CheckCircle2, TypeIcon, XIcon as X } from '../icons';\r\nimport { useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { UploadLocale } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useDialog } from '../hooks/useDialog';\r\nimport {\r\n normalizeUploadLocale,\r\n resolveTranslations,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport type { CustomImageRenderer } from '../types';\r\nimport { resolveSlotClass } from '../utils/slotStyles';\r\nimport { BlurImage } from './BlurImage';\r\n\r\nexport interface AltTextModalProps {\r\n imageUrl: string;\r\n initialAltText?: string;\r\n onSave: (altText: string) => void;\r\n onClose: () => void;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n renderImage?: CustomImageRenderer;\r\n unstyled?: boolean;\r\n}\r\n\r\nexport function AltTextModal({\r\n imageUrl,\r\n initialAltText = '',\r\n onSave,\r\n onClose,\r\n locale: propLocale,\r\n translations,\r\n renderImage,\r\n unstyled: propUnstyled,\r\n}: AltTextModalProps) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = propUnstyled ?? ctx.unstyled;\r\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\r\n const ui = resolveTranslations(locale, translations || ctx.translations);\r\n const [localAltText, setLocalAltText] = useState(initialAltText);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const { dialogRef, titleId, descriptionId } = useDialog({\r\n isOpen: true,\r\n onClose,\r\n initialFocusRef: inputRef,\r\n });\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n const handleSave = () => {\r\n onSave(localAltText);\r\n onClose();\r\n };\r\n\r\n const content = (\r\n <div\r\n data-slot=\"alt-modal-backdrop\"\r\n data-unstyled={isUnstyled || undefined}\r\n className={cls('iuk-modal-backdrop')}\r\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\r\n onClick={onClose}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={titleId}\r\n aria-describedby={descriptionId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n data-slot=\"alt-modal\"\r\n className={cls('iuk-alt-modal')}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className={cls('iuk-alt-modal__header')}>\r\n <div className={cls('iuk-alt-modal__title')}>\r\n <TypeIcon size={18} />\r\n <span id={titleId}>{ui.addImageDescription}</span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-icon-btn')}\r\n onClick={onClose}\r\n title={ui.close}\r\n aria-label={ui.close}\r\n >\r\n <X size={18} />\r\n </button>\r\n </div>\r\n\r\n <div className={cls('iuk-alt-modal__preview')}>\r\n <BlurImage\r\n src={imageUrl}\r\n alt={ui.previewAlt}\r\n objectFit=\"contain\"\r\n renderImage={renderImage}\r\n />\r\n </div>\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n className={cls('iuk-alt-input__field')}\r\n value={localAltText}\r\n onChange={(e) => setLocalAltText(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n handleSave();\r\n }\r\n }}\r\n placeholder={ui.describeImagePlaceholder}\r\n maxLength={200}\r\n aria-labelledby={titleId}\r\n aria-describedby={descriptionId}\r\n />\r\n\r\n <div id={descriptionId} className={cls('iuk-alt-input__hint')}>\r\n <span>\r\n {localAltText.length}/200 {ui.characters}\r\n </span>\r\n <span>{ui.usedForA11ySeo}</span>\r\n </div>\r\n\r\n <div className={cls('iuk-alt-modal__actions')}>\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-btn iuk-btn--secondary')}\r\n onClick={onClose}\r\n >\r\n {ui.cancel}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-btn iuk-btn--primary')}\r\n onClick={handleSave}\r\n >\r\n <CheckCircle2 size={16} />\r\n <span>{ui.saveDescription}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n if (typeof document !== 'undefined') {\r\n return createPortal(content, document.body);\r\n }\r\n return content;\r\n}\r\n\r\nexport default AltTextModal;\r\n","import {\r\n type CSSProperties,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { decodeBlurHashToDataURL } from '../../blur/blurDataUtils';\r\nimport { useImageUploadContext } from '../context';\r\nimport type { CustomImageRenderer } from '../types';\r\n\r\nexport interface BlurImageProps {\r\n src: string;\r\n alt: string;\r\n blurDataUrl?: string | null;\r\n blurColor?: string | null;\r\n blurHash?: string | null;\r\n objectFit?: CSSProperties['objectFit'];\r\n className?: string;\r\n imageClassName?: string;\r\n style?: CSSProperties;\r\n renderImage?: CustomImageRenderer;\r\n onImageLoad?: (img: HTMLImageElement | null) => void;\r\n}\r\n\r\nexport function BlurImage({\r\n src,\r\n alt,\r\n blurDataUrl,\r\n blurColor,\r\n blurHash,\r\n objectFit = 'cover',\r\n className = '',\r\n imageClassName = '',\r\n style,\r\n renderImage: propRenderImage,\r\n onImageLoad,\r\n}: BlurImageProps) {\r\n const ctx = useImageUploadContext();\r\n const renderImage = propRenderImage || ctx.renderImage;\r\n const [loadedSrc, setLoadedSrc] = useState<string | null>(null);\r\n const [failedSrc, setFailedSrc] = useState<string | null>(null);\r\n const imgRef = useRef<HTMLImageElement | null>(null);\r\n const onImageLoadRef = useRef(onImageLoad);\r\n onImageLoadRef.current = onImageLoad;\r\n\r\n const decodedHashUrl = useMemo(() => {\r\n if (blurDataUrl || !blurHash) return null;\r\n return decodeBlurHashToDataURL(blurHash, 32, 32);\r\n }, [blurDataUrl, blurHash]);\r\n\r\n const effectiveBlurUrl = blurDataUrl || decodedHashUrl || undefined;\r\n const isLoaded = loadedSrc === src;\r\n const hasFailed = failedSrc === src;\r\n\r\n useEffect(() => {\r\n const el = imgRef.current;\r\n if (el && el.complete && el.naturalWidth > 0) {\r\n setLoadedSrc(src);\r\n onImageLoadRef.current?.(el);\r\n }\r\n }, [src]);\r\n\r\n const imgStyle: CSSProperties = {\r\n width: '100%',\r\n height: '100%',\r\n objectFit,\r\n opacity: isLoaded || hasFailed || !effectiveBlurUrl ? 1 : 0,\r\n transition: 'opacity 0.28s ease-out',\r\n };\r\n\r\n const escapedBlurUrl = effectiveBlurUrl ? effectiveBlurUrl.replace(/\"/g, '\\\\\"') : undefined;\r\n\r\n return (\r\n <div\r\n className={`iuk-blur-image-wrap ${className}`.trim()}\r\n style={{\r\n backgroundColor: blurColor || 'var(--iuk-placeholder-bg, #f3f4f6)',\r\n ...style,\r\n }}\r\n >\r\n {escapedBlurUrl && (\r\n <div\r\n aria-hidden=\"true\"\r\n className={`iuk-blur-image-backdrop ${isLoaded ? 'iuk-blur-image-backdrop--hidden' : ''}`}\r\n style={{\r\n backgroundImage: `url(\"${escapedBlurUrl}\")`,\r\n backgroundSize: objectFit === 'contain' ? 'contain' : 'cover',\r\n }}\r\n />\r\n )}\r\n\r\n {renderImage ? (\r\n renderImage({\r\n src,\r\n alt,\r\n className: `iuk-blur-image-el ${imageClassName}`.trim(),\r\n style: imgStyle,\r\n onLoad: (el) => {\r\n setLoadedSrc(src);\r\n onImageLoadRef.current?.(el);\r\n },\r\n })\r\n ) : (\r\n <img\r\n ref={imgRef}\r\n src={src}\r\n alt={alt}\r\n loading=\"lazy\"\r\n decoding=\"async\"\r\n className={`iuk-blur-image-el ${imageClassName}`.trim()}\r\n style={imgStyle}\r\n onLoad={(e) => {\r\n setLoadedSrc(src);\r\n onImageLoadRef.current?.(e.currentTarget);\r\n }}\r\n onError={() => {\r\n setFailedSrc(src);\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default BlurImage;\r\n","import { type CSSProperties, type SyntheticEvent, useMemo } from 'react';\r\nimport { cx } from '../../utils/slotStyles';\r\nimport {\r\n DEFAULT_NEUTRAL_COLORS,\r\n resolveBackgroundColor,\r\n resolveIntrinsicPlaceholderUrl,\r\n resolvePlaceholderUrl,\r\n} from './placeholder';\r\nimport type { AnimatedImageObjectFit, AnimatedImageProps } from './types';\r\nimport { useImageReveal } from './useImageReveal';\r\n\r\nconst preventDrag = (event: SyntheticEvent) => event.preventDefault();\r\nconst cn = (...classes: Parameters<typeof cx>) => cx(...classes) || undefined;\r\n\r\n/**\r\n * Blur-up image with a smooth, GPU-friendly crossfade and subtle zoom reveal.\r\n * Matches the Imagine-Global reference design while remaining pure React,\r\n * SSR-safe, and framework-agnostic — plug in `next/image` via `as`.\r\n */\r\nexport function AnimatedImage({\r\n image,\r\n src: srcProp,\r\n alt: altProp,\r\n blurDataUrl: blurDataUrlProp,\r\n blurHash: blurHashProp,\r\n blurColor: blurColorProp,\r\n colorPlaceholder = 'flat',\r\n neutralColors = DEFAULT_NEUTRAL_COLORS,\r\n width: widthProp,\r\n height: heightProp,\r\n fill = false,\r\n priority,\r\n quality,\r\n objectFit = 'cover',\r\n objectPosition = 'center',\r\n showShimmer = false,\r\n animationDuration = 600,\r\n revealScale = 1.02,\r\n fallbackSrc,\r\n renderError,\r\n as: ImageComponent,\r\n imageComponentProps,\r\n unstyled = false,\r\n wrapperClassName,\r\n wrapperStyle,\r\n wrapperProps,\r\n placeholderClassName,\r\n className,\r\n style,\r\n loading: loadingProp,\r\n decoding = 'async',\r\n draggable = false,\r\n onLoad,\r\n onError,\r\n ...imgProps\r\n}: AnimatedImageProps) {\r\n const src = srcProp ?? image?.url ?? '';\r\n const alt = altProp ?? image?.altText ?? '';\r\n const blurDataUrl = blurDataUrlProp ?? image?.blurDataUrl;\r\n const blurHash = blurHashProp ?? image?.blurHash;\r\n const blurColor = blurColorProp ?? image?.blurColor;\r\n const width = widthProp ?? (!fill ? image?.width : undefined);\r\n const height = heightProp ?? (!fill ? image?.height : undefined);\r\n\r\n const {\r\n activeSrc,\r\n retryKey,\r\n isLoaded,\r\n showPlaceholder,\r\n hasError,\r\n imgRef,\r\n handleLoad,\r\n handleError,\r\n retry,\r\n } = useImageReveal({\r\n srcKey: src,\r\n fallbackSrc,\r\n animationDuration,\r\n onLoad,\r\n });\r\n\r\n const state = hasError ? 'error' : isLoaded ? 'loaded' : 'loading';\r\n const resolvedObjectFit =\r\n (style?.objectFit as AnimatedImageObjectFit | undefined) ?? objectFit;\r\n const isContain = resolvedObjectFit === 'contain';\r\n\r\n const placeholderUrl = useMemo(\r\n () =>\r\n colorPlaceholder === 'gradient' || isContain\r\n ? resolvePlaceholderUrl({ blurDataUrl, blurHash, blurColor, neutralColors })\r\n : resolveIntrinsicPlaceholderUrl({ blurDataUrl, blurHash }),\r\n [blurDataUrl, blurHash, blurColor, colorPlaceholder, isContain, neutralColors],\r\n );\r\n const cls = (name: string) => (unstyled ? undefined : name);\r\n const duration = Math.max(0, animationDuration);\r\n const placeholderFadeDuration = Math.round(duration * (5 / 6));\r\n\r\n const containerStyle: CSSProperties = {\r\n backgroundColor:\r\n resolveBackgroundColor(blurColor, neutralColors) ??\r\n (unstyled\r\n ? undefined\r\n : 'var(--iuk-animated-image-bg, var(--background-card, rgba(38, 45, 56, 0.4)))'),\r\n ...(unstyled\r\n ? undefined\r\n : {\r\n ['--iuk-animated-image-duration' as string]: `${duration}ms`,\r\n ['--iuk-ai-ph-dur' as string]: `${placeholderFadeDuration}ms`,\r\n ['--iuk-animated-image-reveal-scale' as string]: String(revealScale),\r\n }),\r\n ...wrapperStyle,\r\n };\r\n\r\n const placeholderStyle: CSSProperties = {\r\n objectFit: 'cover',\r\n transitionDuration: `${placeholderFadeDuration}ms`,\r\n };\r\n\r\n const imageStyle: CSSProperties = {\r\n objectFit: resolvedObjectFit,\r\n objectPosition,\r\n transitionDuration: `${duration}ms`,\r\n ...style,\r\n ...(hasError ? { opacity: 0, visibility: 'hidden' as const } : undefined),\r\n };\r\n\r\n const isCustom = Boolean(ImageComponent);\r\n const loadingAttr = priority\r\n ? isCustom\r\n ? undefined\r\n : 'eager'\r\n : (loadingProp ?? (isCustom ? undefined : 'lazy'));\r\n\r\n const priorityProps = isCustom\r\n ? {\r\n ...(priority !== undefined ? { priority } : {}),\r\n ...(quality !== undefined ? { quality } : {}),\r\n }\r\n : priority\r\n ? { fetchPriority: 'high' as const }\r\n : {};\r\n\r\n const derivedImageSrcSet =\r\n !isCustom && activeSrc === src\r\n ? (image?.srcSet ??\r\n (image?.variants?.length\r\n ? [\r\n ...[...image.variants]\r\n .sort((a, b) => a.width - b.width)\r\n .map((v) => `${v.url} ${v.width}w`),\r\n ...(image.width ? [`${src} ${image.width}w`] : []),\r\n ].join(', ')\r\n : undefined))\r\n : undefined;\r\n const resolvedSrcSet = imgProps.srcSet ?? derivedImageSrcSet;\r\n const resolvedSizes =\r\n !isCustom && resolvedSrcSet && fill && imgProps.sizes === undefined\r\n ? '100vw'\r\n : imgProps.sizes;\r\n\r\n const sharedImgProps = {\r\n ...priorityProps,\r\n ...imgProps,\r\n ...(resolvedSrcSet !== undefined ? { srcSet: resolvedSrcSet } : {}),\r\n ...(resolvedSizes !== undefined ? { sizes: resolvedSizes } : {}),\r\n ...(width !== undefined ? { width } : {}),\r\n ...(height !== undefined ? { height } : {}),\r\n ...(loadingAttr !== undefined ? { loading: loadingAttr } : {}),\r\n src: activeSrc,\r\n alt,\r\n decoding,\r\n draggable,\r\n ref: imgRef,\r\n className: cn(cls('iuk-animated-image__img'), className),\r\n style: imageStyle,\r\n 'data-state': state,\r\n onDragStart: imgProps.onDragStart ?? preventDrag,\r\n onLoad: (event: SyntheticEvent<HTMLImageElement>) =>\r\n handleLoad(event.currentTarget),\r\n onError: (event: SyntheticEvent<HTMLImageElement, Event>) => {\r\n const isTerminal = handleError();\r\n if (isTerminal) {\r\n onError?.(event);\r\n }\r\n },\r\n };\r\n\r\n return (\r\n <div\r\n {...wrapperProps}\r\n className={cn(\r\n cls('iuk-animated-image'),\r\n fill && cls('iuk-animated-image--fill'),\r\n isContain && cls('iuk-animated-image--contain'),\r\n wrapperClassName,\r\n wrapperProps?.className,\r\n )}\r\n style={{ ...containerStyle, ...wrapperProps?.style }}\r\n data-slot=\"animated-image\"\r\n data-state={state}\r\n aria-busy={state === 'loading' || undefined}\r\n >\r\n {(showPlaceholder || isContain) && placeholderUrl && (\r\n <img\r\n src={placeholderUrl}\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n draggable={false}\r\n onDragStart={preventDrag}\r\n data-slot=\"animated-image-placeholder\"\r\n className={cn(\r\n cls('iuk-animated-image__placeholder'),\r\n isLoaded && !isContain && cls('iuk-animated-image__placeholder--hidden'),\r\n placeholderClassName,\r\n )}\r\n style={placeholderStyle}\r\n />\r\n )}\r\n\r\n {showShimmer && !isLoaded && !hasError && (\r\n <div\r\n aria-hidden=\"true\"\r\n data-slot=\"animated-image-shimmer\"\r\n className={cn(cls('iuk-animated-image__shimmer'))}\r\n />\r\n )}\r\n\r\n {ImageComponent ? (\r\n <ImageComponent\r\n key={retryKey > 0 ? retryKey : undefined}\r\n {...sharedImgProps}\r\n {...(fill ? { fill: true } : {})}\r\n {...imageComponentProps}\r\n />\r\n ) : (\r\n <img key={retryKey > 0 ? retryKey : undefined} {...sharedImgProps} />\r\n )}\r\n\r\n {hasError && renderError ? renderError({ src: activeSrc, retry }) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport default AnimatedImage;\r\n","import { decodeBlurHashToDataURL } from '../../../blur/blurDataUtils';\r\n\r\n/**\r\n * Default neutral colors that carry no real information about the image (common\r\n * DB defaults or \"empty\" values). Ignored by default so placeholders never\r\n * flash pitch-black or stark white unless `neutralColors={[]}` is passed.\r\n */\r\nexport const DEFAULT_NEUTRAL_COLORS = [\r\n '#1a1a1a',\r\n '#121212',\r\n '#000000',\r\n '#000',\r\n '#e5e7eb',\r\n '#ffffff',\r\n '#fff',\r\n] as const;\r\n\r\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\r\nconst FUNC_COLOR = /^(?:rgb|rgba|hsl|hsla|oklch|oklab)\\([\\d\\s.,%/+-]+\\)$/i;\r\nconst CSS_VAR_COLOR = /^var\\(--[a-zA-Z0-9_-]+(?:\\s*,\\s*[^;{}<>()]+)?\\)$/;\r\n\r\nfunction isNeutralColor(value: string, neutralColors: readonly string[]): boolean {\r\n if (neutralColors.length === 0) return false;\r\n const lower = value.toLowerCase();\r\n for (const item of neutralColors) {\r\n if (item.toLowerCase() === lower) return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Returns a safe, meaningful literal color (`#hex`, `rgb(...)`, `hsl(...)`, `oklch(...)`)\r\n * suitable for inline SVG embedding, or `undefined` when empty/neutral/invalid.\r\n * Rejects CSS variables (`var(--*)`) because SVG data URLs cannot resolve host DOM tokens.\r\n */\r\nexport function resolveMeaningfulColor(\r\n color?: string | null,\r\n neutralColors: readonly string[] = DEFAULT_NEUTRAL_COLORS,\r\n): string | undefined {\r\n const value = color?.trim();\r\n if (!value) return undefined;\r\n if (isNeutralColor(value, neutralColors)) return undefined;\r\n if (!HEX_COLOR.test(value) && !FUNC_COLOR.test(value)) return undefined;\r\n return value;\r\n}\r\n\r\n/**\r\n * Returns a safe CSS background-color value for the wrapper element.\r\n * Accepts literal colors AND safe CSS custom property expressions (`var(--token)`),\r\n * while rejecting neutral defaults and CSS injection payloads.\r\n */\r\nexport function resolveBackgroundColor(\r\n color?: string | null,\r\n neutralColors: readonly string[] = DEFAULT_NEUTRAL_COLORS,\r\n): string | undefined {\r\n const value = color?.trim();\r\n if (!value) return undefined;\r\n if (isNeutralColor(value, neutralColors)) return undefined;\r\n if (HEX_COLOR.test(value) || FUNC_COLOR.test(value) || CSS_VAR_COLOR.test(value)) {\r\n return value;\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Inline SVG data URL that renders a soft gradient placeholder.\r\n * Uses the dominant color when provided, otherwise a neutral slate gradient.\r\n */\r\nexport function createFallbackBlurSvg(\r\n color?: string | null,\r\n neutralColors: readonly string[] = DEFAULT_NEUTRAL_COLORS,\r\n): string {\r\n const meaningful = resolveMeaningfulColor(color, neutralColors);\r\n const stop1 = meaningful ?? '#2c3340';\r\n const stop2 = meaningful ? '#0f172a' : '#1e242d';\r\n const svg =\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\" width=\"100%\" height=\"100%\">' +\r\n '<defs>' +\r\n '<linearGradient id=\"g\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">' +\r\n `<stop offset=\"0%\" stop-color=\"${stop1}\" stop-opacity=\"1\"/>` +\r\n `<stop offset=\"55%\" stop-color=\"${stop1}\" stop-opacity=\"0.78\"/>` +\r\n `<stop offset=\"100%\" stop-color=\"${stop2}\" stop-opacity=\"0.96\"/>` +\r\n '</linearGradient>' +\r\n '<radialGradient id=\"h\" cx=\"24%\" cy=\"22%\" r=\"65%\">' +\r\n '<stop offset=\"0%\" stop-color=\"#ffffff\" stop-opacity=\"0.22\"/>' +\r\n '<stop offset=\"100%\" stop-color=\"#ffffff\" stop-opacity=\"0\"/>' +\r\n '</radialGradient>' +\r\n '</defs>' +\r\n '<rect width=\"100%\" height=\"100%\" fill=\"url(#g)\"/>' +\r\n '<rect width=\"100%\" height=\"100%\" fill=\"url(#h)\"/>' +\r\n '</svg>';\r\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\r\n}\r\n\r\nexport interface PlaceholderSources {\r\n blurDataUrl?: string | null;\r\n blurHash?: string | null;\r\n blurColor?: string | null;\r\n neutralColors?: readonly string[];\r\n}\r\n\r\n/**\r\n * Resolves an intrinsic image placeholder (`blurDataUrl` or decoded `blurHash`)\r\n * without falling back to an SVG gradient. Returns `undefined` when neither is present.\r\n */\r\nexport function resolveIntrinsicPlaceholderUrl({\r\n blurDataUrl,\r\n blurHash,\r\n}: Pick<PlaceholderSources, 'blurDataUrl' | 'blurHash'>): string | undefined {\r\n const dataUrl = blurDataUrl?.trim();\r\n if (dataUrl) return dataUrl;\r\n if (blurHash && typeof document !== 'undefined') {\r\n try {\r\n const decoded = decodeBlurHashToDataURL(blurHash, 32, 32);\r\n if (decoded) return decoded;\r\n } catch {\r\n // Invalid hash: ignore.\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Resolves the best available placeholder URL in priority order:\r\n * 1. `blurDataUrl` (LQIP data URL / remote URL)\r\n * 2. `blurHash` (decoded client-side; browser only)\r\n * 3. Gradient SVG derived from `blurColor` (or neutral fallback)\r\n */\r\nexport function resolvePlaceholderUrl({\r\n blurDataUrl,\r\n blurHash,\r\n blurColor,\r\n neutralColors = DEFAULT_NEUTRAL_COLORS,\r\n}: PlaceholderSources): string {\r\n const intrinsic = resolveIntrinsicPlaceholderUrl({ blurDataUrl, blurHash });\r\n if (intrinsic) return intrinsic;\r\n return createFallbackBlurSvg(blurColor, neutralColors);\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nexport interface UseImageRevealOptions {\r\n /** Identity of the primary source; a change resets the reveal state. */\r\n srcKey: string;\r\n /** Optional fallback URL tried once if `srcKey` fails to load. */\r\n fallbackSrc?: string;\r\n /** Crossfade duration in ms. */\r\n animationDuration: number;\r\n onLoad?: (img: HTMLImageElement | null) => void;\r\n}\r\n\r\nexport interface ImageRevealState {\r\n /** Active image URL (`srcKey` initially, or `fallbackSrc` after primary failure). */\r\n activeSrc: string;\r\n /** Monotonic counter incremented when `retry()` is invoked. */\r\n retryKey: number;\r\n /** True once the sharp image is decoded and ready to fade in. */\r\n isLoaded: boolean;\r\n /** Whether the placeholder layer is still mounted (kept until fade completes, or on error). */\r\n showPlaceholder: boolean;\r\n /** True when the image (and optional `fallbackSrc`) failed to load. */\r\n hasError: boolean;\r\n /** Callback ref to attach to the underlying `<img>` element. */\r\n imgRef: (node: HTMLImageElement | null) => void;\r\n handleLoad: (img?: HTMLImageElement | null) => void;\r\n /** Returns `true` if the error is terminal, or `false` if switching to `fallbackSrc`. */\r\n handleError: () => boolean;\r\n /** Resets error state and retries loading from the primary `srcKey`. */\r\n retry: () => void;\r\n}\r\n\r\nconst PLACEHOLDER_UNMOUNT_BUFFER_MS = 50;\r\n\r\n/**\r\n * Framework-agnostic reveal state machine for blur-up images:\r\n * - resets synchronously when `srcKey` changes (no stale 1-frame flash)\r\n * - pre-decodes via `HTMLImageElement.decode()` before crossfading\r\n * - detects already-cached images after the first paint\r\n * - unmounts placeholder after crossfade (`animationDuration + 50ms`)\r\n * - on error: tries `fallbackSrc` once if provided; on terminal error keeps placeholder visible\r\n */\r\nexport function useImageReveal({\r\n srcKey,\r\n fallbackSrc,\r\n animationDuration,\r\n onLoad,\r\n}: UseImageRevealOptions): ImageRevealState {\r\n const [prevSrc, setPrevSrc] = useState(srcKey);\r\n const [usingFallback, setUsingFallback] = useState(false);\r\n const [retryKey, setRetryKey] = useState(0);\r\n const [isLoaded, setIsLoaded] = useState(false);\r\n const [showPlaceholder, setShowPlaceholder] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n const [node, setNode] = useState<HTMLImageElement | null>(null);\r\n\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const mountedRef = useRef(true);\r\n const activeSrc = usingFallback && fallbackSrc ? fallbackSrc : srcKey;\r\n const activeSrcRef = useRef(activeSrc);\r\n const onLoadRef = useRef(onLoad);\r\n\r\n useEffect(() => {\r\n onLoadRef.current = onLoad;\r\n }, [onLoad]);\r\n\r\n const clearTimer = useCallback(() => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = null;\r\n }\r\n }, []);\r\n\r\n if (prevSrc !== srcKey) {\r\n setPrevSrc(srcKey);\r\n setUsingFallback(false);\r\n setIsLoaded(false);\r\n setShowPlaceholder(true);\r\n setHasError(false);\r\n }\r\n\r\n useEffect(() => {\r\n activeSrcRef.current = activeSrc;\r\n clearTimer();\r\n }, [activeSrc, clearTimer]);\r\n\r\n useEffect(() => {\r\n mountedRef.current = true;\r\n return () => {\r\n mountedRef.current = false;\r\n clearTimer();\r\n };\r\n }, [clearTimer]);\r\n\r\n const handleLoad = useCallback(\r\n (img?: HTMLImageElement | null) => {\r\n const el = img ?? node;\r\n const loadedFor = activeSrcRef.current;\r\n const reveal = () => {\r\n if (!mountedRef.current || loadedFor !== activeSrcRef.current) return;\r\n setHasError(false);\r\n setIsLoaded(true);\r\n clearTimer();\r\n const duration = Math.max(0, animationDuration);\r\n timeoutRef.current = setTimeout(() => {\r\n if (mountedRef.current) setShowPlaceholder(false);\r\n timeoutRef.current = null;\r\n }, duration + PLACEHOLDER_UNMOUNT_BUFFER_MS);\r\n onLoadRef.current?.(el ?? null);\r\n };\r\n if (el && typeof el.decode === 'function') {\r\n el.decode().then(reveal, reveal);\r\n } else {\r\n reveal();\r\n }\r\n },\r\n [animationDuration, clearTimer, node],\r\n );\r\n\r\n const handleError = useCallback((): boolean => {\r\n if (!mountedRef.current) return false;\r\n clearTimer();\r\n if (fallbackSrc && !usingFallback && fallbackSrc !== srcKey) {\r\n setUsingFallback(true);\r\n setIsLoaded(false);\r\n setShowPlaceholder(true);\r\n setHasError(false);\r\n return false;\r\n }\r\n setHasError(true);\r\n setIsLoaded(false);\r\n setShowPlaceholder(true);\r\n return true;\r\n }, [clearTimer, fallbackSrc, srcKey, usingFallback]);\r\n\r\n const retry = useCallback(() => {\r\n clearTimer();\r\n setUsingFallback(false);\r\n setHasError(false);\r\n setIsLoaded(false);\r\n setShowPlaceholder(true);\r\n setRetryKey((prev) => prev + 1);\r\n }, [clearTimer]);\r\n\r\n useEffect(() => {\r\n if (!node || !node.complete || node.naturalWidth === 0) return;\r\n if (typeof requestAnimationFrame !== 'function') {\r\n handleLoad(node);\r\n return;\r\n }\r\n const rafId = requestAnimationFrame(() => handleLoad(node));\r\n return () => cancelAnimationFrame(rafId);\r\n }, [node, activeSrc, retryKey, handleLoad]);\r\n\r\n return {\r\n activeSrc,\r\n retryKey,\r\n isLoaded,\r\n showPlaceholder,\r\n hasError,\r\n imgRef: setNode,\r\n handleLoad,\r\n handleError,\r\n retry,\r\n };\r\n}\r\n","import { useEffect } from 'react';\r\nimport { blurService } from '../../blur/blurService';\r\n\r\ntype DebugWindow = Window & { blurService?: typeof blurService };\r\n\r\n/**\r\n * Development helper: exposes the shared `blurService` singleton as\r\n * `window.blurService` while mounted, for inspection in the browser console.\r\n * Does not augment the global `Window` type of consuming apps.\r\n */\r\nexport function BlurServiceDebugger() {\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return undefined;\r\n const target = window as DebugWindow;\r\n target.blurService = blurService;\r\n return () => {\r\n if (target.blurService === blurService) {\r\n delete target.blurService;\r\n }\r\n };\r\n }, []);\r\n\r\n return null;\r\n}\r\n\r\nexport default BlurServiceDebugger;\r\n","import { EyeIcon as Eye, XIcon as X } from '../icons';\r\nimport type { ChangeEvent, PointerEvent as ReactPointerEvent } from 'react';\r\nimport { useEffect, useId, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { UploadLocale } from '../../types';\r\nimport { normalizeColorInput } from '../../utils/color';\r\nimport { formatFileSize } from '../../utils/formatters';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useDialog } from '../hooks/useDialog';\r\nimport { normalizeUploadLocale, resolveTranslations, type UploadTranslations } from '../i18n';\r\nimport type { CustomImageRenderer } from '../types';\r\nimport { drawImageToCanvas, sampleCanvasPixelHex } from '../utils/canvasSampler';\r\nimport { resolveSlotClass } from '../utils/slotStyles';\r\nimport { BlurColorControls } from './BlurColorControls';\r\nimport { BlurImage } from './BlurImage';\r\nimport { SaveButton } from './SaveButton';\r\n\r\nconst DEBOUNCE_MS = 250;\r\n\r\nexport interface BlurVisualizationModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n imageUrl: string;\r\n blurDataUrl?: string;\r\n blurColor?: string;\r\n altText?: string;\r\n originalSize?: number;\r\n optimizedSize?: number | null;\r\n detectedColor?: string;\r\n onChangeColor?: (hex: string) => void;\r\n onUseDetectedColor?: () => void;\r\n onChangeAltText?: (altText: string) => void;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n renderImage?: CustomImageRenderer;\r\n unstyled?: boolean;\r\n}\r\n\r\nexport function BlurVisualizationModal({\r\n isOpen, onClose, imageUrl, blurDataUrl, blurColor, altText,\r\n originalSize, optimizedSize, detectedColor, onChangeColor,\r\n onUseDetectedColor, onChangeAltText, locale: propLocale,\r\n translations, renderImage, unstyled: propUnstyled,\r\n}: BlurVisualizationModalProps) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = propUnstyled ?? ctx.unstyled;\r\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\r\n const tModal = resolveTranslations(locale, translations || ctx.translations).blurModal;\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n const { dialogRef, titleId } = useDialog({ isOpen, onClose });\r\n const textareaId = useId();\r\n\r\n const baseColor = useMemo(() => (blurColor || detectedColor || '#F5F5F5').toUpperCase(), [blurColor, detectedColor]);\r\n const [localColor, setLocalColor] = useState(baseColor);\r\n const [hexInput, setHexInput] = useState(baseColor.replace('#', ''));\r\n const [sampledColor, setSampledColor] = useState<string | null>(null);\r\n const [penModeActive, setPenModeActive] = useState(false);\r\n const [localAltText, setLocalAltText] = useState(altText || '');\r\n const liveCanvasRef = useRef<HTMLCanvasElement | null>(null);\r\n const colorTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const altTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const pendingColorRef = useRef<string | null>(null);\r\n const pendingAltRef = useRef<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n setLocalColor(baseColor);\r\n setHexInput(baseColor.replace('#', ''));\r\n setLocalAltText(altText || '');\r\n }, [isOpen, baseColor, altText, blurDataUrl, imageUrl, blurColor]);\r\n\r\n useEffect(() => () => {\r\n if (colorTimerRef.current) clearTimeout(colorTimerRef.current);\r\n if (altTimerRef.current) clearTimeout(altTimerRef.current);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n const srcToLoad = imageUrl || blurDataUrl;\r\n if (!srcToLoad) return;\r\n const img = new window.Image();\r\n img.crossOrigin = 'anonymous';\r\n img.onload = () => drawImageToCanvas(img, liveCanvasRef);\r\n img.onerror = () => {\r\n if (blurDataUrl && srcToLoad !== blurDataUrl) {\r\n const fallbackImg = new window.Image();\r\n fallbackImg.onload = () => drawImageToCanvas(fallbackImg, liveCanvasRef);\r\n fallbackImg.src = blurDataUrl;\r\n }\r\n };\r\n img.src = srcToLoad;\r\n return () => { img.onload = null; img.onerror = null; };\r\n }, [imageUrl, blurDataUrl, isOpen]);\r\n\r\n useEffect(() => {\r\n if (!sampledColor) return;\r\n const timer = window.setTimeout(() => setSampledColor(null), 2000);\r\n return () => window.clearTimeout(timer);\r\n }, [sampledColor]);\r\n\r\n if (!isOpen || typeof document === 'undefined') return null;\r\n\r\n const scheduleColorEmit = (hex: string) => {\r\n pendingColorRef.current = hex;\r\n if (colorTimerRef.current) clearTimeout(colorTimerRef.current);\r\n colorTimerRef.current = setTimeout(() => {\r\n colorTimerRef.current = null;\r\n const next = pendingColorRef.current;\r\n pendingColorRef.current = null;\r\n if (next !== null) onChangeColor?.(next);\r\n }, DEBOUNCE_MS);\r\n };\r\n\r\n const scheduleAltEmit = (nextAlt: string) => {\r\n pendingAltRef.current = nextAlt;\r\n if (altTimerRef.current) clearTimeout(altTimerRef.current);\r\n altTimerRef.current = setTimeout(() => {\r\n altTimerRef.current = null;\r\n const next = pendingAltRef.current;\r\n pendingAltRef.current = null;\r\n if (next !== null) onChangeAltText?.(next);\r\n }, DEBOUNCE_MS);\r\n };\r\n\r\n const flushPendingChanges = () => {\r\n if (colorTimerRef.current) {\r\n clearTimeout(colorTimerRef.current);\r\n colorTimerRef.current = null;\r\n }\r\n if (pendingColorRef.current !== null) {\r\n onChangeColor?.(pendingColorRef.current);\r\n pendingColorRef.current = null;\r\n }\r\n if (altTimerRef.current) {\r\n clearTimeout(altTimerRef.current);\r\n altTimerRef.current = null;\r\n }\r\n if (pendingAltRef.current !== null) {\r\n onChangeAltText?.(pendingAltRef.current);\r\n pendingAltRef.current = null;\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n flushPendingChanges();\r\n onClose();\r\n };\r\n\r\n const syncLocalHex = (hex: string, notify = true) => {\r\n setLocalColor(hex);\r\n setHexInput(hex.replace('#', ''));\r\n if (notify) scheduleColorEmit(hex);\r\n };\r\n\r\n const handleColorPickerChange = (e: ChangeEvent<HTMLInputElement>) => syncLocalHex(e.target.value.toUpperCase());\r\n\r\n const handleHexInputChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n const sanitized = event.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\r\n setHexInput(sanitized.toUpperCase());\r\n if (sanitized.length === 3 || sanitized.length === 6) {\r\n const normalized = normalizeColorInput(`#${sanitized}`);\r\n if (normalized) {\r\n setLocalColor(normalized);\r\n scheduleColorEmit(normalized);\r\n }\r\n }\r\n };\r\n\r\n const handlePenSample = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (!penModeActive) {\r\n if (event.pointerType === 'pen') setPenModeActive(true);\r\n else return;\r\n }\r\n const sampled = sampleCanvasPixelHex(event, liveCanvasRef);\r\n if (!sampled) return;\r\n setSampledColor(sampled);\r\n syncLocalHex(sampled);\r\n };\r\n\r\n const handleUseDetectedColor = () => {\r\n if (!detectedColor) return;\r\n if (colorTimerRef.current) {\r\n clearTimeout(colorTimerRef.current);\r\n colorTimerRef.current = null;\r\n pendingColorRef.current = null;\r\n }\r\n const normalized = normalizeColorInput(detectedColor) || detectedColor.toUpperCase();\r\n setLocalColor(normalized);\r\n setHexInput(normalized.replace('#', ''));\r\n if (onUseDetectedColor) onUseDetectedColor();\r\n else onChangeColor?.(normalized);\r\n };\r\n\r\n const displayColor = localColor || blurColor || '#F5F5F5';\r\n\r\n return createPortal(\r\n <div\r\n data-slot=\"blur-modal-backdrop\"\r\n data-unstyled={isUnstyled || undefined}\r\n className={cls('iuk-modal-backdrop')}\r\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\r\n onClick={handleClose}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={titleId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n data-slot=\"blur-modal\"\r\n className={cls('iuk-blur-modal')}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <div className={cls('iuk-blur-modal__header')}>\r\n <div className={cls('iuk-blur-modal__title-row')}>\r\n <Eye size={20} className={cls('iuk-blur-modal__title-icon')} />\r\n <h2 id={titleId} className={cls('iuk-blur-modal__title')}>{tModal.title}</h2>\r\n {optimizedSize ? <span className={cls('iuk-badge')}>{formatFileSize(optimizedSize)}</span> : null}\r\n </div>\r\n <button type=\"button\" onClick={handleClose} className={cls('iuk-icon-btn')} aria-label={tModal.closeModal}>\r\n <X size={18} />\r\n </button>\r\n </div>\r\n\r\n <div className={cls('iuk-blur-modal__body')}>\r\n <div className={cls('iuk-blur-modal__grid')}>\r\n <BlurColorControls\r\n localColor={localColor} hexInput={hexInput} penModeActive={penModeActive}\r\n detectedColor={detectedColor} sampledColor={sampledColor} tModal={tModal}\r\n onColorPickerChange={handleColorPickerChange}\r\n onHexInputChange={handleHexInputChange}\r\n onTogglePenMode={() => setPenModeActive((prev) => !prev)}\r\n onUseDetectedColor={handleUseDetectedColor}\r\n />\r\n\r\n <div className={cls('iuk-blur-modal__preview-col')}>\r\n <h3 className={cls('iuk-blur-modal__section-title')}>{tModal.livePreview}</h3>\r\n <div\r\n className={cls(`iuk-blur-modal__stage ${penModeActive ? 'iuk-blur-modal__stage--sampling' : ''}`.trim())}\r\n style={{ backgroundColor: displayColor }}\r\n onPointerDown={handlePenSample}\r\n >\r\n <BlurImage\r\n src={imageUrl} alt={altText || tModal.livePreview}\r\n blurDataUrl={blurDataUrl} blurColor={displayColor}\r\n objectFit=\"contain\" renderImage={renderImage}\r\n onImageLoad={(img) => { if (img) drawImageToCanvas(img, liveCanvasRef); }}\r\n />\r\n {!blurDataUrl && <div className={cls('iuk-blur-modal__no-blur-note')}>{tModal.showingOriginal}</div>}\r\n </div>\r\n\r\n {optimizedSize && originalSize && originalSize > optimizedSize ? (\r\n <div className={cls('iuk-blur-modal__savings')}>\r\n <span>{tModal.saved}</span>\r\n <strong>\r\n {formatFileSize(originalSize - optimizedSize)} (\r\n {Math.round(((originalSize - optimizedSize) / originalSize) * 100)}%)\r\n </strong>\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n <div className={cls('iuk-blur-modal__alt-section')}>\r\n <label htmlFor={textareaId} className={cls('iuk-blur-modal__section-title')}>\r\n {tModal.accessibility} — {tModal.altText}\r\n </label>\r\n <textarea\r\n id={textareaId}\r\n value={localAltText}\r\n onChange={(e) => { setLocalAltText(e.target.value); scheduleAltEmit(e.target.value); }}\r\n className={cls('iuk-blur-modal__textarea')}\r\n placeholder={tModal.altTextPlaceholder}\r\n rows={2}\r\n />\r\n </div>\r\n\r\n <canvas ref={liveCanvasRef} style={{ display: 'none' }} aria-hidden=\"true\" />\r\n </div>\r\n\r\n <div className={cls('iuk-blur-modal__footer')}>\r\n <SaveButton unstyled={isUnstyled} onClick={handleClose}>{tModal.saveAndClose}</SaveButton>\r\n </div>\r\n </div>\r\n </div>,\r\n document.body,\r\n );\r\n}\r\n\r\nexport default BlurVisualizationModal;\r\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 { PenToolIcon as PenTool, WandIcon as Wand2 } from '../icons';\r\nimport type { ChangeEvent } from 'react';\r\nimport type { BlurModalTranslations } from '../i18n';\r\n\r\nexport interface BlurColorControlsProps {\r\n localColor: string;\r\n hexInput: string;\r\n penModeActive: boolean;\r\n detectedColor?: string;\r\n sampledColor: string | null;\r\n tModal: BlurModalTranslations;\r\n onColorPickerChange: (event: ChangeEvent<HTMLInputElement>) => void;\r\n onHexInputChange: (event: ChangeEvent<HTMLInputElement>) => void;\r\n onTogglePenMode: () => void;\r\n onUseDetectedColor: () => void;\r\n}\r\n\r\nexport function BlurColorControls({\r\n localColor,\r\n hexInput,\r\n penModeActive,\r\n detectedColor,\r\n sampledColor,\r\n tModal,\r\n onColorPickerChange,\r\n onHexInputChange,\r\n onTogglePenMode,\r\n onUseDetectedColor,\r\n}: BlurColorControlsProps) {\r\n return (\r\n <div className=\"iuk-blur-modal__controls\">\r\n <h3 className=\"iuk-blur-modal__section-title\">{tModal.adjustColor}</h3>\r\n <p className=\"iuk-blur-modal__subtitle\">\r\n {penModeActive ? `🎨 ${tModal.clickToSample}` : tModal.pickColorNote}\r\n </p>\r\n\r\n <div className=\"iuk-blur-modal__picker-row\">\r\n <label className=\"iuk-blur-modal__color-well\">\r\n <input\r\n type=\"color\"\r\n value={localColor}\r\n onChange={onColorPickerChange}\r\n aria-label={tModal.adjustColor}\r\n />\r\n </label>\r\n\r\n <div className=\"iuk-blur-modal__hex-group\">\r\n <div className=\"iuk-blur-modal__hex-field\">\r\n <span>#</span>\r\n <input\r\n type=\"text\"\r\n value={hexInput}\r\n onChange={onHexInputChange}\r\n maxLength={6}\r\n spellCheck={false}\r\n aria-label={tModal.enterHexColor}\r\n placeholder={tModal.hexPlaceholder}\r\n />\r\n </div>\r\n <div className=\"iuk-blur-modal__swatch-chip\">\r\n <span\r\n className=\"iuk-blur-modal__swatch-dot\"\r\n style={{ backgroundColor: localColor }}\r\n aria-hidden=\"true\"\r\n />\r\n <code>{localColor}</code>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"iuk-blur-modal__actions-row\">\r\n <button\r\n type=\"button\"\r\n onClick={onTogglePenMode}\r\n className={`iuk-btn iuk-btn--secondary ${penModeActive ? 'iuk-btn--active' : ''}`}\r\n aria-label={\r\n penModeActive ? tModal.disablePenMode : tModal.enablePenMode\r\n }\r\n >\r\n <PenTool size={14} />\r\n <span>\r\n {penModeActive ? tModal.penModeActive : tModal.enablePenMode}\r\n </span>\r\n </button>\r\n\r\n {detectedColor && (\r\n <button\r\n type=\"button\"\r\n className=\"iuk-btn iuk-btn--secondary\"\r\n onClick={onUseDetectedColor}\r\n >\r\n <Wand2 size={14} />\r\n <span>{tModal.resetToDetected}</span>\r\n <code>{detectedColor.toUpperCase()}</code>\r\n </button>\r\n )}\r\n\r\n {sampledColor && (\r\n <span className=\"iuk-badge iuk-badge--accent\">\r\n <PenTool size={12} />\r\n <span>\r\n {tModal.sampled} {sampledColor}\r\n </span>\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\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 {\r\n ChevronUpIcon as ChevronUp,\r\n LoaderIcon as Loader2,\r\n MinusIcon as Minus,\r\n XIcon as X,\r\n} from '../icons';\r\nimport {\r\n type ForwardedRef,\r\n forwardRef,\r\n type ReactElement,\r\n type Ref,\r\n useEffect,\r\n useState,\r\n} from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { UploadPresetName } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useDialog } from '../hooks/useDialog';\r\nimport { normalizeUploadLocale, resolveTranslations } from '../i18n';\r\nimport type {\r\n ImageUploadHandle,\r\n ImageUploadProps,\r\n MultiImageUploadProps,\r\n SingleImageUploadProps,\r\n} from '../types';\r\nimport { resolveSlotClass } from '../utils/slotStyles';\r\nimport { MultiImageUpload } from './MultiImageUpload';\r\nimport { SingleImageUpload } from './SingleImageUpload';\r\n\r\nfunction ImageUploadInner<TPreset extends string = UploadPresetName>(\r\n props: ImageUploadProps<TPreset>,\r\n ref: ForwardedRef<ImageUploadHandle>,\r\n) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = props.unstyled ?? ctx.unstyled;\r\n const uploadLocale = normalizeUploadLocale(props.locale || ctx.locale);\r\n const ui = resolveTranslations(\r\n uploadLocale,\r\n props.translations || ctx.translations,\r\n );\r\n const dir = uploadLocale === 'ar' ? 'rtl' : 'ltr';\r\n const { isOpen, onClose, title, modeVariant } = props;\r\n const [isMinimized, setIsMinimized] = useState(false);\r\n const [dockNode, setDockNode] = useState<HTMLElement | null>(null);\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setIsMinimized(false);\r\n }\r\n }, [isOpen]);\r\n\r\n const { dialogRef, titleId } = useDialog({\r\n isOpen: Boolean(isOpen) && !isMinimized,\r\n onClose,\r\n });\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined' || !isOpen || !isMinimized) {\r\n setDockNode(null);\r\n return;\r\n }\r\n\r\n const updateDockReference = () => {\r\n const node = document.querySelector('[data-upload-progress-dock]');\r\n setDockNode((prev) =>\r\n node instanceof HTMLElement ? (node === prev ? prev : node) : null,\r\n );\r\n };\r\n\r\n updateDockReference();\r\n\r\n const observer = new MutationObserver(() => updateDockReference());\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n return () => observer.disconnect();\r\n }, [isOpen, isMinimized]);\r\n\r\n const content =\r\n props.mode === 'multiple' ? (\r\n <MultiImageUpload ref={ref} {...(props as MultiImageUploadProps<TPreset>)} />\r\n ) : (\r\n <SingleImageUpload ref={ref} {...(props as SingleImageUploadProps<TPreset>)} />\r\n );\r\n\r\n if (isOpen === undefined) {\r\n return (\r\n <div\r\n data-slot=\"upload-root\"\r\n data-unstyled={isUnstyled || undefined}\r\n className={cls('iuk-root')}\r\n dir={dir}\r\n data-upload-locale={uploadLocale}\r\n >\r\n {content}\r\n </div>\r\n );\r\n }\r\n\r\n if (!isOpen) return null;\r\n\r\n const minimizedButton = (\r\n <button\r\n type=\"button\"\r\n data-slot=\"minimized-pill\"\r\n className={cls('iuk-minimized-pill')}\r\n onClick={() => setIsMinimized(false)}\r\n title={ui.restoreUploadWindow}\r\n >\r\n <Loader2 size={16} className={cls('iuk-spin')} />\r\n <span className={cls('iuk-minimized-pill__copy')}>\r\n <span className={cls('iuk-minimized-pill__primary')}>{ui.uploadWindow}</span>\r\n <span className={cls('iuk-minimized-pill__secondary')}>{ui.tapToResume}</span>\r\n </span>\r\n <ChevronUp size={16} />\r\n </button>\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n data-slot=\"upload-modal-backdrop\"\r\n data-unstyled={isUnstyled || undefined}\r\n className={cls(\r\n `iuk-root iuk-modal-backdrop ${isMinimized ? 'iuk-modal-backdrop--hidden' : ''}`.trim(),\r\n )}\r\n dir={dir}\r\n data-upload-locale={uploadLocale}\r\n role=\"dialog\"\r\n aria-modal={!isMinimized}\r\n aria-hidden={isMinimized}\r\n aria-labelledby={title ? titleId : undefined}\r\n aria-label={!title ? ui.uploadWindow : undefined}\r\n onClick={() => onClose?.()}\r\n >\r\n <div\r\n ref={dialogRef}\r\n data-slot=\"upload-dialog\"\r\n className={cls(\r\n `iuk-upload-dialog ${isMinimized ? 'iuk-upload-dialog--hidden' : ''}`.trim(),\r\n )}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {onClose && (\r\n <div className={cls('iuk-upload-dialog__controls')}>\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-icon-btn iuk-icon-btn--floating')}\r\n onClick={() => setIsMinimized(true)}\r\n aria-label={ui.minimize}\r\n title={ui.minimizeUploader}\r\n >\r\n <Minus size={18} />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-icon-btn iuk-icon-btn--floating')}\r\n onClick={onClose}\r\n aria-label={ui.close}\r\n >\r\n <X size={18} />\r\n </button>\r\n </div>\r\n )}\r\n <div\r\n className={cls('iuk-upload-dialog__card')}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {title && (\r\n <h3 id={titleId} className={cls('iuk-upload-dialog__title')}>\r\n {modeVariant === 'edit'\r\n ? ui.editPrefix.replace('{title}', title)\r\n : title}\r\n </h3>\r\n )}\r\n {content}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {isMinimized &&\r\n typeof document !== 'undefined' &&\r\n (dockNode ? (\r\n createPortal(\r\n <div className={cls('iuk-minimized-portal')}>{minimizedButton}</div>,\r\n dockNode,\r\n )\r\n ) : (\r\n <div className={cls('iuk-minimized-dock')}>{minimizedButton}</div>\r\n ))}\r\n </>\r\n );\r\n}\r\n\r\nexport const ImageUpload = forwardRef(ImageUploadInner) as <\r\n TPreset extends string = UploadPresetName,\r\n>(\r\n props: ImageUploadProps<TPreset> & { ref?: Ref<ImageUploadHandle> },\r\n) => ReactElement | null;\r\n\r\nexport const UnifiedImageUpload = ImageUpload;\r\nexport default ImageUpload;\r\n","import {\r\n type ChangeEvent, type ForwardedRef, Fragment, forwardRef, type HTMLAttributes,\r\n type ReactElement, type Ref, useId, useImperativeHandle, useRef,\r\n} from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { UploadPresetName } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useClipboardPaste } from '../hooks/useClipboardPaste';\r\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\r\nimport { useMultiImageState } from '../hooks/useMultiImageState';\r\nimport type { MultiUploadSlot } from '../styling';\r\nimport type { ImageUploadHandle, MultiImageUploadProps } from '../types';\r\nimport { HIDDEN_INPUT_STYLE, resolveSlotClass, resolveSlotStyle, resolveUploadDataState } from '../utils/slotStyles';\r\nimport { AltTextModal } from './AltTextModal';\r\nimport { MultiAddMoreTile, MultiEmptyDropzone } from './MultiDropzoneViews';\r\nimport { MultiFooterSection, MultiUploadHeaderAlerts } from './MultiUploadHeaderAlerts';\r\nimport { PreviewTile } from './PreviewTile';\r\nimport { QualitySelector } from './QualitySelector';\r\nimport { UploadProgressPanel, useRetainedProgressItems } from './UploadProgressPanel';\r\n\r\nconst DEFAULT_ACCEPT = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml';\r\nconst FOLDER_INPUT_ATTRS: Record<string, string> = { webkitdirectory: '', directory: '' };\r\n\r\nfunction MultiImageUploadInner<TPreset extends string = UploadPresetName>(\r\n props: MultiImageUploadProps<TPreset>,\r\n ref: ForwardedRef<ImageUploadHandle>,\r\n) {\r\n const {\r\n preset, translations, renderImage, label, error, helperText, className, style,\r\n recommendedQuality, qualityNote, isOpen, maxImages = 999,\r\n accept = DEFAULT_ACCEPT, allowFolder = true, disabled = false,\r\n required = false, blurType = 'card', showQualitySelector = true,\r\n capture, enablePaste = true, pasteTarget = 'dropzone', name, onBlur,\r\n classNames: cCls, styles: cSty,\r\n renderHeader, renderEmptyDropzone, renderTile, renderAddMore,\r\n } = props;\r\n\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = props.unstyled ?? ctx.unstyled;\r\n const pCls = ctx.multiClassNames;\r\n const pSty = ctx.multiStyles;\r\n\r\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, isUnstyled, pCls?.[slot], cCls?.[slot]);\r\n const slotStyle = (slot: MultiUploadSlot) =>\r\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\r\n\r\n const state = useMultiImageState(props);\r\n const { locale, ui, previews, selectedPreviews, uploadingPreviews, imagesWithoutAlt, editingTarget } = state;\r\n\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const labelId = useId();\r\n const inputId = useId();\r\n const statusTextId = useId();\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const folderInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const dockItems = useRetainedProgressItems(uploadingPreviews, previews);\r\n\r\n const { isDragging, dragHandlers } = useDragAndDrop({\r\n disabled, onDrop: (files) => void state.handleFileSelect(files),\r\n });\r\n\r\n const { onPaste } = useClipboardPaste({\r\n enabled: enablePaste, pasteTarget, disabled, multiple: true,\r\n onPasteFiles: (files) => { void state.handleFileSelect(files); },\r\n });\r\n\r\n const openFilePicker = () => { if (!disabled) fileInputRef.current?.click(); };\r\n const openFolderPicker = () => { if (!disabled) folderInputRef.current?.click(); };\r\n const selectAll = () => state.setSelectedPreviews(new Set(previews.map((p) => p.id)));\r\n const clearSelection = () => state.setSelectedPreviews(new Set());\r\n const retryFailed = () => void state.handleRetryFailed();\r\n\r\n useImperativeHandle(ref, () => ({\r\n focus: () => {\r\n const focusable = rootRef.current?.querySelector<HTMLElement>(\r\n '[data-slot=\"empty-dropzone\"], [data-slot=\"empty-actions\"] button, [data-slot=\"add-more\"] button',\r\n );\r\n (focusable ?? rootRef.current)?.focus();\r\n },\r\n open: openFilePicker,\r\n clear: () => state.handleClearAll(),\r\n }));\r\n\r\n const handleFilesInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files && e.target.files.length > 0) void state.handleFileSelect(e.target.files);\r\n e.target.value = '';\r\n };\r\n\r\n const displayError = error || state.validationError;\r\n const hasError = Boolean(displayError) || state.hasFailedUploads;\r\n const hasStatusText = Boolean(helperText || displayError);\r\n const visualState = resolveUploadDataState({\r\n disabled, hasError, isUploading: state.isUploading, isDragging, hasContent: previews.length > 0,\r\n });\r\n\r\n const dropzoneProps: HTMLAttributes<HTMLElement> & { 'data-state'?: string } = {\r\n ...dragHandlers, onPaste,\r\n role: 'button', tabIndex: disabled ? -1 : 0,\r\n 'aria-label': ui.selectFilesAria, 'aria-disabled': disabled || undefined,\r\n 'aria-required': required || undefined, 'aria-invalid': hasError || undefined,\r\n 'aria-describedby': hasStatusText ? statusTextId : undefined,\r\n 'data-state': visualState,\r\n onClick: () => { if (!disabled) openFilePicker(); },\r\n onKeyDown: (event) => {\r\n if (!disabled && (event.key === 'Enter' || event.key === ' ')) {\r\n event.preventDefault();\r\n openFilePicker();\r\n }\r\n },\r\n };\r\n\r\n const slotStylingProps = {\r\n unstyled: isUnstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty,\r\n };\r\n const hiddenInputClass = resolveSlotClass('iuk-hidden-input', isUnstyled);\r\n const hiddenInputStyle = isUnstyled ? HIDDEN_INPUT_STYLE : undefined;\r\n\r\n return (\r\n <>\r\n <div\r\n ref={rootRef} data-slot=\"multi-root\" data-state={visualState} data-unstyled={isUnstyled || undefined}\r\n className={resolveSlotClass('iuk-multi', isUnstyled, pCls?.root, cCls?.root, className)}\r\n style={resolveSlotStyle(pSty?.root, cSty?.root, style)} dir={locale === 'ar' ? 'rtl' : 'ltr'}\r\n onPaste={onPaste}\r\n onBlur={onBlur ? (e) => { if (!e.currentTarget.contains(e.relatedTarget as Node | null)) onBlur(); } : undefined}\r\n >\r\n {name && (\r\n <input type=\"hidden\" name={name} value={state.serializedFormValue} required={required} data-slot=\"form-input\" />\r\n )}\r\n\r\n {renderHeader ? (\r\n renderHeader({\r\n label, required, disabled, totalCount: previews.length,\r\n selectedCount: selectedPreviews.size, uploadingCount: uploadingPreviews.length,\r\n isUploading: state.isUploading, hasFailedUploads: state.hasFailedUploads,\r\n selectAll, clearSelection, removeSelected: state.handleRemoveSelected,\r\n retryFailed, locale, ui,\r\n })\r\n ) : (\r\n <MultiUploadHeaderAlerts\r\n label={label} labelId={labelId} inputId={inputId} required={required} disabled={disabled}\r\n totalCount={previews.length} selectedCount={selectedPreviews.size}\r\n uploadingCount={uploadingPreviews.length} missingAltCount={imagesWithoutAlt.length}\r\n isUploading={state.isUploading} hasFailedUploads={state.hasFailedUploads}\r\n infoMessage={state.infoMessage} showMissingAltWarning={state.showMissingAltWarning}\r\n uploadStats={state.uploadStats} locale={locale} translations={translations} ui={ui}\r\n onSelectAll={selectAll} onDeselectAll={clearSelection}\r\n onRemoveSelected={state.handleRemoveSelected} onRetryFailed={retryFailed} {...slotStylingProps}\r\n />\r\n )}\r\n\r\n {showQualitySelector && (\r\n <div data-slot=\"quality-selector\" className={slotClass('qualitySelector')} style={slotStyle('qualitySelector')}>\r\n <QualitySelector\r\n value={state.qualityLevel} onChange={state.setQualityLevel}\r\n preset={preset} recommendedLevel={recommendedQuality}\r\n recommendationNote={qualityNote} locale={locale}\r\n disabled={state.isUploading || disabled} unstyled={isUnstyled}\r\n />\r\n </div>\r\n )}\r\n\r\n <input\r\n id={inputId} ref={fileInputRef} type=\"file\" accept={accept} capture={capture}\r\n onChange={handleFilesInputChange} className={hiddenInputClass} style={hiddenInputStyle}\r\n disabled={disabled} multiple aria-label={ui.selectFilesAria}\r\n aria-invalid={hasError || undefined}\r\n aria-describedby={hasStatusText ? statusTextId : undefined}\r\n />\r\n <input\r\n ref={folderInputRef} type=\"file\" accept={accept} onChange={handleFilesInputChange}\r\n className={hiddenInputClass} style={hiddenInputStyle}\r\n disabled={disabled} {...FOLDER_INPUT_ATTRS} aria-label={ui.selectFolderAria}\r\n />\r\n\r\n {previews.length === 0 ? (\r\n renderEmptyDropzone ? (\r\n renderEmptyDropzone({\r\n state: visualState, isDragging, disabled, allowFolder,\r\n maxSizeMB: state.maxSizeMB, maxImages, error: displayError || undefined,\r\n openFileDialog: openFilePicker, openFolderDialog: openFolderPicker,\r\n dropzoneProps, locale, ui,\r\n })\r\n ) : (\r\n <MultiEmptyDropzone\r\n isDragging={isDragging} disabled={disabled} hasError={Boolean(displayError)}\r\n required={required} enablePaste={enablePaste}\r\n visualState={visualState} allowFolder={allowFolder} maxSizeMB={state.maxSizeMB}\r\n ui={ui} dragHandlers={dragHandlers} onPaste={onPaste}\r\n onSelectFiles={openFilePicker} onSelectFolder={openFolderPicker} {...slotStylingProps}\r\n />\r\n )\r\n ) : (\r\n <div data-slot=\"grid\" className={slotClass('grid', 'iuk-multi__grid')} style={slotStyle('grid')}>\r\n {previews.map((item, index) =>\r\n renderTile ? (\r\n <Fragment key={item.id}>\r\n {renderTile({\r\n item, index, isSelected: selectedPreviews.has(item.id), disabled,\r\n toggleSelect: () => state.toggleSelect(item.id),\r\n remove: () => state.handleRemove(item.id),\r\n cancel: () => state.handleCancelUpload(item.id),\r\n retry: () => void state.handleRetryUpload(item.id),\r\n openAltTextModal: () => state.setEditingAltTextId(item.id),\r\n setAltText: (altText) => state.handleAltTextSave(item.id, altText),\r\n setBlurColor: (hex) => state.handleColorChange(item.id, hex),\r\n locale, ui,\r\n })}\r\n </Fragment>\r\n ) : (\r\n <PreviewTile\r\n key={item.id} preview={item} onRemove={state.handleRemove}\r\n onCancel={state.handleCancelUpload}\r\n onRetry={(id) => void state.handleRetryUpload(id)}\r\n disabled={disabled} blurType={blurType} isSelected={selectedPreviews.has(item.id)}\r\n onToggleSelect={state.toggleSelect} onEditAltText={(id) => state.setEditingAltTextId(id)}\r\n onChangeAltText={state.handleAltTextSave} onChangeColor={state.handleColorChange}\r\n locale={locale} translations={translations} renderImage={renderImage}\r\n unstyled={isUnstyled} className={slotClass('tile')} style={slotStyle('tile')}\r\n />\r\n ),\r\n )}\r\n\r\n {renderAddMore ? (\r\n renderAddMore({\r\n isDragging, disabled, allowFolder,\r\n remainingCount: Math.max(0, maxImages - previews.length),\r\n openFileDialog: openFilePicker, openFolderDialog: openFolderPicker,\r\n dropzoneProps, locale, ui,\r\n })\r\n ) : (\r\n <MultiAddMoreTile\r\n isDragging={isDragging} disabled={disabled} allowFolder={allowFolder} ui={ui}\r\n dragHandlers={dragHandlers} onSelectFiles={openFilePicker} onSelectFolder={openFolderPicker}\r\n {...slotStylingProps}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n <MultiFooterSection\r\n helperText={helperText} displayError={displayError} statusTextId={statusTextId} isOpen={isOpen}\r\n hasPreviews={previews.length > 0} hasCompletedPreviews={state.completedPreviews.length > 0}\r\n isUploading={state.isUploading} disabled={disabled} requireAltText={state.requireAltText}\r\n missingAltCount={imagesWithoutAlt.length} onSave={state.handleSaveImages} ui={ui} {...slotStylingProps}\r\n />\r\n </div>\r\n\r\n {editingTarget && (\r\n <AltTextModal\r\n imageUrl={editingTarget.url} initialAltText={editingTarget.altText}\r\n onSave={(nextAlt) => state.handleAltTextSave(editingTarget.id, nextAlt)}\r\n onClose={() => state.setEditingAltTextId(null)}\r\n locale={locale} translations={translations} renderImage={renderImage} unstyled={isUnstyled}\r\n />\r\n )}\r\n\r\n {typeof document !== 'undefined' && dockItems.length > 0 &&\r\n createPortal(\r\n <UploadProgressPanel\r\n items={dockItems} completedCount={state.uploadStats.completed}\r\n totalCount={state.uploadStats.total} locale={locale}\r\n translations={translations} renderImage={renderImage} unstyled={isUnstyled}\r\n />,\r\n document.body,\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport const MultiImageUpload = forwardRef(MultiImageUploadInner) as <\r\n TPreset extends string = UploadPresetName,\r\n>(\r\n props: MultiImageUploadProps<TPreset> & { ref?: Ref<ImageUploadHandle> },\r\n) => ReactElement | null;\r\n\r\nexport default MultiImageUpload;\r\n","import {\r\n FolderOpenIcon as FolderOpen,\r\n ImagePlusIcon as ImagePlus,\r\n UploadIcon as Upload,\r\n} from '../icons';\r\nimport type { DragEvent } from 'react';\r\nimport type { UploadTranslations } from '../i18n';\r\nimport type {\r\n MultiUploadClassNames,\r\n MultiUploadSlot,\r\n MultiUploadStyles,\r\n UploadVisualState,\r\n} from '../styling';\r\nimport {\r\n cx,\r\n resolveSlotClass,\r\n resolveSlotStyle,\r\n resolveUploadDataState,\r\n} from '../utils/slotStyles';\r\n\r\nexport interface DropzoneDragHandlers {\r\n onDragEnter: (e: DragEvent) => void;\r\n onDragLeave: (e: DragEvent) => void;\r\n onDragOver: (e: DragEvent) => void;\r\n onDrop: (e: DragEvent) => void;\r\n}\r\n\r\nexport interface MultiDropzoneSlotProps {\r\n unstyled?: boolean;\r\n providerClassNames?: MultiUploadClassNames;\r\n classNames?: MultiUploadClassNames;\r\n providerStyles?: MultiUploadStyles;\r\n styles?: MultiUploadStyles;\r\n}\r\n\r\nexport interface MultiEmptyDropzoneProps extends MultiDropzoneSlotProps {\r\n isDragging: boolean;\r\n disabled?: boolean;\r\n hasError?: boolean;\r\n required?: boolean;\r\n enablePaste?: boolean;\r\n visualState?: UploadVisualState;\r\n allowFolder?: boolean;\r\n maxSizeMB: number;\r\n ui: UploadTranslations;\r\n dragHandlers: DropzoneDragHandlers;\r\n onPaste?: (e: React.ClipboardEvent<HTMLElement>) => void;\r\n onSelectFiles: () => void;\r\n onSelectFolder: () => void;\r\n}\r\n\r\nexport function MultiEmptyDropzone({\r\n isDragging,\r\n disabled = false,\r\n hasError = false,\r\n required = false,\r\n enablePaste = true,\r\n visualState: propVisualState,\r\n allowFolder = true,\r\n maxSizeMB,\r\n ui,\r\n dragHandlers,\r\n onPaste,\r\n onSelectFiles,\r\n onSelectFolder,\r\n unstyled,\r\n providerClassNames: pCls,\r\n classNames: cCls,\r\n providerStyles: pSty,\r\n styles: cSty,\r\n}: MultiEmptyDropzoneProps) {\r\n const visualState =\r\n propVisualState ?? resolveUploadDataState({ disabled, hasError, isDragging });\r\n\r\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, pCls?.[slot], cCls?.[slot]);\r\n const slotStyle = (slot: MultiUploadSlot) =>\r\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\r\n\r\n const rootClassName = resolveSlotClass(\r\n cx(\r\n 'iuk-multi__empty',\r\n isDragging && 'iuk-multi__empty--dragging',\r\n disabled && 'iuk-multi__empty--disabled',\r\n hasError && 'iuk-multi__empty--error',\r\n ),\r\n unstyled,\r\n pCls?.emptyDropzone, cCls?.emptyDropzone,\r\n isDragging && pCls?.emptyDropzoneDragging, isDragging && cCls?.emptyDropzoneDragging,\r\n disabled && pCls?.emptyDropzoneDisabled, disabled && cCls?.emptyDropzoneDisabled,\r\n hasError && pCls?.emptyDropzoneError, hasError && cCls?.emptyDropzoneError,\r\n );\r\n\r\n const rootStyle = resolveSlotStyle(\r\n pSty?.emptyDropzone, cSty?.emptyDropzone,\r\n isDragging ? pSty?.emptyDropzoneDragging : undefined,\r\n isDragging ? cSty?.emptyDropzoneDragging : undefined,\r\n disabled ? pSty?.emptyDropzoneDisabled : undefined,\r\n disabled ? cSty?.emptyDropzoneDisabled : undefined,\r\n hasError ? pSty?.emptyDropzoneError : undefined,\r\n hasError ? cSty?.emptyDropzoneError : undefined,\r\n );\r\n\r\n return (\r\n <div\r\n data-slot=\"empty-dropzone\"\r\n data-state={visualState}\r\n data-dragging={isDragging || undefined}\r\n data-disabled={disabled || undefined}\r\n data-error={hasError || undefined}\r\n tabIndex={disabled ? -1 : 0}\r\n aria-required={required || undefined}\r\n aria-invalid={hasError || undefined}\r\n className={rootClassName}\r\n style={rootStyle}\r\n onPaste={onPaste}\r\n {...dragHandlers}\r\n >\r\n <div className={resolveSlotClass('iuk-dropzone__prompt', unstyled)}>\r\n <div className={resolveSlotClass('iuk-dropzone__icon', unstyled)}>\r\n <ImagePlus size={40} strokeWidth={1.5} />\r\n </div>\r\n <h3\r\n data-slot=\"empty-title\"\r\n className={slotClass('emptyTitle', 'iuk-multi__title')}\r\n style={slotStyle('emptyTitle')}\r\n >\r\n {isDragging ? ui.dropImagesHere : ui.uploadImages}\r\n </h3>\r\n <p\r\n data-slot=\"empty-hint\"\r\n className={slotClass('emptyHint', 'iuk-dropzone__hint')}\r\n style={slotStyle('emptyHint')}\r\n >\r\n {isDragging\r\n ? ui.releaseToUpload\r\n : `${ui.dragDropOrChoose}${enablePaste ? ` (${ui.pasteHint})` : ''}`}\r\n </p>\r\n\r\n {!isDragging && (\r\n <div\r\n data-slot=\"empty-actions\"\r\n className={slotClass('emptyActions', 'iuk-multi__btn-row')}\r\n style={slotStyle('emptyActions')}\r\n >\r\n <button\r\n type=\"button\"\r\n onClick={onSelectFiles}\r\n className={slotClass('primaryButton', 'iuk-btn iuk-btn--primary')}\r\n style={slotStyle('primaryButton')}\r\n disabled={disabled}\r\n >\r\n <Upload size={16} />\r\n <span>{ui.selectFiles}</span>\r\n </button>\r\n {allowFolder && (\r\n <button\r\n type=\"button\"\r\n onClick={onSelectFolder}\r\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary')}\r\n style={slotStyle('secondaryButton')}\r\n disabled={disabled}\r\n >\r\n <FolderOpen size={16} />\r\n <span>{ui.selectFolder}</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isDragging && (\r\n <p\r\n data-slot=\"empty-subtext\"\r\n className={slotClass('emptySubtext', 'iuk-multi__subtext')}\r\n style={slotStyle('emptySubtext')}\r\n >\r\n {ui.supportsFormats} •{' '}\r\n {ui.maxPerFile.replace('{size}', String(maxSizeMB))}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport interface MultiAddMoreTileProps extends MultiDropzoneSlotProps {\r\n isDragging: boolean;\r\n disabled?: boolean;\r\n allowFolder?: boolean;\r\n ui: UploadTranslations;\r\n dragHandlers: DropzoneDragHandlers;\r\n onSelectFiles: () => void;\r\n onSelectFolder: () => void;\r\n}\r\n\r\nexport function MultiAddMoreTile({\r\n isDragging,\r\n disabled = false,\r\n allowFolder = true,\r\n ui,\r\n dragHandlers,\r\n onSelectFiles,\r\n onSelectFolder,\r\n unstyled,\r\n providerClassNames: pCls,\r\n classNames: cCls,\r\n providerStyles: pSty,\r\n styles: cSty,\r\n}: MultiAddMoreTileProps) {\r\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, pCls?.[slot], cCls?.[slot]);\r\n const slotStyle = (slot: MultiUploadSlot) =>\r\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\r\n\r\n const rootClassName = resolveSlotClass(\r\n cx(\r\n 'iuk-tile iuk-tile--add-more',\r\n isDragging && 'iuk-tile--dragging',\r\n disabled && 'iuk-tile--disabled',\r\n ),\r\n unstyled,\r\n pCls?.addMoreTile, cCls?.addMoreTile,\r\n isDragging && pCls?.addMoreTileDragging, isDragging && cCls?.addMoreTileDragging,\r\n );\r\n\r\n const rootStyle = resolveSlotStyle(\r\n pSty?.addMoreTile, cSty?.addMoreTile,\r\n isDragging ? pSty?.addMoreTileDragging : undefined,\r\n isDragging ? cSty?.addMoreTileDragging : undefined,\r\n );\r\n\r\n return (\r\n <div\r\n data-slot=\"add-more\"\r\n data-dragging={isDragging || undefined}\r\n data-disabled={disabled || undefined}\r\n className={rootClassName}\r\n style={rootStyle}\r\n {...dragHandlers}\r\n >\r\n <div\r\n data-slot=\"add-more-content\"\r\n className={slotClass('addMoreContent', 'iuk-tile__add-content')}\r\n style={slotStyle('addMoreContent')}\r\n >\r\n <ImagePlus size={28} strokeWidth={1.5} />\r\n <p>{isDragging ? ui.dropHere : ui.addMore}</p>\r\n {!isDragging && (\r\n <div\r\n data-slot=\"add-more-actions\"\r\n className={slotClass('addMoreActions', 'iuk-tile__add-btns')}\r\n style={slotStyle('addMoreActions')}\r\n >\r\n <button\r\n type=\"button\"\r\n onClick={onSelectFiles}\r\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\r\n style={slotStyle('secondaryButton')}\r\n disabled={disabled}\r\n >\r\n <Upload size={13} />\r\n <span>{ui.files}</span>\r\n </button>\r\n {allowFolder && (\r\n <button\r\n type=\"button\"\r\n onClick={onSelectFolder}\r\n className={slotClass('secondaryButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\r\n style={slotStyle('secondaryButton')}\r\n disabled={disabled}\r\n >\r\n <FolderOpen size={13} />\r\n <span>{ui.folder}</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n AlertTriangleIcon as AlertTriangle,\r\n CheckCircleIcon as CheckCircle2,\r\n LoaderIcon as Loader2,\r\n SaveIcon as Save,\r\n TrashIcon as Trash2,\r\n XCircleIcon as XCircle,\r\n} from '../icons';\r\nimport type { MultiUploadStats } from '../hooks/useMultiImageState';\r\nimport {\r\n formatNeedsAltMessage,\r\n formatUploadingCount,\r\n type UploadLocale,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport type {\r\n MultiUploadClassNames, MultiUploadSlot, MultiUploadStyles,\r\n} from '../styling';\r\nimport { cx, resolveSlotClass, resolveSlotStyle } from '../utils/slotStyles';\r\nimport { SaveButton } from './SaveButton';\r\n\r\nexport interface MultiSlotStylingProps {\r\n unstyled?: boolean;\r\n providerClassNames?: MultiUploadClassNames;\r\n classNames?: MultiUploadClassNames;\r\n providerStyles?: MultiUploadStyles;\r\n styles?: MultiUploadStyles;\r\n}\r\n\r\nexport interface MultiUploadHeaderAlertsProps extends MultiSlotStylingProps {\r\n label?: string;\r\n labelId?: string;\r\n inputId?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n totalCount: number;\r\n selectedCount: number;\r\n uploadingCount: number;\r\n missingAltCount: number;\r\n isUploading: boolean;\r\n hasFailedUploads: boolean;\r\n infoMessage: string;\r\n showMissingAltWarning: boolean;\r\n uploadStats: MultiUploadStats;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n ui: UploadTranslations;\r\n onSelectAll: () => void;\r\n onDeselectAll: () => void;\r\n onRemoveSelected: () => void;\r\n onRetryFailed: () => void;\r\n}\r\n\r\nexport function MultiUploadHeaderAlerts({\r\n label, labelId, inputId, required = false, disabled = false,\r\n totalCount, selectedCount, uploadingCount, missingAltCount,\r\n isUploading, hasFailedUploads, infoMessage, showMissingAltWarning,\r\n uploadStats, locale = 'en', translations, ui,\r\n onSelectAll, onDeselectAll, onRemoveSelected, onRetryFailed,\r\n unstyled, providerClassNames, classNames, providerStyles, styles,\r\n}: MultiUploadHeaderAlertsProps) {\r\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\r\n const slotStyle = (slot: MultiUploadSlot) =>\r\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\r\n\r\n return (\r\n <>\r\n <div data-slot=\"header\" className={slotClass('header', 'iuk-multi__header')} style={slotStyle('header')}>\r\n {(label || ui.uploadImages) && (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n data-slot=\"label\"\r\n className={slotClass('label', 'iuk-label')}\r\n style={slotStyle('label')}\r\n >\r\n <span>{label || ui.uploadImages}</span>\r\n {required && <span className={resolveSlotClass('iuk-required', unstyled)}>*</span>}\r\n {totalCount > 0 && (\r\n <span data-slot=\"count\" className={slotClass('count', 'iuk-multi__count')} style={slotStyle('count')}>\r\n ({totalCount})\r\n </span>\r\n )}\r\n </label>\r\n )}\r\n\r\n {totalCount > 0 && (\r\n <div data-slot=\"bulk-actions\" className={slotClass('bulkActions', 'iuk-multi__bulk')} style={slotStyle('bulkActions')}>\r\n {selectedCount === 0 ? (\r\n <button\r\n type=\"button\" onClick={onSelectAll} disabled={disabled}\r\n className={slotClass('bulkButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\r\n style={slotStyle('bulkButton')}\r\n >\r\n {ui.selectAll}\r\n </button>\r\n ) : (\r\n <>\r\n <button\r\n type=\"button\" onClick={onDeselectAll} disabled={disabled}\r\n className={slotClass('bulkButton', 'iuk-btn iuk-btn--secondary iuk-btn--sm')}\r\n style={slotStyle('bulkButton')}\r\n >\r\n {ui.deselectAll} ({selectedCount})\r\n </button>\r\n <button\r\n type=\"button\" onClick={onRemoveSelected} disabled={disabled}\r\n className={slotClass('bulkDangerButton', 'iuk-btn iuk-btn--danger iuk-btn--sm')}\r\n style={slotStyle('bulkDangerButton')}\r\n >\r\n <Trash2 size={14} />\r\n <span>{ui.removeSelected}</span>\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {isUploading && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--info')}\r\n style={slotStyle('alert')}\r\n >\r\n <span className={resolveSlotClass('iuk-alert__row', unstyled)}>\r\n <Loader2 size={16} className={resolveSlotClass('iuk-spin', unstyled)} />\r\n <span>{formatUploadingCount(ui, uploadingCount, locale, translations)}...</span>\r\n </span>\r\n {uploadStats.total > 0 && (\r\n <strong>\r\n {uploadStats.completed + uploadStats.failed} / {uploadStats.total}\r\n </strong>\r\n )}\r\n </div>\r\n )}\r\n\r\n {hasFailedUploads && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--error')}\r\n style={slotStyle('alert')}\r\n >\r\n <XCircle size={16} />\r\n <span>\r\n {ui.someUploadsFailed}{' '}\r\n <button\r\n type=\"button\"\r\n onClick={onRetryFailed}\r\n disabled={isUploading || disabled}\r\n className={resolveSlotClass('iuk-link-btn', unstyled)}\r\n >\r\n {ui.retryFailedUploads}\r\n </button>\r\n </span>\r\n </div>\r\n )}\r\n\r\n {infoMessage && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"status\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--success')}\r\n style={slotStyle('alert')}\r\n >\r\n <CheckCircle2 size={16} />\r\n <span>{infoMessage}</span>\r\n </div>\r\n )}\r\n\r\n {showMissingAltWarning && missingAltCount > 0 && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--warning')}\r\n style={slotStyle('alert')}\r\n >\r\n <AlertTriangle size={16} />\r\n <span>{formatNeedsAltMessage(ui, missingAltCount, locale)}</span>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport interface MultiFooterSectionProps extends MultiSlotStylingProps {\r\n helperText?: string;\r\n displayError?: string;\r\n statusTextId?: string;\r\n isOpen?: boolean;\r\n hasPreviews: boolean;\r\n hasCompletedPreviews: boolean;\r\n isUploading: boolean;\r\n disabled: boolean;\r\n requireAltText: boolean;\r\n missingAltCount: number;\r\n onSave: () => void;\r\n ui: UploadTranslations;\r\n}\r\n\r\nexport function MultiFooterSection({\r\n helperText, displayError, statusTextId, isOpen, hasPreviews, hasCompletedPreviews,\r\n isUploading, disabled, requireAltText, missingAltCount, onSave, ui,\r\n unstyled, providerClassNames, classNames, providerStyles, styles,\r\n}: MultiFooterSectionProps) {\r\n const slotClass = (slot: MultiUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\r\n const slotStyle = (slot: MultiUploadSlot) =>\r\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\r\n\r\n return (\r\n <>\r\n {(helperText || displayError) && (\r\n <p\r\n id={statusTextId}\r\n role={displayError ? 'alert' : undefined}\r\n data-slot={displayError ? 'error-text' : 'helper-text'}\r\n className={resolveSlotClass(\r\n cx('iuk-helper-text', Boolean(displayError) && 'iuk-helper-text--error'),\r\n unstyled,\r\n providerClassNames?.helperText, classNames?.helperText,\r\n Boolean(displayError) && providerClassNames?.errorText,\r\n Boolean(displayError) && classNames?.errorText,\r\n )}\r\n style={resolveSlotStyle(\r\n providerStyles?.helperText, styles?.helperText,\r\n displayError ? providerStyles?.errorText : undefined,\r\n displayError ? styles?.errorText : undefined,\r\n )}\r\n >\r\n {displayError || helperText}\r\n </p>\r\n )}\r\n\r\n {isOpen && hasPreviews && (\r\n <div data-slot=\"commit-bar\" className={slotClass('commitBar', 'iuk-commit-bar')} style={slotStyle('commitBar')}>\r\n {requireAltText && missingAltCount > 0 && (\r\n <div className={resolveSlotClass('iuk-badge iuk-badge--warning', unstyled)}>\r\n <AlertTriangle size={13} />\r\n <span>{ui.withoutAltText.replace('{count}', String(missingAltCount))}</span>\r\n </div>\r\n )}\r\n <SaveButton\r\n unstyled={unstyled}\r\n className={slotClass('saveButton')}\r\n style={slotStyle('saveButton')}\r\n onClick={onSave}\r\n disabled={\r\n isUploading || disabled || !hasCompletedPreviews ||\r\n (requireAltText && missingAltCount > 0)\r\n }\r\n icon={<Save size={16} />}\r\n >\r\n {ui.saveImages}\r\n </SaveButton>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import {\r\n CheckCircleIcon as CheckCircle2,\r\n LoaderIcon as Loader2,\r\n PaletteIcon as Palette,\r\n TypeIcon,\r\n XIcon as X,\r\n XCircleIcon as XCircle,\r\n} from '../icons';\r\nimport { type CSSProperties, useMemo, useState } from 'react';\r\nimport type { BlurPlaceholderType } from '../../blur/types';\r\nimport type { UploadLocale } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useBlurDataURL } from '../hooks/useBlurService';\r\nimport {\r\n normalizeUploadLocale,\r\n resolveTranslations,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport type { CustomImageRenderer, ImagePreview } from '../types';\r\nimport { appendCacheBuster } from '../utils/sessionMetaCache';\r\nimport { cx, resolveSlotClass, resolveUploadDataState } from '../utils/slotStyles';\r\nimport { BlurImage } from './BlurImage';\r\nimport { BlurVisualizationModal } from './BlurVisualizationModal';\r\n\r\nexport interface PreviewTileProps {\r\n preview: ImagePreview;\r\n onRemove: (id: string) => void;\r\n onCancel?: (id: string) => void;\r\n onRetry?: (id: string) => void;\r\n disabled?: boolean;\r\n blurType?: BlurPlaceholderType;\r\n isSelected?: boolean;\r\n onToggleSelect?: (id: string) => void;\r\n onEditAltText?: (id: string) => void;\r\n showCheckbox?: boolean;\r\n onAdjustColor?: (id: string) => void;\r\n onChangeColor?: (id: string, color: string) => void;\r\n onChangeAltText?: (id: string, altText: string) => void;\r\n appendCacheBuster?: boolean;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n renderImage?: CustomImageRenderer;\r\n unstyled?: boolean;\r\n className?: string;\r\n style?: CSSProperties;\r\n}\r\n\r\nexport function PreviewTile({\r\n preview, onRemove, onCancel, onRetry, disabled = false, blurType = 'card', isSelected = false,\r\n onToggleSelect, onEditAltText, showCheckbox = true, onAdjustColor,\r\n onChangeColor, onChangeAltText, appendCacheBuster: appendBuster = false,\r\n locale: propLocale, translations, renderImage,\r\n unstyled: propUnstyled, className, style,\r\n}: PreviewTileProps) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = propUnstyled ?? ctx.unstyled;\r\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\r\n const ui = resolveTranslations(locale, translations || ctx.translations);\r\n const [showBlurModal, setShowBlurModal] = useState(false);\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n const isSvg = Boolean(\r\n preview.url?.toLowerCase().includes('.svg') ||\r\n preview.data?.format === 'svg' ||\r\n preview.url?.includes('image/svg+xml'),\r\n );\r\n\r\n const displayUrl = useMemo(\r\n () =>\r\n appendCacheBuster(preview.url, {\r\n enabled: appendBuster,\r\n token: preview.data?.contentHash || preview.data?.uploadedAt,\r\n }),\r\n [preview.url, preview.data?.contentHash, preview.data?.uploadedAt, appendBuster],\r\n );\r\n\r\n const fallbackBlurDataURL = useBlurDataURL(preview.url, { type: blurType, size: 'small' });\r\n const actualBlurDataUrl = preview.data?.blurDataUrl || fallbackBlurDataURL;\r\n const actualBlurColor = preview.blurColor || preview.data?.blurColor;\r\n\r\n const isUploading = Boolean(preview.isUploading);\r\n const hasError = Boolean(preview.error);\r\n const visualState = resolveUploadDataState({\r\n disabled, hasError, isUploading, hasContent: true,\r\n });\r\n const isSuccess = Boolean(\r\n !isUploading && !hasError && preview.originalSize && preview.optimizedSize,\r\n );\r\n const reductionPercent =\r\n isSuccess && preview.originalSize && preview.optimizedSize\r\n ? Math.round(\r\n ((preview.originalSize - preview.optimizedSize) / preview.originalSize) * 100,\r\n )\r\n : 0;\r\n\r\n return (\r\n <div\r\n data-slot=\"tile\"\r\n data-state={visualState}\r\n data-selected={isSelected || undefined}\r\n data-uploading={isUploading || undefined}\r\n data-error={hasError || undefined}\r\n className={resolveSlotClass(\r\n cx('iuk-tile', isSelected && 'iuk-tile--selected', hasError && 'iuk-tile--error'),\r\n isUnstyled,\r\n className,\r\n )}\r\n style={style}\r\n onClick={() => onToggleSelect && !disabled && onToggleSelect(preview.id)}\r\n >\r\n <div data-slot=\"tile-media\" className={cls('iuk-tile__media')}>\r\n <BlurImage\r\n src={displayUrl}\r\n alt={preview.altText || ui.previewAlt}\r\n blurDataUrl={!isSvg ? actualBlurDataUrl : undefined}\r\n blurColor={actualBlurColor}\r\n blurHash={preview.data?.blurHash}\r\n objectFit={isSvg ? 'contain' : 'cover'}\r\n style={isSvg ? { padding: '8px' } : undefined}\r\n renderImage={renderImage}\r\n />\r\n\r\n {showCheckbox && !disabled && !isUploading && onToggleSelect && (\r\n <div\r\n data-slot=\"tile-checkbox\"\r\n className={cls('iuk-tile__checkbox')}\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={isSelected}\r\n onChange={() => onToggleSelect(preview.id)}\r\n aria-label={ui.selectImageAria}\r\n />\r\n </div>\r\n )}\r\n\r\n {!disabled && onEditAltText && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"tile-alt-btn\"\r\n className={cls(\r\n cx(\r\n 'iuk-tile__action iuk-tile__action--alt',\r\n Boolean(preview.altText) && 'iuk-tile__action--has-alt',\r\n ),\r\n )}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onEditAltText(preview.id);\r\n }}\r\n aria-label={preview.altText ? ui.editAltTextAria : ui.addAltTextAria}\r\n title={\r\n preview.altText\r\n ? ui.editPrefix.replace('{title}', preview.altText)\r\n : ui.addDescriptionForA11y\r\n }\r\n >\r\n {preview.altText ? <CheckCircle2 size={14} /> : <TypeIcon size={14} />}\r\n </button>\r\n )}\r\n\r\n {!disabled && !isUploading && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"tile-blur-btn\"\r\n className={cls('iuk-tile__action iuk-tile__action--blur')}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (onAdjustColor) onAdjustColor(preview.id);\r\n else setShowBlurModal(true);\r\n }}\r\n aria-label={ui.adjustBlurColorAria}\r\n title={ui.adjustBlurColorTitle}\r\n >\r\n <Palette size={14} />\r\n </button>\r\n )}\r\n\r\n {!disabled && !isUploading && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"tile-remove-btn\"\r\n className={cls('iuk-tile__action iuk-tile__action--remove')}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onRemove(preview.id);\r\n }}\r\n aria-label={ui.removeImageAria}\r\n >\r\n <X size={15} />\r\n </button>\r\n )}\r\n\r\n {isUploading && (\r\n <div data-slot=\"tile-overlay\" className={cls('iuk-tile__overlay')}>\r\n <Loader2 size={24} className={cls('iuk-spin')} />\r\n <p className={cls('iuk-tile__status')}>\r\n {preview.uploadMessage || `${ui.uploading}...`}\r\n </p>\r\n {preview.progress !== undefined && preview.progress > 0 && (\r\n <div\r\n role=\"progressbar\"\r\n aria-valuenow={Math.round(preview.progress)}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={ui.uploading}\r\n className={cls('iuk-progress-bar')}\r\n >\r\n <div\r\n className={cls('iuk-progress-bar__fill')}\r\n style={{ width: `${preview.progress}%` }}\r\n />\r\n </div>\r\n )}\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"tile-cancel\"\r\n className={cls('iuk-btn iuk-btn--secondary iuk-btn--sm iuk-tile__cancel-btn')}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n (onCancel ?? onRemove)(preview.id);\r\n }}\r\n aria-label={ui.cancelUpload}\r\n >\r\n <X size={13} />\r\n <span>{ui.cancelUpload}</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {isSuccess && (\r\n <div data-slot=\"tile-badge\" className={cls('iuk-tile__badge iuk-tile__badge--success')}>\r\n <CheckCircle2 size={13} />\r\n {reductionPercent > 0 && <span>-{reductionPercent}%</span>}\r\n </div>\r\n )}\r\n\r\n {!disabled && !isUploading && !hasError && actualBlurColor && (\r\n <div data-slot=\"tile-color-badge\" className={cls('iuk-tile__badge iuk-tile__badge--color')}>\r\n <span className={cls('iuk-tile__color-dot')} style={{ backgroundColor: actualBlurColor }} />\r\n <code>{actualBlurColor.toUpperCase()}</code>\r\n </div>\r\n )}\r\n\r\n {hasError && (\r\n <div\r\n data-slot=\"tile-error\"\r\n role=\"alert\"\r\n className={cls('iuk-tile__overlay iuk-tile__overlay--error')}\r\n >\r\n <XCircle size={22} />\r\n <p>{preview.error}</p>\r\n {!disabled && onRetry && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"tile-retry\"\r\n className={cls('iuk-btn iuk-btn--secondary iuk-btn--sm iuk-tile__retry-btn')}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onRetry(preview.id);\r\n }}\r\n aria-label={ui.retryUpload}\r\n >\r\n <span>{ui.retryUpload}</span>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <BlurVisualizationModal\r\n isOpen={showBlurModal}\r\n onClose={() => setShowBlurModal(false)}\r\n imageUrl={preview.url}\r\n blurDataUrl={actualBlurDataUrl}\r\n blurColor={actualBlurColor}\r\n detectedColor={preview.data?.blurColor}\r\n altText={preview.altText}\r\n originalSize={preview.originalSize}\r\n optimizedSize={preview.optimizedSize}\r\n locale={locale}\r\n translations={translations}\r\n renderImage={renderImage}\r\n unstyled={isUnstyled}\r\n onChangeColor={(hex) => onChangeColor?.(preview.id, hex)}\r\n onUseDetectedColor={\r\n onChangeColor && preview.data?.blurColor\r\n ? () => onChangeColor(preview.id, preview.data!.blurColor!)\r\n : undefined\r\n }\r\n onChangeAltText={(nextAlt) => onChangeAltText?.(preview.id, nextAlt)}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PreviewTile;\r\n","import { CheckIcon as Check, InfoIcon as Info, ZapIcon as Zap } from '../icons';\r\nimport type { KeyboardEvent } from 'react';\r\nimport type {\r\n QualityLevel,\r\n StandardPresetName,\r\n UploadLocale,\r\n} from '../../types';\r\nimport { QUALITY_PRESETS, STANDARD_PRESETS } from '../../types';\r\nimport { estimateOutputSize } from '../../utils/formatters';\r\nimport {\r\n normalizeUploadLocale,\r\n resolveTranslations,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport { cx, resolveSlotClass } from '../utils/slotStyles';\r\n\r\nfunction formatBytesCompact(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\nexport interface QualitySelectorProps {\r\n value: QualityLevel;\r\n onChange: (level: QualityLevel) => void;\r\n preset?: string;\r\n recommendedLevel?: QualityLevel;\r\n recommendationNote?: { en: string; ar?: string };\r\n originalFileSize?: number;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n disabled?: boolean;\r\n unstyled?: boolean;\r\n}\r\n\r\nexport function QualitySelector({\r\n value,\r\n onChange,\r\n preset,\r\n recommendedLevel,\r\n recommendationNote,\r\n originalFileSize,\r\n locale,\r\n translations,\r\n disabled = false,\r\n unstyled = false,\r\n}: QualitySelectorProps) {\r\n const resolvedLocale = normalizeUploadLocale(locale);\r\n const isAr = resolvedLocale === 'ar';\r\n const ui = resolveTranslations(resolvedLocale, translations);\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, unstyled);\r\n\r\n const standardPreset = preset\r\n ? STANDARD_PRESETS[preset as StandardPresetName]\r\n : undefined;\r\n\r\n const recommended: QualityLevel =\r\n recommendedLevel || standardPreset?.recommendedQualityLevel || 'high';\r\n const note = recommendationNote || standardPreset?.recommendationNote;\r\n\r\n const selected = QUALITY_PRESETS[value];\r\n const levels = Object.keys(QUALITY_PRESETS) as QualityLevel[];\r\n const estimatedSize =\r\n originalFileSize !== undefined\r\n ? estimateOutputSize(originalFileSize, value)\r\n : null;\r\n const saving = Math.round((1 - selected.compressionRatio) * 100);\r\n\r\n const handleRadioGroupKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (disabled) return;\r\n const currentIndex = Math.max(0, levels.indexOf(value));\r\n let nextIndex = -1;\r\n\r\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\r\n const step = event.key === 'ArrowRight' && isAr ? -1 : 1;\r\n nextIndex = (currentIndex + step + levels.length) % levels.length;\r\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\r\n const step = event.key === 'ArrowLeft' && isAr ? 1 : -1;\r\n nextIndex = (currentIndex + step + levels.length) % levels.length;\r\n } else if (event.key === 'Home') {\r\n nextIndex = 0;\r\n } else if (event.key === 'End') {\r\n nextIndex = levels.length - 1;\r\n }\r\n\r\n if (nextIndex >= 0) {\r\n event.preventDefault();\r\n const nextLevel = levels[nextIndex];\r\n onChange(nextLevel);\r\n const buttons = event.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"radio\"]');\r\n buttons[nextIndex]?.focus();\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n data-slot=\"quality-root\"\r\n data-unstyled={unstyled || undefined}\r\n className={cls('iuk-quality')}\r\n dir={isAr ? 'rtl' : 'ltr'}\r\n >\r\n <div className={cls('iuk-quality__header')}>\r\n <span className={cls('iuk-quality__title')}>\r\n {ui.qualityTitle}\r\n </span>\r\n <span className={cls(`iuk-quality__pill iuk-quality__pill--${value}`)}>\r\n {isAr ? selected.labelAr : selected.label} · Q{selected.value}\r\n </span>\r\n </div>\r\n\r\n <div\r\n className={cls('iuk-quality__tabs')}\r\n role=\"radiogroup\"\r\n aria-label={ui.qualityLevelAria}\r\n onKeyDown={handleRadioGroupKeyDown}\r\n >\r\n {levels.map((level) => {\r\n const item = QUALITY_PRESETS[level];\r\n const isSelected = value === level;\r\n const isRecommended = level === recommended;\r\n return (\r\n <button\r\n key={level}\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={isSelected}\r\n tabIndex={disabled ? -1 : isSelected ? 0 : -1}\r\n disabled={disabled}\r\n onClick={() => !disabled && onChange(level)}\r\n className={cls(\r\n cx(\r\n 'iuk-quality__tab',\r\n isSelected && 'iuk-quality__tab--selected',\r\n isRecommended && !isSelected && 'iuk-quality__tab--recommended',\r\n disabled && 'iuk-quality__tab--disabled',\r\n ),\r\n )}\r\n >\r\n {isSelected && (\r\n <Check size={11} strokeWidth={3} aria-hidden=\"true\" />\r\n )}\r\n <span>{isAr ? item.labelAr : item.label}</span>\r\n {isRecommended && !isSelected && (\r\n <span className={cls('iuk-quality__star')} aria-hidden=\"true\">\r\n ★\r\n </span>\r\n )}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className={cls(`iuk-quality__detail iuk-quality__detail--${value}`)}>\r\n <p className={cls('iuk-quality__desc')}>\r\n {isAr ? selected.descriptionAr : selected.description}\r\n </p>\r\n <div className={cls('iuk-quality__meta')}>\r\n <span className={cls('iuk-quality__tag')}>Q{selected.value}</span>\r\n {estimatedSize !== null && (\r\n <>\r\n <span className={cls('iuk-quality__dot')} aria-hidden=\"true\" />\r\n <Zap size={11} aria-hidden=\"true\" />\r\n <span>~{formatBytesCompact(estimatedSize)}</span>\r\n <span className={cls('iuk-quality__dot')} aria-hidden=\"true\" />\r\n <span className={cls('iuk-quality__saving')}>\r\n {saving}% {ui.qualitySaved}\r\n </span>\r\n </>\r\n )}\r\n {value === recommended && (\r\n <span className={cls('iuk-quality__rec-badge')}>\r\n ⭐ {ui.qualityRecommended}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {note && (\r\n <div className={cls('iuk-quality__note')}>\r\n <Info size={12} aria-hidden=\"true\" className={cls('iuk-quality__note-icon')} />\r\n <span>{isAr ? note.ar || note.en : note.en}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default QualitySelector;\r\n","import {\r\n ChevronDownIcon as ChevronDown,\r\n ChevronUpIcon as ChevronUp,\r\n LoaderIcon as Loader2,\r\n} from '../icons';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport type { UploadLocale } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport {\r\n formatUploadingCount,\r\n normalizeUploadLocale,\r\n resolveTranslations,\r\n type UploadTranslations,\r\n} from '../i18n';\r\nimport type { CustomImageRenderer, ImagePreview } from '../types';\r\nimport { cx, resolveSlotClass } from '../utils/slotStyles';\r\nimport { BlurImage } from './BlurImage';\r\n\r\nconst PROGRESS_PANEL_DISMISS_DELAY_MS = 2500;\r\n\r\nexport interface UploadItem {\r\n id: string;\r\n url: string;\r\n fileName?: string;\r\n message?: string;\r\n progress?: number;\r\n}\r\n\r\nexport function useRetainedProgressItems(\r\n uploadingPreviews: ImagePreview[],\r\n previews: ImagePreview[],\r\n): UploadItem[] {\r\n const [retainedItems, setRetainedItems] = useState<UploadItem[] | null>(null);\r\n const activeBatchRef = useRef<Map<string, UploadItem>>(new Map());\r\n const dismissTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const prevUploadingCountRef = useRef(0);\r\n const isUploading = uploadingPreviews.length > 0;\r\n\r\n useEffect(() => {\r\n if (isUploading) {\r\n if (dismissTimerRef.current) {\r\n clearTimeout(dismissTimerRef.current);\r\n dismissTimerRef.current = null;\r\n activeBatchRef.current.clear();\r\n }\r\n setRetainedItems(null);\r\n for (const p of uploadingPreviews) {\r\n activeBatchRef.current.set(p.id, {\r\n id: p.id,\r\n url: p.url,\r\n fileName: p.fileName || p.file?.name,\r\n message: p.uploadMessage || undefined,\r\n progress: p.progress,\r\n });\r\n }\r\n } else if (prevUploadingCountRef.current > 0 && activeBatchRef.current.size > 0) {\r\n const completed: UploadItem[] = Array.from(activeBatchRef.current.values()).map((it) => {\r\n const found = previews.find((p) => p.id === it.id);\r\n return {\r\n ...it,\r\n progress: found?.progress ?? 100,\r\n message: found?.error ? found.error : (found?.uploadMessage || undefined),\r\n };\r\n });\r\n setRetainedItems(completed);\r\n dismissTimerRef.current = setTimeout(() => {\r\n setRetainedItems(null);\r\n activeBatchRef.current.clear();\r\n dismissTimerRef.current = null;\r\n }, PROGRESS_PANEL_DISMISS_DELAY_MS);\r\n }\r\n prevUploadingCountRef.current = uploadingPreviews.length;\r\n }, [isUploading, uploadingPreviews, previews]);\r\n\r\n useEffect(() => () => {\r\n if (dismissTimerRef.current) clearTimeout(dismissTimerRef.current);\r\n }, []);\r\n\r\n return isUploading\r\n ? uploadingPreviews.map((p) => ({\r\n id: p.id,\r\n url: p.url,\r\n fileName: p.fileName || p.file?.name,\r\n message: p.uploadMessage || undefined,\r\n progress: p.progress,\r\n }))\r\n : (retainedItems ?? []);\r\n}\r\n\r\nexport interface UploadProgressPanelProps {\r\n items: UploadItem[];\r\n completedCount: number;\r\n totalCount: number;\r\n locale?: UploadLocale;\r\n translations?: Partial<UploadTranslations>;\r\n renderImage?: CustomImageRenderer;\r\n unstyled?: boolean;\r\n}\r\n\r\nexport function UploadProgressPanel({\r\n items,\r\n completedCount,\r\n totalCount,\r\n locale: propLocale,\r\n translations,\r\n renderImage,\r\n unstyled: propUnstyled,\r\n}: UploadProgressPanelProps) {\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = propUnstyled ?? ctx.unstyled;\r\n const locale = normalizeUploadLocale(propLocale || ctx.locale);\r\n const effectiveOverrides = translations || ctx.translations;\r\n const ui = resolveTranslations(locale, effectiveOverrides);\r\n const [isMinimized, setIsMinimized] = useState(false);\r\n const uploadingCount = items.length;\r\n const cls = (defaultClass: string) => resolveSlotClass(defaultClass, isUnstyled);\r\n\r\n if (uploadingCount === 0) return null;\r\n\r\n return (\r\n <div\r\n data-upload-progress-dock\r\n data-slot=\"progress-dock\"\r\n data-unstyled={isUnstyled || undefined}\r\n dir={locale === 'ar' ? 'rtl' : 'ltr'}\r\n className={cls(\r\n cx('iuk-progress-dock', isMinimized && 'iuk-progress-dock--collapsed'),\r\n )}\r\n >\r\n <div\r\n className={cls(\r\n cx('iuk-progress-panel', isMinimized && 'iuk-progress-panel--minimized'),\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n className={cls('iuk-progress-panel__header')}\r\n aria-expanded={!isMinimized}\r\n onClick={() => setIsMinimized((prev) => !prev)}\r\n >\r\n <span className={cls('iuk-progress-panel__title')}>\r\n <Loader2 size={16} className={cls('iuk-spin')} />\r\n <span>\r\n {formatUploadingCount(ui, uploadingCount, locale, effectiveOverrides)}\r\n </span>\r\n {totalCount > 0 && (\r\n <span className={cls('iuk-progress-panel__count')}>\r\n ({completedCount}/{totalCount})\r\n </span>\r\n )}\r\n </span>\r\n {isMinimized ? <ChevronUp size={18} /> : <ChevronDown size={18} />}\r\n </button>\r\n\r\n {!isMinimized && (\r\n <div className={cls('iuk-progress-panel__body')}>\r\n {items.map((item) => (\r\n <div key={item.id} className={cls('iuk-progress-item')}>\r\n <div className={cls('iuk-progress-item__thumb')}>\r\n <BlurImage\r\n src={item.url}\r\n alt={ui.uploadingAlt}\r\n objectFit=\"cover\"\r\n renderImage={renderImage}\r\n />\r\n </div>\r\n <div className={cls('iuk-progress-item__info')}>\r\n <div className={cls('iuk-progress-item__name')}>\r\n {item.fileName || ui.image}\r\n </div>\r\n <div className={cls('iuk-progress-item__status')}>\r\n {item.message || ui.processing}\r\n </div>\r\n {item.progress !== undefined && item.progress > 0 && (\r\n <div\r\n role=\"progressbar\"\r\n aria-valuenow={Math.round(item.progress)}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={item.fileName || ui.uploading}\r\n className={cls('iuk-progress-bar')}\r\n >\r\n <div\r\n className={cls('iuk-progress-bar__fill')}\r\n style={{ width: `${item.progress}%` }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UploadProgressPanel;\r\n","import {\r\n type ChangeEvent, type ForwardedRef, forwardRef, type HTMLAttributes,\r\n type ReactElement, type Ref, useId, useImperativeHandle, useRef,\r\n} from 'react';\r\nimport type { UploadPresetName } from '../../types';\r\nimport { useImageUploadContext } from '../context';\r\nimport { useClipboardPaste } from '../hooks/useClipboardPaste';\r\nimport { useDragAndDrop } from '../hooks/useDragAndDrop';\r\nimport { useSingleImageState } from '../hooks/useSingleImageState';\r\nimport type { SingleUploadSlot } from '../styling';\r\nimport type { ImageUploadHandle, SingleImageUploadProps } from '../types';\r\nimport {\r\n HIDDEN_INPUT_STYLE, resolveSlotClass, resolveSlotStyle, resolveUploadDataState,\r\n} from '../utils/slotStyles';\r\nimport { AltTextModal } from './AltTextModal';\r\nimport { BlurVisualizationModal } from './BlurVisualizationModal';\r\nimport { PreviewTile } from './PreviewTile';\r\nimport { QualitySelector } from './QualitySelector';\r\nimport {\r\n resolveSingleDropzoneSlot, SingleDropzoneEmptyPrompt, SingleStatusFooter,\r\n} from './SingleDropzoneContent';\r\n\r\nfunction SingleImageUploadInner<TPreset extends string = UploadPresetName>(\r\n props: SingleImageUploadProps<TPreset>,\r\n ref: ForwardedRef<ImageUploadHandle>,\r\n) {\r\n const {\r\n preset, translations, renderImage, label, error, helperText, className, style,\r\n accept = 'image/jpeg,image/png,image/webp,image/avif,image/svg+xml',\r\n disabled = false, required = false, blurType = 'card',\r\n showProgress = false, showQualitySelector = true,\r\n recommendedQuality, qualityNote, isOpen,\r\n capture, enablePaste = true, pasteTarget = 'dropzone', name, onBlur,\r\n classNames: cCls, styles: cSty, renderDropzone, renderPreview,\r\n } = props;\r\n\r\n const ctx = useImageUploadContext();\r\n const isUnstyled = props.unstyled ?? ctx.unstyled;\r\n const pCls = ctx.singleClassNames;\r\n const pSty = ctx.singleStyles;\r\n\r\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, isUnstyled, pCls?.[slot], cCls?.[slot]);\r\n const slotStyle = (slot: SingleUploadSlot) =>\r\n resolveSlotStyle(pSty?.[slot], cSty?.[slot]);\r\n\r\n const state = useSingleImageState(props);\r\n const { isDragging, dragHandlers } = useDragAndDrop({ disabled, onDrop: state.handleFileSelect });\r\n const { onPaste } = useClipboardPaste({\r\n enabled: enablePaste, pasteTarget, disabled, multiple: false,\r\n onPasteFiles: (files) => { void state.handleFileSelect(files); },\r\n });\r\n\r\n const dropzoneRef = useRef<HTMLDivElement>(null);\r\n const labelId = useId();\r\n const inputId = useId();\r\n const statusTextId = useId();\r\n\r\n const openFileDialog = () => { if (!disabled) state.fileInputRef.current?.click(); };\r\n\r\n useImperativeHandle(ref, () => ({\r\n focus: () => { dropzoneRef.current?.focus(); },\r\n open: openFileDialog,\r\n clear: () => state.handleRemoveTile(),\r\n }));\r\n\r\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n const files = event.target.files;\r\n if (files && files.length > 0) void state.handleFileSelect(files);\r\n event.target.value = '';\r\n };\r\n\r\n const displayError = error || state.validationError;\r\n const hasPreview = Boolean(state.preview);\r\n const hasError = Boolean(displayError);\r\n const hasLabel = Boolean(label || state.ui.uploadImage);\r\n const hasStatusText = Boolean(helperText || displayError);\r\n const visualState = resolveUploadDataState({\r\n disabled, hasError, isUploading: state.isUploading, isDragging, hasContent: hasPreview,\r\n });\r\n\r\n const dropzoneProps: HTMLAttributes<HTMLElement> = hasPreview\r\n ? { ...dragHandlers, onPaste, 'aria-disabled': disabled || undefined }\r\n : {\r\n ...dragHandlers, onPaste,\r\n onClick: () => { if (!disabled) openFileDialog(); },\r\n onKeyDown: (event) => {\r\n if (!disabled && (event.key === 'Enter' || event.key === ' ')) {\r\n event.preventDefault();\r\n openFileDialog();\r\n }\r\n },\r\n role: 'button', tabIndex: disabled ? -1 : 0,\r\n 'aria-label': state.ui.uploadImageAria,\r\n 'aria-labelledby': hasLabel ? labelId : undefined,\r\n 'aria-required': required || undefined,\r\n 'aria-invalid': hasError || undefined,\r\n 'aria-describedby': hasStatusText ? statusTextId : undefined,\r\n 'aria-disabled': disabled || undefined,\r\n };\r\n\r\n const slotStylingProps = {\r\n unstyled: isUnstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty,\r\n };\r\n const dropzoneSlot = resolveSingleDropzoneSlot(\r\n { isDragging, hasPreview, disabled, hasError }, slotStylingProps,\r\n );\r\n\r\n return (\r\n <div\r\n data-slot=\"single-root\" data-state={visualState} data-unstyled={isUnstyled || undefined}\r\n className={resolveSlotClass('iuk-single', isUnstyled, pCls?.root, cCls?.root, className)}\r\n style={resolveSlotStyle(pSty?.root, cSty?.root, style)}\r\n dir={state.locale === 'ar' ? 'rtl' : 'ltr'}\r\n onBlur={onBlur ? (e) => { if (!e.currentTarget.contains(e.relatedTarget as Node | null)) onBlur(); } : undefined}\r\n >\r\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" style={HIDDEN_INPUT_STYLE}>\r\n {state.liveAnnouncement}\r\n </div>\r\n\r\n {name && (\r\n <input type=\"hidden\" name={name} value={state.serializedFormValue} required={required} data-slot=\"form-input\" />\r\n )}\r\n\r\n {hasLabel && (\r\n <label id={labelId} htmlFor={inputId} data-slot=\"label\" className={slotClass('label', 'iuk-label')} style={slotStyle('label')}>\r\n <span>{label || state.ui.uploadImage}</span>\r\n {required && <span className={resolveSlotClass('iuk-required', isUnstyled)}>*</span>}\r\n </label>\r\n )}\r\n\r\n {showQualitySelector && (\r\n <div data-slot=\"quality-selector\" className={slotClass('qualitySelector')} style={slotStyle('qualitySelector')}>\r\n <QualitySelector\r\n value={state.qualityLevel} onChange={state.setQualityLevel} preset={preset}\r\n recommendedLevel={recommendedQuality} recommendationNote={qualityNote}\r\n originalFileSize={state.selectedFile?.size} locale={state.locale}\r\n disabled={disabled || state.isUploading} unstyled={isUnstyled}\r\n />\r\n </div>\r\n )}\r\n\r\n <input\r\n id={inputId} ref={state.fileInputRef} type=\"file\" accept={accept} capture={capture}\r\n onChange={handleInputChange}\r\n className={resolveSlotClass('iuk-hidden-input', isUnstyled)}\r\n style={isUnstyled ? HIDDEN_INPUT_STYLE : undefined}\r\n disabled={disabled} aria-label={state.ui.fileInputAria}\r\n aria-invalid={hasError || undefined}\r\n aria-describedby={hasStatusText ? statusTextId : undefined}\r\n />\r\n\r\n {!state.preview && renderDropzone ? (\r\n renderDropzone({\r\n state: visualState, isDragging, isUploading: state.isUploading,\r\n progress: state.progress, uploadMessage: state.uploadMessage,\r\n maxSizeMB: state.maxSizeMB, disabled, error: displayError || undefined,\r\n qualityLevel: state.qualityLevel, setQualityLevel: state.setQualityLevel,\r\n openFileDialog, dropzoneProps, locale: state.locale, ui: state.ui,\r\n })\r\n ) : (\r\n <div\r\n ref={dropzoneRef} data-slot=\"dropzone\" data-state={visualState}\r\n data-dragging={isDragging || undefined} data-uploading={state.isUploading || undefined}\r\n data-disabled={disabled || undefined} data-error={hasError || undefined}\r\n className={dropzoneSlot.className} style={dropzoneSlot.style} {...dropzoneProps}\r\n >\r\n {state.preview ? (\r\n <div\r\n data-slot=\"preview-wrap\" className={slotClass('previewWrap', 'iuk-single__preview-wrap')}\r\n style={slotStyle('previewWrap')} onClick={(event) => event.stopPropagation()}\r\n >\r\n {renderPreview ? (\r\n renderPreview({\r\n previewUrl: state.preview, uploadedData: state.uploadedData, altText: state.altText,\r\n blurColor: state.uploadedData?.blurColor ?? state.blurColor,\r\n blurDataUrl: state.blurDataUrlState || state.currentImageData?.blurDataUrl || '',\r\n isUploading: state.isUploading, progress: state.progress,\r\n uploadMessage: state.uploadMessage, sizeInfo: state.sizeInfo, disabled,\r\n openFileDialog, remove: () => state.handleRemoveTile(),\r\n cancel: () => state.handleCancelUpload(),\r\n openAltTextModal: () => state.setEditingAltText(true),\r\n openBlurInspector: () => state.setIsBlurModalOpen(true),\r\n download: state.handleDownload, locale: state.locale, ui: state.ui,\r\n })\r\n ) : (\r\n <PreviewTile\r\n preview={{\r\n id: 'single', url: state.preview, altText: state.altText,\r\n isUploading: state.isUploading, progress: state.progress,\r\n uploadMessage: state.uploadMessage || null,\r\n originalSize: state.sizeInfo?.original,\r\n optimizedSize: state.sizeInfo?.optimized ?? null,\r\n data: state.uploadedData ?? undefined,\r\n blurColor: state.uploadedData?.blurColor ?? state.blurColor,\r\n }}\r\n onRemove={() => state.handleRemoveTile()} onCancel={() => state.handleCancelUpload()}\r\n disabled={disabled} blurType={blurType} showCheckbox={false}\r\n onEditAltText={() => state.setEditingAltText(true)}\r\n onAdjustColor={() => state.setIsBlurModalOpen(true)}\r\n locale={state.locale} translations={translations} renderImage={renderImage}\r\n unstyled={isUnstyled} className={slotClass('tile')} style={slotStyle('tile')}\r\n />\r\n )}\r\n </div>\r\n ) : (\r\n <SingleDropzoneEmptyPrompt\r\n isUploading={state.isUploading} uploadMessage={state.uploadMessage}\r\n showProgress={showProgress} progress={state.progress}\r\n maxSizeMB={state.maxSizeMB} enablePaste={enablePaste} ui={state.ui} {...slotStylingProps}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n <SingleStatusFooter\r\n showMissingAltWarning={state.showMissingAltWarning}\r\n hasPreview={hasPreview} hasAltText={Boolean(state.altText?.trim())}\r\n uploadMessage={state.uploadMessage} isUploading={state.isUploading}\r\n sizeInfo={state.sizeInfo} canDownload={state.canDownload}\r\n onDownload={() => void state.handleDownload()}\r\n helperText={helperText} displayError={displayError} statusTextId={statusTextId}\r\n isOpen={isOpen} requireAltText={state.requireAltText}\r\n disabled={disabled} onSave={state.handleSaveImage}\r\n ui={state.ui} {...slotStylingProps}\r\n />\r\n\r\n {state.editingAltText && state.preview && (\r\n <AltTextModal\r\n imageUrl={state.preview} initialAltText={state.altText}\r\n onSave={state.handleAltTextSave} onClose={() => state.setEditingAltText(false)}\r\n locale={state.locale} translations={translations} renderImage={renderImage}\r\n />\r\n )}\r\n\r\n {state.preview && (\r\n <BlurVisualizationModal\r\n isOpen={state.isBlurModalOpen} onClose={() => state.setIsBlurModalOpen(false)}\r\n imageUrl={state.preview}\r\n blurDataUrl={state.blurDataUrlState || state.currentImageData?.blurDataUrl}\r\n blurColor={state.blurColor} altText={state.altText}\r\n originalSize={state.sizeInfo?.original ?? state.currentImageData?.originalSize}\r\n optimizedSize={state.sizeInfo?.optimized ?? state.currentImageData?.size ?? null}\r\n detectedColor={state.detectedBlurColor}\r\n onChangeColor={(hex) => state.applyBlurColor(hex)}\r\n onUseDetectedColor={state.handleResetColor}\r\n onChangeAltText={(nextAlt) => state.handleAltTextSave(nextAlt)}\r\n locale={state.locale} translations={translations} renderImage={renderImage}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport const SingleImageUpload = forwardRef(SingleImageUploadInner) as <\r\n TPreset extends string = UploadPresetName,\r\n>(\r\n props: SingleImageUploadProps<TPreset> & { ref?: Ref<ImageUploadHandle> },\r\n) => ReactElement | null;\r\n\r\nexport default SingleImageUpload;\r\n","import {\r\n AlertTriangleIcon as AlertTriangle,\r\n DownloadIcon as Download,\r\n ImagePlusIcon as ImagePlus,\r\n SaveIcon as Save,\r\n UploadIcon as Upload,\r\n} from '../icons';\r\nimport type { CSSProperties } from 'react';\r\nimport type { UploadTranslations } from '../i18n';\r\nimport type {\r\n SingleUploadClassNames,\r\n SingleUploadSlot,\r\n SingleUploadStyles,\r\n} from '../styling';\r\nimport { cx, resolveSlotClass, resolveSlotStyle } from '../utils/slotStyles';\r\nimport { SaveButton } from './SaveButton';\r\n\r\nfunction formatCompactBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\nexport interface SingleSlotStylingProps {\r\n unstyled?: boolean;\r\n providerClassNames?: SingleUploadClassNames;\r\n classNames?: SingleUploadClassNames;\r\n providerStyles?: SingleUploadStyles;\r\n styles?: SingleUploadStyles;\r\n}\r\n\r\nexport function resolveSingleDropzoneSlot(\r\n flags: {\r\n isDragging: boolean;\r\n hasPreview: boolean;\r\n disabled: boolean;\r\n hasError: boolean;\r\n },\r\n styling: SingleSlotStylingProps,\r\n): { className?: string; style?: CSSProperties } {\r\n const { isDragging, hasPreview, disabled, hasError } = flags;\r\n const { unstyled, providerClassNames: pCls, classNames: cCls, providerStyles: pSty, styles: cSty } = styling;\r\n return {\r\n className: resolveSlotClass(\r\n cx(\r\n 'iuk-dropzone',\r\n isDragging && 'iuk-dropzone--dragging',\r\n hasPreview && 'iuk-dropzone--has-image',\r\n disabled && 'iuk-dropzone--disabled',\r\n hasError && 'iuk-dropzone--error',\r\n ),\r\n unstyled,\r\n pCls?.dropzone, cCls?.dropzone,\r\n isDragging && pCls?.dropzoneDragging, isDragging && cCls?.dropzoneDragging,\r\n hasPreview && pCls?.dropzoneHasImage, hasPreview && cCls?.dropzoneHasImage,\r\n disabled && pCls?.dropzoneDisabled, disabled && cCls?.dropzoneDisabled,\r\n hasError && pCls?.dropzoneError, hasError && cCls?.dropzoneError,\r\n ),\r\n style: resolveSlotStyle(\r\n pSty?.dropzone, cSty?.dropzone,\r\n isDragging ? pSty?.dropzoneDragging : undefined, isDragging ? cSty?.dropzoneDragging : undefined,\r\n hasPreview ? pSty?.dropzoneHasImage : undefined, hasPreview ? cSty?.dropzoneHasImage : undefined,\r\n disabled ? pSty?.dropzoneDisabled : undefined, disabled ? cSty?.dropzoneDisabled : undefined,\r\n hasError ? pSty?.dropzoneError : undefined, hasError ? cSty?.dropzoneError : undefined,\r\n ),\r\n };\r\n}\r\n\r\nexport interface SingleDropzoneEmptyPromptProps extends SingleSlotStylingProps {\r\n isUploading: boolean;\r\n uploadMessage: string;\r\n showProgress: boolean;\r\n progress: number;\r\n maxSizeMB: number;\r\n enablePaste?: boolean;\r\n ui: UploadTranslations;\r\n}\r\n\r\nexport function SingleDropzoneEmptyPrompt({\r\n isUploading, uploadMessage, showProgress, progress, maxSizeMB, enablePaste = true, ui,\r\n unstyled, providerClassNames, classNames, providerStyles, styles,\r\n}: SingleDropzoneEmptyPromptProps) {\r\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\r\n const slotStyle = (slot: SingleUploadSlot) =>\r\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\r\n\r\n return (\r\n <div\r\n data-slot=\"dropzone-prompt\"\r\n className={slotClass('dropzonePrompt', 'iuk-dropzone__prompt')}\r\n style={slotStyle('dropzonePrompt')}\r\n >\r\n <div\r\n data-slot=\"dropzone-icon\"\r\n className={slotClass('dropzoneIcon', 'iuk-dropzone__icon')}\r\n style={slotStyle('dropzoneIcon')}\r\n >\r\n {isUploading ? (\r\n <div className={resolveSlotClass('iuk-spinner', unstyled)} />\r\n ) : (\r\n <ImagePlus size={36} strokeWidth={1.5} />\r\n )}\r\n </div>\r\n <p\r\n data-slot=\"dropzone-text\"\r\n className={slotClass('dropzoneText', 'iuk-dropzone__text')}\r\n style={slotStyle('dropzoneText')}\r\n >\r\n {isUploading ? uploadMessage || `${ui.uploading}...` : ui.dragDropOrClickToUpload}\r\n </p>\r\n {isUploading && showProgress && progress > 0 && (\r\n <p\r\n data-slot=\"dropzone-progress\"\r\n role=\"progressbar\"\r\n aria-valuenow={Math.round(progress)}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={ui.uploading}\r\n className={slotClass('dropzoneProgress', 'iuk-dropzone__progress')}\r\n style={slotStyle('dropzoneProgress')}\r\n >\r\n {progress}%\r\n </p>\r\n )}\r\n {!isUploading && (\r\n <>\r\n <p\r\n data-slot=\"dropzone-hint\"\r\n className={slotClass('dropzoneHint', 'iuk-dropzone__hint')}\r\n style={slotStyle('dropzoneHint')}\r\n >\r\n {ui.upToSizeMB.replace('{size}', String(maxSizeMB))}\r\n {enablePaste ? ` • ${ui.pasteHint}` : ''}\r\n </p>\r\n <span\r\n data-slot=\"browse-button\"\r\n className={slotClass('browseButton', 'iuk-btn iuk-btn--secondary')}\r\n style={slotStyle('browseButton')}\r\n >\r\n <Upload size={15} />\r\n <span>{ui.browseFiles}</span>\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface SingleStatusFooterProps extends SingleSlotStylingProps {\r\n showMissingAltWarning: boolean;\r\n hasPreview: boolean;\r\n hasAltText: boolean;\r\n uploadMessage: string;\r\n isUploading: boolean;\r\n sizeInfo: { original: number; optimized: number } | null;\r\n canDownload: boolean;\r\n onDownload: () => void;\r\n helperText?: string;\r\n displayError?: string;\r\n statusTextId?: string;\r\n isOpen?: boolean;\r\n requireAltText?: boolean;\r\n disabled?: boolean;\r\n onSave?: () => void;\r\n ui: UploadTranslations;\r\n}\r\n\r\nexport function SingleStatusFooter({\r\n showMissingAltWarning, hasPreview, hasAltText, uploadMessage, isUploading,\r\n sizeInfo, canDownload, onDownload, helperText, displayError, statusTextId,\r\n isOpen, requireAltText, disabled, onSave, ui,\r\n unstyled, providerClassNames, classNames, providerStyles, styles,\r\n}: SingleStatusFooterProps) {\r\n const slotClass = (slot: SingleUploadSlot, defaultClass?: string) =>\r\n resolveSlotClass(defaultClass, unstyled, providerClassNames?.[slot], classNames?.[slot]);\r\n const slotStyle = (slot: SingleUploadSlot) =>\r\n resolveSlotStyle(providerStyles?.[slot], styles?.[slot]);\r\n\r\n return (\r\n <>\r\n {showMissingAltWarning && hasPreview && !hasAltText && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"alert\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--warning')}\r\n style={slotStyle('alert')}\r\n >\r\n <AlertTriangle size={16} />\r\n <span>{ui.addAltBeforeSaving}</span>\r\n </div>\r\n )}\r\n\r\n {uploadMessage && !isUploading && sizeInfo && (\r\n <div\r\n data-slot=\"alert\"\r\n role=\"status\"\r\n className={slotClass('alert', 'iuk-alert iuk-alert--success')}\r\n style={slotStyle('alert')}\r\n >\r\n <span>{uploadMessage}</span>\r\n </div>\r\n )}\r\n\r\n {hasPreview && canDownload && (\r\n <button\r\n type=\"button\"\r\n data-slot=\"download-button\"\r\n className={slotClass('downloadButton', 'iuk-btn iuk-btn--secondary iuk-single__download')}\r\n style={slotStyle('downloadButton')}\r\n onClick={onDownload}\r\n disabled={isUploading}\r\n aria-label={ui.downloadImage}\r\n >\r\n <Download size={15} aria-hidden=\"true\" />\r\n <span>{ui.downloadImage}</span>\r\n {sizeInfo && (\r\n <span className={resolveSlotClass('iuk-badge', unstyled)}>\r\n {formatCompactBytes(sizeInfo.optimized)}\r\n </span>\r\n )}\r\n </button>\r\n )}\r\n\r\n {(helperText || displayError) && (\r\n <p\r\n id={statusTextId}\r\n role={displayError ? 'alert' : undefined}\r\n data-slot={displayError ? 'error-text' : 'helper-text'}\r\n className={resolveSlotClass(\r\n cx('iuk-helper-text', Boolean(displayError) && 'iuk-helper-text--error'),\r\n unstyled,\r\n providerClassNames?.helperText, classNames?.helperText,\r\n Boolean(displayError) && providerClassNames?.errorText,\r\n Boolean(displayError) && classNames?.errorText,\r\n )}\r\n style={resolveSlotStyle(\r\n providerStyles?.helperText, styles?.helperText,\r\n displayError ? providerStyles?.errorText : undefined,\r\n displayError ? styles?.errorText : undefined,\r\n )}\r\n >\r\n {displayError || helperText}\r\n </p>\r\n )}\r\n\r\n {isOpen && hasPreview && onSave && (\r\n <div\r\n data-slot=\"commit-bar\"\r\n className={slotClass('commitBar', 'iuk-commit-bar')}\r\n style={slotStyle('commitBar')}\r\n >\r\n {requireAltText && !hasAltText && (\r\n <div className={resolveSlotClass('iuk-badge iuk-badge--warning', unstyled)}>\r\n <AlertTriangle size={13} />\r\n <span>{ui.missingDescription}</span>\r\n </div>\r\n )}\r\n <SaveButton\r\n unstyled={unstyled}\r\n className={slotClass('saveButton')}\r\n style={slotStyle('saveButton')}\r\n onClick={onSave}\r\n disabled={isUploading || disabled || Boolean(requireAltText && !hasAltText)}\r\n icon={<Save size={16} />}\r\n >\r\n {ui.saveImage}\r\n </SaveButton>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n"],"mappings":"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","names":["useEffect","useEffect","cx","useId","jsx","jsxs","useId","useRef","useState","useEffect","useMemo","useRef","jsx","jsxs","useRef","useMemo","useEffect","jsx","jsxs","useState","useRef","useMemo","useEffect","useRef","useState","jsx","jsxs","useMemo","useEffect","useEffect","useEffect","useId","useMemo","useRef","useState","createPortal","jsx","jsxs","jsx","jsxs","jsx","jsxs","useId","useMemo","useState","useRef","useEffect","createPortal","forwardRef","useEffect","useState","createPortal","Fragment","useId","useRef","createPortal","jsx","jsxs","jsx","jsxs","useMemo","useState","jsx","jsxs","useState","useMemo","Fragment","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","p","Fragment","jsx","jsxs","useRef","useId","p","createPortal","forwardRef","useId","useImperativeHandle","useRef","Fragment","jsx","jsxs","jsx","jsxs","useRef","useId","useImperativeHandle","forwardRef","Fragment","jsx","jsxs","useState","useEffect","createPortal","forwardRef"]}