@muhgholy/next-drive 4.23.7 → 4.23.10

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 (95) hide show
  1. package/README.md +152 -1
  2. package/dist/{chunk-LAKT7IJJ.cjs → chunk-V75PCJHT.cjs} +962 -773
  3. package/dist/chunk-V75PCJHT.cjs.map +1 -0
  4. package/dist/{chunk-MVYNW56R.js → chunk-XUPDNN2U.js} +957 -770
  5. package/dist/chunk-XUPDNN2U.js.map +1 -0
  6. package/dist/client/components/drive/{RenameAccountDialog.d.ts → account/rename.d.ts} +2 -2
  7. package/dist/client/components/drive/account/rename.d.ts.map +1 -0
  8. package/dist/client/components/drive/{dnd-provider.d.ts → dnd/context.d.ts} +1 -1
  9. package/dist/client/components/drive/dnd/context.d.ts.map +1 -0
  10. package/dist/client/components/drive/{CreateFolderDialog.d.ts → folder/create.d.ts} +2 -2
  11. package/dist/client/components/drive/folder/create.d.ts.map +1 -0
  12. package/dist/client/components/drive/{RenameDialog.d.ts → item/rename.d.ts} +3 -3
  13. package/dist/client/components/drive/item/rename.d.ts.map +1 -0
  14. package/dist/client/components/{dialog.d.ts → shared/confirm.d.ts} +2 -2
  15. package/dist/client/components/shared/confirm.d.ts.map +1 -0
  16. package/dist/client/components/ui/{alert-dialog.d.ts → alert-modal.d.ts} +1 -1
  17. package/dist/client/components/ui/alert-modal.d.ts.map +1 -0
  18. package/dist/client/components/ui/{dialog-fullscreen.d.ts → fullscreen.d.ts} +1 -1
  19. package/dist/client/components/ui/fullscreen.d.ts.map +1 -0
  20. package/dist/client/components/ui/{dialog.d.ts → modal.d.ts} +1 -1
  21. package/dist/client/components/ui/modal.d.ts.map +1 -0
  22. package/dist/client/context.d.ts.map +1 -1
  23. package/dist/client/file-chooser.d.ts +1 -0
  24. package/dist/client/file-chooser.d.ts.map +1 -1
  25. package/dist/client/hooks/{useUpload.d.ts → use-upload.d.ts} +2 -2
  26. package/dist/client/hooks/use-upload.d.ts.map +1 -0
  27. package/dist/client/index.cjs +315 -206
  28. package/dist/client/index.cjs.map +1 -1
  29. package/dist/client/index.d.ts +12 -11
  30. package/dist/client/index.d.ts.map +1 -1
  31. package/dist/client/index.js +314 -205
  32. package/dist/client/index.js.map +1 -1
  33. package/dist/server/actions/auth.d.ts +4 -0
  34. package/dist/server/actions/auth.d.ts.map +1 -0
  35. package/dist/server/actions/cors.d.ts +4 -0
  36. package/dist/server/actions/cors.d.ts.map +1 -0
  37. package/dist/server/actions/drive.d.ts +18 -0
  38. package/dist/server/actions/drive.d.ts.map +1 -0
  39. package/dist/server/actions/public.d.ts +4 -0
  40. package/dist/server/actions/public.d.ts.map +1 -0
  41. package/dist/server/actions/shared.d.ts +14 -0
  42. package/dist/server/actions/shared.d.ts.map +1 -0
  43. package/dist/server/config.d.ts.map +1 -1
  44. package/dist/server/controllers/drive.d.ts +26 -0
  45. package/dist/server/controllers/drive.d.ts.map +1 -1
  46. package/dist/server/database/mongoose/schema/drive.d.ts +1 -0
  47. package/dist/server/database/mongoose/schema/drive.d.ts.map +1 -1
  48. package/dist/server/express.cjs +11 -11
  49. package/dist/server/express.js +2 -2
  50. package/dist/server/hono.cjs +11 -11
  51. package/dist/server/hono.js +2 -2
  52. package/dist/server/index.cjs +24 -16
  53. package/dist/server/index.d.ts +2 -2
  54. package/dist/server/index.d.ts.map +1 -1
  55. package/dist/server/index.js +1 -1
  56. package/dist/server/security/{cryptoUtils.d.ts → crypto-utils.d.ts} +1 -1
  57. package/dist/server/security/crypto-utils.d.ts.map +1 -0
  58. package/dist/server/security/{mimeFilter.d.ts → mime-filter.d.ts} +1 -1
  59. package/dist/server/security/mime-filter.d.ts.map +1 -0
  60. package/dist/server/storage-adapters/google.d.ts.map +1 -0
  61. package/dist/server/storage-adapters/local.d.ts.map +1 -0
  62. package/dist/server/utils/{folderValidation.d.ts → folder-validation.d.ts} +1 -1
  63. package/dist/server/utils/folder-validation.d.ts.map +1 -0
  64. package/dist/server/utils/{imageConvert.d.ts → image-convert.d.ts} +1 -1
  65. package/dist/server/utils/image-convert.d.ts.map +1 -0
  66. package/dist/server/zod/schemas.d.ts +5 -0
  67. package/dist/server/zod/schemas.d.ts.map +1 -1
  68. package/dist/types/lib/database/drive.d.ts +1 -0
  69. package/dist/types/lib/database/drive.d.ts.map +1 -1
  70. package/dist/types/lib/database/index.d.ts +2 -2
  71. package/dist/types/lib/database/index.d.ts.map +1 -1
  72. package/dist/types/server/config.d.ts +17 -0
  73. package/dist/types/server/config.d.ts.map +1 -1
  74. package/dist/types/server/index.d.ts +5 -5
  75. package/dist/types/server/index.d.ts.map +1 -1
  76. package/package.json +2 -1
  77. package/dist/chunk-LAKT7IJJ.cjs.map +0 -1
  78. package/dist/chunk-MVYNW56R.js.map +0 -1
  79. package/dist/client/components/dialog.d.ts.map +0 -1
  80. package/dist/client/components/drive/CreateFolderDialog.d.ts.map +0 -1
  81. package/dist/client/components/drive/RenameAccountDialog.d.ts.map +0 -1
  82. package/dist/client/components/drive/RenameDialog.d.ts.map +0 -1
  83. package/dist/client/components/drive/dnd-provider.d.ts.map +0 -1
  84. package/dist/client/components/ui/alert-dialog.d.ts.map +0 -1
  85. package/dist/client/components/ui/dialog-fullscreen.d.ts.map +0 -1
  86. package/dist/client/components/ui/dialog.d.ts.map +0 -1
  87. package/dist/client/hooks/useUpload.d.ts.map +0 -1
  88. package/dist/server/providers/google.d.ts.map +0 -1
  89. package/dist/server/providers/local.d.ts.map +0 -1
  90. package/dist/server/security/cryptoUtils.d.ts.map +0 -1
  91. package/dist/server/security/mimeFilter.d.ts.map +0 -1
  92. package/dist/server/utils/folderValidation.d.ts.map +0 -1
  93. package/dist/server/utils/imageConvert.d.ts.map +0 -1
  94. /package/dist/server/{providers → storage-adapters}/google.d.ts +0 -0
  95. /package/dist/server/{providers → storage-adapters}/local.d.ts +0 -0
