@muhgholy/next-drive 1.2.0 → 1.4.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.
Files changed (113) hide show
  1. package/README.md +114 -54
  2. package/dist/client/components/dialog.d.ts +21 -0
  3. package/dist/client/components/dialog.d.ts.map +1 -0
  4. package/dist/client/components/drive/explorer.d.ts +10 -0
  5. package/dist/client/components/drive/explorer.d.ts.map +1 -0
  6. package/dist/client/components/drive/header.d.ts +3 -0
  7. package/dist/client/components/drive/header.d.ts.map +1 -0
  8. package/dist/client/components/drive/path-bar.d.ts +3 -0
  9. package/dist/client/components/drive/path-bar.d.ts.map +1 -0
  10. package/dist/client/components/drive/sidebar.d.ts +3 -0
  11. package/dist/client/components/drive/sidebar.d.ts.map +1 -0
  12. package/dist/client/components/drive/storage/indicator.d.ts +6 -0
  13. package/dist/client/components/drive/storage/indicator.d.ts.map +1 -0
  14. package/dist/client/components/drive/upload.d.ts +6 -0
  15. package/dist/client/components/drive/upload.d.ts.map +1 -0
  16. package/dist/client/components/ui/alert-dialog.d.ts +21 -0
  17. package/dist/client/components/ui/alert-dialog.d.ts.map +1 -0
  18. package/dist/client/components/ui/alert.d.ts +10 -0
  19. package/dist/client/components/ui/alert.d.ts.map +1 -0
  20. package/dist/client/components/ui/button.d.ts +11 -0
  21. package/dist/client/components/ui/button.d.ts.map +1 -0
  22. package/dist/client/components/ui/context-menu.d.ts +28 -0
  23. package/dist/client/components/ui/context-menu.d.ts.map +1 -0
  24. package/dist/client/components/ui/dialog.d.ts +16 -0
  25. package/dist/client/components/ui/dialog.d.ts.map +1 -0
  26. package/dist/client/components/ui/dropdown-menu.d.ts +28 -0
  27. package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
  28. package/dist/client/components/ui/input.d.ts +4 -0
  29. package/dist/client/components/ui/input.d.ts.map +1 -0
  30. package/dist/client/components/ui/label.d.ts +5 -0
  31. package/dist/client/components/ui/label.d.ts.map +1 -0
  32. package/dist/client/components/ui/progress.d.ts +7 -0
  33. package/dist/client/components/ui/progress.d.ts.map +1 -0
  34. package/dist/client/components/ui/separator.d.ts +5 -0
  35. package/dist/client/components/ui/separator.d.ts.map +1 -0
  36. package/dist/client/components/ui/sheet.d.ts +26 -0
  37. package/dist/client/components/ui/sheet.d.ts.map +1 -0
  38. package/dist/client/components/ui/tooltip.d.ts +8 -0
  39. package/dist/client/components/ui/tooltip.d.ts.map +1 -0
  40. package/dist/client/context.d.ts +87 -0
  41. package/dist/client/context.d.ts.map +1 -0
  42. package/dist/client/file-chooser.d.ts +14 -0
  43. package/dist/client/file-chooser.d.ts.map +1 -0
  44. package/dist/client/hooks/useUpload.d.ts +8 -0
  45. package/dist/client/hooks/useUpload.d.ts.map +1 -0
  46. package/dist/client/index.d.ts +13 -133
  47. package/dist/client/index.d.ts.map +1 -0
  48. package/dist/client/index.js +401 -602
  49. package/dist/client/index.js.map +1 -1
  50. package/dist/client/utils.d.ts +16 -0
  51. package/dist/client/utils.d.ts.map +1 -0
  52. package/dist/schemas.d.ts +33 -0
  53. package/dist/schemas.d.ts.map +1 -0
  54. package/dist/schemas.js +15 -0
  55. package/dist/schemas.js.map +1 -0
  56. package/dist/server/config.d.ts +6 -0
  57. package/dist/server/config.d.ts.map +1 -0
  58. package/dist/server/controllers/drive.d.ts +55 -0
  59. package/dist/server/controllers/drive.d.ts.map +1 -0
  60. package/dist/server/database/mongoose/schema/drive.d.ts +19 -0
  61. package/dist/server/database/mongoose/schema/drive.d.ts.map +1 -0
  62. package/dist/server/database/mongoose/schema/storage/account.d.ts +12 -0
  63. package/dist/server/database/mongoose/schema/storage/account.d.ts.map +1 -0
  64. package/dist/server/express.d.ts +10 -0
  65. package/dist/server/express.d.ts.map +1 -0
  66. package/dist/server/express.js +1384 -0
  67. package/dist/server/express.js.map +1 -0
  68. package/dist/server/index.d.ts +10 -156
  69. package/dist/server/index.d.ts.map +1 -0
  70. package/dist/server/index.js +68 -110
  71. package/dist/server/index.js.map +1 -1
  72. package/dist/server/providers/google.d.ts +3 -0
  73. package/dist/server/providers/google.d.ts.map +1 -0
  74. package/dist/server/providers/local.d.ts +3 -0
  75. package/dist/server/providers/local.d.ts.map +1 -0
  76. package/dist/server/security/cryptoUtils.d.ts +13 -0
  77. package/dist/server/security/cryptoUtils.d.ts.map +1 -0
  78. package/dist/server/security/mimeFilter.d.ts +6 -0
  79. package/dist/server/security/mimeFilter.d.ts.map +1 -0
  80. package/dist/server/utils/ffmpeg.d.ts +14 -0
  81. package/dist/server/utils/ffmpeg.d.ts.map +1 -0
  82. package/dist/server/utils/folderValidation.d.ts +9 -0
  83. package/dist/server/utils/folderValidation.d.ts.map +1 -0
  84. package/dist/server/utils/imageConvert.d.ts +15 -0
  85. package/dist/server/utils/imageConvert.d.ts.map +1 -0
  86. package/dist/server/utils/metadata.d.ts +23 -0
  87. package/dist/server/utils/metadata.d.ts.map +1 -0
  88. package/dist/server/utils.d.ts +14 -0
  89. package/dist/server/utils.d.ts.map +1 -0
  90. package/dist/server/zod/schemas.d.ts +207 -0
  91. package/dist/server/zod/schemas.d.ts.map +1 -0
  92. package/dist/types/client/index.d.ts +32 -0
  93. package/dist/types/client/index.d.ts.map +1 -0
  94. package/dist/types/lib/database/drive.d.ts +41 -0
  95. package/dist/types/lib/database/drive.d.ts.map +1 -0
  96. package/dist/types/lib/database/index.d.ts +3 -0
  97. package/dist/types/lib/database/index.d.ts.map +1 -0
  98. package/dist/types/lib/database/storage/account.d.ts +15 -0
  99. package/dist/types/lib/database/storage/account.d.ts.map +1 -0
  100. package/dist/types/server/api.d.ts +16 -0
  101. package/dist/types/server/api.d.ts.map +1 -0
  102. package/dist/types/server/config.d.ts +41 -0
  103. package/dist/types/server/config.d.ts.map +1 -0
  104. package/dist/types/server/drive.d.ts +2 -0
  105. package/dist/types/server/drive.d.ts.map +1 -0
  106. package/dist/types/server/express.d.ts +37 -0
  107. package/dist/types/server/express.d.ts.map +1 -0
  108. package/dist/types/server/index.d.ts +4 -0
  109. package/dist/types/server/index.d.ts.map +1 -0
  110. package/dist/types/server/storage.d.ts +29 -0
  111. package/dist/types/server/storage.d.ts.map +1 -0
  112. package/package.json +102 -92
  113. package/dist/index-C4pw1JjP.d.ts +0 -121
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # @muhgholy/next-drive
2
2
 
