diff --git a/package-lock.json b/package-lock.json index 59d8b076..592db421 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "leaflet.locatecontrol": "^0.79.0", "radash": "^12.1.0", "react-colorful": "^5.6.1", + "react-dropzone": "^14.3.8", "react-image-crop": "^10.1.8", "react-inlinesvg": "^4.2.0", "react-leaflet": "^4.2.1", @@ -3313,6 +3314,15 @@ "node": ">= 4.0.0" } }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -5857,6 +5867,18 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -9018,7 +9040,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10237,7 +10258,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -10249,7 +10269,6 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, "node_modules/property-information": { @@ -10380,6 +10399,23 @@ "react": "^18.3.1" } }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, "node_modules/react-from-dom": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/react-from-dom/-/react-from-dom-0.7.5.tgz", @@ -11973,7 +12009,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/tsutils": { diff --git a/package.json b/package.json index 773e6b15..cd196fa3 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,7 @@ "leaflet.locatecontrol": "^0.79.0", "radash": "^12.1.0", "react-colorful": "^5.6.1", + "react-dropzone": "^14.3.8", "react-image-crop": "^10.1.8", "react-inlinesvg": "^4.2.0", "react-leaflet": "^4.2.1", diff --git a/patches/react-dropzone/attr-accept.js b/patches/react-dropzone/attr-accept.js new file mode 100644 index 00000000..96405721 --- /dev/null +++ b/patches/react-dropzone/attr-accept.js @@ -0,0 +1,36 @@ +/** + * Patched version of attr-accept to fix compatibility issues with react-dropzone + */ + +function attrAccept(file, acceptedFiles) { + if (file && acceptedFiles) { + var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(','); + + if (acceptedFilesArray.length === 0) { + return true; + } + + var fileName = file.name || ''; + var mimeType = (file.type || '').toLowerCase(); + var baseMimeType = mimeType.replace(/\/.*$/, ''); + + return acceptedFilesArray.some(function (type) { + var validType = type.trim().toLowerCase(); + + if (validType.charAt(0) === '.') { + return fileName.toLowerCase().endsWith(validType); + } else if (validType.endsWith('/*')) { + // This is something like a image/* mime type + return baseMimeType === validType.replace(/\/.*$/, ''); + } + + return mimeType === validType; + }); + } + + return true; +} + +// Export as both default and named export to support different import styles +export default attrAccept; +export { attrAccept }; diff --git a/rollup.config.js b/rollup.config.js index 65741665..0cb27150 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -12,7 +12,14 @@ const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const aliasConfig = alias({ - entries: [{ find: '#types', replacement: path.resolve(__dirname, 'src/types') }], + entries: [ + { find: '#types', replacement: path.resolve(__dirname, 'src/types') }, + // Patch for attr-accept to fix react-dropzone compatibility issue + { + find: 'attr-accept', + replacement: path.resolve(__dirname, 'patches/react-dropzone/attr-accept.js'), + }, + ], }) export default [