@muhgholy/next-drive 3.12.0 → 4.0.0

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/README.md CHANGED
@@ -22,13 +22,12 @@ npm install @muhgholy/next-drive
22
22
 
23
23
  ### Requirements
24
24
 
25
- | Dependency | Version |
26
- | ------------ | ------- |
27
- | Next.js | >= 14 |
28
- | React | >= 18 |
29
- | Mongoose | >= 7 |
30
- | Tailwind CSS | >= 3 |
31
- | TypeScript | >= 5 |
25
+ | Dependency | Version |
26
+ | ---------- | ------- |
27
+ | Next.js | >= 14 |
28
+ | React | >= 18 |
29
+ | Mongoose | >= 7 |
30
+ | TypeScript | >= 5 |
32
31
 
33
32
  **TypeScript Configuration:**
34
33
 
@@ -82,18 +81,17 @@ sudo apt install ffmpeg
82
81
  # Download from https://ffmpeg.org and add to PATH
83
82
  ```
84
83
 
85
- ### Tailwind Setup
84
+ ### Styles
86
85
 
87
- Add the package to your Tailwind content config:
86
+ Styles are **automatically injected** when you import components from `@muhgholy/next-drive/client`. No additional CSS import is required!
88
87
 
89
- ```js
90
- // tailwind.config.js
91
- export default {
92
- content: ["./app/**/*.{js,ts,jsx,tsx,mdx}", "./pages/**/*.{js,ts,jsx,tsx,mdx}", "./components/**/*.{js,ts,jsx,tsx,mdx}", "./node_modules/@muhgholy/next-drive/dist/**/*.{js,mjs}"],
93
- };
94
- ```
88
+ All CSS classes are prefixed with `nd-` to avoid conflicts with your project's styles. CSS variables are scoped to the `.nd-drive-root` container class.
89
+
90
+ If styles are not loading (e.g., with certain bundler configurations), you can manually import:
95
91
 
96
- > CSS is auto-injected when importing from `@muhgholy/next-drive/client`.
92
+ ```tsx
93
+ import "@muhgholy/next-drive/client/styles.css";
94
+ ```
97
95
 
98
96
  ---
99
97
 
@@ -15,16 +15,16 @@ var formatBytes = (bytes, decimals = 2) => {
15
15
  const i = Math.floor(Math.log(bytes) / Math.log(k));
16
16
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
17
17
  };
18
- var getFileIcon = (mime, isFolder, className = "w-6 h-6") => {
19
- if (isFolder) return /* @__PURE__ */ jsx(Folder, { className: cn("text-blue-500 fill-blue-500/20", className) });
20
- if (mime.startsWith("image/")) return /* @__PURE__ */ jsx(Image, { className: cn("text-purple-500", className) });
21
- if (mime.startsWith("video/")) return /* @__PURE__ */ jsx(Video, { className: cn("text-red-500", className) });
22
- if (mime.startsWith("audio/")) return /* @__PURE__ */ jsx(Music, { className: cn("text-yellow-500", className) });
23
- if (mime === "application/pdf") return /* @__PURE__ */ jsx(FileText, { className: cn("text-orange-500", className) });
24
- if (mime.includes("text") || mime.includes("document")) return /* @__PURE__ */ jsx(FileText, { className: cn("text-slate-500", className) });
25
- if (mime.includes("zip") || mime.includes("compressed")) return /* @__PURE__ */ jsx(FileArchive, { className: cn("text-amber-500", className) });
26
- if (mime.includes("javascript") || mime.includes("typescript") || mime.includes("json") || mime.includes("html") || mime.includes("css")) return /* @__PURE__ */ jsx(FileCode, { className: cn("text-green-500", className) });
27
- return /* @__PURE__ */ jsx(File, { className: cn("text-gray-400", className) });
18
+ var getFileIcon = (mime, isFolder, className = "nd-w-6 nd-h-6") => {
19
+ if (isFolder) return /* @__PURE__ */ jsx(Folder, { className: cn("nd-text-blue-500 nd-fill-blue-500/20", className) });
20
+ if (mime.startsWith("image/")) return /* @__PURE__ */ jsx(Image, { className: cn("nd-text-purple-500", className) });
21
+ if (mime.startsWith("video/")) return /* @__PURE__ */ jsx(Video, { className: cn("nd-text-red-500", className) });
22
+ if (mime.startsWith("audio/")) return /* @__PURE__ */ jsx(Music, { className: cn("nd-text-yellow-500", className) });
23
+ if (mime === "application/pdf") return /* @__PURE__ */ jsx(FileText, { className: cn("nd-text-orange-500", className) });
24
+ if (mime.includes("text") || mime.includes("document")) return /* @__PURE__ */ jsx(FileText, { className: cn("nd-text-slate-500", className) });
25
+ if (mime.includes("zip") || mime.includes("compressed")) return /* @__PURE__ */ jsx(FileArchive, { className: cn("nd-text-amber-500", className) });
26
+ if (mime.includes("javascript") || mime.includes("typescript") || mime.includes("json") || mime.includes("html") || mime.includes("css")) return /* @__PURE__ */ jsx(FileCode, { className: cn("nd-text-green-500", className) });
27
+ return /* @__PURE__ */ jsx(File, { className: cn("nd-text-gray-400", className) });
28
28
  };
29
29
  var matchesMimeFilter = (mime, isFolder, filter) => {
30
30
  if (!filter) return true;
@@ -120,5 +120,5 @@ var driveCreateSrcSet = (driveFile, apiEndpoint, format = "webp") => {
120
120
  };
121
121
 
122
122
  export { cn, driveCreateSrcSet, driveCreateUrl, formatBytes, getFileIcon, matchesMimeFilter };
123
- //# sourceMappingURL=chunk-CN3AV3AN.js.map
124
- //# sourceMappingURL=chunk-CN3AV3AN.js.map
123
+ //# sourceMappingURL=chunk-6BBEPJMR.js.map
124
+ //# sourceMappingURL=chunk-6BBEPJMR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/utils.tsx"],"names":[],"mappings":"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","file":"chunk-6BBEPJMR.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, TImageQuality, TImageFormat } from '@/types/client';\n\n// ** Create URL for drive file with optional quality and format\nexport const driveCreateUrl = (\n driveFile: TDriveFile,\n apiEndpoint: string,\n options?: { quality?: TImageQuality; format?: TImageFormat }\n): string => {\n const params = new URLSearchParams({\n action: 'serve',\n id: driveFile.id,\n });\n\n if (options?.quality) params.set('q', options.quality);\n if (options?.format) params.set('format', options.format);\n\n return `${apiEndpoint}?${params.toString()}`;\n};\n\n// ** Generate responsive image srcSet for drive file\nexport const driveCreateSrcSet = (\n driveFile: TDriveFile,\n apiEndpoint: string,\n format: TImageFormat = 'webp'\n): { srcSet: string; sizes: string } => {\n const qualities: TImageQuality[] = ['ultralow', 'low', 'medium', 'high'];\n\n // ** Quality to width mapping for srcSet\n const qualityWidthMap: Record<TImageQuality, number> = {\n ultralow: 200,\n low: 400,\n medium: 800,\n high: 1200,\n normal: 1600,\n };\n\n // ** Create srcSet for different qualities\n const srcSet = qualities\n .map(quality => {\n const url = driveCreateUrl(driveFile, apiEndpoint, { quality, format });\n return `${url} ${qualityWidthMap[quality]}w`;\n })\n .join(', ');\n\n // ** Default sizes attribute for responsive images\n const sizes = '(max-width: 320px) 200px, (max-width: 480px) 400px, (max-width: 768px) 800px, 1200px';\n\n return { srcSet, sizes };\n};\n"]}
@@ -17,16 +17,16 @@ var formatBytes = (bytes, decimals = 2) => {
17
17
  const i = Math.floor(Math.log(bytes) / Math.log(k));
18
18
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
19
19
  };
20
- var getFileIcon = (mime, isFolder, className = "w-6 h-6") => {
21
- if (isFolder) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Folder, { className: cn("text-blue-500 fill-blue-500/20", className) });
22
- if (mime.startsWith("image/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Image, { className: cn("text-purple-500", className) });
23
- if (mime.startsWith("video/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: cn("text-red-500", className) });
24
- if (mime.startsWith("audio/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Music, { className: cn("text-yellow-500", className) });
25
- if (mime === "application/pdf") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: cn("text-orange-500", className) });
26
- if (mime.includes("text") || mime.includes("document")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: cn("text-slate-500", className) });
27
- if (mime.includes("zip") || mime.includes("compressed")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileArchive, { className: cn("text-amber-500", className) });
28
- if (mime.includes("javascript") || mime.includes("typescript") || mime.includes("json") || mime.includes("html") || mime.includes("css")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileCode, { className: cn("text-green-500", className) });
29
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.File, { className: cn("text-gray-400", className) });
20
+ var getFileIcon = (mime, isFolder, className = "nd-w-6 nd-h-6") => {
21
+ if (isFolder) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Folder, { className: cn("nd-text-blue-500 nd-fill-blue-500/20", className) });
22
+ if (mime.startsWith("image/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Image, { className: cn("nd-text-purple-500", className) });
23
+ if (mime.startsWith("video/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: cn("nd-text-red-500", className) });
24
+ if (mime.startsWith("audio/")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Music, { className: cn("nd-text-yellow-500", className) });
25
+ if (mime === "application/pdf") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: cn("nd-text-orange-500", className) });
26
+ if (mime.includes("text") || mime.includes("document")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: cn("nd-text-slate-500", className) });
27
+ if (mime.includes("zip") || mime.includes("compressed")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileArchive, { className: cn("nd-text-amber-500", className) });
28
+ if (mime.includes("javascript") || mime.includes("typescript") || mime.includes("json") || mime.includes("html") || mime.includes("css")) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileCode, { className: cn("nd-text-green-500", className) });
29
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.File, { className: cn("nd-text-gray-400", className) });
30
30
  };
31
31
  var matchesMimeFilter = (mime, isFolder, filter) => {
32
32
  if (!filter) return true;
@@ -127,5 +127,5 @@ exports.driveCreateUrl = driveCreateUrl;
127
127
  exports.formatBytes = formatBytes;
128
128
  exports.getFileIcon = getFileIcon;
129
129
  exports.matchesMimeFilter = matchesMimeFilter;
130
- //# sourceMappingURL=chunk-XDAVDVO6.cjs.map
131
- //# sourceMappingURL=chunk-XDAVDVO6.cjs.map
130
+ //# sourceMappingURL=chunk-YOZO2DQ7.cjs.map
131
+ //# sourceMappingURL=chunk-YOZO2DQ7.cjs.map
@@ -0,0 +1 @@
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,CAC1B,SAAA,EACA,WAAA,EACA,OAAA,KACS;AACT,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,IAC/B,MAAA,EAAQ,OAAA;AAAA,IACR,IAAI,SAAA,CAAU;AAAA,GACjB,CAAA;AAED,EAAA,IAAI,SAAS,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,QAAQ,OAAO,CAAA;AACrD,EAAA,IAAI,SAAS,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AAExD,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAC9C;AAGO,IAAM,iBAAA,GAAoB,CAC7B,SAAA,EACA,WAAA,EACA,SAAuB,MAAA,KACa;AACpC,EAAA,MAAM,SAAA,GAA6B,CAAC,UAAA,EAAY,KAAA,EAAO,UAAU,MAAM,CAAA;AAGvE,EAAA,MAAM,eAAA,GAAiD;AAAA,IACnD,QAAA,EAAU,GAAA;AAAA,IACV,GAAA,EAAK,GAAA;AAAA,IACL,MAAA,EAAQ,GAAA;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACZ;AAGA,EAAA,MAAM,MAAA,GAAS,SAAA,CACV,GAAA,CAAI,CAAA,OAAA,KAAW;AACZ,IAAA,MAAM,MAAM,cAAA,CAAe,SAAA,EAAW,aAAa,EAAE,OAAA,EAAS,QAAQ,CAAA;AACtE,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,eAAA,CAAgB,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,EAC7C,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAGd,EAAA,MAAM,KAAA,GAAQ,sFAAA;AAEd,EAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AAC3B","file":"chunk-YOZO2DQ7.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, TImageQuality, TImageFormat } from '@/types/client';\n\n// ** Create URL for drive file with optional quality and format\nexport const driveCreateUrl = (\n driveFile: TDriveFile,\n apiEndpoint: string,\n options?: { quality?: TImageQuality; format?: TImageFormat }\n): string => {\n const params = new URLSearchParams({\n action: 'serve',\n id: driveFile.id,\n });\n\n if (options?.quality) params.set('q', options.quality);\n if (options?.format) params.set('format', options.format);\n\n return `${apiEndpoint}?${params.toString()}`;\n};\n\n// ** Generate responsive image srcSet for drive file\nexport const driveCreateSrcSet = (\n driveFile: TDriveFile,\n apiEndpoint: string,\n format: TImageFormat = 'webp'\n): { srcSet: string; sizes: string } => {\n const qualities: TImageQuality[] = ['ultralow', 'low', 'medium', 'high'];\n\n // ** Quality to width mapping for srcSet\n const qualityWidthMap: Record<TImageQuality, number> = {\n ultralow: 200,\n low: 400,\n medium: 800,\n high: 1200,\n normal: 1600,\n };\n\n // ** Create srcSet for different qualities\n const srcSet = qualities\n .map(quality => {\n const url = driveCreateUrl(driveFile, apiEndpoint, { quality, format });\n return `${url} ${qualityWidthMap[quality]}w`;\n })\n .join(', ');\n\n // ** Default sizes attribute for responsive images\n const sizes = '(max-width: 320px) 200px, (max-width: 480px) 400px, (max-width: 768px) 800px, 1200px';\n\n return { srcSet, sizes };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/client/components/dialog.tsx"],"names":[],"mappings":"AAgBA,KAAK,gBAAgB,GAAG;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACtB,CAAC;AAGF,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,CAAC;AAE9F,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,SAAS,gBAAgB,EAAE,GAAG,SAAS,GAAG,SAAS,EAC3F,OAAO,QAAQ,CAAC;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,SAAS,EAAE,CAAC,SAAS,SAAS,gBAAgB,EAAE,GAC9C,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GACxE,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAC,gCAoIN,CAAA"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/client/components/dialog.tsx"],"names":[],"mappings":"AAgBA,KAAK,gBAAgB,GAAG;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAGF,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,gBAAgB,EAAE,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM;CAAE,CAAC;AAE9F,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,SAAS,gBAAgB,EAAE,GAAG,SAAS,GAAG,SAAS,EAC5F,OAAO,QAAQ,CAAC;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,SAAS,EAAE,CAAC,SAAS,SAAS,gBAAgB,EAAE,GAC9C,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GACxE,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACjC,CAAC,gCAoIL,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAI7D,iBAAS,QAAQ,CAAC,EACb,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,aAAqB,EACrB,GAAG,KAAK,EACZ,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG;IACpD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CAC5B,qBAwBA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAI7D,iBAAS,QAAQ,CAAC,EACd,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,aAAqB,EACrB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,qBAwBA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,KAAK,sCAAsB,CAAA;AAEjC,QAAA,MAAM,YAAY,6GAAyB,CAAA;AAE3C,QAAA,MAAM,UAAU,2GAAuB,CAAA;AAEvC,QAAA,MAAM,WAAW,4CAAwB,CAAA;AAEzC,QAAA,MAAM,YAAY,6JAYhB,CAAA;AAGF,QAAA,MAAM,aAAa;;8EAiBlB,CAAA;AAED,UAAU,iBACL,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EACrE,YAAY,CAAC,OAAO,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,QAAA,MAAM,YAAY,0FAoBhB,CAAA;AAGF,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,UAAU,mKASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,6KASpB,CAAA;AAGF,OAAO,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACpB,CAAA"}
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,KAAK,sCAAsB,CAAA;AAEjC,QAAA,MAAM,YAAY,6GAAyB,CAAA;AAE3C,QAAA,MAAM,UAAU,2GAAuB,CAAA;AAEvC,QAAA,MAAM,WAAW,4CAAwB,CAAA;AAEzC,QAAA,MAAM,YAAY,6JAYhB,CAAA;AAGF,QAAA,MAAM,aAAa;;8EAiBlB,CAAA;AAED,UAAU,iBACN,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EACrE,YAAY,CAAC,OAAO,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,QAAA,MAAM,YAAY,0FAoBhB,CAAA;AAGF,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,WAAW;8BAGd,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,UAAU,mKASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,6KASpB,CAAA;AAGF,OAAO,EACH,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACnB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/client/context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/client/context.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAoD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI3G,MAAM,MAAM,aAAa,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IAGzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,UAAU,EAAE,MAAM,IAAI,CAAC;IAGvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;IAGzB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC5E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,kBAAkB,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAGxC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGlC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3C,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IAC/B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAG5D,aAAa,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAGnE,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG9B,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,aAAa,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,KAAK,MAAM,CAAC;IAC3G,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,YAAY,KAAK;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAG1H,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C,CAAC;AAKF,eAAO,MAAM,aAAa,GAAI,OAAO,QAAQ,CAAC;IAC1C,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,sBAiYD,CAAC;AAGF,eAAO,MAAM,QAAQ,QAAO,aAI3B,CAAC"}