3
- Robust file storage and management solution for Next.js applications, featuring a responsive UI, advanced search, trash management, and secure file handling.
3
+ Robust file storage and management solution for Next.js and Express applications, featuring a responsive UI, advanced search, trash management, and secure file handling.
4
4
 
5
5
  ## Features
6
6
 
7
- - **File Management**: Upload, rename, move, and organize files and folders.
8
- - **Advanced Search**: Search both active files and the trash bin with real-time filtering.
9
- - **Trash System**: specialized trash view with soft delete, restore, and empty trash capabilities.
10
- - **Responsive UI**: optimized layouts for both desktop (single toolbar) and mobile (search-focused header).
11
- - **Video Support**: Auto-generates thumbnails for video files (requires FFmpeg).
12
- - **Security**: Signed URLs for secure file access and configurable upload limits.
13
- - **View Modes**: Toggle between Grid and List views with custom sorting and grouping.
7
+ - **File Management**: Upload, rename, move, and organize files and folders.
8
+ - **Advanced Search**: Search both active files and the trash bin with real-time filtering.
9
+ - **Trash System**: specialized trash view with soft delete, restore, and empty trash capabilities.
10
+ - **Responsive UI**: optimized layouts for both desktop (single toolbar) and mobile (search-focused header).
11
+ - **Video Support**: Auto-generates thumbnails for video files (requires FFmpeg).
12
+ - **Security**: Signed URLs for secure file access and configurable upload limits.
13
+ - **View Modes**: Toggle between Grid and List views with custom sorting and grouping.
14
14
 
