@yoopta/image 6.0.0-beta.14 → 6.0.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/dist/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yoopta/image",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.15",
|
|
4
4
|
"description": "Image plugin for Yoopta Editor",
|
|
5
5
|
"author": "Darginec05 <devopsbanda@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/Darginec05/Yoopta-Editor#readme",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"bugs": {
|
|
36
36
|
"url": "https://github.com/Darginec05/Yoopta-Editor/issues"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "c21b520a04123c02742c1c2a494d9ba9ef2ff558"
|
|
39
39
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/commands/index.ts","../src/utils/limitSizes.ts","../src/plugin/image-plugin.tsx","../src/hooks/use-xhr.ts","../src/hooks/use-upload.ts"],"sourcesContent":["import type { YooEditor, YooptaPathIndex } from '@yoopta/editor';\nimport { Blocks, Elements, generateId } from '@yoopta/editor';\n\nimport type { ImageElement, ImageElementProps } from '../types';\n\ntype ImageElementOptions = {\n props?: Omit<ImageElementProps, 'nodeType'>;\n};\n\ntype InsertImageOptions = ImageElementOptions & {\n at?: YooptaPathIndex;\n focus?: boolean;\n};\n\nexport type ImageCommands = {\n buildImageElements: (editor: YooEditor, options?: Partial<ImageElementOptions>) => ImageElement;\n insertImage: (editor: YooEditor, options?: Partial<InsertImageOptions>) => void;\n deleteImage: (editor: YooEditor, blockId: string) => void;\n updateImage: (editor: YooEditor, blockId: string, props: Partial<ImageElementProps>) => void;\n};\n\nexport const ImageCommands: ImageCommands = {\n buildImageElements: (editor: YooEditor, options = {}) => {\n const imageProps = { ...options.props, nodeType: 'void' };\n return {\n id: generateId(),\n type: 'image',\n children: [{ text: '' }],\n props: imageProps as ImageElementProps,\n };\n },\n insertImage: (editor: YooEditor, options = {}) => {\n const { at, focus, props } = options;\n const image = ImageCommands.buildImageElements(editor, { props });\n const block = Blocks.buildBlockData({\n value: [image],\n type: 'Image',\n meta: { align: 'center', depth: 0 },\n });\n\n Blocks.insertBlock(editor, block.type, {\n focus,\n at,\n blockData: block,\n });\n },\n deleteImage: (editor: YooEditor, blockId) => {\n Blocks.deleteBlock(editor, { blockId });\n },\n updateImage: (editor: YooEditor, blockId, props) => {\n Elements.updateElement(editor, { blockId, type: 'image', props });\n },\n};\n","import type { ImageSizes } from '../types';\n\n/**\n * Converts a size value (number or string) to a number\n * @param value Size value that can be number or string (e.g. '570px', '100%', 300)\n * @returns Number value without units\n */\nconst parseSize = (value: string | number): number => {\n if (typeof value === 'number') return value;\n return parseInt(value.replace(/[^\\d]/g, ''), 10);\n};\n\n/**\n * Limits image sizes to not exceed maximum allowed dimensions\n * @param sizes Current image dimensions\n * @param maxSizes Maximum allowed dimensions\n * @returns New image dimensions that fit within maxSizes\n */\nexport const limitSizes = (sizes: ImageSizes, maxSizes: ImageSizes): ImageSizes => {\n const currentWidth = parseSize(sizes.width);\n const currentHeight = parseSize(sizes.height);\n const maxWidth = parseSize(maxSizes.width);\n const maxHeight = parseSize(maxSizes.height);\n\n if (currentWidth <= maxWidth && currentHeight <= maxHeight) {\n return { width: currentWidth, height: currentHeight };\n }\n\n const widthRatio = currentWidth / maxWidth;\n const heightRatio = currentHeight / maxHeight;\n const ratio = Math.max(widthRatio, heightRatio);\n\n const newWidth = Math.round(currentWidth / ratio);\n const newHeight = Math.round(currentHeight / ratio);\n\n return {\n width: Math.min(newWidth, maxWidth),\n height: Math.min(newHeight, maxHeight),\n };\n};\n","import type { PluginElementRenderProps, SlateElement } from '@yoopta/editor';\nimport { YooptaPlugin, generateId } from '@yoopta/editor';\n\nimport { ImageCommands } from '../commands';\nimport type { ImageElementMap, ImageElementProps, ImagePluginOptions } from '../types';\nimport { limitSizes } from '../utils/limitSizes';\n\nconst ALIGNS_TO_JUSTIFY = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nconst imageProps: ImageElementProps = {\n id: null,\n src: null,\n alt: null,\n srcSet: null,\n bgColor: null,\n fit: null,\n sizes: { width: 0, height: 0 },\n};\n\nconst BaseImageRender = (props: PluginElementRenderProps) => (\n <div {...props.attributes} contentEditable={false}>\n <img\n src={props.element.props.src}\n alt={props.element.props.alt}\n width={props.element.props.sizes?.width}\n height={props.element.props.sizes?.height}\n style={{ objectFit: props.element.props.fit }}\n />\n {props.children}\n </div>\n);\n\nconst Image = new YooptaPlugin<ImageElementMap, ImagePluginOptions>({\n type: 'Image',\n elements: <image render={BaseImageRender} props={imageProps} nodeType=\"void\" />,\n commands: ImageCommands,\n options: {\n display: {\n title: 'Image',\n description: 'Upload from device or insert with link',\n },\n // accept: 'image/png, image/jpeg, image/gif, image/webp',\n maxSizes: { maxWidth: 650, maxHeight: 550 },\n },\n parsers: {\n html: {\n deserialize: {\n nodeNames: ['IMG'],\n parse: (el, editor) => {\n if (el.nodeName === 'IMG') {\n const sizes = {\n width: el.getAttribute('width')\n ? parseInt(el.getAttribute('width') || '650', 10)\n : 650,\n height: el.getAttribute('height')\n ? parseInt(el.getAttribute('height') || '500', 10)\n : 500,\n };\n\n const maxSizes = (editor.plugins.Image.options as ImagePluginOptions)?.maxSizes;\n const limitedSizes = limitSizes(sizes!, {\n width: maxSizes!.maxWidth!,\n height: maxSizes!.maxHeight!,\n });\n\n const props: SlateElement<'image', ImageElementProps>['props'] = {\n id: generateId(),\n nodeType: 'void',\n src: el.getAttribute('src') || '',\n alt: el.getAttribute('alt') || '',\n srcSet: el.getAttribute('srcset') || '',\n fit: (el.getAttribute('objectFit') || 'contain') as ImageElementProps['fit'],\n sizes: limitedSizes,\n };\n\n const node: SlateElement = {\n id: generateId(),\n type: 'image',\n children: [{ text: '' }],\n props,\n };\n\n return node;\n }\n },\n },\n serialize: (element, text, blockMeta) => {\n const { align = 'center', depth = 0 } = blockMeta || {};\n const justify = ALIGNS_TO_JUSTIFY[align] || 'center';\n\n return `<div style=\"margin-left: ${depth * 20\n }px; display: flex; width: 100%; justify-content: ${justify};\">\n <img data-meta-align=\"${align}\" data-meta-depth=\"${depth}\" src=\"${element.props.src\n }\" alt=\"${element.props.alt}\" width=\"${element.props.sizes.width}\" height=\"${element.props.sizes.height\n }\" objectFit=\"${element.props.fit}\"/>\n </div>`;\n },\n },\n markdown: {\n serialize: (element) => `\\n`,\n },\n email: {\n serialize: (element, text, blockMeta) => {\n const { align = 'center', depth = 0 } = blockMeta || {};\n const justify = ALIGNS_TO_JUSTIFY[align] || 'center';\n\n return `\n <table style=\"width:100%;\">\n <tbody style=\"width:100%;\">\n <tr>\n <td style=\"margin-left: ${depth * 20\n }px; display: flex; width: 100%; justify-content: ${justify}; margin-top: 1rem;\">\n <img data-meta-align=\"${align}\" style=\"margin: 0 auto; object-fit:${element.props.fit || 'contain'\n };\" data-meta-depth=\"${depth}\" src=\"${element.props.src}\" alt=\"${element.props.alt\n }\" width=\"${element.props.sizes.width}\" height=\"${element.props.sizes.height}\" />\n </td>\n </tr>\n </tbody>\n </table>\n `;\n },\n },\n },\n});\n\nexport { Image };\n","import { useCallback, useRef, useState } from 'react';\n\nimport type {\n ImageUploadProgress,\n UploadError,\n UploadResult,\n UploadState,\n XHRRequestOptions,\n} from '../types';\n\nconst validateFile = (file: File, accept?: string, maxSize?: number): UploadError | null => {\n if (accept && !accept.includes(file.type)) {\n return {\n message: `Invalid file type. Allowed types: ${accept}`,\n code: 'INVALID_TYPE',\n };\n }\n\n if (maxSize && file.size > maxSize) {\n const maxSizeMB = (maxSize / 1024 / 1024).toFixed(2);\n return {\n message: `File size exceeds ${maxSizeMB}MB`,\n code: 'FILE_TOO_LARGE',\n };\n }\n\n return null;\n};\n\nexport const useXHRRequest = ({\n onError,\n onSuccess,\n onProgress,\n accept,\n maxSize,\n method = 'POST',\n endpoint,\n headers,\n}: XHRRequestOptions) => {\n const [state, setState] = useState<UploadState>({\n loading: false,\n progress: null,\n error: null,\n result: null,\n });\n\n const xhrRef = useRef<XMLHttpRequest | null>(null);\n\n const xhrFetch = (body: XMLHttpRequestBodyInit): Promise<UploadResult> =>\n new Promise((resolve, reject) => {\n if (body instanceof File) {\n const validationError = validateFile(body, accept, maxSize);\n if (validationError) {\n setState((prev) => ({\n ...prev,\n error: validationError,\n }));\n onError?.(validationError);\n reject(validationError);\n return;\n }\n }\n\n setState({\n loading: true,\n progress: { loaded: 0, total: body instanceof File ? body.size : 0, percentage: 0 },\n error: null,\n result: null,\n });\n\n // const formData = new FormData();\n // if (fieldName) {\n // formData.append(fieldName, file);\n // }\n\n const xhr = new XMLHttpRequest();\n xhrRef.current = xhr;\n\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable) {\n const progress: ImageUploadProgress = {\n loaded: event.loaded,\n total: event.total,\n percentage: Math.round((event.loaded / event.total) * 100),\n };\n\n setState((prev) => ({\n ...prev,\n progress,\n }));\n\n onProgress?.(progress);\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const result: UploadResult = JSON.parse(xhr.responseText);\n\n setState((prev) => ({\n ...prev,\n loading: false,\n result,\n }));\n\n onSuccess?.(result);\n resolve(result);\n } catch (error) {\n const parseError: UploadError = {\n message: 'Failed to parse server response',\n code: 'PARSE_ERROR',\n status: xhr.status,\n };\n\n setState((prev) => ({\n ...prev,\n loading: false,\n error: parseError,\n }));\n\n onError?.(parseError);\n reject(parseError);\n }\n } else {\n const httpError: UploadError = {\n message: `Upload failed with status ${xhr.status}`,\n code: 'HTTP_ERROR',\n status: xhr.status,\n };\n\n setState((prev) => ({\n ...prev,\n loading: false,\n error: httpError,\n }));\n\n onError?.(httpError);\n reject(httpError);\n }\n });\n\n xhr.addEventListener('error', () => {\n const networkError: UploadError = {\n message: 'Network error occurred',\n code: 'NETWORK_ERROR',\n };\n\n setState((prev) => ({\n ...prev,\n loading: false,\n error: networkError,\n }));\n\n onError?.(networkError);\n reject(networkError);\n });\n\n xhr.addEventListener('abort', () => {\n const abortError: UploadError = {\n message: 'Upload cancelled',\n code: 'ABORT',\n };\n\n setState((prev) => ({\n ...prev,\n loading: false,\n error: abortError,\n }));\n\n reject(abortError);\n });\n\n xhr.addEventListener('timeout', () => {\n const timeoutError: UploadError = {\n message: 'Upload timeout',\n code: 'TIMEOUT',\n };\n\n setState((prev) => ({\n ...prev,\n loading: false,\n error: timeoutError,\n }));\n\n onError?.(timeoutError);\n reject(timeoutError);\n });\n\n xhr.open(method, endpoint);\n\n if (headers) {\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n }\n\n xhr.timeout = 30000;\n xhr.send(body);\n });\n\n const cancel = useCallback(() => {\n if (xhrRef.current) {\n xhrRef.current.abort();\n xhrRef.current = null;\n }\n }, []);\n\n const reset = useCallback(() => {\n setState({\n loading: false,\n progress: null,\n error: null,\n result: null,\n });\n }, []);\n\n return {\n ...state,\n xhrFetch,\n cancel,\n reset,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type {\n ImageDeleteEndpointOptions,\n ImageDeleteFn,\n ImageDeleteOptions,\n ImageElement,\n ImageElementProps,\n ImageUploadEndpointOptions,\n ImageUploadFn,\n ImageUploadOptions,\n ImageUploadPreview,\n ImageUploadProgress,\n UploadError,\n UploadResult,\n UploadState,\n UseImageDeleteReturn,\n UseImageUploadReturn,\n} from '../types';\nimport { useXHRRequest } from './use-xhr';\n\nconst DOCS_URL = 'https://docs.yoopta.dev/plugins/image';\n\n// Type guard to check if options is a custom function\nconst isUploadFn = (\n options: ImageUploadOptions,\n): options is (file: File, onProgress?: (progress: ImageUploadProgress) => void) => Promise<ImageElementProps> =>\n typeof options === 'function';\n\n// Type guard to check if delete options is a custom function\nconst isDeleteFn = (options: ImageDeleteOptions): options is (element: ImageElement) => Promise<void> =>\n typeof options === 'function';\n\n// Validation helpers\nconst validateUploadOptions = (options: ImageUploadOptions | undefined): void => {\n if (options === undefined || options === null) {\n throw new Error(\n `[Yoopta Image] Upload options are not configured. ` +\n `Please provide 'upload' option when extending the Image plugin.\\n\\n` +\n `Example:\\n` +\n `Image.extend({\\n` +\n ` options: {\\n` +\n ` upload: async (file) => {\\n` +\n ` // Upload file to your storage and return image props\\n` +\n ` return { id: '...', src: '...' };\\n` +\n ` },\\n` +\n ` },\\n` +\n `})\\n\\n` +\n `See documentation: ${DOCS_URL}`,\n );\n }\n\n if (typeof options !== 'function' && typeof options !== 'object') {\n throw new Error(\n `[Yoopta Image] Invalid upload options. Expected a function or endpoint configuration object.\\n\\n` +\n `See documentation: ${DOCS_URL}`,\n );\n }\n\n if (typeof options === 'object' && !options.endpoint) {\n throw new Error(\n `[Yoopta Image] Missing 'endpoint' in upload options. ` +\n `When using endpoint-based upload, you must provide an 'endpoint' URL.\\n\\n` +\n `Example:\\n` +\n `Image.extend({\\n` +\n ` options: {\\n` +\n ` upload: {\\n` +\n ` endpoint: '/api/upload-image',\\n` +\n ` },\\n` +\n ` },\\n` +\n `})\\n\\n` +\n `See documentation: ${DOCS_URL}`,\n );\n }\n};\n\n// Validation helper for delete options (optional - only validates if provided)\nconst validateDeleteOptions = (options: ImageDeleteOptions | undefined): boolean => {\n // Delete is optional - return false if not configured\n if (options === undefined || options === null) {\n return false;\n }\n\n if (typeof options !== 'function' && typeof options !== 'object') {\n throw new Error(\n `[Yoopta Image] Invalid delete options. Expected a function or endpoint configuration object.\\n\\n` +\n `See documentation: ${DOCS_URL}`,\n );\n }\n\n if (typeof options === 'object' && !options.endpoint) {\n throw new Error(\n `[Yoopta Image] Missing 'endpoint' in delete options. ` +\n `When using endpoint-based delete, you must provide an 'endpoint' URL.\\n\\n` +\n `Example:\\n` +\n `Image.extend({\\n` +\n ` options: {\\n` +\n ` delete: {\\n` +\n ` endpoint: '/api/delete-image',\\n` +\n ` },\\n` +\n ` },\\n` +\n `})\\n\\n` +\n `See documentation: ${DOCS_URL}`,\n );\n }\n\n return true;\n};\n\nexport const useImageDelete = (options: ImageDeleteOptions | undefined): UseImageDeleteReturn => {\n // Validate options - returns false if not configured (optional)\n const isConfigured = validateDeleteOptions(options);\n\n const validOptions = isConfigured ? (options as ImageDeleteOptions) : null;\n const isCustomFn = validOptions ? isDeleteFn(validOptions) : false;\n\n // State for custom function approach - always called\n const [customState, setCustomState] = useState<UploadState>({\n loading: false,\n progress: null,\n error: null,\n result: null,\n });\n\n // For endpoint-based approach - create endpoint options (use dummy if custom fn or not configured)\n const endpointOpts: ImageDeleteEndpointOptions =\n !validOptions || isCustomFn ? { endpoint: '' } : (validOptions as ImageDeleteEndpointOptions);\n\n // Always call useXHRRequest (with dummy options if using custom function)\n const xhrResult = useXHRRequest({\n endpoint: endpointOpts.endpoint,\n method: endpointOpts.method ?? 'DELETE',\n headers: endpointOpts.headers ?? {},\n fieldName: endpointOpts.fieldName ?? 'file',\n onSuccess: endpointOpts.onSuccess,\n onError: endpointOpts.onError,\n onProgress: endpointOpts.onProgress,\n });\n\n // Custom delete function - always defined with useCallback\n const customDeleteImage = useCallback(\n async (element: ImageElement): Promise<UploadResult> => {\n // If delete is not configured, just return success without actually deleting from storage\n if (!validOptions) {\n const src = element.props?.src ?? '';\n return { id: element.props?.id ?? '', url: src };\n }\n\n if (!isCustomFn) {\n throw new Error('Custom delete called but options is not a function');\n }\n\n const src = element.props?.src;\n if (!src) {\n throw new Error('Image src is required');\n }\n\n setCustomState((prev) => ({ ...prev, loading: true, error: null }));\n\n try {\n await (validOptions as ImageDeleteFn)(element);\n const result: UploadResult = { id: element.props?.id ?? '', url: src };\n setCustomState((prev) => ({ ...prev, loading: false, result }));\n return result;\n } catch (err) {\n const error: UploadError = {\n message: err instanceof Error ? err.message : 'Delete failed',\n code: 'CUSTOM_DELETE_ERROR',\n };\n setCustomState((prev) => ({ ...prev, loading: false, error }));\n throw error;\n }\n },\n [validOptions, isCustomFn],\n );\n\n const customReset = useCallback(() => {\n setCustomState({ loading: false, progress: null, error: null, result: null });\n }, []);\n\n // Endpoint-based delete function\n const endpointDeleteImage = useCallback(\n (element: ImageElement) => {\n const fileId = element.props?.id;\n if (!fileId) {\n throw new Error('FileId is required');\n }\n return xhrResult.xhrFetch(JSON.stringify({ fileId }));\n },\n [xhrResult],\n );\n\n // Return appropriate implementation based on options type\n // If not configured, return no-op delete function\n if (!isConfigured) {\n return {\n ...customState,\n deleteImage: customDeleteImage,\n cancel: () => { },\n reset: customReset,\n };\n }\n\n if (isCustomFn) {\n return {\n ...customState,\n deleteImage: customDeleteImage,\n cancel: () => { },\n reset: customReset,\n };\n }\n\n return {\n loading: xhrResult.loading,\n progress: xhrResult.progress,\n error: xhrResult.error,\n result: xhrResult.result,\n deleteImage: endpointDeleteImage,\n cancel: xhrResult.cancel,\n reset: xhrResult.reset,\n };\n};\n\nexport const useImageUpload = (options: ImageUploadOptions | undefined): UseImageUploadReturn => {\n // Validate options - will throw descriptive error if invalid\n validateUploadOptions(options);\n\n // After validation, options is guaranteed to be defined\n const validOptions = options as ImageUploadOptions;\n const isCustomFn = isUploadFn(validOptions);\n\n // State for custom function approach - always called\n const [customState, setCustomState] = useState<UploadState>({\n loading: false,\n progress: null,\n error: null,\n result: null,\n });\n\n // For endpoint-based approach - create endpoint options (use dummy if custom fn)\n const endpointOpts: ImageUploadEndpointOptions = isCustomFn\n ? { endpoint: '' }\n : (validOptions as ImageUploadEndpointOptions);\n\n // Always call useXHRRequest (with dummy options if using custom function)\n const xhrResult = useXHRRequest({\n endpoint: endpointOpts.endpoint,\n method: endpointOpts.method ?? 'POST',\n headers: endpointOpts.headers ?? {},\n fieldName: endpointOpts.fieldName ?? 'file',\n maxSize: endpointOpts.maxSize,\n accept: endpointOpts.accept ?? 'image/jpeg, image/jpg, image/png, image/gif, image/webp',\n onSuccess: endpointOpts.onSuccess,\n onError: endpointOpts.onError,\n onProgress: endpointOpts.onProgress,\n });\n\n // Custom upload function - always defined with useCallback\n const customUpload = useCallback(\n async (file: File): Promise<UploadResult> => {\n if (!isCustomFn) {\n throw new Error('Custom upload called but options is not a function');\n }\n\n setCustomState((prev) => ({\n ...prev,\n loading: true,\n progress: { loaded: 0, total: file.size, percentage: 0 },\n error: null,\n }));\n\n try {\n const onProgress = (progress: ImageUploadProgress) => {\n setCustomState((prev) => ({ ...prev, progress }));\n };\n\n const imageProps = await (validOptions as ImageUploadFn)(file, onProgress);\n const result: UploadResult = {\n id: imageProps.id ?? '',\n url: imageProps.src ?? '',\n width: typeof imageProps.sizes?.width === 'number' ? imageProps.sizes.width : undefined,\n height: typeof imageProps.sizes?.height === 'number' ? imageProps.sizes.height : undefined,\n };\n\n setCustomState((prev) => ({\n ...prev,\n loading: false,\n progress: { loaded: file.size, total: file.size, percentage: 100 },\n result,\n }));\n\n return result;\n } catch (err) {\n const error: UploadError = {\n message: err instanceof Error ? err.message : 'Upload failed',\n code: 'CUSTOM_UPLOAD_ERROR',\n };\n setCustomState((prev) => ({ ...prev, loading: false, error }));\n throw error;\n }\n },\n [validOptions, isCustomFn],\n );\n\n const customReset = useCallback(() => {\n setCustomState({ loading: false, progress: null, error: null, result: null });\n }, []);\n\n // Endpoint-based upload function\n const endpointUpload = useCallback(\n (file: File) => {\n const formData = new FormData();\n formData.append(endpointOpts.fieldName ?? 'yoopta-image-file', file);\n return xhrResult.xhrFetch(formData);\n },\n [endpointOpts.fieldName, xhrResult],\n );\n\n // Return appropriate implementation based on options type\n if (isCustomFn) {\n return {\n ...customState,\n upload: customUpload,\n cancel: () => { },\n reset: customReset,\n };\n }\n\n return {\n loading: xhrResult.loading,\n progress: xhrResult.progress,\n error: xhrResult.error,\n result: xhrResult.result,\n upload: endpointUpload,\n cancel: xhrResult.cancel,\n reset: xhrResult.reset,\n };\n};\n\nexport const useImageDimensions = () => {\n const getDimensions = (file: File): Promise<{ width: number; height: number }> =>\n new Promise((resolve, reject) => {\n const img = new Image();\n const url = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve({\n width: img.naturalWidth,\n height: img.naturalHeight,\n });\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n };\n\n img.src = url;\n });\n\n return { getDimensions };\n};\n\nexport const useImagePreview = () => {\n const [preview, setPreview] = useState<ImageUploadPreview | null>(null);\n\n const generatePreview = (file: File) => {\n if (preview) {\n URL.revokeObjectURL(preview.url);\n }\n\n const url = URL.createObjectURL(file);\n setPreview({ url });\n\n return { url };\n };\n\n const clearPreview = () => {\n if (preview) {\n URL.revokeObjectURL(preview.url);\n setPreview(null);\n }\n };\n\n return {\n preview,\n generatePreview,\n clearPreview,\n };\n};\n"],"names":["_jsxs","_jsx","Image"],"mappings":"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"}
|