@@ -6,6 +6,7 @@ var React3 = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var reactSlot = require('@radix-ui/react-slot');
8
8
  var classVarianceAuthority = require('class-variance-authority');
9
+ var ProgressPrimitive = require('@radix-ui/react-progress');
9
10
  var SheetPrimitive = require('@radix-ui/react-dialog');
10
11
  var lucideReact = require('lucide-react');
11
12
  var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
@@ -13,7 +14,6 @@ var LabelPrimitive = require('@radix-ui/react-label');
13
14
  var reactHookForm = require('react-hook-form');
14
15
  var core = require('@dnd-kit/core');
15
16
  var sortable = require('@dnd-kit/sortable');
16
- var ProgressPrimitive = require('@radix-ui/react-progress');
17
17
  var dateFns = require('date-fns');
18
18
  var ContextMenuPrimitive = require('@radix-ui/react-context-menu');
19
19
  var utilities = require('@dnd-kit/utilities');
@@ -37,10 +37,10 @@ function _interopNamespace(e) {
37
37
  }
38
38
 
39
39
  var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
40
+ var ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespace(ProgressPrimitive);
40
41
  var SheetPrimitive__namespace = /*#__PURE__*/_interopNamespace(SheetPrimitive);
41
42
  var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
42
43
  var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
43
- var ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespace(ProgressPrimitive);
44
44
  var ContextMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(ContextMenuPrimitive);
45
45
 
46
46
  var DriveContext = React3.createContext(null);
@@ -92,9 +92,15 @@ var DriveProvider = (props) => {
92
92
  headers,
93
93
  credentials: withCredentials ? "include" : "same-origin"
94
94
  });
95
- return await res.json();
95
+ try {
96
+ return await res.json();
97
+ } catch (parseErr) {
98
+ const detail = parseErr instanceof Error ? parseErr.message : String(parseErr);
99
+ return { status: res.status || 0, message: `Could not read the server response for "${action}" (${detail})` };
100
+ }
96
101
  } catch (err) {
97
- return { status: 0, message: err instanceof Error ? err.message : "Network error \u2014 please check your connection" };
102
+ const detail = err instanceof Error ? err.message : String(err);
103
+ return { status: 0, message: `Network request failed for "${action}" (${detail})` };
98
104
  }
99
105
  }, [apiEndpoint, activeAccountId, withCredentials]);
