@uploadista/vue 0.0.15-beta.5 → 0.0.16-beta.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composables-Tfbw25xt.mjs","names":["unsubscribe: (() => void) | null","unsubscribe: (() => void) | null","unsubscribe: (() => void) | null","initialState: DragDropState","initialState","errors: string[]","files: File[]","initialState: FlowUploadState","initialState","manager: FlowManager<unknown> | null","items","newItems: FlowUploadItem<BrowserUploadInput>[]","state","newItems: UploadItem[]","item","initialState: UploadState","manager: UploadManager | null","uploadFn: UploadFunction<UploadInput>","initialMetrics: UploadMetrics","estimatedTimeRemaining: number | null","newMetrics: UploadMetrics","fileMetric: FileUploadMetrics"],"sources":["../src/composables/eventUtils.ts","../src/composables/useUploadistaClient.ts","../src/composables/useUploadistaEvents.ts","../src/composables/useFlowEvents.ts","../src/composables/useUploadEvents.ts","../src/composables/useDragDrop.ts","../src/composables/useFlowManagerContext.ts","../src/composables/useFlowUpload.ts","../src/composables/useMultiFlowUpload.ts","../src/composables/useMultiUpload.ts","../src/composables/useUpload.ts","../src/composables/useUploadMetrics.ts"],"sourcesContent":["import type { UploadistaEvent } from \"@uploadista/client-browser\";\nimport { EventType, type FlowEvent } from \"@uploadista/core/flow\";\nimport { UploadEventType, type UploadEvent } from \"@uploadista/core/types\";\n\n/**\n * Type guard to check if an event is a flow event\n */\nexport function isFlowEvent(event: UploadistaEvent): event is FlowEvent {\n if (!(\"eventType\" in event)) return false;\n const e = event as { eventType: unknown };\n return (\n e.eventType === EventType.JobStart ||\n e.eventType === EventType.JobEnd ||\n e.eventType === EventType.FlowStart ||\n e.eventType === EventType.FlowEnd ||\n e.eventType === EventType.FlowError ||\n e.eventType === EventType.FlowPause ||\n e.eventType === EventType.FlowCancel ||\n e.eventType === EventType.NodeStart ||\n e.eventType === EventType.NodeEnd ||\n e.eventType === EventType.NodePause ||\n e.eventType === EventType.NodeResume ||\n e.eventType === EventType.NodeError ||\n e.eventType === EventType.NodeStream ||\n e.eventType === EventType.NodeResponse\n );\n}\n\n/**\n * Type guard to check if an event is an upload event\n */\nexport function isUploadEvent(event: UploadistaEvent): event is UploadEvent {\n if (!(\"type\" in event)) return false;\n const e = event as { type: unknown };\n return (\n e.type === UploadEventType.UPLOAD_STARTED ||\n e.type === UploadEventType.UPLOAD_PROGRESS ||\n e.type === UploadEventType.UPLOAD_COMPLETE ||\n e.type === UploadEventType.UPLOAD_FAILED ||\n e.type === UploadEventType.UPLOAD_VALIDATION_SUCCESS ||\n e.type === UploadEventType.UPLOAD_VALIDATION_FAILED ||\n e.type === UploadEventType.UPLOAD_VALIDATION_WARNING\n );\n}\n","import type { UploadistaEvent } from \"@uploadista/client-browser\";\nimport { inject, type Ref } from \"vue\";\nimport {\n UPLOADISTA_CLIENT_KEY,\n UPLOADISTA_EVENT_SUBSCRIBERS_KEY,\n} from \"./plugin\";\n\n/**\n * Access the Uploadista client instance from the plugin or provider.\n * Must be used within a component tree that has the Uploadista plugin or provider installed.\n *\n * @returns Uploadista client instance with event subscription\n * @throws Error if used outside of Uploadista plugin/provider context\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useUploadistaClient } from '@uploadista/vue';\n *\n * const { client, subscribeToEvents } = useUploadistaClient();\n *\n * // Subscribe to all events\n * const unsubscribe = subscribeToEvents((event) => {\n * console.log('Upload event:', event);\n * });\n *\n * // Clean up on unmount\n * onUnmounted(() => {\n * unsubscribe();\n * });\n * </script>\n * ```\n */\nexport function useUploadistaClient() {\n const client = inject(UPLOADISTA_CLIENT_KEY);\n\n if (!client) {\n throw new Error(\n \"useUploadistaClient must be used within a component tree that has the Uploadista plugin or provider installed. \" +\n \"Make sure to either use app.use(createUploadistaPlugin({ ... })) in your main app file, \" +\n \"or wrap your component tree with <UploadistaProvider>.\",\n );\n }\n\n // Try to get the shared event subscribers from the provider\n const eventSubscribersRef = inject<\n Ref<Set<(event: UploadistaEvent) => void>> | undefined\n >(UPLOADISTA_EVENT_SUBSCRIBERS_KEY);\n\n const subscribeToEvents = (handler: (event: UploadistaEvent) => void) => {\n if (!eventSubscribersRef) {\n console.warn(\n \"subscribeToEvents called but no event subscribers provided. Events will not be dispatched. \" +\n \"Make sure to use UploadistaProvider or createUploadistaPlugin with proper configuration.\",\n );\n return () => {\n // No-op unsubscribe if subscribers aren't available\n };\n }\n\n eventSubscribersRef.value.add(handler);\n return () => {\n eventSubscribersRef.value.delete(handler);\n };\n };\n\n return {\n client,\n subscribeToEvents,\n };\n}\n\nexport type UseUploadistaClientReturn = ReturnType<typeof useUploadistaClient>;\n","import type { UploadistaEvent } from \"@uploadista/client-browser\";\nimport { onBeforeUnmount, onMounted } from \"vue\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\n/**\n * Simple composable that subscribes to all Uploadista events (both flow and upload events).\n *\n * This is a low-level composable that provides access to all events. For more structured\n * event handling, consider using `useFlowEvents` or `useUploadEvents` instead.\n *\n * Must be used within UploadistaProvider.\n *\n * @param callback - Function called for every event emitted by the Uploadista client\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useUploadistaEvents, isFlowEvent, isUploadEvent } from '@uploadista/vue';\n *\n * useUploadistaEvents((event) => {\n * if (isFlowEvent(event)) {\n * console.log('Flow event:', event.eventType);\n * } else if (isUploadEvent(event)) {\n * console.log('Upload event:', event.type);\n * }\n * });\n * </script>\n *\n * <template>\n * <div>Listening to all events...</div>\n * </template>\n * ```\n */\nexport function useUploadistaEvents(\n callback: (event: UploadistaEvent) => void,\n): void {\n const { subscribeToEvents } = useUploadistaClient();\n let unsubscribe: (() => void) | null = null;\n\n onMounted(() => {\n unsubscribe = subscribeToEvents(callback);\n });\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n });\n}\n","import type { UploadistaEvent } from \"@uploadista/client-browser\";\nimport type {\n FlowEventFlowCancel,\n FlowEventFlowEnd,\n FlowEventFlowError,\n FlowEventFlowPause,\n FlowEventFlowStart,\n FlowEventJobEnd,\n FlowEventJobStart,\n FlowEventNodeEnd,\n FlowEventNodeError,\n FlowEventNodePause,\n FlowEventNodeResume,\n FlowEventNodeStart,\n} from \"@uploadista/core/flow\";\nimport { EventType } from \"@uploadista/core/flow\";\nimport { onBeforeUnmount, onMounted } from \"vue\";\nimport { isFlowEvent } from \"./eventUtils\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\n/**\n * Options for handling flow execution events.\n *\n * All callbacks are optional - only provide handlers for events you care about.\n */\nexport interface UseFlowEventsOptions {\n /** Called when a job starts execution */\n onJobStart?: (event: FlowEventJobStart) => void;\n /** Called when a job completes (success or failure) */\n onJobEnd?: (event: FlowEventJobEnd) => void;\n /** Called when a flow begins execution */\n onFlowStart?: (event: FlowEventFlowStart) => void;\n /** Called when a flow completes successfully */\n onFlowEnd?: (event: FlowEventFlowEnd) => void;\n /** Called when a flow encounters an error */\n onFlowError?: (event: FlowEventFlowError) => void;\n /** Called when a flow is paused by user request */\n onFlowPause?: (event: FlowEventFlowPause) => void;\n /** Called when a flow is cancelled by user request */\n onFlowCancel?: (event: FlowEventFlowCancel) => void;\n /** Called when a node starts processing */\n onNodeStart?: (event: FlowEventNodeStart) => void;\n /** Called when a node completes successfully */\n onNodeEnd?: (event: FlowEventNodeEnd) => void;\n /** Called when a node pauses (waiting for additional data) */\n onNodePause?: (event: FlowEventNodePause) => void;\n /** Called when a paused node resumes execution */\n onNodeResume?: (event: FlowEventNodeResume) => void;\n /** Called when a node encounters an error */\n onNodeError?: (event: FlowEventNodeError) => void;\n}\n\n/**\n * Structured composable for handling flow execution events with type-safe callbacks.\n *\n * This composable provides a clean API for listening to specific flow events without\n * needing to manually filter events or use type guards.\n *\n * Must be used within UploadistaProvider.\n *\n * @param options - Object with optional callbacks for each flow event type\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useFlowEvents } from '@uploadista/vue';\n *\n * useFlowEvents({\n * onFlowStart: (event) => {\n * console.log('Flow started:', event.flowId);\n * },\n * onNodeStart: (event) => {\n * console.log('Node started:', event.nodeName);\n * },\n * onNodeEnd: (event) => {\n * console.log('Node completed:', event.nodeName, event.result);\n * },\n * onFlowEnd: (event) => {\n * console.log('Flow completed with outputs:', event.outputs);\n * },\n * onFlowError: (event) => {\n * console.error('Flow failed:', event.error);\n * },\n * });\n * </script>\n *\n * <template>\n * <div>Monitoring flow execution...</div>\n * </template>\n * ```\n */\nexport function useFlowEvents(options: UseFlowEventsOptions): void {\n const { subscribeToEvents } = useUploadistaClient();\n let unsubscribe: (() => void) | null = null;\n\n onMounted(() => {\n unsubscribe = subscribeToEvents((event: UploadistaEvent) => {\n // Only handle flow events\n if (!isFlowEvent(event)) return;\n\n // Route to appropriate callback based on event type\n switch (event.eventType) {\n case EventType.JobStart:\n options.onJobStart?.(event);\n break;\n case EventType.JobEnd:\n options.onJobEnd?.(event);\n break;\n case EventType.FlowStart:\n options.onFlowStart?.(event);\n break;\n case EventType.FlowEnd:\n options.onFlowEnd?.(event);\n break;\n case EventType.FlowError:\n options.onFlowError?.(event);\n break;\n case EventType.FlowPause:\n options.onFlowPause?.(event);\n break;\n case EventType.FlowCancel:\n options.onFlowCancel?.(event);\n break;\n case EventType.NodeStart:\n options.onNodeStart?.(event);\n break;\n case EventType.NodeEnd:\n options.onNodeEnd?.(event);\n break;\n case EventType.NodePause:\n options.onNodePause?.(event);\n break;\n case EventType.NodeResume:\n options.onNodeResume?.(event);\n break;\n case EventType.NodeError:\n options.onNodeError?.(event);\n break;\n }\n });\n });\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n });\n}\n","import type { UploadistaEvent } from \"@uploadista/client-browser\";\nimport { UploadEventType } from \"@uploadista/core/types\";\nimport { onBeforeUnmount, onMounted } from \"vue\";\nimport { isUploadEvent } from \"./eventUtils\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\n/**\n * Upload progress event data\n */\nexport interface UploadProgressEventData {\n id: string;\n progress: number;\n total: number;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Upload started/complete event data (contains full UploadFile)\n */\nexport interface UploadFileEventData {\n // This will contain the full UploadFile schema\n [key: string]: unknown;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Upload failed event data\n */\nexport interface UploadFailedEventData {\n id: string;\n error: string;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Upload validation success event data\n */\nexport interface UploadValidationSuccessEventData {\n id: string;\n validationType: \"checksum\" | \"mimetype\";\n algorithm?: string;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Upload validation failed event data\n */\nexport interface UploadValidationFailedEventData {\n id: string;\n reason: string;\n expected: string;\n actual: string;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Upload validation warning event data\n */\nexport interface UploadValidationWarningEventData {\n id: string;\n message: string;\n flow?: {\n flowId: string;\n nodeId: string;\n jobId: string;\n };\n}\n\n/**\n * Options for handling upload events.\n *\n * All callbacks are optional - only provide handlers for events you care about.\n */\nexport interface UseUploadEventsOptions {\n /** Called when an upload starts */\n onUploadStarted?: (data: UploadFileEventData) => void;\n /** Called with upload progress updates */\n onUploadProgress?: (data: UploadProgressEventData) => void;\n /** Called when an upload completes successfully */\n onUploadComplete?: (data: UploadFileEventData) => void;\n /** Called when an upload fails */\n onUploadFailed?: (data: UploadFailedEventData) => void;\n /** Called when upload validation succeeds */\n onUploadValidationSuccess?: (data: UploadValidationSuccessEventData) => void;\n /** Called when upload validation fails */\n onUploadValidationFailed?: (data: UploadValidationFailedEventData) => void;\n /** Called when upload validation produces a warning */\n onUploadValidationWarning?: (data: UploadValidationWarningEventData) => void;\n}\n\n/**\n * Structured composable for handling upload events with type-safe callbacks.\n *\n * This composable provides a clean API for listening to specific upload events without\n * needing to manually filter events or use type guards.\n *\n * Must be used within UploadistaProvider.\n *\n * @param options - Object with optional callbacks for each upload event type\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useUploadEvents } from '@uploadista/vue';\n *\n * useUploadEvents({\n * onUploadStarted: (data) => {\n * console.log('Upload started:', data.id);\n * },\n * onUploadProgress: (data) => {\n * const percent = (data.progress / data.total) * 100;\n * console.log(`Upload progress: ${percent}%`);\n * },\n * onUploadComplete: (data) => {\n * console.log('Upload completed:', data);\n * },\n * onUploadFailed: (data) => {\n * console.error('Upload failed:', data.error);\n * },\n * });\n * </script>\n *\n * <template>\n * <div>Monitoring uploads...</div>\n * </template>\n * ```\n */\nexport function useUploadEvents(options: UseUploadEventsOptions): void {\n const { subscribeToEvents } = useUploadistaClient();\n let unsubscribe: (() => void) | null = null;\n\n onMounted(() => {\n unsubscribe = subscribeToEvents((event: UploadistaEvent) => {\n // Only handle upload events\n if (!isUploadEvent(event)) return;\n\n // Route to appropriate callback based on event type\n // Note: flow context is at the top level of the event, not inside data\n const flowContext = \"flow\" in event ? event.flow : undefined;\n\n switch (event.type) {\n case UploadEventType.UPLOAD_STARTED:\n options.onUploadStarted?.({\n ...(event.data as unknown as Omit<UploadFileEventData, \"flow\">),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_PROGRESS:\n options.onUploadProgress?.({\n ...(event.data as unknown as Omit<\n UploadProgressEventData,\n \"flow\"\n >),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_COMPLETE:\n options.onUploadComplete?.({\n ...(event.data as unknown as Omit<UploadFileEventData, \"flow\">),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_FAILED:\n options.onUploadFailed?.({\n ...(event.data as unknown as Omit<UploadFailedEventData, \"flow\">),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_VALIDATION_SUCCESS:\n options.onUploadValidationSuccess?.({\n ...(event.data as unknown as Omit<\n UploadValidationSuccessEventData,\n \"flow\"\n >),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_VALIDATION_FAILED:\n options.onUploadValidationFailed?.({\n ...(event.data as unknown as Omit<\n UploadValidationFailedEventData,\n \"flow\"\n >),\n flow: flowContext,\n });\n break;\n case UploadEventType.UPLOAD_VALIDATION_WARNING:\n options.onUploadValidationWarning?.({\n ...(event.data as unknown as Omit<\n UploadValidationWarningEventData,\n \"flow\"\n >),\n flow: flowContext,\n });\n break;\n }\n });\n });\n\n onBeforeUnmount(() => {\n unsubscribe?.();\n });\n}\n","import { computed, readonly, ref } from \"vue\";\n\nexport interface DragDropOptions {\n /**\n * Accept specific file types (MIME types or file extensions)\n */\n accept?: string[];\n\n /**\n * Maximum number of files allowed\n */\n maxFiles?: number;\n\n /**\n * Maximum file size in bytes\n */\n maxFileSize?: number;\n\n /**\n * Whether to allow multiple files\n */\n multiple?: boolean;\n\n /**\n * Custom validation function for files\n */\n validator?: (files: File[]) => string[] | null;\n\n /**\n * Called when files are dropped or selected\n */\n onFilesReceived?: (files: File[]) => void;\n\n /**\n * Called when validation fails\n */\n onValidationError?: (errors: string[]) => void;\n\n /**\n * Called when drag state changes\n */\n onDragStateChange?: (isDragging: boolean) => void;\n}\n\nexport interface DragDropState {\n /**\n * Whether files are currently being dragged over the drop zone\n */\n isDragging: boolean;\n\n /**\n * Whether the drag is currently over the drop zone\n */\n isOver: boolean;\n\n /**\n * Whether the dragged items are valid files\n */\n isValid: boolean;\n\n /**\n * Current validation errors\n */\n errors: string[];\n}\n\nconst initialState: DragDropState = {\n isDragging: false,\n isOver: false,\n isValid: true,\n errors: [],\n};\n\n/**\n * Vue composable for handling drag and drop file uploads with validation.\n * Provides drag state management, file validation, and file picker integration.\n *\n * @param options - Configuration and event handlers\n * @returns Drag and drop state and handlers\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useDragDrop } from '@uploadista/vue';\n * import { ref } from 'vue';\n *\n * const inputRef = ref<HTMLInputElement>();\n *\n * const dragDrop = useDragDrop({\n * accept: ['image/*', '.pdf'],\n * maxFiles: 5,\n * maxFileSize: 10 * 1024 * 1024, // 10MB\n * multiple: true,\n * onFilesReceived: (files) => {\n * console.log('Received files:', files);\n * // Process files with upload composables\n * },\n * onValidationError: (errors) => {\n * console.error('Validation errors:', errors);\n * },\n * });\n *\n * const openFilePicker = () => {\n * inputRef.value?.click();\n * };\n * </script>\n *\n * <template>\n * <div>\n * <div\n * @dragenter=\"dragDrop.onDragEnter\"\n * @dragover=\"dragDrop.onDragOver\"\n * @dragleave=\"dragDrop.onDragLeave\"\n * @drop=\"dragDrop.onDrop\"\n * @click=\"openFilePicker\"\n * :style=\"{\n * border: dragDrop.state.isDragging ? '2px dashed #007bff' : '2px dashed #ccc',\n * backgroundColor: dragDrop.state.isOver ? '#f8f9fa' : 'transparent',\n * padding: '2rem',\n * textAlign: 'center',\n * cursor: 'pointer',\n * }\"\n * >\n * <p v-if=\"dragDrop.state.isDragging\">Drop files here...</p>\n * <p v-else>Drag files here or click to select</p>\n *\n * <div v-if=\"dragDrop.state.errors.length > 0\" style=\"color: red; margin-top: 1rem\">\n * <p v-for=\"(error, index) in dragDrop.state.errors\" :key=\"index\">{{ error }}</p>\n * </div>\n * </div>\n *\n * <input\n * ref=\"inputRef\"\n * type=\"file\"\n * :multiple=\"dragDrop.inputProps.multiple\"\n * :accept=\"dragDrop.inputProps.accept\"\n * @change=\"dragDrop.onInputChange\"\n * style=\"display: none\"\n * />\n * </div>\n * </template>\n * ```\n */\nexport function useDragDrop(options: DragDropOptions = {}) {\n const {\n accept,\n maxFiles,\n maxFileSize,\n multiple = true,\n validator,\n onFilesReceived,\n onValidationError,\n onDragStateChange,\n } = options;\n\n const state = ref<DragDropState>({ ...initialState });\n const dragCounter = ref(0);\n\n const updateState = (update: Partial<DragDropState>) => {\n state.value = { ...state.value, ...update };\n };\n\n const validateFiles = (files: File[]): string[] => {\n const errors: string[] = [];\n\n // Check file count\n if (maxFiles && files.length > maxFiles) {\n errors.push(\n `Maximum ${maxFiles} files allowed. You selected ${files.length} files.`,\n );\n }\n\n // Check individual files\n for (const file of files) {\n // Check file size\n if (maxFileSize && file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / (1024 * 1024)).toFixed(1);\n const fileSizeMB = (file.size / (1024 * 1024)).toFixed(1);\n errors.push(\n `File \"${file.name}\" (${fileSizeMB}MB) exceeds maximum size of ${maxSizeMB}MB.`,\n );\n }\n\n // Check file type\n if (accept && accept.length > 0) {\n const isAccepted = accept.some((acceptType) => {\n if (acceptType.startsWith(\".\")) {\n // File extension check\n return file.name.toLowerCase().endsWith(acceptType.toLowerCase());\n } else {\n // MIME type check (supports wildcards like image/*)\n if (acceptType.endsWith(\"/*\")) {\n const baseType = acceptType.slice(0, -2);\n return file.type.startsWith(baseType);\n } else {\n return file.type === acceptType;\n }\n }\n });\n\n if (!isAccepted) {\n errors.push(\n `File \"${file.name}\" type \"${file.type}\" is not accepted. Accepted types: ${accept.join(\", \")}.`,\n );\n }\n }\n }\n\n // Run custom validator\n if (validator) {\n const customErrors = validator(files);\n if (customErrors) {\n errors.push(...customErrors);\n }\n }\n\n return errors;\n };\n\n const processFiles = (files: File[]) => {\n const fileArray = Array.from(files);\n const errors = validateFiles(fileArray);\n\n if (errors.length > 0) {\n updateState({ errors, isValid: false });\n onValidationError?.(errors);\n } else {\n updateState({ errors: [], isValid: true });\n onFilesReceived?.(fileArray);\n }\n };\n\n const getFilesFromDataTransfer = (dataTransfer: DataTransfer): File[] => {\n const files: File[] = [];\n\n if (dataTransfer.items) {\n // Use DataTransferItemList interface\n for (let i = 0; i < dataTransfer.items.length; i++) {\n const item = dataTransfer.items[i];\n if (item && item.kind === \"file\") {\n const file = item.getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n } else {\n // Fallback to DataTransfer.files\n for (let i = 0; i < dataTransfer.files.length; i++) {\n const file = dataTransfer.files[i];\n if (file) {\n files.push(file);\n }\n }\n }\n\n return files;\n };\n\n const onDragEnter = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n dragCounter.value++;\n\n if (dragCounter.value === 1) {\n updateState({ isDragging: true, isOver: true });\n onDragStateChange?.(true);\n }\n };\n\n const onDragOver = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n // Set dropEffect to indicate what operation is allowed\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n };\n\n const onDragLeave = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n dragCounter.value--;\n\n if (dragCounter.value === 0) {\n updateState({ isDragging: false, isOver: false, errors: [] });\n onDragStateChange?.(false);\n }\n };\n\n const onDrop = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n dragCounter.value = 0;\n updateState({ isDragging: false, isOver: false });\n onDragStateChange?.(false);\n\n if (event.dataTransfer) {\n const files = getFilesFromDataTransfer(event.dataTransfer);\n if (files.length > 0) {\n processFiles(files);\n }\n }\n };\n\n const onInputChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n const files = Array.from(input.files);\n processFiles(files);\n }\n\n // Reset input value to allow selecting the same files again\n input.value = \"\";\n };\n\n const reset = () => {\n state.value = { ...initialState };\n dragCounter.value = 0;\n };\n\n const inputProps = computed(() => ({\n type: \"file\" as const,\n multiple,\n accept: accept?.join(\", \"),\n }));\n\n return {\n state: readonly(state),\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop,\n onInputChange,\n inputProps,\n processFiles,\n reset,\n };\n}\n","import type { FlowManager, FlowManagerCallbacks, FlowUploadOptions } from \"@uploadista/client-core\";\nimport { inject } from \"vue\";\n\n/**\n * Context value providing access to flow managers\n */\ninterface FlowManagerContextValue {\n getManager: (\n flowId: string,\n callbacks: FlowManagerCallbacks,\n options: FlowUploadOptions,\n ) => FlowManager<unknown>;\n releaseManager: (flowId: string) => void;\n}\n\n/**\n * Composable to access the FlowManager context.\n * Must be used within a FlowManagerProvider.\n *\n * @returns FlowManager context value with getManager and releaseManager functions\n * @throws Error if used outside of FlowManagerProvider\n *\n * @example\n * ```ts\n * function setup() {\n * const { getManager, releaseManager } = useFlowManagerContext();\n * // Use to create managers...\n * }\n * ```\n */\nexport function useFlowManagerContext(): FlowManagerContextValue {\n const context = inject<FlowManagerContextValue>(\"flowManagerContext\");\n\n if (!context) {\n throw new Error(\n \"useFlowManagerContext must be used within a FlowManagerProvider. \" +\n \"Make sure to wrap your component tree with <FlowManagerProvider>.\",\n );\n }\n\n return context;\n}\n","import type { FlowUploadOptions } from \"@uploadista/client-browser\";\nimport type {\n FlowManager,\n FlowUploadState,\n FlowUploadStatus,\n} from \"@uploadista/client-core\";\nimport type { TypedOutput } from \"@uploadista/core/flow\";\nimport { computed, onMounted, onUnmounted, readonly, ref } from \"vue\";\nimport { useFlowManagerContext } from \"./useFlowManagerContext\";\n\n// Re-export types from core for convenience\nexport type { FlowUploadState, FlowUploadStatus };\n\nexport interface UseFlowUploadOptions {\n /**\n * Flow configuration\n */\n flowConfig: FlowUploadOptions[\"flowConfig\"];\n\n /**\n * Called when upload progress updates\n */\n onProgress?: (\n progress: number,\n bytesUploaded: number,\n totalBytes: number | null,\n ) => void;\n\n /**\n * Called when a chunk completes\n */\n onChunkComplete?: (\n chunkSize: number,\n bytesAccepted: number,\n bytesTotal: number | null,\n ) => void;\n\n /**\n * Called when the flow completes successfully (receives full flow outputs)\n * This is the recommended callback for multi-output flows\n * Format: { [outputNodeId]: result, ... }\n */\n onFlowComplete?: (outputs: Record<string, unknown>) => void;\n\n /**\n * Called when upload succeeds (receives typed outputs from all output nodes)\n * Each output includes nodeId, optional nodeType, data, and timestamp.\n *\n * @param outputs - Array of typed outputs from all output nodes\n */\n onSuccess?: (outputs: TypedOutput[]) => void;\n\n /**\n * Called when upload fails\n */\n onError?: (error: Error) => void;\n\n /**\n * Called when upload is aborted\n */\n onAbort?: () => void;\n\n /**\n * Custom retry logic\n */\n onShouldRetry?: (error: Error, retryAttempt: number) => boolean;\n}\n\nconst initialState: FlowUploadState = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n totalBytes: null,\n error: null,\n jobId: null,\n flowStarted: false,\n currentNodeName: null,\n currentNodeType: null,\n flowOutputs: null,\n};\n\n/**\n * Vue composable for uploading files through a flow.\n *\n * This composable provides a simple interface for uploading files through a flow.\n * The flow handles the upload process and can perform post-processing like\n * saving to storage, optimizing images, etc.\n *\n * Must be used within FlowManagerProvider (which must be within UploadistaProvider).\n * Flow events are automatically routed by the provider to the appropriate manager.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useFlowUpload } from '@uploadista/vue';\n *\n * const flowUpload = useFlowUpload({\n * flowConfig: {\n * flowId: \"my-upload-flow\",\n * storageId: \"my-storage\",\n * },\n * onSuccess: (outputs) => {\n * console.log(\"Flow outputs:\", outputs);\n * for (const output of outputs) {\n * console.log(`${output.nodeId}:`, output.data);\n * }\n * },\n * });\n *\n * const handleFileChange = (event: Event) => {\n * const file = (event.target as HTMLInputElement).files?.[0];\n * if (file) flowUpload.upload(file);\n * };\n * </script>\n *\n * <template>\n * <input type=\"file\" @change=\"handleFileChange\" />\n * </template>\n * ```\n */\nexport function useFlowUpload(options: UseFlowUploadOptions) {\n const { getManager, releaseManager } = useFlowManagerContext();\n const state = ref<FlowUploadState>(initialState);\n let manager: FlowManager<unknown> | null = null;\n\n // Store latest options in a ref to access in callbacks\n const optionsRef = ref(options);\n\n // Get or create manager from context when component mounts\n onMounted(() => {\n const flowId = options.flowConfig.flowId;\n\n // Create stable callback wrappers\n const stableCallbacks = {\n onStateChange: (newState: FlowUploadState) => {\n state.value = newState;\n },\n onProgress: (\n _uploadId: string,\n bytesUploaded: number,\n totalBytes: number | null,\n ) => {\n if (optionsRef.value.onProgress) {\n const progress = totalBytes\n ? Math.round((bytesUploaded / totalBytes) * 100)\n : 0;\n optionsRef.value.onProgress(progress, bytesUploaded, totalBytes);\n }\n },\n onChunkComplete: (\n chunkSize: number,\n bytesAccepted: number,\n bytesTotal: number | null,\n ) => {\n optionsRef.value.onChunkComplete?.(\n chunkSize,\n bytesAccepted,\n bytesTotal,\n );\n },\n onFlowComplete: (outputs: TypedOutput[]) => {\n optionsRef.value.onFlowComplete?.(\n outputs as unknown as Record<string, unknown>,\n );\n },\n onSuccess: (outputs: TypedOutput[]) => {\n optionsRef.value.onSuccess?.(outputs);\n },\n onError: (error: Error) => {\n optionsRef.value.onError?.(error);\n },\n onAbort: () => {\n optionsRef.value.onAbort?.();\n },\n };\n\n // Get manager from context\n manager = getManager(flowId, stableCallbacks, {\n flowConfig: options.flowConfig,\n onChunkComplete: options.onChunkComplete,\n onFlowComplete: options.onFlowComplete as\n | ((outputs: TypedOutput[]) => void)\n | undefined,\n onSuccess: options.onSuccess,\n onError: options.onError,\n onAbort: options.onAbort,\n onShouldRetry: options.onShouldRetry,\n });\n });\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (manager) {\n releaseManager(options.flowConfig.flowId);\n manager = null;\n }\n });\n\n const upload = async (file: File | Blob) => {\n await manager?.upload(file);\n };\n\n const abort = () => {\n manager?.abort();\n };\n\n const pause = () => {\n manager?.pause();\n };\n\n const reset = () => {\n manager?.reset();\n };\n\n return {\n state: readonly(state),\n upload,\n abort,\n pause,\n reset,\n // Derive computed values from state (reactive to state changes)\n isUploading: computed(\n () =>\n state.value.status === \"uploading\" ||\n state.value.status === \"processing\",\n ),\n isUploadingFile: computed(() => state.value.status === \"uploading\"),\n isProcessing: computed(() => state.value.status === \"processing\"),\n };\n}\n","import type {\n BrowserUploadInput,\n FlowUploadItem,\n MultiFlowUploadOptions,\n MultiFlowUploadState,\n} from \"@uploadista/client-browser\";\nimport { computed, readonly, ref } from \"vue\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\n/**\n * Vue composable for uploading multiple files through a flow.\n *\n * Must be used within a component tree that has the Uploadista plugin installed.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useMultiFlowUpload } from '@uploadista/vue';\n *\n * const multiFlowUpload = useMultiFlowUpload({\n * flowConfig: {\n * flowId: \"batch-upload-flow\",\n * inputNodeId: \"upload-node\",\n * storageId: \"my-storage\",\n * },\n * maxConcurrent: 3,\n * onComplete: (items) => {\n * console.log(\"All uploads complete:\", items);\n * },\n * });\n *\n * const handleFileChange = (event: Event) => {\n * const files = (event.target as HTMLInputElement).files;\n * if (files) {\n * multiFlowUpload.addFiles(files);\n * multiFlowUpload.startUpload();\n * }\n * };\n * </script>\n *\n * <template>\n * <div>\n * <input type=\"file\" multiple @change=\"handleFileChange\" />\n *\n * <div v-for=\"item in multiFlowUpload.state.items\" :key=\"item.id\">\n * <span>{{ item.file.name }}</span>\n * <progress :value=\"item.progress\" :max=\"100\" />\n * <button\n * v-if=\"item.status === 'uploading'\"\n * @click=\"multiFlowUpload.abortUpload(item.id)\"\n * >\n * Cancel\n * </button>\n * </div>\n * </div>\n * </template>\n * ```\n */\nexport function useMultiFlowUpload(\n options: MultiFlowUploadOptions<BrowserUploadInput>,\n) {\n const client = useUploadistaClient();\n const items = ref<FlowUploadItem<BrowserUploadInput>[]>([]);\n const abortFns = ref<Map<string, () => void>>(new Map());\n const queue = ref<string[]>([]);\n const activeCount = ref(0);\n\n const maxConcurrent = options.maxConcurrent ?? 3;\n\n const calculateTotalProgress = (\n items: FlowUploadItem<BrowserUploadInput>[],\n ) => {\n if (items.length === 0) return 0;\n const totalProgress = items.reduce((sum, item) => sum + item.progress, 0);\n return Math.round(totalProgress / items.length);\n };\n\n const processQueue = async () => {\n if (activeCount.value >= maxConcurrent || queue.value.length === 0) {\n return;\n }\n\n const itemId = queue.value.shift();\n if (!itemId) return;\n\n const item = items.value.find((i) => i.id === itemId);\n if (!item || item.status !== \"pending\") {\n processQueue();\n return;\n }\n\n activeCount.value++;\n\n items.value = items.value.map((i) =>\n i.id === itemId ? { ...i, status: \"uploading\" as const } : i,\n );\n\n try {\n const { abort, jobId } = await client.client.uploadWithFlow(\n item.file,\n options.flowConfig,\n {\n onJobStart: (jobId: string) => {\n items.value = items.value.map((i) =>\n i.id === itemId ? { ...i, jobId } : i,\n );\n },\n onProgress: (\n _uploadId: string,\n bytesUploaded: number,\n totalBytes: number | null,\n ) => {\n const progress = totalBytes\n ? Math.round((bytesUploaded / totalBytes) * 100)\n : 0;\n\n items.value = items.value.map((i) => {\n if (i.id === itemId) {\n const updated = {\n ...i,\n progress,\n bytesUploaded,\n totalBytes: totalBytes || 0,\n };\n options.onItemProgress?.(updated);\n return updated;\n }\n return i;\n });\n },\n onSuccess: (outputs) => {\n items.value = items.value.map((i) => {\n if (i.id === itemId) {\n const updated = {\n ...i,\n status: \"success\" as const,\n result: outputs,\n progress: 100,\n };\n options.onItemSuccess?.(updated);\n return updated;\n }\n return i;\n });\n\n // Check if all uploads are complete\n const allComplete = items.value.every(\n (i) =>\n i.status === \"success\" ||\n i.status === \"error\" ||\n i.status === \"aborted\",\n );\n if (allComplete) {\n options.onComplete?.(items.value);\n }\n\n abortFns.value.delete(itemId);\n activeCount.value--;\n processQueue();\n },\n onError: (error: Error) => {\n items.value = items.value.map((i) => {\n if (i.id === itemId) {\n const updated = { ...i, status: \"error\" as const, error };\n options.onItemError?.(updated, error);\n return updated;\n }\n return i;\n });\n\n // Check if all uploads are complete\n const allComplete = items.value.every(\n (i) =>\n i.status === \"success\" ||\n i.status === \"error\" ||\n i.status === \"aborted\",\n );\n if (allComplete) {\n options.onComplete?.(items.value);\n }\n\n abortFns.value.delete(itemId);\n activeCount.value--;\n processQueue();\n },\n onShouldRetry: options.onShouldRetry,\n },\n );\n\n abortFns.value.set(itemId, abort);\n\n items.value = items.value.map((i) =>\n i.id === itemId ? { ...i, jobId } : i,\n );\n } catch (error) {\n items.value = items.value.map((i) =>\n i.id === itemId\n ? { ...i, status: \"error\" as const, error: error as Error }\n : i,\n );\n\n activeCount.value--;\n processQueue();\n }\n };\n\n const addFiles = (files: File[] | FileList) => {\n const fileArray = Array.from(files);\n const newItems: FlowUploadItem<BrowserUploadInput>[] = fileArray.map(\n (file) => ({\n id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n file,\n status: \"pending\",\n progress: 0,\n bytesUploaded: 0,\n totalBytes: file.size,\n error: null,\n result: null,\n jobId: null,\n }),\n );\n\n items.value = [...items.value, ...newItems];\n };\n\n const removeFile = (id: string) => {\n const abortFn = abortFns.value.get(id);\n if (abortFn) {\n abortFn();\n abortFns.value.delete(id);\n }\n\n items.value = items.value.filter((item) => item.id !== id);\n queue.value = queue.value.filter((queueId) => queueId !== id);\n };\n\n const startUpload = () => {\n const pendingItems = items.value.filter(\n (item) => item.status === \"pending\",\n );\n queue.value.push(...pendingItems.map((item) => item.id));\n\n for (let i = 0; i < maxConcurrent; i++) {\n processQueue();\n }\n };\n\n const abortUpload = (id: string) => {\n const abortFn = abortFns.value.get(id);\n if (abortFn) {\n abortFn();\n abortFns.value.delete(id);\n\n items.value = items.value.map((item) =>\n item.id === id ? { ...item, status: \"aborted\" as const } : item,\n );\n\n activeCount.value--;\n processQueue();\n }\n };\n\n const abortAll = () => {\n for (const abortFn of abortFns.value.values()) {\n abortFn();\n }\n abortFns.value.clear();\n queue.value = [];\n activeCount.value = 0;\n\n items.value = items.value.map((item) =>\n item.status === \"uploading\"\n ? { ...item, status: \"aborted\" as const }\n : item,\n );\n };\n\n const clear = () => {\n abortAll();\n items.value = [];\n };\n\n const retryUpload = (id: string) => {\n items.value = items.value.map((item) =>\n item.id === id\n ? {\n ...item,\n status: \"pending\" as const,\n progress: 0,\n bytesUploaded: 0,\n error: null,\n }\n : item,\n );\n\n queue.value.push(id);\n processQueue();\n };\n\n const state = computed<MultiFlowUploadState<BrowserUploadInput>>(() => ({\n items: items.value,\n totalProgress: calculateTotalProgress(items.value),\n activeUploads: items.value.filter((item) => item.status === \"uploading\")\n .length,\n completedUploads: items.value.filter((item) => item.status === \"success\")\n .length,\n failedUploads: items.value.filter((item) => item.status === \"error\").length,\n }));\n\n return {\n state: readonly(state),\n addFiles,\n removeFile,\n startUpload,\n abortUpload,\n abortAll,\n clear,\n retryUpload,\n isUploading: computed(() => state.value.activeUploads > 0),\n };\n}\n","import type { UploadOptions } from \"@uploadista/client-browser\";\nimport type { UploadMetrics } from \"@uploadista/client-core\";\nimport type { UploadFile } from \"@uploadista/core/types\";\nimport { computed, readonly, ref } from \"vue\";\nimport type { UploadInput, UploadState, UploadStatus } from \"./useUpload\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\nexport interface UploadItem {\n id: string;\n file: UploadInput;\n state: UploadState;\n}\n\nexport interface MultiUploadOptions\n extends Omit<UploadOptions, \"onSuccess\" | \"onError\" | \"onProgress\"> {\n /**\n * Maximum number of concurrent uploads\n */\n maxConcurrent?: number;\n\n /**\n * Called when an individual file upload starts\n */\n onUploadStart?: (item: UploadItem) => void;\n\n /**\n * Called when an individual file upload progresses\n */\n onUploadProgress?: (\n item: UploadItem,\n progress: number,\n bytesUploaded: number,\n totalBytes: number | null,\n ) => void;\n\n /**\n * Called when an individual file upload succeeds\n */\n onUploadSuccess?: (item: UploadItem, result: UploadFile) => void;\n\n /**\n * Called when an individual file upload fails\n */\n onUploadError?: (item: UploadItem, error: Error) => void;\n\n /**\n * Called when all uploads complete (successfully or with errors)\n */\n onComplete?: (results: {\n successful: UploadItem[];\n failed: UploadItem[];\n total: number;\n }) => void;\n}\n\nexport interface MultiUploadState {\n /**\n * Total number of uploads\n */\n total: number;\n\n /**\n * Number of completed uploads (successful + failed)\n */\n completed: number;\n\n /**\n * Number of successful uploads\n */\n successful: number;\n\n /**\n * Number of failed uploads\n */\n failed: number;\n\n /**\n * Number of currently uploading files\n */\n uploading: number;\n\n /**\n * Overall progress as a percentage (0-100)\n */\n progress: number;\n\n /**\n * Total bytes uploaded across all files\n */\n totalBytesUploaded: number;\n\n /**\n * Total bytes to upload across all files\n */\n totalBytes: number;\n\n /**\n * Whether any uploads are currently active\n */\n isUploading: boolean;\n\n /**\n * Whether all uploads have completed\n */\n isComplete: boolean;\n}\n\n/**\n * Vue composable for managing multiple file uploads with queue management,\n * concurrent upload limits, and batch operations.\n *\n * Must be used within a component tree that has the Uploadista plugin installed.\n *\n * @param options - Multi-upload configuration and event handlers\n * @returns Multi-upload state and control methods\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useMultiUpload } from '@uploadista/vue';\n *\n * const multiUpload = useMultiUpload({\n * maxConcurrent: 3,\n * onUploadSuccess: (item, result) => {\n * console.log(`${item.file.name} uploaded successfully`);\n * },\n * onComplete: (results) => {\n * console.log(`Upload batch complete: ${results.successful.length}/${results.total} successful`);\n * },\n * });\n *\n * const handleFileChange = (event: Event) => {\n * const files = (event.target as HTMLInputElement).files;\n * if (files) {\n * multiUpload.addFiles(Array.from(files));\n * }\n * };\n * </script>\n *\n * <template>\n * <div>\n * <input type=\"file\" multiple @change=\"handleFileChange\" />\n *\n * <div>Progress: {{ multiUpload.state.progress }}%</div>\n * <div>\n * {{ multiUpload.state.uploading }} uploading,\n * {{ multiUpload.state.successful }} successful,\n * {{ multiUpload.state.failed }} failed\n * </div>\n *\n * <button @click=\"multiUpload.startAll\" :disabled=\"multiUpload.state.isUploading\">\n * Start All\n * </button>\n * <button @click=\"multiUpload.abortAll\" :disabled=\"!multiUpload.state.isUploading\">\n * Abort All\n * </button>\n * <button @click=\"multiUpload.retryFailed\" :disabled=\"multiUpload.state.failed === 0\">\n * Retry Failed\n * </button>\n *\n * <div v-for=\"item in multiUpload.items\" :key=\"item.id\">\n * {{ item.file.name }}: {{ item.state.status }} ({{ item.state.progress }}%)\n * </div>\n * </div>\n * </template>\n * ```\n */\nexport function useMultiUpload(options: MultiUploadOptions = {}) {\n const uploadClient = useUploadistaClient();\n const { maxConcurrent = 3 } = options;\n const items = ref<UploadItem[]>([]);\n const nextId = ref(0);\n const activeUploads = ref(new Set<string>());\n\n // Store abort controllers for each upload\n const abortControllers = ref<Map<string, { abort: () => void }>>(new Map());\n\n // Generate a unique ID for each upload item\n const generateId = () => {\n return `upload-${Date.now()}-${nextId.value++}`;\n };\n\n // State update callback for individual uploads\n const onStateUpdate = (id: string, state: Partial<UploadState>) => {\n items.value = items.value.map((item) =>\n item.id === id ? { ...item, state: { ...item.state, ...state } } : item,\n );\n };\n\n // Check if all uploads are complete and trigger completion callback\n const checkForCompletion = () => {\n const allComplete = items.value.every((item) =>\n [\"success\", \"error\", \"aborted\"].includes(item.state.status),\n );\n\n if (allComplete && items.value.length > 0) {\n const successful = items.value.filter(\n (item) => item.state.status === \"success\",\n );\n const failed = items.value.filter((item) =>\n [\"error\", \"aborted\"].includes(item.state.status),\n );\n\n options.onComplete?.({\n successful,\n failed,\n total: items.value.length,\n });\n }\n };\n\n // Start the next available upload if we have capacity\n const startNextUpload = async () => {\n if (activeUploads.value.size >= maxConcurrent) {\n return;\n }\n\n const nextItem = items.value.find(\n (item) =>\n item.state.status === \"idle\" && !activeUploads.value.has(item.id),\n );\n\n if (!nextItem) {\n return;\n }\n\n activeUploads.value.add(nextItem.id);\n options.onUploadStart?.(nextItem);\n\n // Update state to uploading\n onStateUpdate(nextItem.id, { status: \"uploading\" });\n\n try {\n const controller = await uploadClient.client.upload(nextItem.file, {\n metadata: options.metadata,\n uploadLengthDeferred: options.uploadLengthDeferred,\n uploadSize: options.uploadSize,\n\n onProgress: (\n _uploadId: string,\n bytesUploaded: number,\n totalBytes: number | null,\n ) => {\n const progress = totalBytes\n ? Math.round((bytesUploaded / totalBytes) * 100)\n : 0;\n\n onStateUpdate(nextItem.id, {\n progress,\n bytesUploaded,\n totalBytes,\n });\n\n options.onUploadProgress?.(\n nextItem,\n progress,\n bytesUploaded,\n totalBytes,\n );\n },\n\n onChunkComplete: () => {\n // Optional: could expose this as an option\n },\n\n onSuccess: (result: UploadFile) => {\n onStateUpdate(nextItem.id, {\n status: \"success\",\n result,\n progress: 100,\n });\n\n const updatedItem = {\n ...nextItem,\n state: { ...nextItem.state, status: \"success\" as const, result },\n };\n options.onUploadSuccess?.(updatedItem, result);\n\n // Mark complete and start next\n activeUploads.value.delete(nextItem.id);\n abortControllers.value.delete(nextItem.id);\n startNextUpload();\n checkForCompletion();\n },\n\n onError: (error: Error) => {\n onStateUpdate(nextItem.id, {\n status: \"error\",\n error,\n });\n\n const updatedItem = {\n ...nextItem,\n state: { ...nextItem.state, status: \"error\" as const, error },\n };\n options.onUploadError?.(updatedItem, error);\n\n // Mark complete and start next\n activeUploads.value.delete(nextItem.id);\n abortControllers.value.delete(nextItem.id);\n startNextUpload();\n checkForCompletion();\n },\n\n onShouldRetry: options.onShouldRetry,\n });\n\n // Store abort controller\n abortControllers.value.set(nextItem.id, controller);\n } catch (error) {\n onStateUpdate(nextItem.id, {\n status: \"error\",\n error: error as Error,\n });\n\n const updatedItem = {\n ...nextItem,\n state: {\n ...nextItem.state,\n status: \"error\" as const,\n error: error as Error,\n },\n };\n options.onUploadError?.(updatedItem, error as Error);\n\n // Mark complete and start next\n activeUploads.value.delete(nextItem.id);\n abortControllers.value.delete(nextItem.id);\n startNextUpload();\n checkForCompletion();\n }\n };\n\n // Calculate overall state\n const state = computed<MultiUploadState>(() => {\n const itemsList = items.value;\n return {\n total: itemsList.length,\n completed: itemsList.filter((item) =>\n [\"success\", \"error\", \"aborted\"].includes(item.state.status),\n ).length,\n successful: itemsList.filter((item) => item.state.status === \"success\")\n .length,\n failed: itemsList.filter((item) =>\n [\"error\", \"aborted\"].includes(item.state.status),\n ).length,\n uploading: itemsList.filter((item) => item.state.status === \"uploading\")\n .length,\n progress:\n itemsList.length > 0\n ? Math.round(\n itemsList.reduce((sum, item) => sum + item.state.progress, 0) /\n itemsList.length,\n )\n : 0,\n totalBytesUploaded: itemsList.reduce(\n (sum, item) => sum + item.state.bytesUploaded,\n 0,\n ),\n totalBytes: itemsList.reduce(\n (sum, item) => sum + (item.state.totalBytes || 0),\n 0,\n ),\n isUploading: itemsList.some((item) => item.state.status === \"uploading\"),\n isComplete:\n itemsList.length > 0 &&\n itemsList.every((item) =>\n [\"success\", \"error\", \"aborted\"].includes(item.state.status),\n ),\n };\n });\n\n const addFiles = (files: UploadInput[]) => {\n const newItems: UploadItem[] = files.map((file) => {\n const id = generateId();\n return {\n id,\n file,\n state: {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n totalBytes: file instanceof File ? file.size : null,\n error: null,\n result: null,\n },\n };\n });\n\n items.value = [...items.value, ...newItems];\n };\n\n const removeItem = (id: string) => {\n const item = items.value.find((i) => i.id === id);\n if (item && item.state.status === \"uploading\") {\n // Abort before removing\n const controller = abortControllers.value.get(id);\n if (controller) {\n controller.abort();\n abortControllers.value.delete(id);\n }\n }\n\n items.value = items.value.filter((item) => item.id !== id);\n activeUploads.value.delete(id);\n };\n\n const abortUpload = (id: string) => {\n const item = items.value.find((i) => i.id === id);\n if (item && item.state.status === \"uploading\") {\n const controller = abortControllers.value.get(id);\n if (controller) {\n controller.abort();\n abortControllers.value.delete(id);\n }\n\n activeUploads.value.delete(id);\n\n items.value = items.value.map((i) =>\n i.id === id\n ? { ...i, state: { ...i.state, status: \"aborted\" as const } }\n : i,\n );\n\n // Try to start next upload in queue\n startNextUpload();\n }\n };\n\n const retryUpload = (id: string) => {\n const item = items.value.find((i) => i.id === id);\n if (item && [\"error\", \"aborted\"].includes(item.state.status)) {\n items.value = items.value.map((i) =>\n i.id === id\n ? {\n ...i,\n state: { ...i.state, status: \"idle\" as const, error: null },\n }\n : i,\n );\n\n // Auto-start the upload\n setTimeout(() => startNextUpload(), 0);\n }\n };\n\n const startAll = () => {\n // Start as many uploads as we can up to the concurrent limit\n const idleItems = items.value.filter(\n (item) => item.state.status === \"idle\",\n );\n const slotsAvailable = maxConcurrent - activeUploads.value.size;\n const itemsToStart = idleItems.slice(0, slotsAvailable);\n\n for (const _item of itemsToStart) {\n startNextUpload();\n }\n };\n\n const abortAll = () => {\n items.value\n .filter((item) => item.state.status === \"uploading\")\n .forEach((item) => {\n const controller = abortControllers.value.get(item.id);\n if (controller) {\n controller.abort();\n abortControllers.value.delete(item.id);\n }\n });\n\n activeUploads.value.clear();\n\n // Update all uploading items to aborted status\n items.value = items.value.map((item) =>\n item.state.status === \"uploading\"\n ? { ...item, state: { ...item.state, status: \"aborted\" as const } }\n : item,\n );\n };\n\n const retryFailed = () => {\n const failedItems = items.value.filter((item) =>\n [\"error\", \"aborted\"].includes(item.state.status),\n );\n\n if (failedItems.length > 0) {\n items.value = items.value.map((item) =>\n failedItems.some((f) => f.id === item.id)\n ? {\n ...item,\n state: { ...item.state, status: \"idle\" as const, error: null },\n }\n : item,\n );\n\n // Auto-start uploads if we have capacity\n setTimeout(startAll, 0);\n }\n };\n\n const clearCompleted = () => {\n items.value = items.value.filter(\n (item) => ![\"success\", \"error\", \"aborted\"].includes(item.state.status),\n );\n };\n\n const clearAll = () => {\n abortAll();\n items.value = [];\n activeUploads.value.clear();\n };\n\n const getItemsByStatus = (status: UploadStatus) => {\n return items.value.filter((item) => item.state.status === status);\n };\n\n // Create aggregated metrics object that delegates to the upload client\n const metrics: UploadMetrics = {\n getInsights: () => uploadClient.client.getChunkingInsights(),\n exportMetrics: () => uploadClient.client.exportMetrics(),\n getNetworkMetrics: () => uploadClient.client.getNetworkMetrics(),\n getNetworkCondition: () => uploadClient.client.getNetworkCondition(),\n resetMetrics: () => uploadClient.client.resetMetrics(),\n };\n\n return {\n state: readonly(state),\n items: readonly(items),\n addFiles,\n removeItem,\n removeFile: removeItem, // Alias for consistency\n startAll,\n abortUpload,\n abortAll,\n retryUpload,\n retryFailed,\n clearCompleted,\n clearAll,\n getItemsByStatus,\n metrics,\n };\n}\n","import type {\n ChunkMetrics,\n PerformanceInsights,\n UploadSessionMetrics,\n} from \"@uploadista/client-browser\";\nimport type {\n UploadFunction,\n UploadMetrics,\n UploadOptions,\n} from \"@uploadista/client-core\";\nimport {\n UploadManager,\n type UploadState,\n type UploadStatus,\n} from \"@uploadista/client-core\";\nimport { computed, onUnmounted, ref } from \"vue\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\n// Re-export types from core for convenience\nexport type { UploadState, UploadStatus };\nexport type UploadInput = File | Blob;\nexport type { ChunkMetrics, PerformanceInsights, UploadSessionMetrics };\n\nconst initialState: UploadState = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n totalBytes: null,\n error: null,\n result: null,\n};\n\n/**\n * Vue composable for managing individual file uploads with full state management.\n * Provides upload progress tracking, error handling, abort functionality, and retry logic.\n *\n * Must be used within a component tree that has the Uploadista plugin installed.\n *\n * @param options - Upload configuration and event handlers\n * @returns Upload state and control methods\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useUpload } from '@uploadista/vue';\n *\n * const upload = useUpload({\n * onSuccess: (result) => console.log('Upload complete:', result),\n * onError: (error) => console.error('Upload failed:', error),\n * onProgress: (progress) => console.log('Progress:', progress + '%'),\n * });\n *\n * const handleFileChange = (event: Event) => {\n * const file = (event.target as HTMLInputElement).files?.[0];\n * if (file) upload.upload(file);\n * };\n * </script>\n *\n * <template>\n * <div>\n * <input type=\"file\" @change=\"handleFileChange\" />\n * <div v-if=\"upload.isUploading\">Progress: {{ upload.state.progress }}%</div>\n * <div v-if=\"upload.state.error\">Error: {{ upload.state.error.message }}</div>\n * <button v-if=\"upload.canRetry\" @click=\"upload.retry\">Retry</button>\n * <button @click=\"upload.abort\" :disabled=\"!upload.isUploading\">Abort</button>\n * </div>\n * </template>\n * ```\n */\nexport function useUpload(options: UploadOptions = {}) {\n const uploadistaClient = useUploadistaClient();\n const state = ref<UploadState>({ ...initialState });\n let manager: UploadManager | null = null;\n\n // Wrap the client's upload method to match UploadFunction signature\n const uploadFn: UploadFunction<UploadInput> = (\n input: UploadInput,\n opts: UploadOptions,\n ) => uploadistaClient.client.upload(input, opts);\n\n // Create UploadManager instance\n manager = new UploadManager(\n uploadFn,\n {\n onStateChange: (newState: UploadState) => {\n state.value = newState;\n },\n onProgress: options.onProgress,\n onChunkComplete: options.onChunkComplete,\n onSuccess: options.onSuccess,\n onError: options.onError,\n onAbort: options.onAbort,\n },\n options,\n );\n\n // Clean up manager when component unmounts\n onUnmounted(() => {\n manager?.cleanup();\n });\n\n // Upload function\n const upload = (file: UploadInput) => {\n manager?.upload(file);\n };\n\n // Abort function\n const abort = () => {\n manager?.abort();\n };\n\n // Reset function\n const reset = () => {\n manager?.reset();\n };\n\n // Retry function\n const retry = () => {\n manager?.retry();\n };\n\n // Computed properties\n const isUploading = computed(() => state.value.status === \"uploading\");\n const canRetry = computed(() => manager?.canRetry() ?? false);\n\n // Create metrics object that delegates to the upload client\n const metrics: UploadMetrics = {\n getInsights: () => uploadistaClient.client.getChunkingInsights(),\n exportMetrics: () => uploadistaClient.client.exportMetrics(),\n getNetworkMetrics: () => uploadistaClient.client.getNetworkMetrics(),\n getNetworkCondition: () => uploadistaClient.client.getNetworkCondition(),\n resetMetrics: () => uploadistaClient.client.resetMetrics(),\n };\n\n return {\n state,\n upload,\n abort,\n reset,\n retry,\n isUploading,\n canRetry,\n metrics,\n };\n}\n","import type {\n ChunkMetrics,\n PerformanceInsights,\n UploadSessionMetrics,\n} from \"@uploadista/client-browser\";\nimport { onUnmounted, readonly, ref } from \"vue\";\nimport { useUploadistaClient } from \"./useUploadistaClient\";\n\nexport interface UploadMetrics {\n /**\n * Total bytes uploaded across all files\n */\n totalBytesUploaded: number;\n\n /**\n * Total bytes to upload across all files\n */\n totalBytes: number;\n\n /**\n * Overall upload speed in bytes per second\n */\n averageSpeed: number;\n\n /**\n * Current upload speed in bytes per second\n */\n currentSpeed: number;\n\n /**\n * Estimated time remaining in milliseconds\n */\n estimatedTimeRemaining: number | null;\n\n /**\n * Total number of files being tracked\n */\n totalFiles: number;\n\n /**\n * Number of files completed\n */\n completedFiles: number;\n\n /**\n * Number of files currently uploading\n */\n activeUploads: number;\n\n /**\n * Overall progress as percentage (0-100)\n */\n progress: number;\n\n /**\n * Peak upload speed achieved\n */\n peakSpeed: number;\n\n /**\n * Start time of the first upload\n */\n startTime: number | null;\n\n /**\n * End time of the last completed upload\n */\n endTime: number | null;\n\n /**\n * Total duration of all uploads\n */\n totalDuration: number | null;\n\n /**\n * Detailed performance insights from the upload client\n */\n insights: PerformanceInsights;\n\n /**\n * Session metrics for completed uploads\n */\n sessionMetrics: Partial<UploadSessionMetrics>[];\n\n /**\n * Detailed chunk metrics from recent uploads\n */\n chunkMetrics: ChunkMetrics[];\n}\n\nexport interface FileUploadMetrics {\n id: string;\n filename: string;\n size: number;\n bytesUploaded: number;\n progress: number;\n speed: number;\n startTime: number;\n endTime: number | null;\n duration: number | null;\n isComplete: boolean;\n}\n\nexport interface UseUploadMetricsOptions {\n /**\n * Interval for calculating current speed (in milliseconds)\n */\n speedCalculationInterval?: number;\n\n /**\n * Number of speed samples to keep for average calculation\n */\n speedSampleSize?: number;\n\n /**\n * Called when metrics are updated\n */\n onMetricsUpdate?: (metrics: UploadMetrics) => void;\n\n /**\n * Called when a file upload starts\n */\n onFileStart?: (fileMetrics: FileUploadMetrics) => void;\n\n /**\n * Called when a file upload progresses\n */\n onFileProgress?: (fileMetrics: FileUploadMetrics) => void;\n\n /**\n * Called when a file upload completes\n */\n onFileComplete?: (fileMetrics: FileUploadMetrics) => void;\n}\n\nconst initialMetrics: UploadMetrics = {\n totalBytesUploaded: 0,\n totalBytes: 0,\n averageSpeed: 0,\n currentSpeed: 0,\n estimatedTimeRemaining: null,\n totalFiles: 0,\n completedFiles: 0,\n activeUploads: 0,\n progress: 0,\n peakSpeed: 0,\n startTime: null,\n endTime: null,\n totalDuration: null,\n insights: {\n overallEfficiency: 0,\n chunkingEffectiveness: 0,\n networkStability: 0,\n recommendations: [],\n optimalChunkSizeRange: { min: 256 * 1024, max: 2 * 1024 * 1024 },\n },\n sessionMetrics: [],\n chunkMetrics: [],\n};\n\n/**\n * Vue composable for tracking detailed upload metrics and performance statistics.\n * Provides comprehensive monitoring of upload progress, speed, and timing data.\n *\n * @param options - Configuration and event handlers\n * @returns Upload metrics state and control methods\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { useUploadMetrics } from '@uploadista/vue';\n *\n * const uploadMetrics = useUploadMetrics({\n * speedCalculationInterval: 1000, // Update speed every second\n * speedSampleSize: 10, // Keep last 10 speed samples for average\n * onMetricsUpdate: (metrics) => {\n * console.log(`Overall progress: ${metrics.progress}%`);\n * console.log(`Speed: ${(metrics.currentSpeed / 1024).toFixed(1)} KB/s`);\n * console.log(`ETA: ${metrics.estimatedTimeRemaining}ms`);\n * },\n * onFileComplete: (fileMetrics) => {\n * console.log(`${fileMetrics.filename} completed in ${fileMetrics.duration}ms`);\n * },\n * });\n *\n * // Start tracking a file\n * const handleFileStart = (file: File) => {\n * uploadMetrics.startFileUpload(file.name, file.name, file.size);\n * };\n *\n * // Update progress during upload\n * const handleProgress = (fileId: string, bytesUploaded: number) => {\n * uploadMetrics.updateFileProgress(fileId, bytesUploaded);\n * };\n * </script>\n *\n * <template>\n * <div>\n * <div>Overall Progress: {{ uploadMetrics.metrics.progress }}%</div>\n * <div>Speed: {{ (uploadMetrics.metrics.currentSpeed / 1024).toFixed(1) }} KB/s</div>\n * <div>Files: {{ uploadMetrics.metrics.completedFiles }}/{{ uploadMetrics.metrics.totalFiles }}</div>\n *\n * <div v-if=\"uploadMetrics.metrics.estimatedTimeRemaining\">\n * ETA: {{ Math.round(uploadMetrics.metrics.estimatedTimeRemaining / 1000) }}s\n * </div>\n *\n * <div v-for=\"file in uploadMetrics.fileMetrics\" :key=\"file.id\">\n * {{ file.filename }}: {{ file.progress }}% ({{ (file.speed / 1024).toFixed(1) }} KB/s)\n * </div>\n * </div>\n * </template>\n * ```\n */\nexport function useUploadMetrics(options: UseUploadMetricsOptions = {}) {\n const {\n speedCalculationInterval = 1000,\n speedSampleSize = 10,\n onMetricsUpdate,\n onFileStart,\n onFileProgress,\n onFileComplete,\n } = options;\n\n const uploadClient = useUploadistaClient();\n\n const metrics = ref<UploadMetrics>({ ...initialMetrics });\n const fileMetrics = ref<FileUploadMetrics[]>([]);\n\n const speedSamples = ref<Array<{ time: number; bytes: number }>>([]);\n const lastUpdate = ref<number>(0);\n const interval = ref<ReturnType<typeof setInterval> | null>(null);\n\n const calculateSpeed = (currentTime: number, totalBytesUploaded: number) => {\n const sample = { time: currentTime, bytes: totalBytesUploaded };\n speedSamples.value.push(sample);\n\n // Keep only recent samples\n if (speedSamples.value.length > speedSampleSize) {\n speedSamples.value = speedSamples.value.slice(-speedSampleSize);\n }\n\n // Calculate current speed (bytes per second)\n let currentSpeed = 0;\n if (speedSamples.value.length >= 2) {\n const recent = speedSamples.value[speedSamples.value.length - 1];\n const previous = speedSamples.value[speedSamples.value.length - 2];\n if (recent && previous) {\n const timeDiff = (recent.time - previous.time) / 1000; // Convert to seconds\n const bytesDiff = recent.bytes - previous.bytes;\n currentSpeed = timeDiff > 0 ? bytesDiff / timeDiff : 0;\n }\n }\n\n // Calculate average speed\n let averageSpeed = 0;\n if (speedSamples.value.length >= 2) {\n const first = speedSamples.value[0];\n const last = speedSamples.value[speedSamples.value.length - 1];\n if (first && last) {\n const totalTime = (last.time - first.time) / 1000; // Convert to seconds\n const totalBytes = last.bytes - first.bytes;\n averageSpeed = totalTime > 0 ? totalBytes / totalTime : 0;\n }\n }\n\n return { currentSpeed, averageSpeed };\n };\n\n const updateMetrics = () => {\n const now = Date.now();\n\n // Calculate totals from file metrics\n const totalBytes = fileMetrics.value.reduce(\n (sum, file) => sum + file.size,\n 0,\n );\n const totalBytesUploaded = fileMetrics.value.reduce(\n (sum, file) => sum + file.bytesUploaded,\n 0,\n );\n const completedFiles = fileMetrics.value.filter(\n (file) => file.isComplete,\n ).length;\n const activeUploads = fileMetrics.value.filter(\n (file) => !file.isComplete && file.bytesUploaded > 0,\n ).length;\n\n // Calculate speeds\n const { currentSpeed, averageSpeed } = calculateSpeed(\n now,\n totalBytesUploaded,\n );\n\n // Calculate progress\n const progress =\n totalBytes > 0 ? Math.round((totalBytesUploaded / totalBytes) * 100) : 0;\n\n // Calculate estimated time remaining\n let estimatedTimeRemaining: number | null = null;\n if (currentSpeed > 0) {\n const remainingBytes = totalBytes - totalBytesUploaded;\n estimatedTimeRemaining = (remainingBytes / currentSpeed) * 1000; // Convert to milliseconds\n }\n\n // Find start and end times\n const activeTimes = fileMetrics.value.filter((file) => file.startTime > 0);\n const startTime =\n activeTimes.length > 0\n ? Math.min(...activeTimes.map((file) => file.startTime))\n : null;\n\n const completedTimes = fileMetrics.value.filter(\n (file) => file.endTime !== null,\n );\n const endTime =\n completedTimes.length > 0 && completedFiles === fileMetrics.value.length\n ? Math.max(\n ...(completedTimes\n .map((file) => file.endTime)\n .filter((time) => time !== null) as number[]),\n )\n : null;\n\n const totalDuration = startTime && endTime ? endTime - startTime : null;\n\n const newMetrics: UploadMetrics = {\n totalBytesUploaded,\n totalBytes,\n averageSpeed,\n currentSpeed,\n estimatedTimeRemaining,\n totalFiles: fileMetrics.value.length,\n completedFiles,\n activeUploads,\n progress,\n peakSpeed: Math.max(metrics.value.peakSpeed, currentSpeed),\n startTime,\n endTime,\n totalDuration,\n insights: uploadClient.client.getChunkingInsights(),\n sessionMetrics: [uploadClient.client.exportMetrics().session],\n chunkMetrics: uploadClient.client.exportMetrics().chunks,\n };\n\n metrics.value = newMetrics;\n onMetricsUpdate?.(newMetrics);\n };\n\n // Set up periodic speed calculations\n const setupSpeedCalculation = () => {\n if (interval.value) {\n clearInterval(interval.value);\n }\n\n interval.value = setInterval(() => {\n if (\n fileMetrics.value.some(\n (file) => !file.isComplete && file.bytesUploaded > 0,\n )\n ) {\n updateMetrics();\n }\n }, speedCalculationInterval);\n };\n\n const startFileUpload = (id: string, filename: string, size: number) => {\n const now = Date.now();\n\n const fileMetric: FileUploadMetrics = {\n id,\n filename,\n size,\n bytesUploaded: 0,\n progress: 0,\n speed: 0,\n startTime: now,\n endTime: null,\n duration: null,\n isComplete: false,\n };\n\n const existing = fileMetrics.value.find((file) => file.id === id);\n if (existing) {\n fileMetrics.value = fileMetrics.value.map((file) =>\n file.id === id ? fileMetric : file,\n );\n } else {\n fileMetrics.value = [...fileMetrics.value, fileMetric];\n }\n\n onFileStart?.(fileMetric);\n\n // Start speed calculation if this is the first active upload\n if (fileMetrics.value.filter((file) => !file.isComplete).length === 1) {\n setupSpeedCalculation();\n }\n };\n\n const updateFileProgress = (id: string, bytesUploaded: number) => {\n const now = Date.now();\n\n fileMetrics.value = fileMetrics.value.map((file) => {\n if (file.id !== id) return file;\n\n const timeDiff = (now - file.startTime) / 1000; // seconds\n const speed = timeDiff > 0 ? bytesUploaded / timeDiff : 0;\n const progress =\n file.size > 0 ? Math.round((bytesUploaded / file.size) * 100) : 0;\n\n const updatedFile = {\n ...file,\n bytesUploaded,\n progress,\n speed,\n };\n\n onFileProgress?.(updatedFile);\n return updatedFile;\n });\n\n // Trigger metrics update\n setTimeout(updateMetrics, 0);\n };\n\n const completeFileUpload = (id: string) => {\n const now = Date.now();\n\n fileMetrics.value = fileMetrics.value.map((file) => {\n if (file.id !== id) return file;\n\n const duration = now - file.startTime;\n const speed = duration > 0 ? (file.size / duration) * 1000 : 0; // bytes per second\n\n const completedFile = {\n ...file,\n bytesUploaded: file.size,\n progress: 100,\n speed,\n endTime: now,\n duration,\n isComplete: true,\n };\n\n onFileComplete?.(completedFile);\n return completedFile;\n });\n\n // Trigger metrics update\n setTimeout(updateMetrics, 0);\n };\n\n const removeFile = (id: string) => {\n fileMetrics.value = fileMetrics.value.filter((file) => file.id !== id);\n setTimeout(updateMetrics, 0);\n };\n\n const reset = () => {\n if (interval.value) {\n clearInterval(interval.value);\n interval.value = null;\n }\n\n metrics.value = { ...initialMetrics };\n fileMetrics.value = [];\n speedSamples.value = [];\n lastUpdate.value = 0;\n };\n\n const getFileMetrics = (id: string) => {\n return fileMetrics.value.find((file) => file.id === id);\n };\n\n const exportMetrics = () => {\n return {\n overall: metrics.value,\n files: fileMetrics.value,\n exportTime: Date.now(),\n };\n };\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (interval.value) {\n clearInterval(interval.value);\n }\n });\n\n return {\n metrics: readonly(metrics),\n fileMetrics: readonly(fileMetrics),\n startFileUpload,\n updateFileProgress,\n completeFileUpload,\n removeFile,\n reset,\n getFileMetrics,\n exportMetrics,\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import * as vue1 from "vue";
1
+ import * as vue0 from "vue";
2
2
  import { App, InjectionKey, Ref } from "vue";
