@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.
- package/README.md +152 -1
- package/dist/{chunk-LAKT7IJJ.cjs → chunk-V75PCJHT.cjs} +962 -773
- package/dist/chunk-V75PCJHT.cjs.map +1 -0
- package/dist/{chunk-MVYNW56R.js → chunk-XUPDNN2U.js} +957 -770
- package/dist/chunk-XUPDNN2U.js.map +1 -0
- package/dist/client/components/drive/{RenameAccountDialog.d.ts → account/rename.d.ts} +2 -2
- package/dist/client/components/drive/account/rename.d.ts.map +1 -0
- package/dist/client/components/drive/{dnd-provider.d.ts → dnd/context.d.ts} +1 -1
- package/dist/client/components/drive/dnd/context.d.ts.map +1 -0
- package/dist/client/components/drive/{CreateFolderDialog.d.ts → folder/create.d.ts} +2 -2
- package/dist/client/components/drive/folder/create.d.ts.map +1 -0
- package/dist/client/components/drive/{RenameDialog.d.ts → item/rename.d.ts} +3 -3
- package/dist/client/components/drive/item/rename.d.ts.map +1 -0
- package/dist/client/components/{dialog.d.ts → shared/confirm.d.ts} +2 -2
- package/dist/client/components/shared/confirm.d.ts.map +1 -0
- package/dist/client/components/ui/{alert-dialog.d.ts → alert-modal.d.ts} +1 -1
- package/dist/client/components/ui/alert-modal.d.ts.map +1 -0
- package/dist/client/components/ui/{dialog-fullscreen.d.ts → fullscreen.d.ts} +1 -1
- package/dist/client/components/ui/fullscreen.d.ts.map +1 -0
- package/dist/client/components/ui/{dialog.d.ts → modal.d.ts} +1 -1
- package/dist/client/components/ui/modal.d.ts.map +1 -0
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/file-chooser.d.ts +1 -0
- package/dist/client/file-chooser.d.ts.map +1 -1
- package/dist/client/hooks/{useUpload.d.ts → use-upload.d.ts} +2 -2
- package/dist/client/hooks/use-upload.d.ts.map +1 -0
- package/dist/client/index.cjs +315 -206
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.ts +12 -11
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +314 -205
- package/dist/client/index.js.map +1 -1
- package/dist/server/actions/auth.d.ts +4 -0
- package/dist/server/actions/auth.d.ts.map +1 -0
- package/dist/server/actions/cors.d.ts +4 -0
- package/dist/server/actions/cors.d.ts.map +1 -0
- package/dist/server/actions/drive.d.ts +18 -0
- package/dist/server/actions/drive.d.ts.map +1 -0
- package/dist/server/actions/public.d.ts +4 -0
- package/dist/server/actions/public.d.ts.map +1 -0
- package/dist/server/actions/shared.d.ts +14 -0
- package/dist/server/actions/shared.d.ts.map +1 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/controllers/drive.d.ts +26 -0
- package/dist/server/controllers/drive.d.ts.map +1 -1
- package/dist/server/database/mongoose/schema/drive.d.ts +1 -0
- package/dist/server/database/mongoose/schema/drive.d.ts.map +1 -1
- package/dist/server/express.cjs +11 -11
- package/dist/server/express.js +2 -2
- package/dist/server/hono.cjs +11 -11
- package/dist/server/hono.js +2 -2
- package/dist/server/index.cjs +24 -16
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/security/{cryptoUtils.d.ts → crypto-utils.d.ts} +1 -1
- package/dist/server/security/crypto-utils.d.ts.map +1 -0
- package/dist/server/security/{mimeFilter.d.ts → mime-filter.d.ts} +1 -1
- package/dist/server/security/mime-filter.d.ts.map +1 -0
- package/dist/server/storage-adapters/google.d.ts.map +1 -0
- package/dist/server/storage-adapters/local.d.ts.map +1 -0
- package/dist/server/utils/{folderValidation.d.ts → folder-validation.d.ts} +1 -1
- package/dist/server/utils/folder-validation.d.ts.map +1 -0
- package/dist/server/utils/{imageConvert.d.ts → image-convert.d.ts} +1 -1
- package/dist/server/utils/image-convert.d.ts.map +1 -0
- package/dist/server/zod/schemas.d.ts +5 -0
- package/dist/server/zod/schemas.d.ts.map +1 -1
- package/dist/types/lib/database/drive.d.ts +1 -0
- package/dist/types/lib/database/drive.d.ts.map +1 -1
- package/dist/types/lib/database/index.d.ts +2 -2
- package/dist/types/lib/database/index.d.ts.map +1 -1
- package/dist/types/server/config.d.ts +17 -0
- package/dist/types/server/config.d.ts.map +1 -1
- package/dist/types/server/index.d.ts +5 -5
- package/dist/types/server/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/chunk-LAKT7IJJ.cjs.map +0 -1
- package/dist/chunk-MVYNW56R.js.map +0 -1
- package/dist/client/components/dialog.d.ts.map +0 -1
- package/dist/client/components/drive/CreateFolderDialog.d.ts.map +0 -1
- package/dist/client/components/drive/RenameAccountDialog.d.ts.map +0 -1
- package/dist/client/components/drive/RenameDialog.d.ts.map +0 -1
- package/dist/client/components/drive/dnd-provider.d.ts.map +0 -1
- package/dist/client/components/ui/alert-dialog.d.ts.map +0 -1
- package/dist/client/components/ui/dialog-fullscreen.d.ts.map +0 -1
- package/dist/client/components/ui/dialog.d.ts.map +0 -1
- package/dist/client/hooks/useUpload.d.ts.map +0 -1
- package/dist/server/providers/google.d.ts.map +0 -1
- package/dist/server/providers/local.d.ts.map +0 -1
- package/dist/server/security/cryptoUtils.d.ts.map +0 -1
- package/dist/server/security/mimeFilter.d.ts.map +0 -1
- package/dist/server/utils/folderValidation.d.ts.map +0 -1
- package/dist/server/utils/imageConvert.d.ts.map +0 -1
- /package/dist/server/{providers → storage-adapters}/google.d.ts +0 -0
- /package/dist/server/{providers → storage-adapters}/local.d.ts +0 -0
package/dist/client/index.cjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
373
|
-
addLog(uploadId, "error", `Network/Fetch error: ${
|
|
374
|
-
return [false,
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
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
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
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
|
|
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(
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
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
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
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
|
|
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(
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
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
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3957
|
+
DriveConfirm,
|
|
3849
3958
|
{
|
|
3850
3959
|
open: dialogs.delete,
|
|
3851
3960
|
onClose: () => {
|