100
106
  const fetchItems = React3.useCallback(async () => {
@@ -316,7 +322,7 @@ var getChunkSize = (fileSize) => {
316
322
  if (fileSize < 1024 * 1024 * 1024) return 8 * 1024 * 1024;
317
323
  return 16 * 1024 * 1024;
318
324
  };
319
- var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUploadComplete) => {
325
+ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUploadComplete, unauthenticated = false) => {
320
326
  const [uploads, setUploads] = React3.useState([]);
321
327
  const abortControllers = React3.useRef(/* @__PURE__ */ new Map());
322
328
  const filesRef = React3.useRef(/* @__PURE__ */ new Map());
@@ -369,9 +375,9 @@ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUpload
369
375
  addLog(uploadId, "success", `Chunk uploaded successfully`);
370
376
  return [true, data.data, false];
371
377
  } catch (error) {
372
- const errorMsg = error instanceof Error ? error.message : "Network error during upload";
373
- addLog(uploadId, "error", `Network/Fetch error: ${errorMsg}`);
374
- return [false, errorMsg, true];
378
+ const detail = error instanceof Error ? error.message : String(error);
379
+ addLog(uploadId, "error", `Network/Fetch error: ${detail}`);
380
+ return [false, `Upload connection failed: ${detail}`, true];
375
381
  }
376
382
  };
377
383
  const processItem = async (item, file, folderId) => {
@@ -400,6 +406,7 @@ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUpload
400
406
  formData.append("fileType", file.type);
401
407
  formData.append("folderId", folderId || "root");
402
408
  if (driveId) formData.append("driveId", driveId);
409
+ if (unauthenticated) formData.append("unauthenticated", "true");
403
410
  let attempts = 0;
404
411
  let success = false;
405
412
  while (!success && attempts < 3 && !controller.signal.aborted) {
@@ -559,6 +566,39 @@ function Button({
559
566
  }
560
567
  );
561
568
  }
569
+ function Progress({
570
+ className,
571
+ value,
572
+ indicatorClassName,
573
+ indeterminate = false,
574
+ ...props
575
+ }) {
576
+ const isIndeterminate = indeterminate || value === void 0;
577
+ return /* @__PURE__ */ jsxRuntime.jsx(
578
+ ProgressPrimitive__namespace.Root,
579
+ {
580
+ "data-slot": "progress",
581
+ className: chunkHQTC3554_cjs.cn(
582
+ "nd:bg-primary/20 nd:relative nd:h-2 nd:w-full nd:overflow-hidden nd:rounded-full",
583
+ className
584
+ ),
585
+ ...props,
586
+ children: /* @__PURE__ */ jsxRuntime.jsx(
587
+ ProgressPrimitive__namespace.Indicator,
588
+ {
589
+ "data-slot": "progress-indicator",
590
+ className: chunkHQTC3554_cjs.cn(
591
+ "nd:bg-primary nd:h-full nd:flex-1 nd:transition-all",
592
+ isIndeterminate && "nd:w-1/3 nd:animate-[indeterminate_1.5s_ease-in-out_infinite]",
593
+ !isIndeterminate && "nd:w-full",
594
+ indicatorClassName
595
+ ),
596
+ style: isIndeterminate ? void 0 : { transform: `translateX(-${100 - (value || 0)}%)` }
597
+ }
598
+ )
599
+ }
600
+ );
601
+ }
562
602
  function Dialog2({ ...props }) {
563
603
  return /* @__PURE__ */ jsxRuntime.jsx(SheetPrimitive__namespace.Root, { "data-slot": "dialog2", ...props });
564
604
  }
@@ -1057,7 +1097,7 @@ function Label2({
1057
1097
  }
1058
1098
  );
1059
1099
  }
1060
- var DialogConfirmation = (props) => {
1100
+ var DriveConfirm = (props) => {
1061
1101
  const { title, description, onConfirm, disableEscapeKeyDown, inputs, onClose, open } = props;
1062
1102
  const [error, setError] = React3.useState(null);
1063
1103
  const [isLoading, setIsLoading] = React3.useState(false);
@@ -1154,11 +1194,29 @@ var DialogConfirmation = (props) => {
1154
1194
  )
1155
1195
  ] }, input.id)) }),
1156
1196
  /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1157
- /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", onClick: handleClose, disabled: isLoading, children: "Cancel" }),
1158
1197
  /* @__PURE__ */ jsxRuntime.jsx(
1159
1198
  Button,
1160
1199
  {
1161
- onClick: handleConfirm,
1200
+ type: "button",
1201
+ variant: "outline",
1202
+ onClick: (e) => {
1203
+ e.preventDefault();
1204
+ e.stopPropagation();
1205
+ handleClose();
1206
+ },
1207
+ disabled: isLoading,
1208
+ children: "Cancel"
1209
+ }
1210
+ ),
1211
+ /* @__PURE__ */ jsxRuntime.jsx(
1212
+ Button,
1213
+ {
1214
+ type: "button",
1215
+ onClick: (e) => {
1216
+ e.preventDefault();
1217
+ e.stopPropagation();
1218
+ void handleConfirm();
1219
+ },
1162
1220
  disabled: isLoading || !isFormValid(),
1163
1221
  children: "Confirm"
1164
1222
  }
@@ -1168,7 +1226,7 @@ var DialogConfirmation = (props) => {
1168
1226
  }
1169
1227
  ) });
1170
1228
  };
