@muhgholy/next-drive 4.23.6 → 4.23.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-TA6L5FYG.cjs → chunk-HQTC3554.cjs} +47 -2
- package/dist/chunk-HQTC3554.cjs.map +1 -0
- package/dist/{chunk-VIB7R4JN.cjs → chunk-LAKT7IJJ.cjs} +84 -84
- package/dist/chunk-LAKT7IJJ.cjs.map +1 -0
- package/dist/{chunk-GV4HB2G6.js → chunk-MVYNW56R.js} +84 -84
- package/dist/chunk-MVYNW56R.js.map +1 -0
- package/dist/{chunk-TMSG5WJZ.js → chunk-OSYRIHH4.js} +47 -3
- package/dist/chunk-OSYRIHH4.js.map +1 -0
- package/dist/client/file-chooser.d.ts.map +1 -1
- package/dist/client/index.cjs +126 -117
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.css +1 -1
- package/dist/client/index.js +20 -11
- package/dist/client/index.js.map +1 -1
- package/dist/client/utils.d.ts +1 -0
- package/dist/client/utils.d.ts.map +1 -1
- package/dist/server/express.cjs +12 -12
- package/dist/server/express.js +3 -3
- package/dist/server/hono.cjs +12 -12
- package/dist/server/hono.js +3 -3
- package/dist/server/index.cjs +18 -18
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-GV4HB2G6.js.map +0 -1
- package/dist/chunk-TA6L5FYG.cjs.map +0 -1
- package/dist/chunk-TMSG5WJZ.js.map +0 -1
- package/dist/chunk-VIB7R4JN.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/utils.tsx"],"names":["twMerge","clsx","jsx","Folder","Image","Video","Music","FileText","FileArchive","FileCode","File"],"mappings":";;;;;;;;AAKO,SAAS,MAAM,MAAA,EAAsB;AACxC,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC/B;AAGO,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,QAAA,GAAW,CAAA,KAAc;AAChE,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,SAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,EAAA,GAAK,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,QAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AACtE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,UAAA,CAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,EAAE,CAAC,CAAA,GAAI,GAAA,GAAM,MAAM,CAAC,CAAA;AAC3E;AAMO,IAAM,WAAA,GAAc,CAAC,IAAA,EAAc,QAAA,EAAmB,YAAY,eAAA,KAA+B;AACpG,EAAA,IAAI,QAAA,yBAAiBC,cAAA,CAACC,kBAAA,EAAA,EAAO,WAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA,EAAG,CAAA;AAC/F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAOD,cAAA,CAACE,iBAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AAC7F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAOF,cAAA,CAACG,iBAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAG,CAAA;AAC1F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAOH,cAAA,CAACI,iBAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AAC7F,EAAA,IAAI,IAAA,KAAS,mBAAmB,uBAAOJ,cAAA,CAACK,wBAAS,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AACjG,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAK,KAAK,QAAA,CAAS,UAAU,CAAA,EAAG,sCAAQA,oBAAA,EAAA,EAAS,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAG,CAAA;AACxH,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,KAAK,QAAA,CAAS,YAAY,CAAA,EAAG,sCAAQC,uBAAA,EAAA,EAAY,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAG,CAAA;AAC5H,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG,uBAAON,cAAA,CAACO,oBAAA,EAAA,EAAS,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAG,CAAA;AAC1M,EAAA,sCAAQC,gBAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA,EAAG,CAAA;AAC/D;AAIO,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAc,QAAA,EAAmB,MAAA,KAA6B;AAC5F,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,UAAU,OAAO,IAAA;AACrB,EAAA,IAAI,MAAA,KAAW,KAAA,IAAS,MAAA,KAAW,GAAA,EAAK,OAAO,IAAA;AAE/C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAC/D,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AAEnC,EAAA,OAAO,KAAA,CAAM,KAAK,CAAA,IAAA,KAAQ;AAEtB,IAAA,IAAI,IAAA,KAAS,WAAW,OAAO,IAAA;AAG/B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACrB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC/B,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,CAAA,EAAG,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAExB,MAAA,MAAM,UAAA,GAAuC;AAAA,QACzC,KAAA,EAAO,CAAC,YAAY,CAAA;AAAA,QACpB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,eAAe,CAAA;AAAA,QACvB,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,KAAA,EAAO,CAAC,cAAA,EAAgB,0BAA0B,CAAA;AAAA,QAClD,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,YAAY,CAAA;AAAA,QACpB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,iBAAiB,CAAA;AAAA,QACzB,KAAA,EAAO,CAAC,iBAAiB,CAAA;AAAA,QACzB,KAAA,EAAO,CAAC,kBAAkB,CAAA;AAAA,QAC1B,KAAA,EAAO,CAAC,gBAAgB,CAAA;AAAA,QACxB,KAAA,EAAO,CAAC,aAAa,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,YAAA,EAAc,WAAW,CAAA;AAAA,QACjC,KAAA,EAAO,CAAC,WAAA,EAAa,aAAa,CAAA;AAAA,QAClC,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,QACrB,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,QACnB,KAAA,EAAO,CAAC,WAAA,EAAa,aAAa,CAAA;AAAA,QAClC,KAAA,EAAO,CAAC,iBAAiB,CAAA;AAAA,QACzB,KAAA,EAAO,CAAC,oBAAoB,CAAA;AAAA,QAC5B,MAAA,EAAQ,CAAC,yEAAyE,CAAA;AAAA,QAClF,KAAA,EAAO,CAAC,0BAA0B,CAAA;AAAA,QAClC,MAAA,EAAQ,CAAC,mEAAmE,CAAA;AAAA,QAC5E,KAAA,EAAO,CAAC,+BAA+B,CAAA;AAAA,QACvC,MAAA,EAAQ,CAAC,2EAA2E,CAAA;AAAA,QACpF,KAAA,EAAO,CAAC,YAAY,CAAA;AAAA,QACpB,KAAA,EAAO,CAAC,UAAU,CAAA;AAAA,QAClB,MAAA,EAAQ,CAAC,kBAAkB,CAAA;AAAA,QAC3B,KAAA,EAAO,CAAC,iBAAA,EAAmB,UAAU,CAAA;AAAA,QACrC,KAAA,EAAO,CAAC,iBAAA,EAAmB,8BAA8B,CAAA;AAAA,QACzD,KAAA,EAAO,CAAC,8BAAA,EAAgC,qBAAqB,CAAA;AAAA,QAC7D,IAAA,EAAM,CAAC,6BAA6B,CAAA;AAAA,QACpC,KAAA,EAAO,CAAC,mBAAmB,CAAA;AAAA,QAC3B,IAAA,EAAM,CAAC,kBAAkB;AAAA,OAC7B;AACA,MAAA,MAAM,YAAA,GAAe,WAAW,GAAG,CAAA;AACnC,MAAA,IAAI,YAAA,EAAc;AACd,QAAA,OAAO,YAAA,CAAa,IAAA,CAAK,CAAA,CAAA,KAAK,SAAA,KAAc,CAAC,CAAA;AAAA,MACjD;AAEA,MAAA,OAAO,SAAA,CAAU,SAAS,GAAG,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,KAAA;AAAA,EACX,CAAC,CAAA;AACL;AAYO,IAAM,cAAA,GAAiB,CAAC,SAAA,EAAuB,WAAA,KAAgC;AAClF,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,IAC/B,MAAA,EAAQ,OAAA;AAAA,IACR,IAAI,SAAA,CAAU;AAAA,GACjB,CAAA;AAED,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAC9C","file":"chunk-TA6L5FYG.cjs","sourcesContent":["// ** Client Utils\nimport React from 'react';\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// ** Format bytes to human readable string\nexport const formatBytes = (bytes: number, decimals = 2): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n\nimport type { ReactNode } from 'react';\nimport { File, Folder, Image, Video, Music, FileText, Package, FileCode, FileArchive } from 'lucide-react';\n\n// ** Get file icon based on mime type\nexport const getFileIcon = (mime: string, isFolder: boolean, className = \"nd:w-6 nd:h-6\"): ReactNode => {\n if (isFolder) return <Folder className={cn(\"nd:text-blue-500 nd:fill-blue-500/20\", className)} />;\n if (mime.startsWith('image/')) return <Image className={cn(\"nd:text-purple-500\", className)} />;\n if (mime.startsWith('video/')) return <Video className={cn(\"nd:text-red-500\", className)} />;\n if (mime.startsWith('audio/')) return <Music className={cn(\"nd:text-yellow-500\", className)} />;\n if (mime === 'application/pdf') return <FileText className={cn(\"nd:text-orange-500\", className)} />;\n if (mime.includes('text') || mime.includes('document')) return <FileText className={cn(\"nd:text-slate-500\", className)} />;\n if (mime.includes('zip') || mime.includes('compressed')) return <FileArchive className={cn(\"nd:text-amber-500\", className)} />;\n if (mime.includes('javascript') || mime.includes('typescript') || mime.includes('json') || mime.includes('html') || mime.includes('css')) return <FileCode className={cn(\"nd:text-green-500\", className)} />;\n return <File className={cn(\"nd:text-gray-400\", className)} />;\n};\n\n// ** Check if file matches mime filter (supports native accept format)\n// Supports: \"image/*\", \"video/*\", \".pdf\", \".jpg,.png\", \"image/png,image/jpeg\", etc.\nexport const matchesMimeFilter = (mime: string, isFolder: boolean, filter?: string): boolean => {\n if (!filter) return true;\n if (isFolder) return true;\n if (filter === '*/*' || filter === '*') return true;\n\n const types = filter.split(',').map(t => t.trim().toLowerCase());\n const lowerMime = mime.toLowerCase();\n\n return types.some(type => {\n // Exact mime match: \"image/png\"\n if (type === lowerMime) return true;\n\n // Wildcard mime: \"image/*\"\n if (type.endsWith('/*')) {\n const prefix = type.slice(0, -2);\n return lowerMime.startsWith(`${prefix}/`);\n }\n\n // Extension format: \".pdf\", \".jpg\"\n if (type.startsWith('.')) {\n const ext = type.slice(1);\n // Map common extensions to mimes\n const extMimeMap: Record<string, string[]> = {\n 'jpg': ['image/jpeg'],\n 'jpeg': ['image/jpeg'],\n 'png': ['image/png'],\n 'gif': ['image/gif'],\n 'webp': ['image/webp'],\n 'svg': ['image/svg+xml'],\n 'bmp': ['image/bmp'],\n 'ico': ['image/x-icon', 'image/vnd.microsoft.icon'],\n 'tiff': ['image/tiff'],\n 'tif': ['image/tiff'],\n 'heic': ['image/heic'],\n 'heif': ['image/heif'],\n 'avif': ['image/avif'],\n 'mp4': ['video/mp4'],\n 'webm': ['video/webm'],\n 'mov': ['video/quicktime'],\n 'avi': ['video/x-msvideo'],\n 'mkv': ['video/x-matroska'],\n 'wmv': ['video/x-ms-wmv'],\n 'flv': ['video/x-flv'],\n 'mp3': ['audio/mpeg', 'audio/mp3'],\n 'wav': ['audio/wav', 'audio/x-wav'],\n 'ogg': ['audio/ogg'],\n 'flac': ['audio/flac'],\n 'aac': ['audio/aac'],\n 'm4a': ['audio/mp4', 'audio/x-m4a'],\n 'pdf': ['application/pdf'],\n 'doc': ['application/msword'],\n 'docx': ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n 'xls': ['application/vnd.ms-excel'],\n 'xlsx': ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n 'ppt': ['application/vnd.ms-powerpoint'],\n 'pptx': ['application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n 'txt': ['text/plain'],\n 'csv': ['text/csv'],\n 'json': ['application/json'],\n 'xml': ['application/xml', 'text/xml'],\n 'zip': ['application/zip', 'application/x-zip-compressed'],\n 'rar': ['application/x-rar-compressed', 'application/vnd.rar'],\n '7z': ['application/x-7z-compressed'],\n 'tar': ['application/x-tar'],\n 'gz': ['application/gzip'],\n };\n const allowedMimes = extMimeMap[ext];\n if (allowedMimes) {\n return allowedMimes.some(m => lowerMime === m);\n }\n // Fallback: check if mime ends with extension\n return lowerMime.includes(ext);\n }\n\n return false;\n });\n};\n\n// ** Get accept string for input element from filter\nexport const getAcceptString = (filter?: string): string | undefined => {\n if (!filter) return undefined;\n // Already in correct format for input accept\n return filter;\n};\n\nimport type { TDriveFile } from '@/types/client';\n\n// ** Create URL for drive file\nexport const driveCreateUrl = (driveFile: TDriveFile, apiEndpoint: string): string => {\n const params = new URLSearchParams({\n action: 'serve',\n id: driveFile.id,\n });\n\n return `${apiEndpoint}?${params.toString()}`;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/utils.tsx"],"names":[],"mappings":"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","file":"chunk-TMSG5WJZ.js","sourcesContent":["// ** Client Utils\nimport React from 'react';\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n// ** Format bytes to human readable string\nexport const formatBytes = (bytes: number, decimals = 2): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n\nimport type { ReactNode } from 'react';\nimport { File, Folder, Image, Video, Music, FileText, Package, FileCode, FileArchive } from 'lucide-react';\n\n// ** Get file icon based on mime type\nexport const getFileIcon = (mime: string, isFolder: boolean, className = \"nd:w-6 nd:h-6\"): ReactNode => {\n if (isFolder) return <Folder className={cn(\"nd:text-blue-500 nd:fill-blue-500/20\", className)} />;\n if (mime.startsWith('image/')) return <Image className={cn(\"nd:text-purple-500\", className)} />;\n if (mime.startsWith('video/')) return <Video className={cn(\"nd:text-red-500\", className)} />;\n if (mime.startsWith('audio/')) return <Music className={cn(\"nd:text-yellow-500\", className)} />;\n if (mime === 'application/pdf') return <FileText className={cn(\"nd:text-orange-500\", className)} />;\n if (mime.includes('text') || mime.includes('document')) return <FileText className={cn(\"nd:text-slate-500\", className)} />;\n if (mime.includes('zip') || mime.includes('compressed')) return <FileArchive className={cn(\"nd:text-amber-500\", className)} />;\n if (mime.includes('javascript') || mime.includes('typescript') || mime.includes('json') || mime.includes('html') || mime.includes('css')) return <FileCode className={cn(\"nd:text-green-500\", className)} />;\n return <File className={cn(\"nd:text-gray-400\", className)} />;\n};\n\n// ** Check if file matches mime filter (supports native accept format)\n// Supports: \"image/*\", \"video/*\", \".pdf\", \".jpg,.png\", \"image/png,image/jpeg\", etc.\nexport const matchesMimeFilter = (mime: string, isFolder: boolean, filter?: string): boolean => {\n if (!filter) return true;\n if (isFolder) return true;\n if (filter === '*/*' || filter === '*') return true;\n\n const types = filter.split(',').map(t => t.trim().toLowerCase());\n const lowerMime = mime.toLowerCase();\n\n return types.some(type => {\n // Exact mime match: \"image/png\"\n if (type === lowerMime) return true;\n\n // Wildcard mime: \"image/*\"\n if (type.endsWith('/*')) {\n const prefix = type.slice(0, -2);\n return lowerMime.startsWith(`${prefix}/`);\n }\n\n // Extension format: \".pdf\", \".jpg\"\n if (type.startsWith('.')) {\n const ext = type.slice(1);\n // Map common extensions to mimes\n const extMimeMap: Record<string, string[]> = {\n 'jpg': ['image/jpeg'],\n 'jpeg': ['image/jpeg'],\n 'png': ['image/png'],\n 'gif': ['image/gif'],\n 'webp': ['image/webp'],\n 'svg': ['image/svg+xml'],\n 'bmp': ['image/bmp'],\n 'ico': ['image/x-icon', 'image/vnd.microsoft.icon'],\n 'tiff': ['image/tiff'],\n 'tif': ['image/tiff'],\n 'heic': ['image/heic'],\n 'heif': ['image/heif'],\n 'avif': ['image/avif'],\n 'mp4': ['video/mp4'],\n 'webm': ['video/webm'],\n 'mov': ['video/quicktime'],\n 'avi': ['video/x-msvideo'],\n 'mkv': ['video/x-matroska'],\n 'wmv': ['video/x-ms-wmv'],\n 'flv': ['video/x-flv'],\n 'mp3': ['audio/mpeg', 'audio/mp3'],\n 'wav': ['audio/wav', 'audio/x-wav'],\n 'ogg': ['audio/ogg'],\n 'flac': ['audio/flac'],\n 'aac': ['audio/aac'],\n 'm4a': ['audio/mp4', 'audio/x-m4a'],\n 'pdf': ['application/pdf'],\n 'doc': ['application/msword'],\n 'docx': ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n 'xls': ['application/vnd.ms-excel'],\n 'xlsx': ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n 'ppt': ['application/vnd.ms-powerpoint'],\n 'pptx': ['application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n 'txt': ['text/plain'],\n 'csv': ['text/csv'],\n 'json': ['application/json'],\n 'xml': ['application/xml', 'text/xml'],\n 'zip': ['application/zip', 'application/x-zip-compressed'],\n 'rar': ['application/x-rar-compressed', 'application/vnd.rar'],\n '7z': ['application/x-7z-compressed'],\n 'tar': ['application/x-tar'],\n 'gz': ['application/gzip'],\n };\n const allowedMimes = extMimeMap[ext];\n if (allowedMimes) {\n return allowedMimes.some(m => lowerMime === m);\n }\n // Fallback: check if mime ends with extension\n return lowerMime.includes(ext);\n }\n\n return false;\n });\n};\n\n// ** Get accept string for input element from filter\nexport const getAcceptString = (filter?: string): string | undefined => {\n if (!filter) return undefined;\n // Already in correct format for input accept\n return filter;\n};\n\nimport type { TDriveFile } from '@/types/client';\n\n// ** Create URL for drive file\nexport const driveCreateUrl = (driveFile: TDriveFile, apiEndpoint: string): string => {\n const params = new URLSearchParams({\n action: 'serve',\n id: driveFile.id,\n });\n\n return `${apiEndpoint}?${params.toString()}`;\n};\n"]}
|