@muhgholy/next-drive 4.23.7 → 4.23.8

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 (81) hide show
  1. package/dist/{chunk-LAKT7IJJ.cjs → chunk-OU5TKLHV.cjs} +885 -788
  2. package/dist/chunk-OU5TKLHV.cjs.map +1 -0
  3. package/dist/{chunk-MVYNW56R.js → chunk-RBSFEEJJ.js} +882 -785
  4. package/dist/chunk-RBSFEEJJ.js.map +1 -0
  5. package/dist/client/components/drive/{RenameAccountDialog.d.ts → account/rename.d.ts} +2 -2
  6. package/dist/client/components/drive/account/rename.d.ts.map +1 -0
  7. package/dist/client/components/drive/{dnd-provider.d.ts → dnd/context.d.ts} +1 -1
  8. package/dist/client/components/drive/dnd/context.d.ts.map +1 -0
  9. package/dist/client/components/drive/{CreateFolderDialog.d.ts → folder/create.d.ts} +2 -2
  10. package/dist/client/components/drive/folder/create.d.ts.map +1 -0
  11. package/dist/client/components/drive/{RenameDialog.d.ts → item/rename.d.ts} +3 -3
  12. package/dist/client/components/drive/item/rename.d.ts.map +1 -0
  13. package/dist/client/components/{dialog.d.ts → shared/confirm.d.ts} +2 -2
  14. package/dist/client/components/shared/confirm.d.ts.map +1 -0
  15. package/dist/client/components/ui/{alert-dialog.d.ts → alert-modal.d.ts} +1 -1
  16. package/dist/client/components/ui/alert-modal.d.ts.map +1 -0
  17. package/dist/client/components/ui/{dialog-fullscreen.d.ts → fullscreen.d.ts} +1 -1
  18. package/dist/client/components/ui/fullscreen.d.ts.map +1 -0
  19. package/dist/client/components/ui/{dialog.d.ts → modal.d.ts} +1 -1
  20. package/dist/client/components/ui/modal.d.ts.map +1 -0
  21. package/dist/client/context.d.ts.map +1 -1
  22. package/dist/client/hooks/{useUpload.d.ts → use-upload.d.ts} +1 -1
  23. package/dist/client/hooks/use-upload.d.ts.map +1 -0
  24. package/dist/client/index.cjs +227 -164
  25. package/dist/client/index.cjs.map +1 -1
  26. package/dist/client/index.d.ts +12 -11
  27. package/dist/client/index.d.ts.map +1 -1
  28. package/dist/client/index.js +227 -164
  29. package/dist/client/index.js.map +1 -1
  30. package/dist/server/actions/auth.d.ts +4 -0
  31. package/dist/server/actions/auth.d.ts.map +1 -0
  32. package/dist/server/actions/cors.d.ts +4 -0
  33. package/dist/server/actions/cors.d.ts.map +1 -0
  34. package/dist/server/actions/drive.d.ts +18 -0
  35. package/dist/server/actions/drive.d.ts.map +1 -0
  36. package/dist/server/actions/public.d.ts +4 -0
  37. package/dist/server/actions/public.d.ts.map +1 -0
  38. package/dist/server/actions/shared.d.ts +14 -0
  39. package/dist/server/actions/shared.d.ts.map +1 -0
  40. package/dist/server/express.cjs +11 -11
  41. package/dist/server/express.js +2 -2
  42. package/dist/server/hono.cjs +11 -11
  43. package/dist/server/hono.js +2 -2
  44. package/dist/server/index.cjs +16 -16
  45. package/dist/server/index.d.ts +1 -1
  46. package/dist/server/index.d.ts.map +1 -1
  47. package/dist/server/index.js +1 -1
  48. package/dist/server/security/{cryptoUtils.d.ts → crypto-utils.d.ts} +1 -1
  49. package/dist/server/security/crypto-utils.d.ts.map +1 -0
  50. package/dist/server/security/{mimeFilter.d.ts → mime-filter.d.ts} +1 -1
  51. package/dist/server/security/mime-filter.d.ts.map +1 -0
  52. package/dist/server/storage-adapters/google.d.ts.map +1 -0
  53. package/dist/server/storage-adapters/local.d.ts.map +1 -0
  54. package/dist/server/utils/{folderValidation.d.ts → folder-validation.d.ts} +1 -1
  55. package/dist/server/utils/folder-validation.d.ts.map +1 -0
  56. package/dist/server/utils/{imageConvert.d.ts → image-convert.d.ts} +1 -1
  57. package/dist/server/utils/image-convert.d.ts.map +1 -0
  58. package/dist/types/lib/database/index.d.ts +2 -2
  59. package/dist/types/lib/database/index.d.ts.map +1 -1
  60. package/dist/types/server/index.d.ts +5 -5
  61. package/dist/types/server/index.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/chunk-LAKT7IJJ.cjs.map +0 -1
  64. package/dist/chunk-MVYNW56R.js.map +0 -1
  65. package/dist/client/components/dialog.d.ts.map +0 -1
  66. package/dist/client/components/drive/CreateFolderDialog.d.ts.map +0 -1
  67. package/dist/client/components/drive/RenameAccountDialog.d.ts.map +0 -1
  68. package/dist/client/components/drive/RenameDialog.d.ts.map +0 -1
  69. package/dist/client/components/drive/dnd-provider.d.ts.map +0 -1
  70. package/dist/client/components/ui/alert-dialog.d.ts.map +0 -1
  71. package/dist/client/components/ui/dialog-fullscreen.d.ts.map +0 -1
  72. package/dist/client/components/ui/dialog.d.ts.map +0 -1
  73. package/dist/client/hooks/useUpload.d.ts.map +0 -1
  74. package/dist/server/providers/google.d.ts.map +0 -1
  75. package/dist/server/providers/local.d.ts.map +0 -1
  76. package/dist/server/security/cryptoUtils.d.ts.map +0 -1
  77. package/dist/server/security/mimeFilter.d.ts.map +0 -1
  78. package/dist/server/utils/folderValidation.d.ts.map +0 -1
  79. package/dist/server/utils/imageConvert.d.ts.map +0 -1
  80. /package/dist/server/{providers → storage-adapters}/google.d.ts +0 -0
  81. /package/dist/server/{providers → storage-adapters}/local.d.ts +0 -0