1171
- var RenameAccountDialog = (props) => {
1229
+ var DriveAccountRename = (props) => {
1172
1230
  const { open, onClose, account, onConfirm } = props;
1173
1231
  const {
1174
1232
  register,
@@ -1229,52 +1287,65 @@ var RenameAccountDialog = (props) => {
1229
1287
  e.preventDefault();
1230
1288
  }
1231
1289
  },
1232
- children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), children: [
1233
- /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1234
- /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Rename Account" }),
1235
- /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a new display name for this storage account." })
1236
- ] }),
1237
- errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1238
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1239
- /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1240
- /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1241
- ] }),
1242
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1243
- /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-account-input", children: "Account name" }),
1244
- /* @__PURE__ */ jsxRuntime.jsx(
1245
- Input,
1246
- {
1247
- id: "rename-account-input",
1248
- ...register("name", {
1249
- required: "Account name is required",
1250
- validate: (value) => {
1251
- const trimmed = value.trim();
1252
- if (!trimmed) return "Account name cannot be empty";
1253
- if (trimmed.length > 255)
1254
- return "Account name is too long";
1255
- return true;
1290
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1291
+ "form",
1292
+ {
1293
+ onSubmit: (e) => {
1294
+ e.stopPropagation();
1295
+ void handleSubmit(handleFormSubmit)(e);
1296
+ },
1297
+ children: [
1298
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1299
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Rename Account" }),
1300
+ /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a new display name for this storage account." })
1301
+ ] }),
1302
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1303
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1304
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1305
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1306
+ ] }),
1307
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1308
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-account-input", children: "Account name" }),
1309
+ /* @__PURE__ */ jsxRuntime.jsx(
1310
+ Input,
1311
+ {
1312
+ id: "rename-account-input",
1313
+ ...register("name", {
1314
+ required: "Account name is required",
1315
+ validate: (value) => {
1316
+ const trimmed = value.trim();
1317
+ if (!trimmed) return "Account name cannot be empty";
1318
+ if (trimmed.length > 255)
1319
+ return "Account name is too long";
1320
+ return true;
1321
+ }
1322
+ }),
1323
+ placeholder: "Enter account name",
1324
+ disabled: isSubmitting,
1325
+ autoComplete: "off"
1256
1326
  }
1257
- }),
1258
- placeholder: "Enter account name",
1259
- disabled: isSubmitting,
1260
- autoComplete: "off"
1261
- }
1262
- )
1263
- ] }) }),
1264
- /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1265
- /* @__PURE__ */ jsxRuntime.jsx(
1266
- Button,
1267
- {
1268
- type: "button",
1269
- variant: "outline",
1270
- onClick: handleClose,
1271
- disabled: isSubmitting,
1272
- children: "Cancel"
1273
- }
1274
- ),
1275
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Saving..." : "Save" })
1276
- ] })
1277
- ] })
1327
+ )
1328
+ ] }) }),
1329
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1330
+ /* @__PURE__ */ jsxRuntime.jsx(
1331
+ Button,
1332
+ {
1333
+ type: "button",
1334
+ variant: "outline",
1335
+ onClick: (e) => {
1336
+ e.preventDefault();
1337
+ e.stopPropagation();
1338
+ handleClose();
1339
+ },
1340
+ disabled: isSubmitting,
1341
+ children: "Cancel"
1342
+ }
1343
+ ),
1344
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Saving..." : "Save" })
1345
+ ] })
1346
+ ]
1347
+ }
1348
+ )
1278
1349
  }
1279
1350
  ) });
1280
1351
  };
@@ -1351,39 +1422,6 @@ var DriveDndProvider = (props) => {
1351
1422
  }
1352
1423
  ) : children });
1353
1424
  };
1354
- function Progress({
1355
- className,
1356
- value,
1357
- indicatorClassName,
1358
- indeterminate = false,
1359
- ...props
1360
- }) {
1361
- const isIndeterminate = indeterminate || value === void 0;
1362
- return /* @__PURE__ */ jsxRuntime.jsx(
1363
- ProgressPrimitive__namespace.Root,
1364
- {
1365
- "data-slot": "progress",
1366
- className: chunkHQTC3554_cjs.cn(
1367
- "nd:bg-primary/20 nd:relative nd:h-2 nd:w-full nd:overflow-hidden nd:rounded-full",
1368
- className
1369
- ),
1370
- ...props,
1371
- children: /* @__PURE__ */ jsxRuntime.jsx(
1372
- ProgressPrimitive__namespace.Indicator,
1373
- {
1374
- "data-slot": "progress-indicator",
1375
- className: chunkHQTC3554_cjs.cn(
1376
- "nd:bg-primary nd:h-full nd:flex-1 nd:transition-all",
1377
- isIndeterminate && "nd:w-1/3 nd:animate-[indeterminate_1.5s_ease-in-out_infinite]",
1378
- !isIndeterminate && "nd:w-full",
1379
- indicatorClassName
1380
- ),
1381
- style: isIndeterminate ? void 0 : { transform: `translateX(-${100 - (value || 0)}%)` }
1382
- }
1383
- )
1384
- }
1385
- );
1386
- }
1387
1425
  var ContextMenu = ContextMenuPrimitive__namespace.Root;
1388
1426
  var ContextMenuTrigger = ContextMenuPrimitive__namespace.Trigger;
1389
1427
  var ContextMenuSubTrigger = React3__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1495,7 +1533,7 @@ var ContextMenuSeparator = React3__namespace.forwardRef(({ className, ...props }
1495
1533
  }
1496
1534
  ));