15
15
  ## Installation
16
16
 
@@ -20,17 +20,17 @@ npm install @muhgholy/next-drive
20
20
 
21
21
  **Peer Dependencies:**
22
22
 
23
- - Next.js >= 14
24
- - React >= 18
25
- - Mongoose >= 7
26
- - Tailwind CSS >= 3
23
+ - Next.js >= 14
24
+ - React >= 18
25
+ - Mongoose >= 7
26
+ - Tailwind CSS >= 3
27
27
 
28
28
  **System Requirements:**
29
29
 
30
- - **FFmpeg**: Required for generating thumbnails from video files.
31
- - MacOS: `brew install ffmpeg`
32
- - Ubuntu: `sudo apt install ffmpeg`
33
- - Windows: Download from official site and add to PATH.
30
+ - **FFmpeg**: Required for generating thumbnails from video files.
31
+ - MacOS: `brew install ffmpeg`
32
+ - Ubuntu: `sudo apt install ffmpeg`
33
+ - Windows: Download from official site and add to PATH.
34
34
 
35
35
  ### Tailwind CSS Configuration
36
36
 
@@ -40,11 +40,11 @@ Since this package uses Tailwind CSS for styling, you **must** configure Tailwin
40
40
  // tailwind.config.js
41
41
  export default {
42
42
  content: [
43
- "./app/**/*.{js,ts,jsx,tsx,mdx}",
44
- "./pages/**/*.{js,ts,jsx,tsx,mdx}",
45
- "./components/**/*.{js,ts,jsx,tsx,mdx}",
43
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
44
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
45
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
46
46
  // Add the next-drive package
47
- "./node_modules/@muhgholy/next-drive/dist/**/*.{js,mjs}",
47
+ './node_modules/@muhgholy/next-drive/dist/**/*.{js,mjs}',
48
48
  ],
49
49
  theme: {
50
50
  extend: {},
@@ -63,15 +63,15 @@ Create a configuration file (e.g., `lib/drive.ts`) to set up storage paths, data
63
63
 
64
64
  ```typescript
65
65
  // lib/drive.ts
66
- import { driveConfiguration } from "@muhgholy/next-drive/server";
67
- import type { TDriveConfigInformation } from "@muhgholy/next-drive/server";
66
+ import { driveConfiguration } from '@muhgholy/next-drive/server';
67
+ import type { TDriveConfigInformation } from '@muhgholy/next-drive/server';
68
68
 
69
69
  export const drive = driveConfiguration({
70
- database: "MONGOOSE",
71
- storage: { path: "/var/data/drive" },
70
+ database: 'MONGOOSE',
71
+ storage: { path: '/var/data/drive' },
72
72
  security: {
73
73
  maxUploadSize: 50 * 1024 * 1024, // 50MB
74
- allowedMimeTypes: ["image/*", "video/*", "application/pdf"],
74
+ allowedMimeTypes: ['image/*', 'video/*', 'application/pdf'],
75
75
  signedUrls: {
76
76
  enabled: true,
77
77
  secret: process.env.DRIVE_SECRET!,
@@ -79,13 +79,13 @@ export const drive = driveConfiguration({
79
79
  },
80
80
  },
81
81
  image: {
82
- formats: ["webp", "jpeg", "png"],
83
- qualities: ["ultralow", "low", "medium", "high", "normal"],
82
+ formats: ['webp', 'jpeg', 'png'],
83
+ qualities: ['ultralow', 'low', 'medium', 'high', 'normal'],
84
84
  },
85
85
  information: async (req): Promise<TDriveConfigInformation> => {
86
86
  // Implement your auth verification here
87
87
  const auth = await verifyAuth(req);
88
- if (!auth) throw new Error("Unauthenticated");
88
+ if (!auth) throw new Error('Unauthenticated');
89
89
  return {
90
90
  key: { userId: auth.userId },
91
91
  storage: { quotaInBytes: 1024 * 1024 * 1024 }, // 1GB limit
@@ -100,33 +100,33 @@ Set up the API route handler that `next-drive` will use to communicate with the
100
100
 
101
101
  **Important:**
102
102
 
103
- - The API route must be in the `pages` folder (Pages Router)
104
- - **You MUST disable Next.js body parser** for uploads to work properly
103
+ - The API route must be in the `pages` folder (Pages Router)
104
+ - **You MUST disable Next.js body parser** for uploads to work properly
105
105
 
106
106
  ```typescript
107
107
  // pages/api/drive.ts
108
- import "@/lib/drive";
109
- import { driveAPIHandler } from "@muhgholy/next-drive/server";
110
- import type { NextApiRequest, NextApiResponse } from "next";
108
+ import '@/lib/drive';
109
+ import { driveAPIHandler } from '@muhgholy/next-drive/server';
110
+ import type { NextApiRequest, NextApiResponse } from 'next';
111
111
 
112
112
  export default async function handler(req: NextApiRequest, res: NextApiResponse) {
113
113
  // Manually parse JSON body for non-upload requests
114
114
  if (!req.body) req.body = {};
115
115
 
116
- if (req.headers["content-type"]?.includes("application/json")) {
116
+ if (req.headers['content-type']?.includes('application/json')) {
117
117
  try {
118
118
  const buffer = await new Promise<Buffer>((resolve, reject) => {
119
119
  const chunks: Buffer[] = [];
120
- req.on("data", (chunk) => chunks.push(chunk));
121
- req.on("end", () => resolve(Buffer.concat(chunks)));
122
- req.on("error", reject);
120
+ req.on('data', chunk => chunks.push(chunk));
121
+ req.on('end', () => resolve(Buffer.concat(chunks)));
122
+ req.on('error', reject);
123
123
  });
124
124
 
125
125
  if (buffer.length > 0) {
126
126
  req.body = JSON.parse(buffer.toString());
127
127
  }
128
128
  } catch (e) {
129
- console.error("Failed to parse JSON body", e);
129
+ console.error('Failed to parse JSON body', e);
130
130
  }
131
131
  }
132
132
 
@@ -141,6 +141,59 @@ export const config = {
141
141
  };
142
142
  ```
143
143
 
144
+ ### 2b. Express Integration (Alternative)
145
+
146
+ If you're using Express instead of Next.js API Routes, use the Express adapter:
147
+
148
+ ```typescript
149
+ // lib/drive.ts
150
+ import { driveConfigurationExpress } from '@muhgholy/next-drive/server/express';
151
+ import type { TDriveConfigInformation } from '@muhgholy/next-drive/server/express';
152
+
153
+ export const drive = driveConfigurationExpress({
154
+ database: 'MONGOOSE',
155
+ storage: { path: '/var/data/drive' },
156
+ security: {
157
+ maxUploadSizeInBytes: 50 * 1024 * 1024, // 50MB
158
+ allowedMimeTypes: ['image/*', 'video/*', 'application/pdf'],
159
+ signedUrls: {
160
+ enabled: true,
161
+ secret: process.env.DRIVE_SECRET!,
162
+ expiresIn: 3600,
163
+ },
164
+ },
165
+ apiUrl: '/api/drive',
166
+ information: async (req): Promise<TDriveConfigInformation> => {
167
+ // req is Express Request type
168
+ const auth = await verifyAuth(req);
169
+ if (!auth) throw new Error('Unauthenticated');
170
+ return {
171
+ key: { userId: auth.userId },
172
+ storage: { quotaInBytes: 1024 * 1024 * 1024 },
173
+ };
174
+ },
175
+ });
176
+ ```
177
+
178
+ ```typescript
179
+ // routes/drive.ts
180
+ import './lib/drive'; // Initialize configuration
181
+ import express from 'express';
182
+ import { driveAPIHandlerExpress } from '@muhgholy/next-drive/server/express';
183
+
184
+ const router = express.Router();
185
+
186
+ // Handle all drive API requests
187
+ router.all('/drive', driveAPIHandlerExpress);
188
+
189
+ export default router;
190
+ ```
191
+
192
+ **Important for Express:**
193
+
194
+ - Do NOT use `express.json()` middleware on the drive route (file uploads need raw body)
195
+ - The handler supports all HTTP methods (GET, POST, PATCH, DELETE)
196
+
144
197
  ### 3. Add Provider
145
198
 
146
199
  Wrap your application or the specific route with `DriveProvider`.
@@ -186,10 +239,10 @@ function MyForm() {
186
239
  You can use the exported `driveFileSchemaZod` to validate file data in your forms or API routes.
187
240
 
188
241
  ```typescript
189
- import { z } from "zod";
190
- import { driveFileSchemaZod } from "@muhgholy/next-drive/client";
242
+ import { z } from 'zod';
243
+ import { driveFileSchemaZod } from '@muhgholy/next-drive/schemas';
191
244
 
192
- // Use in your form schema
245
+ // Use in your form schema (works in both client and server)
193
246
  const myFormSchema = z.object({
194
247
  asset: driveFileSchemaZod,
195
248
  title: z.string(),
@@ -199,6 +252,13 @@ const myFormSchema = z.object({
199
252
  type MyFormData = z.infer<typeof myFormSchema>;
200
253
  ```
201
254
 
255
+ > **Note**: The schema is also available from `/client` and `/server` exports for convenience, but `/schemas` is the recommended universal import.
256
+
257
+ // Use in your form schema
258
+ const myFormSchema = z.object({
259
+
260
+ ````
261
+
202
262
  ## Key Capabilities
203
263
 
204
264
  ### Client-Side File URLs
@@ -226,7 +286,7 @@ function MyComponent() {
226
286
  // Use in Next.js Image component
227
287
  return <Image src={createUrl(driveFile)} alt={driveFile.file.name} />;
228
288
  }
229
- ```
289
+ ````
230
290
 
231
291
  **Responsive Image SrcSet:**
232
292
 
@@ -249,7 +309,7 @@ function ResponsiveImage({ driveFile }: { driveFile: TDriveFile }) {
249
309
  **Get File URL:**
250
310
 
251
311
  ```typescript
252
- import { driveGetUrl } from "@muhgholy/next-drive/server";
312
+ import { driveGetUrl } from '@muhgholy/next-drive/server';
253
313
 
254
314
  // Generate a secure URL
255
315
  const url = driveGetUrl(fileId);
@@ -259,13 +319,13 @@ const url = driveGetUrl(fileId);
259
319
  const url = driveGetUrl(fileId, { expiry: 7200 }); // 2 hours
260
320
 
261
321
  // With specific expiry date
262
- const url = driveGetUrl(fileId, { expiry: new Date("2025-12-31") });
322
+ const url = driveGetUrl(fileId, { expiry: new Date('2025-12-31') });
263
323
  ```
264
324
 
265
325
  **Read File Stream:**
266
326
 
267
327
  ```typescript
268
- import { driveReadFile } from "@muhgholy/next-drive/server";
328
+ import { driveReadFile } from '@muhgholy/next-drive/server';
269
329
 
270
330
  // Using file ID
271
331
  const { stream, mime, size } = await driveReadFile(fileId);
@@ -278,7 +338,7 @@ const { stream, mime, size } = await driveReadFile(drive);
278
338
  // Example: Send file via email
279
339
  const { stream } = await driveReadFile(fileId);
280
340
  await sendEmail({
281
- attachments: [{ filename: "report.pdf", content: stream }],
341
+ attachments: [{ filename: 'report.pdf', content: stream }],
282
342
  });
283
343
 
284
344
  // Example: Process file contents
@@ -295,8 +355,8 @@ const buffer = Buffer.concat(chunks);
295
355
  For scenarios requiring direct file system access, `driveFilePath()` provides the absolute path. Google Drive files are automatically downloaded to a local cache.
296
356
 
297
357
  ```typescript
298
- import { driveFilePath } from "@muhgholy/next-drive/server";
299
- import fs from "fs";
358
+ import { driveFilePath } from '@muhgholy/next-drive/server';
359
+ import fs from 'fs';
300
360
 
301
361
  // Get local path (downloads Google Drive files automatically)
302
362
  const { path, mime, size, provider } = await driveFilePath(fileId);
@@ -305,8 +365,8 @@ const { path, mime, size, provider } = await driveFilePath(fileId);
305
365
  const buffer = fs.readFileSync(path);
306
366
 
307
367
  // Use with libraries requiring file paths
308
- await sharp(path).resize(800, 600).toFile("output.jpg");
309
- await ffmpeg(path).format("mp4").save("output.mp4");
368
+ await sharp(path).resize(800, 600).toFile('output.jpg');
369
+ await ffmpeg(path).format('mp4').save('output.mp4');
310
370
 
311
371
  // Google Drive files are cached at: storage/library/google/{fileId}.ext
312
372
  // Local files use their original location
@@ -314,13 +374,13 @@ await ffmpeg(path).format("mp4").save("output.mp4");
314
374
 
315
375
  ### Search & Trash
316
376
 
317
- - **Search Scope**: Search automatically adapts to your current view. If you are browsing the Trash, searches will query deleted items. In the main Browser, searches query active files.
318
- - **Trash Management**: "Delete" moves items to Trash. From Trash, you can "Restore" items or "Delete Forever". A dedicated "Empty Trash" button is available to clear all deleted items.
377
+ - **Search Scope**: Search automatically adapts to your current view. If you are browsing the Trash, searches will query deleted items. In the main Browser, searches query active files.
378
+ - **Trash Management**: "Delete" moves items to Trash. From Trash, you can "Restore" items or "Delete Forever". A dedicated "Empty Trash" button is available to clear all deleted items.
319
379
 
320
380
  ### Responsive Design
321
381
 
322
- - **Desktop**: Features a unified single-row header containing Search, Group, Delete, Sort, View, and Trash controls.
323
- - **Mobile**: Optimizes for small screens by separating the Search bar into a full-width top row and grouping action buttons in a scrollable toolbar below.
382
+ - **Desktop**: Features a unified single-row header containing Search, Group, Delete, Sort, View, and Trash controls.
383
+ - **Mobile**: Optimizes for small screens by separating the Search bar into a full-width top row and grouping action buttons in a scrollable toolbar below.
324
384
 
325
385
  ## API Endpoints
326
386
 
@@ -0,0 +1,21 @@
1
+ type TInputDefinition = {
2
+ type: 'INPUT';
3
+ id: string;
4
+ name: string;
5
+ default?: string;
6
+ required?: boolean;
7
+ };
8
+ type TInputValues<T extends readonly TInputDefinition[]> = {
9
+ [K in T[number]['id']]: string;
10
+ };
11
+ export declare const DialogConfirmation: <T extends readonly TInputDefinition[] | undefined = undefined>(props: Readonly<{
12
+ title: string;
13
+ description: string;
14
+ open: boolean;
15
+ onClose: () => void;
16
+ inputs?: T;
17
+ onConfirm: T extends readonly TInputDefinition[] ? (inputs: Readonly<TInputValues<T>>) => Promise<[true] | [false, string]> : () => Promise<[true] | [false, string]>;
18
+ disableEscapeKeyDown?: boolean;
19
+ }>) => import("react").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
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,gCAiIL,CAAA"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { TDatabaseDrive } from '../../../types/server';
3
+ export declare const DriveExplorer: (props: Readonly<{
4
+ onItemClick?: (item: TDatabaseDrive) => void;
5
+ onItemDoubleClick?: (item: TDatabaseDrive) => void;
6
+ mimeFilter?: string;
7
+ className?: string;
8
+ selectableFolders?: boolean;
9
+ }>) => React.JSX.Element;
10
+ //# sourceMappingURL=explorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../../../../src/client/components/drive/explorer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA0DrD,eAAO,MAAM,aAAa,GAAI,OAAO,QAAQ,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC,sBAwlBD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const DriveHeader: () => React.JSX.Element;
3
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/client/components/drive/header.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAexC,eAAO,MAAM,WAAW,yBAgSvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const DrivePathBar: () => React.JSX.Element;
3
+ //# sourceMappingURL=path-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-bar.d.ts","sourceRoot":"","sources":["../../../../src/client/components/drive/path-bar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AA4D1B,eAAO,MAAM,YAAY,yBAqBxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const DriveSidebar: () => React.JSX.Element;
3
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../src/client/components/drive/sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AA6K1B,eAAO,MAAM,YAAY,yBA4BxB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const DriveStorageIndicator: (props: Readonly<{
3
+ compact?: boolean;
4
+ className?: string;
5
+ }>) => React.JSX.Element | null;
6
+ //# sourceMappingURL=indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicator.d.ts","sourceRoot":"","sources":["../../../../../src/client/components/drive/storage/indicator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAMzC,eAAO,MAAM,qBAAqB,GAAI,OAAO,QAAQ,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,6BAqE/F,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const DriveUpload: (props: Readonly<{
3
+ compact?: boolean;
4
+ onComplete?: (item: unknown) => void;
5
+ }>) => React.JSX.Element;
6
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../src/client/components/drive/upload.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAyB7D,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,CAAC,sBAoLvG,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
+ declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
4
+ declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
6
+ declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const AlertDialogHeader: {
9
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
10
+ displayName: string;
11
+ };
12
+ declare const AlertDialogFooter: {
13
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
14
+ displayName: string;
15
+ };
16
+ declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
17
+ declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
18
+ declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
19
+ declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
20
+ export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, };
21
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAA;AAKpE,QAAA,MAAM,WAAW,iDAA4B,CAAA;AAE7C,QAAA,MAAM,kBAAkB,wHAA+B,CAAA;AAEvD,QAAA,MAAM,iBAAiB,uDAA8B,CAAA;AAErD,QAAA,MAAM,kBAAkB,wKAYtB,CAAA;AAGF,QAAA,MAAM,kBAAkB,wKAetB,CAAA;AAGF,QAAA,MAAM,iBAAiB;8BAGpB,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,iBAAiB;8BAGpB,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,gBAAgB,8KASpB,CAAA;AAGF,QAAA,MAAM,sBAAsB,wLAS1B,CAAA;AAIF,QAAA,MAAM,iBAAiB,6KASrB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6KAarB,CAAA;AAGF,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GACpB,CAAA"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const alertVariants: (props?: ({
4
+ variant?: "default" | "destructive" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
7
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ export { Alert, AlertTitle, AlertDescription };
10
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;8EAclB,CAAA;AAED,iBAAS,KAAK,CAAC,EACX,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,qBASlE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,gBAAgB,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
8
+ asChild?: boolean;
9
+ }): React.JSX.Element;
10
+ export { Button, buttonVariants };
11
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,cAAc;;;8EA8BnB,CAAA;AAED,iBAAS,MAAM,CAAC,EACZ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC7B,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,qBAUJ;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
3
+ declare const ContextMenu: React.FC<ContextMenuPrimitive.ContextMenuProps>;
4
+ declare const ContextMenuTrigger: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & React.RefAttributes<HTMLSpanElement>>;
5
+ declare const ContextMenuGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare const ContextMenuPortal: React.FC<ContextMenuPrimitive.ContextMenuPortalProps>;
7
+ declare const ContextMenuSub: React.FC<ContextMenuPrimitive.ContextMenuSubProps>;
8
+ declare const ContextMenuRadioGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
9
+ declare const ContextMenuSubTrigger: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
10
+ inset?: boolean;
11
+ } & React.RefAttributes<HTMLDivElement>>;
12
+ declare const ContextMenuSubContent: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const ContextMenuContent: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+ declare const ContextMenuItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
15
+ inset?: boolean;
16
+ } & React.RefAttributes<HTMLDivElement>>;
17
+ declare const ContextMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ declare const ContextMenuRadioItem: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
19
+ declare const ContextMenuLabel: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
20
+ inset?: boolean;
21
+ } & React.RefAttributes<HTMLDivElement>>;
22
+ declare const ContextMenuSeparator: React.ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
23
+ declare const ContextMenuShortcut: {
24
+ ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
25
+ displayName: string;
26
+ };
27
+ export { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, ContextMenuPortal, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuRadioGroup, };
28
+ //# sourceMappingURL=context-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/context-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAA;AAKpE,QAAA,MAAM,WAAW,iDAA4B,CAAA;AAE7C,QAAA,MAAM,kBAAkB,sHAA+B,CAAA;AAEvD,QAAA,MAAM,gBAAgB,mHAA6B,CAAA;AAEnD,QAAA,MAAM,iBAAiB,uDAA8B,CAAA;AAErD,QAAA,MAAM,cAAc,oDAA2B,CAAA;AAE/C,QAAA,MAAM,qBAAqB,wHAAkC,CAAA;AAE7D,QAAA,MAAM,qBAAqB;YAGX,OAAO;wCAerB,CAAA;AAGF,QAAA,MAAM,qBAAqB,2KAYzB,CAAA;AAGF,QAAA,MAAM,kBAAkB,wKActB,CAAA;AAGF,QAAA,MAAM,eAAe;YAGL,OAAO;wCAYrB,CAAA;AAGF,QAAA,MAAM,uBAAuB,6KAoB3B,CAAA;AAIF,QAAA,MAAM,oBAAoB,0KAmBxB,CAAA;AAGF,QAAA,MAAM,gBAAgB;YAGN,OAAO;wCAYrB,CAAA;AAGF,QAAA,MAAM,oBAAoB,0KASxB,CAAA;AAGF,QAAA,MAAM,mBAAmB;8BAGtB,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;;CAUvC,CAAA;AAGD,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACxB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
3
+ declare function Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
4
+ declare function DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>): React.JSX.Element;
5
+ declare function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>): React.JSX.Element;
6
+ declare function DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>): React.JSX.Element;
7
+ declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.JSX.Element;
8
+ declare function DialogContent({ className, children, showCloseButton, ...props }: React.ComponentProps<typeof DialogPrimitive.Content> & {
9
+ showCloseButton?: boolean;
10
+ }): React.JSX.Element;
11
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+ declare function DialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
+ declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.JSX.Element;
14
+ declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.JSX.Element;
15
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
16
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAKzD,iBAAS,MAAM,CAAC,EACZ,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAEnD;AAED,iBAAS,aAAa,CAAC,EACnB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAEtD;AAED,iBAAS,YAAY,CAAC,EAClB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,qBAErD;AAED,iBAAS,WAAW,CAAC,EACjB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAEpD;AAED,iBAAS,aAAa,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAWtD;AAED,iBAAS,aAAa,CAAC,EACnB,SAAS,EACT,QAAQ,EACR,eAAsB,EACtB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACtD,eAAe,CAAC,EAAE,OAAO,CAAA;CAC5B,qBAyBA;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWzE;AAED,iBAAS,WAAW,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAQpD;AAED,iBAAS,iBAAiB,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,qBAQ1D;AAED,OAAO,EACH,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,CAAA"}
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
3
+ declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
4
+ declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
7
+ declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
8
+ declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
9
+ declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
10
+ inset?: boolean;
11
+ } & React.RefAttributes<HTMLDivElement>>;
12
+ declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
15
+ inset?: boolean;
16
+ } & React.RefAttributes<HTMLDivElement>>;
17
+ declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
19
+ declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
20
+ inset?: boolean;
21
+ } & React.RefAttributes<HTMLDivElement>>;
22
+ declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
23
+ declare const DropdownMenuShortcut: {
24
+ ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
25
+ displayName: string;
26
+ };
27
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, };
28
+ //# sourceMappingURL=dropdown-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/dropdown-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AAKtE,QAAA,MAAM,YAAY,mDAA6B,CAAA;AAE/C,QAAA,MAAM,mBAAmB,0HAAgC,CAAA;AAEzD,QAAA,MAAM,iBAAiB,qHAA8B,CAAA;AAErD,QAAA,MAAM,kBAAkB,yDAA+B,CAAA;AAEvD,QAAA,MAAM,eAAe,sDAA4B,CAAA;AAEjD,QAAA,MAAM,sBAAsB,0HAAmC,CAAA;AAE/D,QAAA,MAAM,sBAAsB;YAGZ,OAAO;wCAerB,CAAA;AAIF,QAAA,MAAM,sBAAsB,6KAY1B,CAAA;AAIF,QAAA,MAAM,mBAAmB,0KAevB,CAAA;AAGF,QAAA,MAAM,gBAAgB;YAGN,OAAO;wCAYrB,CAAA;AAGF,QAAA,MAAM,wBAAwB,+KAoB5B,CAAA;AAIF,QAAA,MAAM,qBAAqB,4KAmBzB,CAAA;AAGF,QAAA,MAAM,iBAAiB;YAGP,OAAO;wCAYrB,CAAA;AAGF,QAAA,MAAM,qBAAqB,4KASzB,CAAA;AAGF,QAAA,MAAM,oBAAoB;8BAGvB,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;;CAOvC,CAAA;AAGD,OAAO,EACH,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACzB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<"input">): React.JSX.Element;
3
+ export { Input };
4
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ declare function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): React.JSX.Element;
4
+ export { Label };
5
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,iBAAS,KAAK,CAAC,EACX,SAAS,EACT,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,qBAWlD;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
3
+ declare function Progress({ className, value, indicatorClassName, ...props }: React.ComponentProps<typeof ProgressPrimitive.Root> & {
4
+ indicatorClassName?: string;
5
+ }): React.JSX.Element;
6
+ export { Progress };
7
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +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,EACd,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,qBAiBvF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
3
+ declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>): React.JSX.Element;
4
+ export { Separator };
5
+ //# sourceMappingURL=separator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/separator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAI/D,iBAAS,SAAS,CAAC,EACf,SAAS,EACT,WAA0B,EAC1B,UAAiB,EACjB,GAAG,KAAK,EACX,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAatD;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}