3
- import { FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResume, FlowEventNodeStart } from "@uploadista/core/flow";
3
+ import { FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResume, FlowEventNodeStart, TypedOutput } from "@uploadista/core/flow";
4
4
  import { UploadEvent, UploadFile } from "@uploadista/core/types";
5
5
  import * as _uploadista_client_browser0 from "@uploadista/client-browser";
6
6
  import { BrowserUploadInput, ChunkMetrics, ChunkMetrics as ChunkMetrics$1, FlowUploadOptions, MultiFlowUploadOptions, PerformanceInsights, PerformanceInsights as PerformanceInsights$1, UploadOptions, UploadSessionMetrics, UploadSessionMetrics as UploadSessionMetrics$1, UploadistaClientOptions, UploadistaEvent, createUploadistaClient } from "@uploadista/client-browser";
@@ -425,7 +425,7 @@ interface DragDropState {
425
425
  * ```
426
426
  */
427
427
  declare function useDragDrop(options?: DragDropOptions): {
428
- state: Readonly<vue1.Ref<{
428
+ state: Readonly<vue0.Ref<{
429
429
  readonly isDragging: boolean;
430
430
  readonly isOver: boolean;
431
431
  readonly isValid: boolean;
@@ -441,7 +441,7 @@ declare function useDragDrop(options?: DragDropOptions): {
441
441
  onDragLeave: (event: DragEvent) => void;
442
442
  onDrop: (event: DragEvent) => void;
443
443
  onInputChange: (event: Event) => void;
444
- inputProps: vue1.ComputedRef<{
444
+ inputProps: vue0.ComputedRef<{
445
445
  type: "file";
446
446
  multiple: boolean;
447
447
  accept: string | undefined;
@@ -451,11 +451,11 @@ declare function useDragDrop(options?: DragDropOptions): {
451
451
  };
452
452
  //#endregion
453
453
  //#region src/composables/useFlowUpload.d.ts
454
- interface UseFlowUploadOptions<TOutput = UploadFile> {
454
+ interface UseFlowUploadOptions {
455
455
  /**
456
456
  * Flow configuration
457
457
  */
458
- flowConfig: FlowUploadOptions<TOutput>["flowConfig"];
458
+ flowConfig: FlowUploadOptions["flowConfig"];
459
459
  /**
460
460
  * Called when upload progress updates
461
461
  */
@@ -471,11 +471,12 @@ interface UseFlowUploadOptions<TOutput = UploadFile> {
471
471
  */
472
472
  onFlowComplete?: (outputs: Record<string, unknown>) => void;
473
473
  /**
474
- * Called when upload succeeds (legacy, single-output flows)
475
- * For single-output flows, receives the value from the specified outputNodeId
476
- * or the first output node if outputNodeId is not specified
474
+ * Called when upload succeeds (receives typed outputs from all output nodes)
475
+ * Each output includes nodeId, optional nodeType, data, and timestamp.
476
+ *
477
+ * @param outputs - Array of typed outputs from all output nodes
477
478
  */
478
- onSuccess?: (result: TOutput) => void;
479
+ onSuccess?: (outputs: TypedOutput[]) => void;
479
480
  /**
480
481
  * Called when upload fails
481
482
  */
@@ -509,8 +510,11 @@ interface UseFlowUploadOptions<TOutput = UploadFile> {
509
510
  * flowId: "my-upload-flow",
510
511
  * storageId: "my-storage",
511
512
  * },
512
- * onSuccess: (result) => {
513
- * console.log("Upload complete:", result);
513
+ * onSuccess: (outputs) => {
514
+ * console.log("Flow outputs:", outputs);
515
+ * for (const output of outputs) {
516
+ * console.log(`${output.nodeId}:`, output.data);
517
+ * }
514
518
  * },
515
519
  * });
516
520
  *
@@ -525,14 +529,13 @@ interface UseFlowUploadOptions<TOutput = UploadFile> {
525
529
  * </template>
526
530
  * ```
527
531
  */
528
- declare function useFlowUpload<TOutput = UploadFile>(options: UseFlowUploadOptions<TOutput>): {
529
- state: Readonly<vue1.Ref<{
532
+ declare function useFlowUpload(options: UseFlowUploadOptions): {
533
+ state: Readonly<vue0.Ref<{
530
534
  readonly status: FlowUploadStatus;
531
535
  readonly progress: number;
532
536
  readonly bytesUploaded: number;
533
537
  readonly totalBytes: number | null;
534
538
  readonly error: Error | null;
535
- readonly result: vue1.DeepReadonly<vue1.UnwrapRef<TOutput>> | null;
536
539
  readonly jobId: string | null;
537
540
  readonly flowStarted: boolean;
538
541
  readonly currentNodeName: string | null;
@@ -617,7 +620,6 @@ declare function useFlowUpload<TOutput = UploadFile>(options: UseFlowUploadOptio
617
620
  readonly bytesUploaded: number;
618
621
  readonly totalBytes: number | null;
619
622
  readonly error: Error | null;
620
- readonly result: vue1.DeepReadonly<vue1.UnwrapRef<TOutput>> | null;
621
623
  readonly jobId: string | null;
622
624
  readonly flowStarted: boolean;
623
625
  readonly currentNodeName: string | null;
@@ -701,9 +703,9 @@ declare function useFlowUpload<TOutput = UploadFile>(options: UseFlowUploadOptio
701
703
  abort: () => void;
702
704
  pause: () => void;
703
705
  reset: () => void;
704
- isUploading: vue1.ComputedRef<boolean>;
705
- isUploadingFile: vue1.ComputedRef<boolean>;
706
- isProcessing: vue1.ComputedRef<boolean>;
706
+ isUploading: vue0.ComputedRef<boolean>;
707
+ isUploadingFile: vue0.ComputedRef<boolean>;
708
+ isProcessing: vue0.ComputedRef<boolean>;
707
709
  };
708
710
  //#endregion
709
711
  //#region src/composables/useMultiFlowUpload.d.ts
@@ -757,7 +759,7 @@ declare function useFlowUpload<TOutput = UploadFile>(options: UseFlowUploadOptio
757
759
  * ```
758
760
  */
759
761
  declare function useMultiFlowUpload(options: MultiFlowUploadOptions<BrowserUploadInput>): {
760
- state: Readonly<vue1.Ref<{
762
+ state: Readonly<vue0.Ref<{
761
763
  readonly items: readonly {
762
764
  readonly id: string;
763
765
  readonly file: {
@@ -893,7 +895,7 @@ declare function useMultiFlowUpload(options: MultiFlowUploadOptions<BrowserUploa
893
895
  abortAll: () => void;
894
896
  clear: () => void;
895
897
  retryUpload: (id: string) => void;
896
- isUploading: vue1.ComputedRef<boolean>;
898
+ isUploading: vue0.ComputedRef<boolean>;
897
899
  };
898
900
  //#endregion
899
901
  //#region src/composables/useUpload.d.ts
@@ -936,7 +938,7 @@ type UploadInput = File | Blob;
936
938
  * ```
937
939
  */
938
940
  declare function useUpload(options?: UploadOptions$1): {
939
- state: vue1.Ref<{
941
+ state: vue0.Ref<{
940
942
  status: UploadStatus;
941
943
  progress: number;
942
944
  bytesUploaded: number;
@@ -1009,8 +1011,8 @@ declare function useUpload(options?: UploadOptions$1): {
1009
1011
  abort: () => void;
1010
1012
  reset: () => void;
1011
1013
  retry: () => void;
1012
- isUploading: vue1.ComputedRef<boolean>;
1013
- canRetry: vue1.ComputedRef<boolean>;
1014
+ isUploading: vue0.ComputedRef<boolean>;
1015
+ canRetry: vue0.ComputedRef<boolean>;
1014
1016
  metrics: UploadMetrics;
1015
1017
  };
1016
1018
  //#endregion
@@ -1153,7 +1155,7 @@ interface MultiUploadState {
1153
1155
  * ```
1154
1156
  */
1155
1157
  declare function useMultiUpload(options?: MultiUploadOptions): {
1156
- state: Readonly<vue1.Ref<{
1158
+ state: Readonly<vue0.Ref<{
1157
1159
  readonly total: number;
1158
1160
  readonly completed: number;
1159
1161
  readonly successful: number;
@@ -1176,7 +1178,7 @@ declare function useMultiUpload(options?: MultiUploadOptions): {
1176
1178
  readonly isUploading: boolean;
1177
1179
  readonly isComplete: boolean;
1178
1180
  }>>;
1179
- items: Readonly<vue1.Ref<readonly {
1181
+ items: Readonly<vue0.Ref<readonly {
1180
1182
  readonly id: string;
1181
1183
  readonly file: {
1182
1184
  readonly lastModified: number;
@@ -1415,7 +1417,7 @@ declare function useUploadistaClient(): {
1415
1417
  onError
1416
1418
  }?: Omit<_uploadista_client_core0.UploadistaUploadOptions, "uploadLengthDeferred" | "uploadSize" | "metadata">) => Promise<{
1417
1419
  abort: () => Promise<void>;
1418
- pause: () => Promise<_uploadista_core0.FlowJob>;
1420
+ pause: () => Promise<void>;
1419
1421
  jobId: string;
1420
1422
  }>;
1421
1423
  abort: (params: Parameters<({
@@ -1676,7 +1678,7 @@ interface UseUploadMetricsOptions {
1676
1678
  * ```
1677
1679
  */
1678
1680
  declare function useUploadMetrics(options?: UseUploadMetricsOptions): {
1679
- metrics: Readonly<vue1.Ref<{
1681
+ metrics: Readonly<vue0.Ref<{
1680
1682
  readonly totalBytesUploaded: number;
1681
1683
  readonly totalBytes: number;
1682
1684
  readonly averageSpeed: number;
@@ -1777,7 +1779,7 @@ declare function useUploadMetrics(options?: UseUploadMetricsOptions): {
1777
1779
  readonly chunkingStrategy?: string | undefined;
1778
1780
  }[];
1779
1781
  }>>;
1780
- fileMetrics: Readonly<vue1.Ref<readonly {
1782
+ fileMetrics: Readonly<vue0.Ref<readonly {
1781
1783
  readonly id: string;
1782
1784
  readonly filename: string;
1783
1785
  readonly size: number;
@@ -1886,4 +1888,4 @@ declare function useUploadMetrics(options?: UseUploadMetricsOptions): {
1886
1888
  };
1887
1889
  //#endregion
1888
1890
  export { UploadProgressEventData as A, isUploadEvent as B, useDragDrop as C, createUploadistaPlugin as D, UploadistaPluginOptions as E, useUploadEvents as F, UseFlowEventsOptions as I, useFlowEvents as L, UploadValidationSuccessEventData as M, UploadValidationWarningEventData as N, UploadFailedEventData as O, UseUploadEventsOptions as P, useUploadistaEvents as R, DragDropState as S, UPLOADISTA_EVENT_SUBSCRIBERS_KEY as T, useMultiFlowUpload as _, useUploadistaClient as a, useFlowUpload as b, UploadItem as c, PerformanceInsights$1 as d, UploadInput as f, useUpload as g, UploadStatus as h, UseUploadistaClientReturn as i, UploadValidationFailedEventData as j, UploadFileEventData as k, useMultiUpload as l, UploadState as m, UseUploadMetricsOptions as n, MultiUploadOptions as o, UploadSessionMetrics$1 as p, useUploadMetrics as r, MultiUploadState as s, FileUploadMetrics as t, ChunkMetrics$1 as u, FlowUploadState as v, UPLOADISTA_CLIENT_KEY as w, DragDropOptions as x, FlowUploadStatus as y, isFlowEvent as z };
1889
- //# sourceMappingURL=index-BpSeJeGd.d.mts.map
1891
+ //# sourceMappingURL=index-B6n-5uJI.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B6n-5uJI.d.mts","names":[],"sources":["../src/composables/eventUtils.ts","../src/composables/useUploadistaEvents.ts","../src/composables/useFlowEvents.ts","../src/composables/useUploadEvents.ts","../src/composables/plugin.ts","../src/composables/useDragDrop.ts","../src/composables/useFlowUpload.ts","../src/composables/useMultiFlowUpload.ts","../src/composables/useUpload.ts","../src/composables/useMultiUpload.ts","../src/composables/useUploadistaClient.ts","../src/composables/useUploadMetrics.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as vue18 from "vue";
1
+ import * as vue14 from "vue";
2
2
 
3
3
  //#region src/providers/UploadistaProvider.vue.d.ts
4
4
  type __VLS_Props = {
@@ -13,13 +13,13 @@ declare var __VLS_1: {};
13
13
  type __VLS_Slots = {} & {
14
14
  default?: (props: typeof __VLS_1) => any;
15
15
  };
16
- declare const __VLS_base: vue18.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue18.ComponentOptionsMixin, vue18.ComponentOptionsMixin, {}, string, vue18.PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
16
+ declare const __VLS_base: vue14.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue14.ComponentOptionsMixin, vue14.ComponentOptionsMixin, {}, string, vue14.PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
17
17
  uploadistaBasePath: string;
18
18
  storageId: string;
19
19
  chunkSize: number;
20
20
  parallelUploads: number;
21
21
  storeFingerprintForResuming: boolean;
22
- }, {}, {}, {}, string, vue18.ComponentProvideOptions, false, {}, any>;
22
+ }, {}, {}, {}, string, vue14.ComponentProvideOptions, false, {}, any>;
23
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
24
24
  declare const _default: typeof __VLS_export;
25
25
  type __VLS_WithSlots<T, S> = T & {
@@ -30,4 +30,4 @@ type __VLS_WithSlots<T, S> = T & {
30
30
  //# sourceMappingURL=UploadistaProvider.vue.d.ts.map
31
31
  //#endregion
32
32
  export { _default as t };
33
- //# sourceMappingURL=index-BmoTISWf.d.mts.map
33
+ //# sourceMappingURL=index-DJfcUUE0.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BmoTISWf.d.mts","names":[],"sources":["../src/providers/UploadistaProvider.vue"],"sourcesContent":[],"mappings":";;;KA0EK,WAAA;;;EAAA,kBAAW,CAAA,EAAA,MAAA;EA0EZ,SAAA,CAAkB,EAAA,MAAA;EACjB,eAAW,CAAA,EAAA,MAAA;EAKV,2BAGJ,CAAA,EAAA,OAAA;CAHc;YANZ,OAMY,EAAA,CAAA,CAAA;KALX,WAAA,GAKW,CAAA,CAAA,GAAA;EAAA,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA,OAJa,OAIb,EAAA,GAAA,GAAA;CAAA;cAAV,UAAU,QAAA,eAAA,CAAA,WAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,qBAAA,EAAA,KAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAAA,KAAA,CAAA,WAAA,EAAA,QAAA,CAAA,WAAA,CAAA,GAAA,QAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EAAA,kBAAA,EAAA,MAAA;EAAA,SAAA,EAAA,MAAA;WAAA,EAAA,MAAA;EAAA,eAAA,EAAA,MAAA;EAIV,2BAAoE,EAAA,OAAA;CAAxB,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAJlC,KAAA,CAAA,uBAAA,EAIkC,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;cAA5C,YAAwD,EAAnC,eAAmC,CAAA,OAAZ,UAAY,EAAA,WAAA,CAAA;cAApB,QAAf,EAAA,OACC,YADD;AAAe,KAYrC,eAXmC,CAAA,CAAA,EAAA,CAAA,CAAA,GAWX,CAXD,GAAA;EAWvB,MAAA,EAAA;YAEK"}
1
+ {"version":3,"file":"index-DJfcUUE0.d.mts","names":[],"sources":["../src/providers/UploadistaProvider.vue"],"sourcesContent":[],"mappings":";;;KA0EK,WAAA;;;EAAA,kBAAW,CAAA,EAAA,MAAA;EA0EZ,SAAA,CAAkB,EAAA,MAAA;EACjB,eAAW,CAAA,EAAA,MAAA;EAKV,2BAGJ,CAAA,EAAA,OAAA;CAHc;YANZ,OAMY,EAAA,CAAA,CAAA;KALX,WAAA,GAKW,CAAA,CAAA,GAAA;EAAA,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA,OAJa,OAIb,EAAA,GAAA,GAAA;CAAA;cAAV,UAAU,QAAA,eAAA,CAAA,WAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,qBAAA,EAAA,KAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAAA,KAAA,CAAA,WAAA,EAAA,QAAA,CAAA,WAAA,CAAA,GAAA,QAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EAAA,kBAAA,EAAA,MAAA;EAAA,SAAA,EAAA,MAAA;WAAA,EAAA,MAAA;EAAA,eAAA,EAAA,MAAA;EAIV,2BAAoE,EAAA,OAAA;CAAxB,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAJlC,KAAA,CAAA,uBAAA,EAIkC,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;cAA5C,YAAwD,EAAnC,eAAmC,CAAA,OAAZ,UAAY,EAAA,WAAA,CAAA;cAApB,QAAf,EAAA,OACC,YADD;AAAe,KAYrC,eAXmC,CAAA,CAAA,EAAA,CAAA,CAAA,GAWX,CAXD,GAAA;EAWvB,MAAA,EAAA;YAEK"}
@@ -1,5 +1,5 @@
1
- import { c as UploadItem, o as MultiUploadOptions } from "./index-BpSeJeGd.mjs";
2
- import * as vue28 from "vue";
1
+ import { c as UploadItem, o as MultiUploadOptions } from "./index-B6n-5uJI.mjs";
2
+ import * as vue24 from "vue";
3
3
  import { BrowserUploadInput, FlowUploadConfig, FlowUploadItem, FlowUploadOptions, UploadOptions } from "@uploadista/client-browser";
4
4
 
5
5
  //#region src/components/FlowUploadList.vue.d.ts
@@ -46,7 +46,7 @@ type __VLS_Slots$3 = {
46
46
  };
47
47
  }): any;
48
48
  };
49
- declare const __VLS_base$3: vue28.DefineComponent<FlowUploadListProps, {}, {}, {}, {}, vue28.ComponentOptionsMixin, vue28.ComponentOptionsMixin, {}, string, vue28.PublicProps, Readonly<FlowUploadListProps> & Readonly<{}>, {}, {}, {}, {}, string, vue28.ComponentProvideOptions, false, {}, any>;
49
+ declare const __VLS_base$3: vue24.DefineComponent<FlowUploadListProps, {}, {}, {}, {}, vue24.ComponentOptionsMixin, vue24.ComponentOptionsMixin, {}, string, vue24.PublicProps, Readonly<FlowUploadListProps> & Readonly<{}>, {}, {}, {}, {}, string, vue24.ComponentProvideOptions, false, {}, any>;
50
50
  declare const __VLS_export$3: __VLS_WithSlots$3<typeof __VLS_base$3, __VLS_Slots$3>;
51
51
  declare const _default: typeof __VLS_export$3;
52
52
  type __VLS_WithSlots$3<T, S> = T & {
@@ -104,12 +104,12 @@ type __VLS_Slots$2 = {
104
104
  openFilePicker: () => void;
105
105
  }): any;
106
106
  };
107
- declare const __VLS_base$2: vue28.DefineComponent<FlowUploadZoneProps, {}, {}, {}, {}, vue28.ComponentOptionsMixin, vue28.ComponentOptionsMixin, {
107
+ declare const __VLS_base$2: vue24.DefineComponent<FlowUploadZoneProps, {}, {}, {}, {}, vue24.ComponentOptionsMixin, vue24.ComponentOptionsMixin, {
108
108
  "upload-start": (file: File) => any;
109
109
  "validation-error": (errors: string[]) => any;
110
110
  "upload-complete": (result: any) => any;
111
111
  "upload-error": (error: Error) => any;
112
- }, string, vue28.PublicProps, Readonly<FlowUploadZoneProps> & Readonly<{
112
+ }, string, vue24.PublicProps, Readonly<FlowUploadZoneProps> & Readonly<{
113
113
  "onUpload-start"?: ((file: File) => any) | undefined;
114
114
  "onValidation-error"?: ((errors: string[]) => any) | undefined;
115
115
  "onUpload-complete"?: ((result: any) => any) | undefined;
@@ -117,7 +117,7 @@ declare const __VLS_base$2: vue28.DefineComponent<FlowUploadZoneProps, {}, {}, {
117
117
  }>, {
118
118
  multiple: boolean;
119
119
  disabled: boolean;
120
- }, {}, {}, {}, string, vue28.ComponentProvideOptions, false, {}, any>;
120
+ }, {}, {}, {}, string, vue24.ComponentProvideOptions, false, {}, any>;
121
121
  declare const __VLS_export$2: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
122
122
  declare const _default$1: typeof __VLS_export$2;
123
123
  type __VLS_WithSlots$2<T, S> = T & {
@@ -168,7 +168,7 @@ type __VLS_Slots$1 = {
168
168
  };
169
169
  }): any;
170
170
  };
171
- declare const __VLS_base$1: vue28.DefineComponent<UploadListProps, {}, {}, {}, {}, vue28.ComponentOptionsMixin, vue28.ComponentOptionsMixin, {}, string, vue28.PublicProps, Readonly<UploadListProps> & Readonly<{}>, {}, {}, {}, {}, string, vue28.ComponentProvideOptions, false, {}, any>;
171
+ declare const __VLS_base$1: vue24.DefineComponent<UploadListProps, {}, {}, {}, {}, vue24.ComponentOptionsMixin, vue24.ComponentOptionsMixin, {}, string, vue24.PublicProps, Readonly<UploadListProps> & Readonly<{}>, {}, {}, {}, {}, string, vue24.ComponentProvideOptions, false, {}, any>;
172
172
  declare const __VLS_export$1: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
173
173
  declare const _default$2: typeof __VLS_export$1;
174
174
  type __VLS_WithSlots$1<T, S> = T & {
@@ -228,18 +228,18 @@ type __VLS_Slots = {
228
228
  openFilePicker: () => void;
229
229
  }): any;
230
230
  };
231
- declare const __VLS_base: vue28.DefineComponent<UploadZoneProps, {}, {}, {}, {}, vue28.ComponentOptionsMixin, vue28.ComponentOptionsMixin, {
231
+ declare const __VLS_base: vue24.DefineComponent<UploadZoneProps, {}, {}, {}, {}, vue24.ComponentOptionsMixin, vue24.ComponentOptionsMixin, {
232
232
  "file-select": (files: File[]) => any;
233
233
  "upload-start": (files: File[]) => any;
234
234
  "validation-error": (errors: string[]) => any;
235
- }, string, vue28.PublicProps, Readonly<UploadZoneProps> & Readonly<{
235
+ }, string, vue24.PublicProps, Readonly<UploadZoneProps> & Readonly<{
236
236
  "onFile-select"?: ((files: File[]) => any) | undefined;
237
237
  "onUpload-start"?: ((files: File[]) => any) | undefined;
238
238
  "onValidation-error"?: ((errors: string[]) => any) | undefined;
239
239
  }>, {
240
240
  multiple: boolean;
241
241
  disabled: boolean;
242
- }, {}, {}, {}, string, vue28.ComponentProvideOptions, false, {}, any>;
242
+ }, {}, {}, {}, string, vue24.ComponentProvideOptions, false, {}, any>;
243
243
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
244
244
  declare const _default$3: typeof __VLS_export;
245
245
  type __VLS_WithSlots<T, S> = T & {
@@ -251,4 +251,4 @@ type __VLS_WithSlots<T, S> = T & {
251
251
 
252
252
  //#endregion
253
253
  export { _default as i, _default$2 as n, _default$1 as r, _default$3 as t };
254
- //# sourceMappingURL=index-Dk4eOChf.d.mts.map
254
+ //# sourceMappingURL=index-DpUo5A4y.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Dk4eOChf.d.mts","names":[],"sources":["../src/components/FlowUploadList.vue","../src/components/FlowUploadZone.vue","../src/components/UploadList.vue","../src/components/UploadZone.vue"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index-DpUo5A4y.d.mts","names":[],"sources":["../src/components/FlowUploadList.vue","../src/components/FlowUploadZone.vue","../src/components/UploadList.vue","../src/components/UploadZone.vue"],"sourcesContent":[],"mappings":"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"}