1497
1535
  ContextMenuSeparator.displayName = ContextMenuPrimitive__namespace.Separator.displayName;
1498
- var CreateFolderDialog = (props) => {
1536
+ var DriveFolderCreate = (props) => {
1499
1537
  const { open, onClose, onConfirm } = props;
1500
1538
  const {
1501
1539
  register,
@@ -1547,56 +1585,69 @@ var CreateFolderDialog = (props) => {
1547
1585
  e.preventDefault();
1548
1586
  }
1549
1587
  },
1550
- children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), children: [
1551
- /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1552
- /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Create New Folder" }),
1553
- /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a name for the new folder" })
1554
- ] }),
1555
- errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1556
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1557
- /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1558
- /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1559
- ] }),
1560
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1561
- /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "folder-name", children: "Folder name" }),
1562
- /* @__PURE__ */ jsxRuntime.jsx(
1563
- Input,
1564
- {
1565
- id: "folder-name",
1566
- ...register("name", {
1567
- required: "Folder name is required",
1568
- validate: (value) => {
1569
- const trimmed = value.trim();
1570
- if (!trimmed) return "Folder name cannot be empty";
1571
- if (trimmed.length > 255)
1572
- return "Folder name is too long";
1573
- return true;
1588
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1589
+ "form",
1590
+ {
1591
+ onSubmit: (e) => {
1592
+ e.stopPropagation();
1593
+ void handleSubmit(handleFormSubmit)(e);
1594
+ },
1595
+ children: [
1596
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1597
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Create New Folder" }),
1598
+ /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a name for the new folder" })
1599
+ ] }),
1600
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1601
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1602
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1603
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1604
+ ] }),
1605
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1606
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "folder-name", children: "Folder name" }),
1607
+ /* @__PURE__ */ jsxRuntime.jsx(
1608
+ Input,
1609
+ {
1610
+ id: "folder-name",
1611
+ ...register("name", {
1612
+ required: "Folder name is required",
1613
+ validate: (value) => {
1614
+ const trimmed = value.trim();
1615
+ if (!trimmed) return "Folder name cannot be empty";
1616
+ if (trimmed.length > 255)
1617
+ return "Folder name is too long";
1618
+ return true;
1619
+ }
1620
+ }),
1621
+ placeholder: "Enter folder name",
1622
+ disabled: isSubmitting,
1623
+ autoComplete: "off"
1574
1624
  }
1575
- }),
1576
- placeholder: "Enter folder name",
1577
- disabled: isSubmitting,
1578
- autoComplete: "off"
1579
- }
1580
- )
1581
- ] }) }),
1582
- /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1583
- /* @__PURE__ */ jsxRuntime.jsx(
1584
- Button,
1585
- {
1586
- type: "button",
1587
- variant: "outline",
1588
- onClick: handleClose,
1589
- disabled: isSubmitting,
1590
- children: "Cancel"
1591
- }
1592
- ),
1593
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Creating..." : "Create" })
1594
- ] })
1595
- ] })
1625
+ )
1626
+ ] }) }),
1627
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1628
+ /* @__PURE__ */ jsxRuntime.jsx(
1629
+ Button,
1630
+ {
1631
+ type: "button",
1632
+ variant: "outline",
1633
+ onClick: (e) => {
1634
+ e.preventDefault();
1635
+ e.stopPropagation();
1636
+ handleClose();
1637
+ },
1638
+ disabled: isSubmitting,
1639
+ children: "Cancel"
1640
+ }
1641
+ ),
1642
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Creating..." : "Create" })
1643
+ ] })
1644
+ ]
1645
+ }
1646
+ )
1596
1647
  }
1597
1648
  ) });
1598
1649
  };