@@ -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 () => {
@@ -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) => {
@@ -1057,7 +1063,7 @@ function Label2({
1057
1063
  }
1058
1064
  );
1059
1065
  }
1060
- var DialogConfirmation = (props) => {
1066
+ var DriveConfirm = (props) => {
1061
1067
  const { title, description, onConfirm, disableEscapeKeyDown, inputs, onClose, open } = props;
1062
1068
  const [error, setError] = React3.useState(null);
1063
1069
  const [isLoading, setIsLoading] = React3.useState(false);
@@ -1154,11 +1160,29 @@ var DialogConfirmation = (props) => {
1154
1160
  )
1155
1161
  ] }, input.id)) }),
1156
1162
  /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1157
- /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", onClick: handleClose, disabled: isLoading, children: "Cancel" }),
1158
1163
  /* @__PURE__ */ jsxRuntime.jsx(
1159
1164
  Button,
1160
1165
  {
1161
- onClick: handleConfirm,
1166
+ type: "button",
1167
+ variant: "outline",
1168
+ onClick: (e) => {
1169
+ e.preventDefault();
1170
+ e.stopPropagation();
1171
+ handleClose();
1172
+ },
1173
+ disabled: isLoading,
1174
+ children: "Cancel"
1175
+ }
1176
+ ),
1177
+ /* @__PURE__ */ jsxRuntime.jsx(
1178
+ Button,
1179
+ {
1180
+ type: "button",
1181
+ onClick: (e) => {
1182
+ e.preventDefault();
1183
+ e.stopPropagation();
1184
+ void handleConfirm();
1185
+ },
1162
1186
  disabled: isLoading || !isFormValid(),
1163
1187
  children: "Confirm"
1164
1188
  }
@@ -1168,7 +1192,7 @@ var DialogConfirmation = (props) => {
1168
1192
  }
1169
1193
  ) });
1170
1194
  };
