barneo-file-service
Version:
Комплексная библиотека Vue 3 для работы с файлами в приложениях Barneo. Предоставляет мощную функциональность для загрузки, управления и обработки файлов с валидацией, отслеживанием прогресса и поддержкой localStorage.
38 lines (37 loc) • 41.2 kB
JavaScript
(function(v,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(v=typeof globalThis<"u"?globalThis:v||self,e(v.BarneoFileService={},v.Vue))})(this,function(v,e){"use strict";var X=(c=>(c.KANGA_RU="kanga_ru",c.PIM="pim",c.BARNEO_CRM="barneo_crm",c.BARNEO_CHAT="barneo_chat",c.BARNEO_TASKS="barneo_tasks",c.DEV="dev",c.BARNEO_NEW="barneo_new",c))(X||{});class Q{constructor(d){this.config=d}async uploadFile(d,r){try{const o=new FormData;o.append("files",d),o.append("appName",r.appName);const a=await fetch(`${this.config.apiUrl}`,{method:"POST",headers:this.config.headers,body:o,signal:AbortSignal.timeout(this.config.timeout||3e4)});if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);return await a.json()}catch(o){throw r.onError&&r.onError(o instanceof Error?o:new Error("Unknown error occurred")),o}}async uploadFiles(d,r){try{const o=d.map(n=>this.uploadFile(n,r));return(await Promise.all(o)).flat()}catch(o){throw r.onError&&r.onError(o instanceof Error?o:new Error("Unknown error occurred")),o}}}class P{constructor(d){this.config={},this.uploadService=null,this.initializeWithConfig(d)}initializeWithConfig(d){const r={apiUrl:"https://api.example.com/upload",appName:"pim",headers:{},timeout:3e4,maxFiles:10,maxFileSize:52428800,allowedTypes:["image/jpeg","image/png","application/pdf"],maxStoredFiles:100,multiple:!0,onProgress:void 0,onError:void 0,onUploadSuccess:void 0,onUploadComplete:void 0};this.config=this.mergeConfig(r,d||{}),this.initializeUploadService()}static getInstance(d){return P.instance||(P.instance=new P(d)),P.instance}static initialize(d){return P.getInstance(d)}getConfig(){return this.config}getUploadService(){return this.uploadService||this.initializeUploadService(),this.uploadService}updateConfig(d){this.config=this.mergeConfig(this.config,d),this.initializeUploadService()}updateApiConfig(d){this.config={...this.config,...d},this.initializeUploadService()}updateFileConfig(d){this.config={...this.config,...d}}updateCallbacks(d){this.config={...this.config,...d}}resetConfig(){this.config={apiUrl:"https://api.example.com/upload",appName:"pim",headers:{},timeout:3e4,maxFiles:10,maxFileSize:50*1024*1024,allowedTypes:["image/jpeg","image/png","application/pdf"],multiple:!0,maxStoredFiles:100,onProgress:void 0,onError:void 0,onUploadSuccess:void 0,onUploadComplete:void 0},this.initializeUploadService()}mergeConfig(d,r){return{...d,...r,headers:{...d.headers,...r.headers}}}initializeUploadService(){this.uploadService=new Q(this.config)}install(d,r){r&&this.updateConfig(r),d.provide("fileServiceConfig",this.config),d.provide("fileUploadService",this.getUploadService()),d.provide("fileServiceConfigManager",this),typeof window<"u"&&(window.__fileServiceConfigManager=this)}}const Y={install(c,d){P.getInstance(d).install(c,d)}};function pe(){const c=P.getInstance();return{config:c.getConfig(),uploadService:c.getUploadService(),updateConfig:c.updateConfig.bind(c),updateApiConfig:c.updateApiConfig.bind(c),updateFileConfig:c.updateFileConfig.bind(c),updateCallbacks:c.updateCallbacks.bind(c),resetConfig:c.resetConfig.bind(c)}}function ee(c={}){const{maxFiles:d=10,maxFileSize:r=50*1024*1024,allowedTypes:o=[],multiple:a=!0}=c,n=e.ref([]),k=e.ref([]),A=e.computed(()=>n.value.length>0),w=e.computed(()=>n.value.reduce((y,h)=>y+h.size,0)),x=e.computed(()=>[...new Set(n.value.map(y=>y.type))]),T=e.computed(()=>a&&n.value.length<d),M=y=>{const h=Array.from(y),C=[];h.forEach(u=>{if(n.value.length>=d){C.push(`Максимальное количество файлов: ${d}`);return}if(u.size>r){C.push(`Файл ${u.name} превышает максимальный размер ${b(r)}`);return}if(o.length>0&&!o.includes(u.type)){C.push(`Тип файла ${u.name} не поддерживается`);return}n.value.push(u)}),k.value=[...k.value,...C]},S=y=>{y>=0&&y<n.value.length&&n.value.splice(y,1)},i=y=>{const h=n.value.findIndex(C=>C.name===y);h!==-1&&S(h)},z=()=>{n.value=[],k.value=[]},L=(y,h)=>{const C=n.value.findIndex(u=>u===y);return C!==-1?h.size>r?(k.value.push(`Файл ${h.name} превышает максимальный размер ${b(r)}`),!1):o.length>0&&!o.includes(h.type)?(k.value.push(`Тип файла ${h.name} не поддерживается`),!1):(n.value[C]=h,!0):!1},D=()=>{k.value=[]},b=y=>{if(y===0)return"0 Bytes";const h=1024,C=["Bytes","KB","MB","GB"],u=Math.floor(Math.log(y)/Math.log(h));return parseFloat((y/Math.pow(h,u)).toFixed(2))+" "+C[u]};return{selectedFiles:n,errors:k,isFileSelected:A,totalSize:w,fileTypes:x,canSelectMore:T,selectFiles:M,removeFile:S,removeFileByName:i,clearFiles:z,replaceFile:L,clearErrors:D,maxFiles:d,maxFileSize:r,allowedTypes:o,multiple:a}}function te(c){const d=new Q({apiUrl:c.apiUrl,appName:c.appName,headers:c.headers,timeout:c.timeout}),r=e.ref(new Map),o=e.ref(!1),a=e.ref(0),n=e.computed(()=>Array.from(r.value.values()).filter(u=>u.status==="pending")),k=e.computed(()=>Array.from(r.value.values()).filter(u=>u.status==="uploading")),A=e.computed(()=>Array.from(r.value.values()).filter(u=>u.status==="success")),w=e.computed(()=>Array.from(r.value.values()).filter(u=>u.status==="error")),x=e.computed(()=>r.value.size>0),T=e.computed(()=>w.value.length>0),M=u=>({id:C(),file:u,status:"pending",progress:0}),S=async u=>{const g=M(u);r.value.set(g.id,g);try{g.status="uploading",g.progress=0,o.value=!0,r.value=new Map(r.value);const B=await d.uploadFile(u,{appName:c.appName,onProgress:E=>{g.progress=E,h()},onError:E=>{g.status="error",g.error=E.message,c.onError&&c.onError(E)}});return g.status="success",g.response=B,g.progress=100,h(),r.value=new Map(r.value),B}catch(B){throw g.status="error",g.error=B instanceof Error?B.message:"Unknown error occurred",r.value=new Map(r.value),B}finally{o.value=!1}},i=async u=>{try{o.value=!0;const g=u.map(E=>S(E));return(await Promise.all(g)).flat()}finally{o.value=!1}},z=async u=>{const g=r.value.get(u);if(!g||g.status!=="error")throw new Error("Upload not found or not in error state");return g.error=void 0,await S(g.file)},L=u=>{r.value.delete(u),h()},D=()=>{r.value.clear(),a.value=0,o.value=!1},b=()=>{for(const[u,g]of r.value.entries())g.status==="success"&&r.value.delete(u);h()},y=()=>{for(const[u,g]of r.value.entries())g.status==="error"&&r.value.delete(u);h()},h=()=>{if(r.value.size===0){a.value=0;return}const u=Array.from(r.value.values()).reduce((g,B)=>g+B.progress,0);a.value=Math.round(u/r.value.size)},C=()=>Math.random().toString(36).substr(2,9);return{uploads:r,isUploading:o,totalProgress:a,pendingUploads:n,uploadingFiles:k,completedUploads:A,failedUploads:w,hasUploads:x,hasErrors:T,uploadFile:S,uploadFiles:i,retryUpload:z,removeUpload:L,clearUploads:D,clearCompletedUploads:b,clearFailedUploads:y,uploadService:d}}function le(c={}){const{storageKey:d="barneo-file-service-stored-files",maxStoredFiles:r=100,appName:o="default"}=c,a=e.ref([]),n=e.ref([]),k=e.ref([]),A=e.ref(!1),w=e.computed(()=>a.value.length>0),x=e.computed(()=>a.value.length),T=e.computed(()=>a.value.filter(s=>s.appName===o)),M=()=>{try{A.value=!0;const s=localStorage.getItem(d);if(s){const p=JSON.parse(s);a.value=Array.isArray(p)?p:[]}}catch(s){console.error("Ошибка при загрузке файлов из localStorage:",s),a.value=[]}finally{A.value=!1}},S=()=>{try{localStorage.setItem(d,JSON.stringify(a.value))}catch(s){console.error("Ошибка при сохранении файлов в localStorage:",s)}},i=(s,p)=>{const U={id:s.id.toString(),originalName:p.name,url:s.url||"",size:p.size,type:p.type,uploadedAt:new Date().toISOString(),appName:o};a.value.unshift(U),a.value.length>r&&(a.value=a.value.slice(0,r)),S()},z=(s,p)=>{s.forEach((U,I)=>{const q=p[I];q&&i(U,q)})},L=s=>{const p=a.value.findIndex(U=>U.id===s);p!==-1&&(a.value.splice(p,1),S())},D=s=>{const p=a.value.findIndex(U=>U.originalName===s);p!==-1&&(a.value.splice(p,1),S())},b=()=>{a.value=[],S()},y=()=>{a.value=a.value.filter(s=>s.appName!==o),S()},h=s=>{n.value.find(U=>U.id===s.id)||n.value.push(s)},C=s=>{n.value=n.value.filter(p=>p.id!==s)},u=()=>{n.value=[]},g=s=>n.value.some(p=>p.id===s),B=s=>{k.value.find(U=>U.id===s.id)||k.value.push(s)},E=s=>{k.value=k.value.filter(p=>p.id!==s)},Z=()=>{k.value=[]},K=s=>k.value.some(p=>p.id===s),G=()=>{n.value=[...k.value],Z()},R=s=>a.value.find(p=>p.id===s),f=s=>a.value.find(p=>p.originalName===s),N=s=>a.value.filter(p=>p.type.startsWith(s)),O=(s,p)=>a.value.filter(U=>{const I=new Date(U.uploadedAt);return I>=s&&I<=p}),H=()=>JSON.stringify(a.value,null,2),j=s=>{try{const p=JSON.parse(s);return Array.isArray(p)?(a.value=p,S(),!0):!1}catch(p){return console.error("Ошибка при импорте файлов:",p),!1}};return e.watch(a,S,{deep:!0}),M(),{storedFiles:a,selectedStoredFiles:n,tempSelectedStoredFiles:k,isLoading:A,hasStoredFiles:w,storedFilesCount:x,appStoredFiles:T,loadStoredFiles:M,saveStoredFiles:S,addStoredFile:i,addStoredFiles:z,removeStoredFile:L,removeStoredFileByName:D,clearStoredFiles:b,clearAppStoredFiles:y,addSelectedStoredFile:h,removeSelectedStoredFile:C,clearSelectedStoredFiles:u,isStoredFileSelected:g,addTempSelectedStoredFile:B,removeTempSelectedStoredFile:E,clearTempSelectedStoredFiles:Z,isTempStoredFileSelected:K,confirmTempSelection:G,findStoredFile:R,findStoredFileByName:f,getStoredFilesByType:N,getStoredFilesByDateRange:O,exportStoredFiles:H,importStoredFiles:j}}function oe(c){const d=e.inject("fileServiceConfig",null);e.inject("fileServiceConfigManager",null);const r={...d||P.getInstance().getConfig(),...c},o=ee({maxFiles:r.maxFiles,maxFileSize:r.maxFileSize,allowedTypes:r.allowedTypes,multiple:r.multiple}),a=te({apiUrl:r.apiUrl,appName:r.appName,headers:r.headers,timeout:r.timeout,onProgress:r.onProgress,onError:r.onError}),n=le({appName:r.appName,maxStoredFiles:r.maxStoredFiles||100}),k=e.computed(()=>o.selectedFiles.value.length>0&&!a.isUploading.value),A=e.computed(()=>o.isFileSelected.value),w=e.computed(()=>a.hasUploads.value),x=e.computed(()=>o.errors.value.length>0||a.hasErrors.value),T=f=>{r.onUploadSuccess&&r.onUploadSuccess(f)},M=(f,N)=>{try{n.addStoredFiles(f,N),n.clearSelectedStoredFiles(),f.forEach((O,H)=>{const j=N[H];if(j){const s={id:O.id.toString(),originalName:j.name,url:O.url||"",size:j.size,type:j.type,uploadedAt:new Date().toISOString(),appName:r.appName};n.addSelectedStoredFile(s)}})}catch(O){console.error("Ошибка при сохранении файлов в localStorage:",O)}},S=f=>{o.selectFiles(f)},i=f=>{o.removeFile(f)},z=f=>{o.removeFileByName(f)},L=()=>{o.clearFiles()},D=(f,N)=>o.replaceFile(f,N),b=async()=>{if(o.selectedFiles.value.length===0)throw new Error("Нет выбранных файлов для загрузки");try{const f=await a.uploadFiles(o.selectedFiles.value);return T(f),M(f,o.selectedFiles.value),o.clearFiles(),f}catch(f){throw f}},y=async f=>{try{const N=await a.uploadFile(f);return T(N),M(N,[f]),N}catch(N){throw N}},h=async f=>{try{const N=await a.uploadFiles(f);return T(N),M(N,f),N}catch(N){throw N}},C=f=>a.retryUpload(f),u=f=>{a.removeUpload(f)},g=()=>{a.clearUploads()},B=()=>{a.clearCompletedUploads()},E=()=>{a.clearFailedUploads()},Z=()=>{o.clearErrors()},K=f=>a.uploads.value.get(f),G=()=>Array.from(a.uploads.value.values()),R=()=>({total:a.uploads.value.size,pending:a.pendingUploads.value.length,uploading:a.uploadingFiles.value.length,completed:a.completedUploads.value.length,failed:a.failedUploads.value.length,totalProgress:a.totalProgress.value});return{config:r,selectedFiles:o.selectedFiles,errors:o.errors,isFileSelected:o.isFileSelected,totalSize:o.totalSize,fileTypes:o.fileTypes,canSelectMore:o.canSelectMore,uploads:a.uploads,isUploading:a.isUploading,totalProgress:a.totalProgress,isReady:k,hasSelectedFiles:A,hasUploads:w,hasErrors:x,selectFiles:S,removeFile:i,removeFileByName:z,clearFiles:L,replaceFile:D,uploadSelectedFiles:b,uploadFile:y,uploadFiles:h,retryUpload:C,removeUpload:u,clearUploads:g,clearCompletedUploads:B,clearFailedUploads:E,clearErrors:Z,getUploadState:K,getAllUploadStates:G,getUploadStats:R,storedFiles:n.storedFiles,appStoredFiles:n.appStoredFiles,selectedStoredFiles:n.selectedStoredFiles,tempSelectedStoredFiles:n.tempSelectedStoredFiles,hasStoredFiles:n.hasStoredFiles,storedFilesCount:n.storedFilesCount,addStoredFile:n.addStoredFile,addStoredFiles:n.addStoredFiles,removeStoredFile:n.removeStoredFile,removeStoredFileByName:n.removeStoredFileByName,clearStoredFiles:n.clearStoredFiles,clearAppStoredFiles:n.clearAppStoredFiles,addSelectedStoredFile:n.addSelectedStoredFile,removeSelectedStoredFile:n.removeSelectedStoredFile,clearSelectedStoredFiles:n.clearSelectedStoredFiles,isStoredFileSelected:n.isStoredFileSelected,addTempSelectedStoredFile:n.addTempSelectedStoredFile,removeTempSelectedStoredFile:n.removeTempSelectedStoredFile,clearTempSelectedStoredFiles:n.clearTempSelectedStoredFiles,isTempStoredFileSelected:n.isTempStoredFileSelected,confirmTempSelection:n.confirmTempSelection,findStoredFile:n.findStoredFile,findStoredFileByName:n.findStoredFileByName,getStoredFilesByType:n.getStoredFilesByType,getStoredFilesByDateRange:n.getStoredFilesByDateRange,exportStoredFiles:n.exportStoredFiles,importStoredFiles:n.importStoredFiles,fileInput:o,fileUploader:a,fileStorage:n}}const ue={class:"file-uploader"},me={class:"file-uploader__input-container"},fe={class:"file-uploader__input-title"},ge={class:"file-uploader__input-row"},Se={class:"file-uploader__input-field"},he={class:"file-uploader__input-content"},ye={key:0,class:"file-uploader__input-placeholder"},_e={key:1,class:"file-uploader__input-filename"},Fe={class:"file-uploader__input-formats"},ke={class:"file-uploader__modal-header"},Ce={class:"file-uploader__modal-title"},Ee={class:"file-uploader__modal-content"},Ne={class:"file-uploader__mode-switcher"},we={key:0},Be=["multiple","accept"],Ve={class:"file-uploader__drop-zone-content"},ve={class:"file-uploader__drop-zone-hint"},be={key:1},Ue={class:"file-uploader__stored-files"},Te={key:0,class:"file-uploader__stored-files-list"},ze={class:"file-uploader__stored-files-grid"},xe=["onClick"],Me={class:"file-uploader__stored-file-info"},Ae={class:"file-uploader__stored-file-name"},Le={class:"file-uploader__stored-file-size"},De={class:"file-uploader__stored-file-date"},Oe={class:"file-uploader__stored-file-actions"},$e=["onClick"],Pe={key:1,class:"file-uploader__no-stored-files"},je={key:0,class:"file-uploader__errors"},Ie={key:0,class:"file-uploader__file-list"},Re={class:"file-uploader__file-list-title"},He={class:"file-uploader__files"},We={class:"file-uploader__file-info"},Ze={class:"file-uploader__file-details"},Ke={class:"file-uploader__file-name"},Je={class:"file-uploader__file-size"},Ge=["onClick"],qe={key:1,class:"file-uploader__file-spinner"},Qe={key:0,class:"file-uploader__results"},Xe={class:"file-uploader__results-title"},Ye={class:"file-uploader__results-list"},et={class:"file-uploader__actions"},tt=["disabled"],lt=["disabled"],ot={key:0,class:"file-uploader__spinner",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},rt=["disabled"],J=e.defineComponent({__name:"FileUploader",props:{title:{default:"Загрузка файлов"},buttonText:{default:"Загрузить файлы"},buttonSize:{default:"medium"},buttonVariant:{default:"primary"},buttonType:{default:"default"},buttonIcon:{default:void 0},autoCloseOnSuccess:{type:Boolean,default:!0},showCancelButton:{type:Boolean,default:!0},cancelButtonText:{default:"Отмена"},modalMaxWidth:{default:"600px"},modalPosition:{default:"center"},closeOnOverlayClick:{type:Boolean,default:!0},showAnimations:{type:Boolean,default:!0},uploadedFiles:{default:()=>[]}},emits:["upload-success","upload-complete","upload-error","files-selected","modal-open","modal-close","files-cleared"],setup(c,{expose:d,emit:r}){const o=c,a=e.computed(()=>typeof o.autoCloseOnSuccess=="string"?o.autoCloseOnSuccess==="true":o.autoCloseOnSuccess),n=e.computed(()=>typeof o.showCancelButton=="string"?o.showCancelButton==="true":o.showCancelButton),k=e.computed(()=>typeof o.closeOnOverlayClick=="string"?o.closeOnOverlayClick==="true":o.closeOnOverlayClick),A=e.computed(()=>typeof o.showAnimations=="string"?o.showAnimations==="true":o.showAnimations),w=r,x=e.ref(!1),T=e.ref(!1),M=e.ref(),S=e.ref("upload"),i=oe(),z=e.computed(()=>i.selectedFiles.value),L=e.computed(()=>i.errors.value),D=e.computed(()=>i.uploads.value),b=e.computed(()=>i.isUploading.value);e.computed(()=>i.totalProgress.value);const y=e.computed(()=>i.hasSelectedFiles.value),h=e.computed(()=>i.hasErrors.value);e.computed(()=>i.getUploadStats());const C=e.computed(()=>Array.from(D.value.values()).filter(t=>t.status==="success"&&t.response).flatMap(t=>t.response||[])),u=e.computed(()=>Array.from(D.value.values()).filter(t=>t.status==="error").map(t=>t.file.name)),g=e.computed(()=>{var V;return o.uploadedFiles&&o.uploadedFiles.length>0?o.uploadedFiles:(((V=i.selectedStoredFiles)==null?void 0:V.value)||[]).map(m=>({id:parseInt(m.id),createdAt:m.uploadedAt,updatedAt:m.uploadedAt,deletedAt:null,sort:500,active:!0,originalName:m.originalName,name:m.originalName,mimetype:m.type,size:m.size,extname:m.type.split("/")[1]||"",public:!0,appName:m.appName,fileType:m.type,url:m.url,loadedToAws:!0}))}),B=()=>{x.value=!0,document.body.style.overflow="hidden",w("modal-open")},E=()=>{x.value=!1,document.body.style.overflow="",w("modal-close")},Z=()=>{k.value&&E()},K=()=>{var t;(t=M.value)==null||t.click()},G=t=>{const l=t.target;l.files&&R(l.files)},R=t=>{i.selectFiles(t),w("files-selected",Array.from(t))},f=t=>{const l=z.value[t];l&&(I(l)||i.removeFile(t))},N=t=>{i.removeFileByName(t)},O=()=>{i.clearFiles()},H=()=>{i.clearErrors()},j=()=>{i.clearCompletedUploads()},s=()=>{if(o.uploadedFiles&&o.uploadedFiles.length>0){w("files-cleared");return}i.clearSelectedStoredFiles(),w("files-cleared")},p=async()=>{try{const t=await i.uploadSelectedFiles();w("upload-success",t),w("upload-complete",t,[]),a.value&&setTimeout(()=>E(),1e3)}catch(t){const l=t instanceof Error?t:new Error("Unknown error occurred"),V=z.value.map(m=>m.name);w("upload-error",l),w("upload-complete",[],V)}},U=async()=>{const t=Array.from(D.value.values()).filter(l=>l.status==="error");for(const l of t)try{await i.retryUpload(l.id)}catch(V){console.error("Ошибка при повторе загрузки:",V)}},I=t=>Array.from(D.value.values()).some(l=>l.file===t&&l.status==="uploading"),q=t=>i.isTempStoredFileSelected(t),re=t=>{var V;const l=(V=i.appStoredFiles)==null?void 0:V.value.find(m=>m.id===t);l&&(i.isTempStoredFileSelected(t)?i.removeTempSelectedStoredFile(t):i.addTempSelectedStoredFile(l))},ae=t=>{i.removeStoredFile(t),i.isStoredFileSelected(t)&&i.removeSelectedStoredFile(t),i.isTempStoredFileSelected(t)&&i.removeTempSelectedStoredFile(t)},ne=()=>{var l;const t=((l=i.tempSelectedStoredFiles)==null?void 0:l.value)||[];if(t.length>0){i.confirmTempSelection();const V=t.map(m=>({id:parseInt(m.id),createdAt:m.uploadedAt,updatedAt:m.uploadedAt,deletedAt:null,sort:500,active:!0,originalName:m.originalName,name:m.originalName,mimetype:m.type,size:m.size,extname:m.type.split("/")[1]||"",public:!0,appName:m.appName,fileType:m.type,url:m.url,loadedToAws:!0}));w("upload-success",V),w("upload-complete",V,[]),a.value&&setTimeout(()=>E(),100)}},nt=t=>{t.preventDefault(),T.value=!0},it=t=>{t.preventDefault(),T.value=!1},st=t=>{var l;t.preventDefault(),T.value=!1,(l=t.dataTransfer)!=null&&l.files&&R(t.dataTransfer.files)},W=t=>{if(t===0)return"0 Bytes";const l=1024,V=["Bytes","KB","MB","GB"],m=Math.floor(Math.log(t)/Math.log(l));return parseFloat((t/Math.pow(l,m)).toFixed(2))+" "+V[m]},ie=t=>new Date(t).toLocaleDateString("ru-RU",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}),dt=()=>{const t=i.config.allowedTypes;if(!t||t.length===0)return"любые";const l={"application/msword":".doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":".docx","application/pdf":".pdf","image/jpeg":".jpg, .jpeg","image/jpg":".jpg","image/png":".png"};return t.map(m=>l[m]||`.${m.split("/")[1]||m}`).join(", ")};return e.onUnmounted(()=>{x.value&&E(),document.body.style.overflow=""}),d({clearUploadedFiles:s,openModal:B,closeModal:E,uploadSelectedFiles:p,clearFiles:O,clearErrors:H,clearCompletedUploads:j,retryFailedUploads:U}),(t,l)=>(e.openBlock(),e.createElementBlock("div",ue,[t.buttonType==="default"?e.renderSlot(t.$slots,"button",{key:0,openModal:B,isModalOpen:x.value,buttonText:t.buttonText||"Загрузить файлы",buttonSize:t.buttonSize||"medium",buttonVariant:t.buttonVariant||"primary",buttonIcon:t.buttonIcon},()=>[e.createElementVNode("button",{class:e.normalizeClass(["file-uploader__button",`file-uploader__button--${t.buttonVariant||"primary"}`,`file-uploader__button--${t.buttonSize||"medium"}`]),onClick:B},[t.buttonIcon?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass([t.buttonIcon,"file-uploader__button-icon"])},null,2)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.buttonText||"Загрузить файлы"),1)],2)]):t.buttonType==="input"?e.renderSlot(t.$slots,"button-input",{key:1,openModal:B,isModalOpen:x.value,title:t.title||"Загрузить файлы",uploadedFiles:g.value,clearUploadedFiles:s,formatFileSize:W,allowedTypes:e.unref(i).config.allowedTypes},()=>[e.createElementVNode("div",me,[e.createElementVNode("h4",fe,e.toDisplayString(t.title||"Загрузить файлы"),1),e.createElementVNode("div",ge,[e.createElementVNode("div",Se,[e.createElementVNode("div",he,[g.value.length===0?(e.openBlock(),e.createElementBlock("span",ye," Выберите файл ")):(e.openBlock(),e.createElementBlock("span",_e,e.toDisplayString(g.value[0].originalName||g.value[0].name),1))]),e.createElementVNode("button",{class:"file-uploader__input-button",onClick:B,"aria-label":"Выбрать файл"},[...l[3]||(l[3]=[e.createElementVNode("svg",{viewBox:"0 0 18 20",xmlns:"http://www.w3.org/2000/svg",width:"18",height:"20",fill:"none"},[e.createElementVNode("rect",{width:"18",height:"20",x:"0",y:"0"}),e.createElementVNode("path",{d:"M14.6332 3.27344C13.6529 2.32031 12.0618 2.32031 11.0814 3.27344L3.68859 10.4609C1.99707 12.1055 1.99707 14.7695 3.68859 16.4141C5.38011 18.0586 8.12029 18.0586 9.8118 16.4141L15.9189 10.4766C16.3569 10.0508 17.0721 10.0508 17.51 10.4766C17.948 10.9023 17.948 11.5977 17.51 12.0234L11.4029 17.9609C8.83145 20.4609 4.66895 20.4609 2.09752 17.9609C-0.473912 15.4609 -0.473912 11.4141 2.09752 8.91406L9.49037 1.72656C11.3506 -0.0820312 14.364 -0.0820312 16.2243 1.72656C18.0846 3.53516 18.0846 6.46484 16.2243 8.27344L9.15287 15.1484C8.00377 16.2656 6.13948 16.2656 4.99037 15.1484C3.84127 14.0313 3.84127 12.2188 4.99037 11.1016L10.7761 5.47656C11.214 5.05078 11.9292 5.05078 12.3672 5.47656C12.8051 5.90234 12.8051 6.59766 12.3672 7.02344L6.58145 12.6484C6.31225 12.9102 6.31225 13.3398 6.58145 13.6016C6.85064 13.8633 7.29261 13.8633 7.5618 13.6016L14.6332 6.72656C15.6136 5.77344 15.6136 4.22656 14.6332 3.27344Z",fill:"rgb(163.359,170.332,175.312)","fill-rule":"nonzero"})],-1)])])]),g.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"file-uploader__input-remove",onClick:s,"aria-label":"Удалить файл"},[...l[4]||(l[4]=[e.createElementVNode("svg",{viewBox:"0 0 14 16",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",fill:"none"},[e.createElementVNode("path",{d:"M4.225 0.553125L4 1L1 1C0.446875 1 0 1.44687 0 2C0 2.55312 0.446875 3 1 3L13 3C13.5531 3 14 2.55312 14 2C14 1.44688 13.5531 1 13 1L10 1L9.775 0.553125C9.60625 0.2125 9.25937 0 8.88125 0L5.11875 0C4.74062 0 4.39375 0.2125 4.225 0.553125ZM13 4L1 4L1.6625 14.5938C1.7125 15.3844 2.36875 16 3.15938 16L10.8406 16C11.6313 16 12.2875 15.3844 12.3375 14.5938L13 4Z",fill:"rgb(223,0,0)","fill-rule":"nonzero"})],-1)])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Fe," Формат файла: "+e.toDisplayString(dt()),1)])]):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"modal",appear:A.value},{default:e.withCtx(()=>{var V,m,se,de,ce;return[x.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["file-uploader__modal-overlay",[`file-uploader__modal-overlay--${t.modalPosition||"center"}`,{"file-uploader__modal-overlay--animations":A.value}]]),onClick:Z},[e.createElementVNode("div",{class:"file-uploader__modal",style:e.normalizeStyle({maxWidth:t.modalMaxWidth||"600px"}),onClick:l[2]||(l[2]=e.withModifiers(()=>{},["stop"]))},[e.renderSlot(t.$slots,"modal-header",{title:t.title||"Загрузка файлов",closeModal:E},()=>[e.createElementVNode("div",ke,[e.createElementVNode("h3",Ce,e.toDisplayString(t.title||"Загрузка файлов"),1),e.createElementVNode("button",{class:"file-uploader__modal-close",onClick:E,"aria-label":"Закрыть"},[...l[5]||(l[5]=[e.createElementVNode("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])])]),e.createElementVNode("div",Ee,[e.renderSlot(t.$slots,"mode-switcher",{activeMode:S.value,setActiveMode:_=>{S.value=_,_==="upload"&&e.unref(i).clearTempSelectedStoredFiles()},storedFilesCount:((V=e.unref(i).storedFilesCount)==null?void 0:V.value)||0},()=>{var _;return[e.createElementVNode("div",Ne,[e.createElementVNode("button",{class:e.normalizeClass(["file-uploader__mode-button",{"file-uploader__mode-button--active":S.value==="upload"}]),onClick:l[0]||(l[0]=()=>{S.value="upload",e.unref(i).clearTempSelectedStoredFiles()})},[...l[6]||(l[6]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e.createElementVNode("polyline",{points:"7,10 12,15 17,10"}),e.createElementVNode("line",{x1:"12",y1:"15",x2:"12",y2:"3"})],-1),e.createTextVNode(" Загрузить новые файлы ",-1)])],2),e.createElementVNode("button",{class:e.normalizeClass(["file-uploader__mode-button",{"file-uploader__mode-button--active":S.value==="select"}]),onClick:l[1]||(l[1]=$=>S.value="select")},[l[7]||(l[7]=e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),e.createElementVNode("polyline",{points:"14,2 14,8 20,8"})],-1)),e.createTextVNode(" Выбрать из загруженных ("+e.toDisplayString(((_=e.unref(i).storedFilesCount)==null?void 0:_.value)||0)+") ",1)],2)])]}),S.value==="upload"?(e.openBlock(),e.createElementBlock("div",we,[e.renderSlot(t.$slots,"file-drop-zone",{selectFiles:R,isDragOver:T.value,selectedFiles:z.value,errors:L.value,triggerFileInput:K,formatFileSize:W,config:{multiple:e.unref(i).config.multiple||!1,maxFiles:e.unref(i).config.maxFiles||10,maxFileSize:e.unref(i).config.maxFileSize||10*1024*1024,allowedTypes:e.unref(i).config.allowedTypes}},()=>{var _;return[e.createElementVNode("div",{class:e.normalizeClass(["file-uploader__drop-zone",{"file-uploader__drop-zone--drag-over":T.value}]),onDrop:st,onDragover:nt,onDragleave:it,onClick:K},[e.createElementVNode("input",{ref_key:"fileInput",ref:M,type:"file",multiple:e.unref(i).config.multiple,accept:(_=e.unref(i).config.allowedTypes)==null?void 0:_.join(","),class:"file-uploader__file-input",onChange:G},null,40,Be),e.createElementVNode("div",Ve,[l[8]||(l[8]=e.createElementVNode("svg",{class:"file-uploader__drop-zone-icon",width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e.createElementVNode("polyline",{points:"7,10 12,15 17,10"}),e.createElementVNode("line",{x1:"12",y1:"15",x2:"12",y2:"3"})],-1)),l[9]||(l[9]=e.createElementVNode("p",{class:"file-uploader__drop-zone-text"}," Перетащите файлы сюда или кликните для выбора ",-1)),e.createElementVNode("p",ve," До "+e.toDisplayString(e.unref(i).config.maxFiles)+" файлов, "+e.toDisplayString(W(e.unref(i).config.maxFileSize||0)),1)])],34)]})])):e.createCommentVNode("",!0),S.value==="select"?(e.openBlock(),e.createElementBlock("div",be,[e.renderSlot(t.$slots,"stored-files",{storedFiles:((m=e.unref(i).appStoredFiles)==null?void 0:m.value)||[],selectedStoredFiles:((se=e.unref(i).tempSelectedStoredFiles)==null?void 0:se.value)||[],toggleStoredFileSelection:re,isStoredFileSelected:q,removeStoredFile:ae,formatFileSize:W,formatDate:ie,hasStoredFiles:((de=e.unref(i).hasStoredFiles)==null?void 0:de.value)||!1},()=>{var _,$;return[e.createElementVNode("div",Ue,[(_=e.unref(i).hasStoredFiles)!=null&&_.value?(e.openBlock(),e.createElementBlock("div",Te,[l[12]||(l[12]=e.createElementVNode("h4",{class:"file-uploader__stored-files-title"}," Ранее загруженные файлы ",-1)),e.createElementVNode("div",ze,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList((($=e.unref(i).appStoredFiles)==null?void 0:$.value)||[],F=>(e.openBlock(),e.createElementBlock("div",{key:(F==null?void 0:F.id)||`file-${Math.random()}`,class:e.normalizeClass(["file-uploader__stored-file-item",{"file-uploader__stored-file-item--selected":(F==null?void 0:F.id)&&q(F.id)}]),onClick:ct=>(F==null?void 0:F.id)&&re(F.id)},[l[11]||(l[11]=e.createElementVNode("div",{class:"file-uploader__stored-file-icon"},[e.createElementVNode("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),e.createElementVNode("polyline",{points:"14,2 14,8 20,8"})])],-1)),e.createElementVNode("div",Me,[e.createElementVNode("span",Ae,e.toDisplayString((F==null?void 0:F.originalName)||"Неизвестный файл"),1),e.createElementVNode("span",Le,e.toDisplayString(W((F==null?void 0:F.size)||0)),1),e.createElementVNode("span",De,e.toDisplayString(ie((F==null?void 0:F.uploadedAt)||new Date().toISOString())),1)]),e.createElementVNode("div",Oe,[F!=null&&F.id?(e.openBlock(),e.createElementBlock("button",{key:0,class:"file-uploader__stored-file-remove",onClick:e.withModifiers(ct=>ae(F.id),["stop"]),"aria-label":"Удалить файл из хранилища"},[...l[10]||(l[10]=[e.createElementVNode("svg",{viewBox:"0 0 14 16",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",fill:"none"},[e.createElementVNode("path",{d:"M4.225 0.553125L4 1L1 1C0.446875 1 0 1.44687 0 2C0 2.55312 0.446875 3 1 3L13 3C13.5531 3 14 2.55312 14 2C14 1.44688 13.5531 1 13 1L10 1L9.775 0.553125C9.60625 0.2125 9.25937 0 8.88125 0L5.11875 0C4.74062 0 4.39375 0.2125 4.225 0.553125ZM13 4L1 4L1.6625 14.5938C1.7125 15.3844 2.36875 16 3.15938 16L10.8406 16C11.6313 16 12.2875 15.3844 12.3375 14.5938L13 4Z",fill:"currentColor","fill-rule":"nonzero"})],-1)])],8,$e)):e.createCommentVNode("",!0)])],10,xe))),128))])])):(e.openBlock(),e.createElementBlock("div",Pe,[...l[13]||(l[13]=[e.createElementVNode("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),e.createElementVNode("polyline",{points:"14,2 14,8 20,8"})],-1),e.createElementVNode("p",null,"Нет ранее загруженных файлов",-1),e.createElementVNode("p",{class:"file-uploader__no-stored-files-hint"},' Загрузите файлы в режиме "Загрузить новые файлы" ',-1)])]))])]})])):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"errors",{errors:L.value,clearErrors:H},()=>[S.value==="upload"&&L.value.length>0?(e.openBlock(),e.createElementBlock("div",je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,(_,$)=>(e.openBlock(),e.createElementBlock("div",{key:$,class:"file-uploader__error"},[l[14]||(l[14]=e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"}),e.createElementVNode("line",{x1:"12",y1:"9",x2:"12",y2:"13"}),e.createElementVNode("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})],-1)),e.createTextVNode(" "+e.toDisplayString(_),1)]))),128)),e.createElementVNode("button",{class:"file-uploader__clear-errors",onClick:H}," Очистить ошибки ")])):e.createCommentVNode("",!0)]),e.renderSlot(t.$slots,"file-list",{selectedFiles:z.value,removeFile:f,removeFileByName:N,clearFiles:O,isFileUploading:I,formatFileSize:W,isUploading:b.value},()=>[S.value==="upload"&&z.value.length>0?(e.openBlock(),e.createElementBlock("div",Ie,[e.createElementVNode("h4",Re," Выбранные файлы ("+e.toDisplayString(z.value.length)+") ",1),e.createElementVNode("div",He,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(_,$)=>(e.openBlock(),e.createElementBlock("div",{key:`${_.name}-${_.size}-${$}`,class:e.normalizeClass(["file-uploader__file-item",{"file-uploader__file-item--uploading":I(_)}])},[e.createElementVNode("div",We,[l[15]||(l[15]=e.createElementVNode("svg",{class:"file-uploader__file-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),e.createElementVNode("polyline",{points:"14,2 14,8 20,8"})],-1)),e.createElementVNode("div",Ze,[e.createElementVNode("span",Ke,e.toDisplayString(_.name),1),e.createElementVNode("span",Je,e.toDisplayString(W(_.size)),1)])]),I(_)?(e.openBlock(),e.createElementBlock("div",qe,[...l[17]||(l[17]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"file-uploader__spinner"},[e.createElementVNode("path",{d:"M21 12a9 9 0 11-6.219-8.56"})],-1)])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"file-uploader__file-remove",onClick:F=>f($),"aria-label":"Удалить файл"},[...l[16]||(l[16]=[e.createElementVNode("svg",{viewBox:"0 0 14 16",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",fill:"none"},[e.createElementVNode("path",{d:"M4.225 0.553125L4 1L1 1C0.446875 1 0 1.44687 0 2C0 2.55312 0.446875 3 1 3L13 3C13.5531 3 14 2.55312 14 2C14 1.44688 13.5531 1 13 1L10 1L9.775 0.553125C9.60625 0.2125 9.25937 0 8.88125 0L5.11875 0C4.74062 0 4.39375 0.2125 4.225 0.553125ZM13 4L1 4L1.6625 14.5938C1.7125 15.3844 2.36875 16 3.15938 16L10.8406 16C11.6313 16 12.2875 15.3844 12.3375 14.5938L13 4Z",fill:"currentColor","fill-rule":"nonzero"})],-1)])],8,Ge))],2))),128))]),b.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"file-uploader__clear-files",onClick:O}," Очистить все "))])):e.createCommentVNode("",!0)]),e.renderSlot(t.$slots,"upload-results",{results:C.value,failedFiles:u.value,clearCompletedUploads:j},()=>[S.value==="upload"&&C.value.length>0?(e.openBlock(),e.createElementBlock("div",Qe,[e.createElementVNode("h4",Xe," Загруженные файлы ("+e.toDisplayString(C.value.length)+") ",1),e.createElementVNode("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,_=>(e.openBlock(),e.createElementBlock("div",{key:_.id,class:"file-uploader__result-item"},[l[18]||(l[18]=e.createElementVNode("svg",{class:"file-uploader__result-icon--success",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),e.createElementVNode("polyline",{points:"22,4 12,14.01 9,11.01"})],-1)),e.createElementVNode("span",null,e.toDisplayString(_.originalName),1)]))),128))]),e.createElementVNode("button",{class:"file-uploader__clear-results",onClick:j}," Очистить результаты ")])):e.createCommentVNode("",!0)])]),e.renderSlot(t.$slots,"action-buttons",{uploadFiles:p,selectStoredFiles:ne,clearFiles:O,retryFailedUploads:U,isUploading:b.value,hasSelectedFiles:y.value,hasErrors:h.value,activeMode:S.value,hasSelectedStoredFiles:(((ce=e.unref(i).tempSelectedStoredFiles)==null?void 0:ce.value)||[]).length>0,closeModal:E,showCancelButton:n.value,cancelButtonText:t.cancelButtonText||"Отмена"},()=>{var _,$;return[e.createElementVNode("div",et,[n.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"file-uploader__action-button file-uploader__action-button--secondary",onClick:E,disabled:b.value},e.toDisplayString(t.cancelButtonText||"Отмена"),9,tt)):e.createCommentVNode("",!0),S.value==="upload"?(e.openBlock(),e.createElementBlock("button",{key:1,class:"file-uploader__action-button file-uploader__action-button--primary",onClick:p,disabled:!y.value||b.value},[b.value?(e.openBlock(),e.createElementBlock("svg",ot,[...l[19]||(l[19]=[e.createElementVNode("path",{d:"M21 12a9 9 0 11-6.219-8.56"},null,-1)])])):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(b.value?"Загрузка...":"Загрузить"),1)],8,lt)):S.value==="select"?(e.openBlock(),e.createElementBlock("button",{key:2,class:"file-uploader__action-button file-uploader__action-button--primary",onClick:ne,disabled:(((_=e.unref(i).tempSelectedStoredFiles)==null?void 0:_.value)||[]).length===0},[l[20]||(l[20]=e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),e.createElementVNode("polyline",{points:"22,4 12,14.01 9,11.01"})],-1)),e.createTextVNode(" Выбрать ("+e.toDisplayString(((($=e.unref(i).tempSelectedStoredFiles)==null?void 0:$.value)||[]).length)+") ",1)],8,rt)):e.createCommentVNode("",!0)])]}),e.renderSlot(t.$slots,"modal-footer",{closeModal:E,uploadFiles:p,isUploading:b.value})],4)],2)):e.createCommentVNode("",!0)]}),_:3},8,["appear"])]))]))}}),pt="";/**
* Barneo File Service - Библиотека для работы с файлами в Vue 3
*
* Комплексная библиотека Vue 3, предоставляющая мощную функциональность
* для загрузки, управления и обработки файлов с валидацией и отслеживанием прогресса.
*
* ## Основные возможности:
*
* - **Загрузка файлов**: Поддержка drag & drop, множественной загрузки
* - **Валидация**: Проверка размера, типа и количества файлов
* - **Отслеживание прогресса**: Детальная информация о процессе загрузки
* - **Управление состоянием**: Реактивное состояние файлов и ошибок
* - **Хранилище**: Сохранение файлов в localStorage для повторного использования
* - **Обработка ошибок**: Возможность повтора неудачных загрузок
* - **Кастомизация**: Гибкая настройка через props, slots и события
*
* ## Компоненты:
*
* - `FileUploader` - Основной компонент для загрузки файлов
*
* ## Composables:
*
* - `useFileService` - Основной composable для работы с файлами
* - `useFileInput` - Управление выбором файлов
* - `useFileUploader` - Управление загрузкой файлов
* - `useFileStorage` - Управление хранилищем файлов
*
* ## Сервисы:
*
* - `FileUploadService` - Сервис для загрузки файлов на сервер
*
* @module barneo-file-service
* @version 1.0.0
* @license MIT
*
*/const at={install(c,d){c.use(Y,d),c.component("FileUploader",J),c.component("BarneoFileUploader",J),c.component("file-uploader",J),c.component("barneo-file-uploader",J)}};v.AppName=X,v.FileServiceConfigManager=P,v.FileServiceConfigPlugin=Y,v.FileUploadService=Q,v.FileUploader=J,v.default=at,v.useFileInput=ee,v.useFileService=oe,v.useFileServiceConfig=pe,v.useFileStorage=le,v.useFileUploader=te,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
//# sourceMappingURL=index.umd.js.map