1599
- var RenameDialog = (props) => {
1650
+ var DriveItemRename = (props) => {
1600
1651
  const { open, onClose, item, onConfirm } = props;
1601
1652
  const {
1602
1653
  register,
@@ -1656,57 +1707,70 @@ var RenameDialog = (props) => {
1656
1707
  e.preventDefault();
1657
1708
  }
1658
1709
  },
1659
- children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), children: [
1660
- /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1661
- /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { children: [
1662
- "Rename ",
1663
- itemType
1664
- ] }),
1665
- /* @__PURE__ */ jsxRuntime.jsxs(DialogDescription, { children: [
1666
- "Enter a new name for this ",
1667
- itemType.toLowerCase()
1668
- ] })
1669
- ] }),
1670
- errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1671
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1672
- /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1673
- /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1674
- ] }),
1675
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1676
- /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-input", children: "Name" }),
1677
- /* @__PURE__ */ jsxRuntime.jsx(
1678
- Input,
1679
- {
1680
- id: "rename-input",
1681
- ...register("name", {
1682
- required: "Name is required",
1683
- validate: (value) => {
1684
- const trimmed = value.trim();
1685
- if (!trimmed) return "Name cannot be empty";
1686
- if (trimmed.length > 255) return "Name is too long";
1687
- return true;
1710
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1711
+ "form",
1712
+ {
1713
+ onSubmit: (e) => {
1714
+ e.stopPropagation();
1715
+ void handleSubmit(handleFormSubmit)(e);
1716
+ },
1717
+ children: [
1718
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1719
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { children: [
1720
+ "Rename ",
1721
+ itemType
1722
+ ] }),
1723
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogDescription, { children: [
1724
+ "Enter a new name for this ",
1725
+ itemType.toLowerCase()
1726
+ ] })
1727
+ ] }),
1728
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1729
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1730
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1731
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1732
+ ] }),
1733
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:grid nd:gap-4 nd:py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:grid nd:gap-2", children: [
1734
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-input", children: "Name" }),
1735
+ /* @__PURE__ */ jsxRuntime.jsx(
1736
+ Input,
1737
+ {
1738
+ id: "rename-input",
1739
+ ...register("name", {
1740
+ required: "Name is required",
1741
+ validate: (value) => {
1742
+ const trimmed = value.trim();
1743
+ if (!trimmed) return "Name cannot be empty";
1744
+ if (trimmed.length > 255) return "Name is too long";
1745
+ return true;
1746
+ }
1747
+ }),
1748
+ placeholder: "Enter name",
1749
+ disabled: isSubmitting,
1750
+ autoComplete: "off"
1688
1751
  }
1689
- }),
1690
- placeholder: "Enter name",
1691
- disabled: isSubmitting,
1692
- autoComplete: "off"
1693
- }
1694
- )
1695
- ] }) }),
1696
- /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1697
- /* @__PURE__ */ jsxRuntime.jsx(
1698
- Button,
1699
- {
1700
- type: "button",
1701
- variant: "outline",
1702
- onClick: handleClose,
1703
- disabled: isSubmitting,
1704
- children: "Cancel"
1705
- }
1706
- ),
1707
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Renaming..." : "Rename" })
1708
- ] })
1709
- ] })
1752
+ )
1753
+ ] }) }),
1754
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1755
+ /* @__PURE__ */ jsxRuntime.jsx(
1756
+ Button,
1757
+ {
1758
+ type: "button",
1759
+ variant: "outline",
1760
+ onClick: (e) => {
1761
+ e.preventDefault();
1762
+ e.stopPropagation();
1763
+ handleClose();
1764
+ },
1765
+ disabled: isSubmitting,
1766
+ children: "Cancel"
1767
+ }
1768
+ ),
1769
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Renaming..." : "Rename" })
1770
+ ] })
1771
+ ]
1772
+ }
1773
+ )
1710
1774
  }
1711
1775
  ) });
1712
1776
  };
@@ -1988,7 +2052,7 @@ var DriveFileGrid = (props) => {
1988
2052
  hasMore && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: observerTarget, className: "nd:flex nd:justify-center nd:py-6", children: isLoadingMore && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "nd:size-6 nd:animate-spin nd:text-muted-foreground" }) })
1989
2053
  ] }),