1171
- var RenameAccountDialog = (props) => {
1195
+ var DriveAccountRename = (props) => {
1172
1196
  const { open, onClose, account, onConfirm } = props;
1173
1197
  const {
1174
1198
  register,
@@ -1229,52 +1253,65 @@ var RenameAccountDialog = (props) => {
1229
1253
  e.preventDefault();
1230
1254
  }
1231
1255
  },
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;
1256
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1257
+ "form",
1258
+ {
1259
+ onSubmit: (e) => {
1260
+ e.stopPropagation();
1261
+ void handleSubmit(handleFormSubmit)(e);
1262
+ },
1263
+ children: [
1264
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1265
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Rename Account" }),
1266
+ /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a new display name for this storage account." })
1267
+ ] }),
1268
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1269
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1270
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1271
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1272
+ ] }),
1273
+ /* @__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: [
1274
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-account-input", children: "Account name" }),
1275
+ /* @__PURE__ */ jsxRuntime.jsx(
1276
+ Input,
1277
+ {
1278
+ id: "rename-account-input",
1279
+ ...register("name", {
1280
+ required: "Account name is required",
1281
+ validate: (value) => {
1282
+ const trimmed = value.trim();
1283
+ if (!trimmed) return "Account name cannot be empty";
1284
+ if (trimmed.length > 255)
1285
+ return "Account name is too long";
1286
+ return true;
1287
+ }
1288
+ }),
1289
+ placeholder: "Enter account name",
1290
+ disabled: isSubmitting,
1291
+ autoComplete: "off"
1256
1292
  }
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
- ] })
1293
+ )
1294
+ ] }) }),
1295
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1296
+ /* @__PURE__ */ jsxRuntime.jsx(
1297
+ Button,
1298
+ {
1299
+ type: "button",
1300
+ variant: "outline",
1301
+ onClick: (e) => {
1302
+ e.preventDefault();
1303
+ e.stopPropagation();
1304
+ handleClose();
1305
+ },
1306
+ disabled: isSubmitting,
1307
+ children: "Cancel"
1308
+ }
1309
+ ),
1310
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Saving..." : "Save" })
1311
+ ] })
1312
+ ]
1313
+ }
1314
+ )
1278
1315
  }
1279
1316
  ) });
1280
1317
  };
@@ -1495,7 +1532,7 @@ var ContextMenuSeparator = React3__namespace.forwardRef(({ className, ...props }
1495
1532
  }
1496
1533
  ));
1497
1534
  ContextMenuSeparator.displayName = ContextMenuPrimitive__namespace.Separator.displayName;
1498
- var CreateFolderDialog = (props) => {
1535
+ var DriveFolderCreate = (props) => {
1499
1536
  const { open, onClose, onConfirm } = props;
1500
1537
  const {
1501
1538
  register,
@@ -1547,56 +1584,69 @@ var CreateFolderDialog = (props) => {
1547
1584
  e.preventDefault();
1548
1585
  }
1549
1586
  },
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;
1587
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1588
+ "form",
1589
+ {
1590
+ onSubmit: (e) => {
1591
+ e.stopPropagation();
1592
+ void handleSubmit(handleFormSubmit)(e);
1593
+ },
1594
+ children: [
1595
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1596
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Create New Folder" }),
1597
+ /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "Enter a name for the new folder" })
1598
+ ] }),
1599
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1600
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1601
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1602
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1603
+ ] }),
1604
+ /* @__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: [
1605
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "folder-name", children: "Folder name" }),
1606
+ /* @__PURE__ */ jsxRuntime.jsx(
1607
+ Input,
1608
+ {
1609
+ id: "folder-name",
1610
+ ...register("name", {
1611
+ required: "Folder name is required",
1612
+ validate: (value) => {
1613
+ const trimmed = value.trim();
1614
+ if (!trimmed) return "Folder name cannot be empty";
1615
+ if (trimmed.length > 255)
1616
+ return "Folder name is too long";
1617
+ return true;
1618
+ }
1619
+ }),
1620
+ placeholder: "Enter folder name",
1621
+ disabled: isSubmitting,
1622
+ autoComplete: "off"
1574
1623
  }
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
- ] })
1624
+ )
1625
+ ] }) }),
1626
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1627
+ /* @__PURE__ */ jsxRuntime.jsx(
1628
+ Button,
1629
+ {
1630
+ type: "button",
1631
+ variant: "outline",
1632
+ onClick: (e) => {
1633
+ e.preventDefault();
1634
+ e.stopPropagation();
1635
+ handleClose();
1636
+ },
1637
+ disabled: isSubmitting,
1638
+ children: "Cancel"
1639
+ }
1640
+ ),
1641
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Creating..." : "Create" })
1642
+ ] })
1643
+ ]
1644
+ }
1645
+ )
1596
1646
  }
