@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 +14 -16
- package/dist/{chunk-CN3AV3AN.js → chunk-6BBEPJMR.js} +12 -12
- package/dist/chunk-6BBEPJMR.js.map +1 -0
- package/dist/{chunk-XDAVDVO6.cjs → chunk-YOZO2DQ7.cjs} +12 -12
- package/dist/chunk-YOZO2DQ7.cjs.map +1 -0
- package/dist/client/components/dialog.d.ts.map +1 -1
- package/dist/client/components/ui/progress.d.ts.map +1 -1
- package/dist/client/components/ui/sheet.d.ts.map +1 -1
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/index.cjs +530 -529
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.css +1 -59
- package/dist/client/index.css.map +1 -1
- package/dist/client/index.js +471 -470
- package/dist/client/index.js.map +1 -1
- package/dist/client/utils.d.ts.map +1 -1
- package/dist/server/express.cjs +1 -1
- package/dist/server/express.js +1 -1
- package/dist/server/index.cjs +3 -3
- package/dist/server/index.js +1 -1
- package/package.json +8 -2
- package/dist/chunk-CN3AV3AN.js.map +0 -1
- package/dist/chunk-XDAVDVO6.cjs.map +0 -1
- package/dist/client/styles.css +0 -81
package/README.md
CHANGED
|
@@ -22,13 +22,12 @@ npm install @muhgholy/next-drive
|
|
|
22
22
|
|
|
23
23
|
### Requirements
|
|
24
24
|
|
|
25
|
-
| Dependency
|
|
26
|
-
|
|
|
27
|
-
| Next.js
|
|
28
|
-
| React
|
|
29
|
-
| Mongoose
|
|
30
|
-
|
|
|
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
|
-
###
|
|
84
|
+
### Styles
|
|
86
85
|
|
|
87
|
-
|
|
86
|
+
Styles are **automatically injected** when you import components from `@muhgholy/next-drive/client`. No additional CSS import is required!
|
|
88
87
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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-
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
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":";;;;;;AAKO,SAAS,MAAM,MAAA,EAAsB;AACxC,EAAA,OAAO,OAAA,CAAQ,IAAA,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,yBAAiB,GAAA,CAAC,MAAA,EAAA,EAAO,WAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA,EAAG,CAAA;AAC/F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AAC7F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAG,CAAA;AAC1F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AAC7F,EAAA,IAAI,IAAA,KAAS,mBAAmB,uBAAO,GAAA,CAAC,YAAS,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,2BAAQ,QAAA,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,2BAAQ,WAAA,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,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAG,CAAA;AAC1M,EAAA,2BAAQ,IAAA,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-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-
|
|
131
|
-
//# sourceMappingURL=chunk-
|
|
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":"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","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;
|
|
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,
|
|
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,
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/client/context.tsx"],"names":[],"mappings":"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"}
|