1990
2054
  /* @__PURE__ */ jsxRuntime.jsx(
1991
- CreateFolderDialog,
2055
+ DriveFolderCreate,
1992
2056
  {
1993
2057
  open: dialogs.newFolder,
1994
2058
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -1998,7 +2062,7 @@ var DriveFileGrid = (props) => {
1998
2062
  }
1999
2063
  ),
2000
2064
  /* @__PURE__ */ jsxRuntime.jsx(
2001
- RenameDialog,
2065
+ DriveItemRename,
2002
2066
  {
2003
2067
  open: dialogs.rename,
2004
2068
  onClose: () => {
@@ -2013,7 +2077,7 @@ var DriveFileGrid = (props) => {
2013
2077
  }
2014
2078
  ),
2015
2079
  /* @__PURE__ */ jsxRuntime.jsx(
2016
- DialogConfirmation,
2080
+ DriveConfirm,
2017
2081
  {
2018
2082
  open: dialogs.delete,
2019
2083
  onClose: () => {
@@ -2274,7 +2338,7 @@ var DriveHeader = ({ className }) => {
2274
2338
  )
2275
2339
  ] }),
2276
2340
  /* @__PURE__ */ jsxRuntime.jsx(
2277
- DialogConfirmation,
2341
+ DriveConfirm,
2278
2342
  {
2279
2343
  open: dialogs.delete,
2280
2344
  onClose: () => setDialogs((prev) => ({ ...prev, delete: false })),
@@ -2290,7 +2354,7 @@ var DriveHeader = ({ className }) => {
2290
2354
  }
2291
2355
  ),
2292
2356
  /* @__PURE__ */ jsxRuntime.jsx(
2293
- DialogConfirmation,
2357
+ DriveConfirm,
2294
2358
  {
2295
2359
  open: dialogs.emptyTrash,
2296
2360
  onClose: () => setDialogs((prev) => ({ ...prev, emptyTrash: false })),
@@ -2304,7 +2368,7 @@ var DriveHeader = ({ className }) => {
2304
2368
  }
2305
2369
  ),
2306
2370
  /* @__PURE__ */ jsxRuntime.jsx(
2307
- CreateFolderDialog,
2371
+ DriveFolderCreate,
2308
2372
  {
2309
2373
  open: dialogs.newFolder,
2310
2374
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -3014,7 +3078,7 @@ var ChooserSidebar = (props) => {
3014
3078
  ] }),
3015
3079
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:p-2.5 nd:border-t nd:border-border/50 nd:bg-background/50 nd:dark:bg-background/30", children: /* @__PURE__ */ jsxRuntime.jsx(DriveStorageIndicator, {}) }),
3016
3080
  /* @__PURE__ */ jsxRuntime.jsx(
3017
- RenameAccountDialog,
3081
+ DriveAccountRename,
3018
3082
  {
3019
3083
  open: renameDialog.open,
3020
3084
  onClose: () => setRenameDialog({ open: false, account: null }),
@@ -3023,7 +3087,7 @@ var ChooserSidebar = (props) => {
3023
3087
  }
3024
3088
  ),
3025
3089
  /* @__PURE__ */ jsxRuntime.jsx(
3026
- DialogConfirmation,
3090
+ DriveConfirm,
3027
3091
  {
3028
3092
  open: deleteDialog.open,
3029
3093
  onClose: () => setDeleteDialog({ open: false, account: null }),
@@ -3063,11 +3127,46 @@ var DriveFileChooser = (props) => {
3063
3127
  className,
3064
3128
  disabled = false,
3065
3129
  error,
3066
- helperText
3130
+ helperText,
3131
+ allowUnauthenticated = false
3067
3132
  } = props;
3068
- const { items, selectedFileIds, setSelectedFileIds, createUrl, triggerFetch } = useDrive();
3133
+ const { items, selectedFileIds, setSelectedFileIds, createUrl, triggerFetch, apiEndpoint, activeAccountId, withCredentials, callAPI } = useDrive();
3069
3134
  useStyleInjector();
3070
3135
  const [isOpen, setIsOpen] = React3.useState(false);
3136
+ const fileInputRef = React3.useRef(null);
3137
+ const valueRef = React3.useRef(value);
3138
+ valueRef.current = value;
3139
+ const [authed, setAuthed] = React3.useState(allowUnauthenticated ? null : true);
3140
+ React3.useEffect(() => {
3141
+ if (!allowUnauthenticated) return;
3142
+ callAPI("information").then((res) => setAuthed(res.status === 200 ? !!res.data?.authenticated : false));
3143
+ }, [allowUnauthenticated, callAPI]);
3144
+ const unauthenticatedMode = allowUnauthenticated && authed === false;
3145
+ const handleUploaded = React3.useCallback((item) => {
3146
+ const isFile = item?.information?.type === "FILE";
3147
+ const uploaded = {
3148
+ id: item.id,
3149
+ file: { name: item.name, mime: isFile ? item.information.mime : "", size: isFile ? item.information.sizeInBytes : 0 }
3150
+ };
3151
+ const current = valueRef.current;
3152
+ if (multiple) {
3153
+ const arr = Array.isArray(current) ? current : current ? [current] : [];
3154
+ onChange([...arr, uploaded]);
3155
+ } else {
3156
+ onChange(uploaded);
3157
+ }
3158
+ }, [multiple, onChange]);
3159
+ const { uploads, uploadFiles } = useUpload(apiEndpoint, activeAccountId, withCredentials, handleUploaded, unauthenticatedMode);
3160
+ const openPicker = React3.useCallback(() => {
3161
+ if (unauthenticatedMode) fileInputRef.current?.click();
3162
+ else setIsOpen(true);
3163
+ }, [unauthenticatedMode]);
3164
+ const handleFilePick = React3.useCallback((e) => {
3165
+ const picked = Array.from(e.target.files ?? []);
3166
+ if (picked.length) uploadFiles(multiple ? picked : [picked[0]], null);
3167
+ e.target.value = "";
3168
+ }, [uploadFiles, multiple]);
3169
+ const activeUploads = unauthenticatedMode ? uploads.filter((u) => ["queued", "uploading", "error"].includes(u.status)) : [];
3071
3170
  React3.useEffect(() => {
3072
3171
  if (isOpen) {
3073
3172
  triggerFetch();
@@ -3101,8 +3200,8 @@ var DriveFileChooser = (props) => {
3101
3200
  {
3102
3201
  type: "button",
3103
3202
  variant: "outline",
3104
- onClick: () => setIsOpen(true),
3105
- disabled,
3203
+ onClick: openPicker,
3204
+ disabled: disabled || allowUnauthenticated && authed === null,
3106
3205
  className: chunkHQTC3554_cjs.cn(
3107
3206
  "nd:w-full nd:h-auto nd:justify-start nd:gap-3 nd:px-3 nd:py-2.5 nd:border-dashed",
3108
3207
  error && "nd:border-destructive"
@@ -3131,7 +3230,7 @@ var DriveFileChooser = (props) => {
3131
3230
  ] })
3132
3231
  ] }),
3133
3232
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:flex nd:items-center nd:gap-1 nd:shrink-0", children: [
3134
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => setIsOpen(true), disabled, children: "Change" }),
3233
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: openPicker, disabled, children: "Change" }),
3135
3234
  !disabled && /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "nd:size-8", onClick: () => handleRemove(displayFiles[0].id), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "nd:size-4" }) })
3136
3235
  ] })