1597
1647
  ) });
1598
1648
  };
1599
- var RenameDialog = (props) => {
1649
+ var DriveItemRename = (props) => {
1600
1650
  const { open, onClose, item, onConfirm } = props;
1601
1651
  const {
1602
1652
  register,
@@ -1656,57 +1706,70 @@ var RenameDialog = (props) => {
1656
1706
  e.preventDefault();
1657
1707
  }
1658
1708
  },
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;
1709
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1710
+ "form",
1711
+ {
1712
+ onSubmit: (e) => {
1713
+ e.stopPropagation();
1714
+ void handleSubmit(handleFormSubmit)(e);
1715
+ },
1716
+ children: [
1717
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
1718
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { children: [
1719
+ "Rename ",
1720
+ itemType
1721
+ ] }),
1722
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogDescription, { children: [
1723
+ "Enter a new name for this ",
1724
+ itemType.toLowerCase()
1725
+ ] })
1726
+ ] }),
1727
+ errors.name && /* @__PURE__ */ jsxRuntime.jsxs(Alert, { variant: "destructive", children: [
1728
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "nd:h-4 nd:w-4" }),
1729
+ /* @__PURE__ */ jsxRuntime.jsx(AlertTitle, { children: "Error" }),
1730
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDescription, { children: errors.name.message })
1731
+ ] }),
1732
+ /* @__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: [
1733
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "rename-input", children: "Name" }),
1734
+ /* @__PURE__ */ jsxRuntime.jsx(
1735
+ Input,
1736
+ {
1737
+ id: "rename-input",
1738
+ ...register("name", {
1739
+ required: "Name is required",
1740
+ validate: (value) => {
1741
+ const trimmed = value.trim();
1742
+ if (!trimmed) return "Name cannot be empty";
1743
+ if (trimmed.length > 255) return "Name is too long";
1744
+ return true;
1745
+ }
1746
+ }),
1747
+ placeholder: "Enter name",
1748
+ disabled: isSubmitting,
1749
+ autoComplete: "off"
1688
1750
  }
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
- ] })
1751
+ )
1752
+ ] }) }),
1753
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
1754
+ /* @__PURE__ */ jsxRuntime.jsx(
1755
+ Button,
1756
+ {
1757
+ type: "button",
1758
+ variant: "outline",
1759
+ onClick: (e) => {
1760
+ e.preventDefault();
1761
+ e.stopPropagation();
1762
+ handleClose();
1763
+ },
1764
+ disabled: isSubmitting,
1765
+ children: "Cancel"
1766
+ }
1767
+ ),
1768
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? "Renaming..." : "Rename" })
1769
+ ] })
1770
+ ]
1771
+ }
1772
+ )
1710
1773
  }
1711
1774
  ) });
1712
1775
  };
@@ -1988,7 +2051,7 @@ var DriveFileGrid = (props) => {
1988
2051
  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
2052
  ] }),
1990
2053
  /* @__PURE__ */ jsxRuntime.jsx(
1991
- CreateFolderDialog,
2054
+ DriveFolderCreate,
1992
2055
  {
1993
2056
  open: dialogs.newFolder,
1994
2057
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -1998,7 +2061,7 @@ var DriveFileGrid = (props) => {
1998
2061
  }
1999
2062
  ),
2000
2063
  /* @__PURE__ */ jsxRuntime.jsx(
2001
- RenameDialog,
2064
+ DriveItemRename,
2002
2065
  {
2003
2066
  open: dialogs.rename,
2004
2067
  onClose: () => {
@@ -2013,7 +2076,7 @@ var DriveFileGrid = (props) => {
2013
2076
  }
2014
2077
  ),
2015
2078
  /* @__PURE__ */ jsxRuntime.jsx(
2016
- DialogConfirmation,
2079
+ DriveConfirm,
2017
2080
  {
2018
2081
  open: dialogs.delete,
2019
2082
  onClose: () => {
@@ -2274,7 +2337,7 @@ var DriveHeader = ({ className }) => {
2274
2337
  )
2275
2338
  ] }),
2276
2339
  /* @__PURE__ */ jsxRuntime.jsx(
2277
- DialogConfirmation,
2340
+ DriveConfirm,
2278
2341
  {
2279
2342
  open: dialogs.delete,
2280
2343
  onClose: () => setDialogs((prev) => ({ ...prev, delete: false })),
@@ -2290,7 +2353,7 @@ var DriveHeader = ({ className }) => {
2290
2353
  }
2291
2354
  ),
2292
2355
  /* @__PURE__ */ jsxRuntime.jsx(
2293
- DialogConfirmation,
2356
+ DriveConfirm,
2294
2357
  {
2295
2358
  open: dialogs.emptyTrash,
2296
2359
  onClose: () => setDialogs((prev) => ({ ...prev, emptyTrash: false })),
@@ -2304,7 +2367,7 @@ var DriveHeader = ({ className }) => {
2304
2367
  }
2305
2368
  ),
2306
2369
  /* @__PURE__ */ jsxRuntime.jsx(
2307
- CreateFolderDialog,
2370
+ DriveFolderCreate,
2308
2371
  {
2309
2372
  open: dialogs.newFolder,
2310
2373
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -3014,7 +3077,7 @@ var ChooserSidebar = (props) => {
3014
3077
  ] }),
3015
3078
  /* @__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
3079
  /* @__PURE__ */ jsxRuntime.jsx(
3017
- RenameAccountDialog,
3080
+ DriveAccountRename,
3018
3081
  {
3019
3082
  open: renameDialog.open,
3020
3083
  onClose: () => setRenameDialog({ open: false, account: null }),
@@ -3023,7 +3086,7 @@ var ChooserSidebar = (props) => {
3023
3086
  }
3024
3087
  ),
3025
3088
  /* @__PURE__ */ jsxRuntime.jsx(
3026
- DialogConfirmation,
3089
+ DriveConfirm,
3027
3090
  {
3028
3091
  open: deleteDialog.open,
3029
3092
  onClose: () => setDeleteDialog({ open: false, account: null }),
@@ -3451,7 +3514,7 @@ var SidebarContent = (props) => {
3451
3514
  ] }),
3452
3515
  /* @__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
3516
  /* @__PURE__ */ jsxRuntime.jsx(
3454
- RenameAccountDialog,
3517
+ DriveAccountRename,
3455
3518
  {
3456
3519
  open: renameDialog.open,
3457
3520
  onClose: () => setRenameDialog({ open: false, account: null }),
@@ -3460,7 +3523,7 @@ var SidebarContent = (props) => {
3460
3523
  }
3461
3524
  ),
3462
3525
  /* @__PURE__ */ jsxRuntime.jsx(
3463
- DialogConfirmation,
3526
+ DriveConfirm,
3464
3527
  {
3465
3528
  open: deleteDialog.open,
3466
3529
  onClose: () => setDeleteDialog({ open: false, account: null }),
@@ -3820,7 +3883,7 @@ var DriveExplorer = (props) => {
3820
3883
  ] }) : /* @__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
3884
  ] }),
3822
3885
  /* @__PURE__ */ jsxRuntime.jsx(
3823
- CreateFolderDialog,
3886
+ DriveFolderCreate,
3824
3887
  {
3825
3888
  open: dialogs.newFolder,
3826
3889
  onClose: () => setDialogs((prev) => ({ ...prev, newFolder: false })),
@@ -3830,7 +3893,7 @@ var DriveExplorer = (props) => {
3830
3893
  }
3831
3894
  ),
3832
3895
  /* @__PURE__ */ jsxRuntime.jsx(
3833
- RenameDialog,
3896
+ DriveItemRename,
3834
3897
  {
3835
3898
  open: dialogs.rename,
3836
3899
  onClose: () => {
@@ -3845,7 +3908,7 @@ var DriveExplorer = (props) => {
3845
3908
  }
3846
3909
  ),
3847
3910
  /* @__PURE__ */ jsxRuntime.jsx(
3848
- DialogConfirmation,
3911
+ DriveConfirm,
3849
3912
  {
3850
3913
  open: dialogs.delete,
3851
3914
  onClose: () => {