3137
3236
  ] }),
@@ -3144,7 +3243,7 @@ var DriveFileChooser = (props) => {
3144
3243
  " selected"
3145
3244
  ] }),
3146
3245
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:flex nd:items-center nd:gap-1", children: [
3147
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "nd:h-7 nd:text-xs", onClick: () => setIsOpen(true), disabled, children: "Add more" }),
3246
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "nd:h-7 nd:text-xs", onClick: openPicker, disabled, children: "Add more" }),
3148
3247
  !disabled && /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "nd:h-7 nd:text-xs nd:text-muted-foreground", onClick: () => onChange([]), children: "Clear" })
3149
3248
  ] })
3150
3249
  ] }),
@@ -3163,6 +3262,16 @@ var DriveFileChooser = (props) => {
3163
3262
  ] })
3164
3263
  ),
3165
3264
  error && helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "nd:text-xs nd:text-destructive nd:mt-1.5", children: helperText }),
3265
+ unauthenticatedMode && /* @__PURE__ */ jsxRuntime.jsx("input", { ref: fileInputRef, type: "file", accept, multiple, className: "nd:hidden", onChange: handleFilePick }),
3266
+ activeUploads.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:mt-2 nd:space-y-2", children: activeUploads.map((u) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:rounded-lg nd:border nd:px-3 nd:py-2", children: [
3267
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:flex nd:items-center nd:gap-2", children: [
3268
+ u.status === "error" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "nd:size-4 nd:text-destructive nd:shrink-0" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "nd:size-4 nd:animate-spin nd:text-muted-foreground nd:shrink-0" }),
3269
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nd:text-sm nd:truncate nd:flex-1", children: u.name }),
3270
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nd:text-xs nd:text-muted-foreground nd:shrink-0", children: u.status === "error" ? "Failed" : `${Math.round(u.currentChunk / Math.max(1, u.totalChunks) * 100)}%` })
3271
+ ] }),
3272
+ u.status !== "error" && /* @__PURE__ */ jsxRuntime.jsx(Progress, { value: Math.round(u.currentChunk / Math.max(1, u.totalChunks) * 100), className: "nd:mt-1.5" }),
3273
+ u.status === "error" && u.error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "nd:text-xs nd:text-destructive nd:mt-1", children: u.error })
3274
+ ] }, u.id)) }),
3166
3275
  /* @__PURE__ */ jsxRuntime.jsx(Dialog2, { open: isOpen, onOpenChange: setIsOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(Dialog2Content, { showCloseButton: false, className: "nd-drive-root", children: [
3167
3276
  /* @__PURE__ */ jsxRuntime.jsxs(Dialog2Header, { className: "nd:gap-2", children: [
3168
3277
  /* @__PURE__ */ jsxRuntime.jsx(MobileSidebarSheet, {}),
@@ -3451,7 +3560,7 @@ var SidebarContent = (props) => {
3451
3560
  ] }),
3452
3561
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:p-2.5 nd:border-t nd:border-border/50 nd:bg-background/50 nd:dark:bg-background/30", children: /* @__PURE__ */ jsxRuntime.jsx(DriveStorageIndicator, {}) }),
3453
3562
  /* @__PURE__ */ jsxRuntime.jsx(
3454
- RenameAccountDialog,
3563
+ DriveAccountRename,
3455
3564
  {
3456
3565
  open: renameDialog.open,
3457
3566
  onClose: () => setRenameDialog({ open: false, account: null }),
@@ -3460,7 +3569,7 @@ var SidebarContent = (props) => {
3460
3569
  }
3461
3570
  ),
3462
3571
  /* @__PURE__ */ jsxRuntime.jsx(
3463
- DialogConfirmation,
3572
+ DriveConfirm,
3464
3573
  {
3465
3574
  open: deleteDialog.open,
3466
3575
  onClose: () => setDeleteDialog({ open: false, account: null }),
@@ -3820,7 +3929,7 @@ var DriveExplorer = (props) => {
3820
3929
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:px-2 nd:py-6 nd:text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "nd:text-xs nd:text-muted-foreground", children: "No actions available" }) }) })
3821
3930
  ] }),
3822
3931
  /* @__PURE__ */ jsxRuntime.jsx(
3823
- CreateFolderDialog,
3932
+ DriveFolderCreate,
3824
3933
  {
3825
3934
  open: dialogs.newFolder,
3826
3935
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -3830,7 +3939,7 @@ var DriveExplorer = (props) => {
3830
3939
  }
3831
3940
  ),
3832
3941
  /* @__PURE__ */ jsxRuntime.jsx(
3833
- RenameDialog,
3942
+ DriveItemRename,
3834
3943
  {
3835
3944
  open: dialogs.rename,
3836
3945
  onClose: () => {
@@ -3845,7 +3954,7 @@ var DriveExplorer = (props) => {
3845
3954
  }
3846
3955
  ),
3847
3956
  /* @__PURE__ */ jsxRuntime.jsx(
3848
- DialogConfirmation,
3957
+ DriveConfirm,
3849
3958
  {
3850
3959
  open: dialogs.delete,
3851
3960
  onClose: () => {