@muhgholy/next-drive 4.23.14 → 4.23.19

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.
@@ -315,6 +315,8 @@ var useDrive = () => {
315
315
  if (!context) throw new Error("useDrive must be used within a DriveProvider");
316
316
  return context;
317
317
  };
318
+
319
+ // src/client/upload.ts
318
320
  var MAX_CONCURRENT_UPLOADS = 2;
319
321
  var getChunkSize = (fileSize) => {
320
322
  if (fileSize < 50 * 1024 * 1024) return 2 * 1024 * 1024;
@@ -322,78 +324,109 @@ var getChunkSize = (fileSize) => {
322
324
  if (fileSize < 1024 * 1024 * 1024) return 8 * 1024 * 1024;
323
325
  return 16 * 1024 * 1024;
324
326
  };
325
- var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUploadComplete) => {
326
- const [uploads, setUploads] = React3.useState([]);
327
- const abortControllers = React3.useRef(/* @__PURE__ */ new Map());
328
- const filesRef = React3.useRef(/* @__PURE__ */ new Map());
329
- const metaRef = React3.useRef(/* @__PURE__ */ new Map());
330
- const updateUpload = React3.useCallback((id, updates) => {
331
- setUploads((prev) => prev.map((u) => u.id === id ? { ...u, ...updates } : u));
332
- }, []);
333
- const addLog = React3.useCallback((id, type, message) => {
334
- setUploads((prev) => prev.map((u) => {
335
- if (u.id !== id) return u;
336
- const logs = u.logs || [];
337
- return { ...u, logs: [...logs, { type, message, timestamp: Date.now() }] };
338
- }));
339
- }, []);
340
- const uploadChunk = async (uploadId, formData) => {
341
- try {
342
- const headers = {};
343
- if (activeAccountId) headers["x-drive-account"] = activeAccountId;
344
- const url = `${apiEndpoint.replace(/\/$/, "")}?action=upload`;
345
- addLog(uploadId, "info", `Sending chunk to ${url}`);
346
- const response = await fetch(url, {
347
- method: "POST",
348
- body: formData,
349
- headers,
350
- credentials: withCredentials ? "include" : "same-origin"
351
- });
352
- if (!response.ok) {
353
- const text = await response.text();
354
- addLog(uploadId, "error", `HTTP ${response.status}: ${response.statusText}`);
327
+ var generateId = () => `upload_${Date.now()}_${Math.random().toString(36).slice(2)}`;
328
+ var toDriveFile = (item) => {
329
+ const isFile = item?.information?.type === "FILE";
330
+ return {
331
+ id: item?.id,
332
+ file: {
333
+ name: item?.name,
334
+ mime: isFile ? item.information.mime : "",
335
+ size: isFile ? item.information.sizeInBytes : 0
336
+ }
337
+ };
338
+ };
339
+ var uploadFile = (options) => {
340
+ const {
341
+ apiEndpoint,
342
+ file,
343
+ folderId = null,
344
+ accountId = null,
345
+ withCredentials = false,
346
+ signal,
347
+ onProgress,
348
+ onLog,
349
+ onComplete
350
+ } = options;
351
+ const id = options.id ?? generateId();
352
+ const endpoint = apiEndpoint.replace(/\/$/, "");
353
+ const uploadUrl = `${endpoint}?action=upload`;
354
+ const controller = new AbortController();
355
+ let activeXhr = null;
356
+ let driveId;
357
+ let completedItem;
358
+ let cancelled = false;
359
+ const totalBytes = file.size;
360
+ const chunkSize = getChunkSize(file.size);
361
+ const totalChunks = Math.ceil(file.size / chunkSize);
362
+ const log = (type, message) => onLog?.({ id, type, message, timestamp: Date.now() });
363
+ const emitProgress = (currentChunk, uploadedBytes) => {
364
+ const percent = totalBytes === 0 ? 100 : Math.min(100, Math.round(uploadedBytes / totalBytes * 100));
365
+ onProgress?.({ id, percent, uploadedBytes, totalBytes, currentChunk, totalChunks });
366
+ };
367
+ const sendChunk = (chunkIndex, formData, chunkStart) => new Promise((resolve) => {
368
+ const xhr = new XMLHttpRequest();
369
+ activeXhr = xhr;
370
+ log("info", `Sending chunk to ${uploadUrl}`);
371
+ xhr.upload.onprogress = (e) => {
372
+ if (e.lengthComputable) emitProgress(chunkIndex, chunkStart + e.loaded);
373
+ };
374
+ xhr.onload = () => {
375
+ activeXhr = null;
376
+ const status = xhr.status;
377
+ const text = xhr.responseText;
378
+ if (status < 200 || status >= 300) {
379
+ log("error", `HTTP ${status}: ${xhr.statusText}`);
355
380
  try {
356
381
  const json = JSON.parse(text);
357
- const msg = json.message || json.error?.message || `Status ${response.status}`;
358
- addLog(uploadId, "error", `Server response: ${msg}`);
359
- const canRetry = [408, 429, 502, 503, 504].includes(response.status);
360
- if (canRetry) {
361
- addLog(uploadId, "warning", `Error is retryable (status ${response.status})`);
362
- }
363
- return [false, msg, canRetry];
382
+ const msg = json.message || json.error?.message || `Status ${status}`;
383
+ log("error", `Server response: ${msg}`);
384
+ const canRetry = [408, 429, 502, 503, 504].includes(status);
385
+ if (canRetry) log("warning", `Error is retryable (status ${status})`);
386
+ resolve([false, msg, canRetry]);
364
387
  } catch {
365
- addLog(uploadId, "error", `Failed to parse error response: ${text.slice(0, 100)}`);
366
- const isRetryable = response.status >= 500 || response.status === 429;
367
- return [false, `Server error ${response.status}: ${text.slice(0, 100)}`, isRetryable];
388
+ log("error", `Failed to parse error response: ${text.slice(0, 100)}`);
389
+ const isRetryable = status >= 500 || status === 429;
390
+ resolve([false, `Server error ${status}: ${text.slice(0, 100)}`, isRetryable]);
368
391
  }
392
+ return;
369
393
  }
370
- const data = await response.json();
371
- if (data.status !== 200) {
372
- addLog(uploadId, "error", `Upload API error: ${data.message || "Unknown error"}`);
373
- return [false, data.message || "Upload failed", false];
394
+ try {
395
+ const data = JSON.parse(text);
396
+ if (data.status !== 200) {
397
+ log("error", `Upload API error: ${data.message || "Unknown error"}`);
398
+ resolve([false, data.message || "Upload failed", false]);
399
+ return;
400
+ }
401
+ log("success", `Chunk uploaded successfully`);
402
+ resolve([true, data.data, false]);
403
+ } catch {
404
+ log("error", `Failed to parse response: ${text.slice(0, 100)}`);
405
+ resolve([false, "Invalid server response", true]);
374
406
  }
375
- addLog(uploadId, "success", `Chunk uploaded successfully`);
376
- return [true, data.data, false];
377
- } catch (error) {
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];
381
- }
382
- };
383
- const processItem = async (item, file, folderId) => {
384
- const controller = new AbortController();
385
- abortControllers.current.set(item.id, controller);
386
- addLog(item.id, "info", `Starting upload: ${file.name} (${file.size} bytes)`);
387
- updateUpload(item.id, { status: "uploading" });
388
- const chunkSize = getChunkSize(file.size);
389
- const totalChunks = Math.ceil(file.size / chunkSize);
390
- addLog(item.id, "info", `File split into ${totalChunks} chunks of ${chunkSize} bytes each`);
391
- let driveId = item.driveId;
407
+ };
408
+ xhr.onerror = () => {
409
+ activeXhr = null;
410
+ log("error", `Network/Fetch error: request failed`);
411
+ resolve([false, `Upload connection failed`, true]);
412
+ };
413
+ xhr.onabort = () => {
414
+ activeXhr = null;
415
+ resolve([false, "Cancelled", false]);
416
+ };
417
+ xhr.open("POST", uploadUrl);
418
+ if (accountId) xhr.setRequestHeader("x-drive-account", accountId);
419
+ xhr.withCredentials = withCredentials;
420
+ xhr.send(formData);
421
+ });
422
+ const run = async () => {
423
+ log("info", `Starting upload: ${file.name} (${file.size} bytes)`);
424
+ log("info", `File split into ${totalChunks} chunks of ${chunkSize} bytes each`);
425
+ emitProgress(0, 0);
392
426
  try {
393
- for (let i = item.currentChunk; i < totalChunks; i++) {
427
+ for (let i = 0; i < totalChunks; i++) {
394
428
  if (controller.signal.aborted) throw new Error("Cancelled");
395
- updateUpload(item.id, { currentChunk: i });
396
- addLog(item.id, "info", `Processing chunk ${i + 1}/${totalChunks}`);
429
+ log("info", `Processing chunk ${i + 1}/${totalChunks}`);
397
430
  const start = i * chunkSize;
398
431
  const end = Math.min(start + chunkSize, file.size);
399
432
  const chunk = file.slice(start, end);
@@ -409,84 +442,214 @@ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUpload
409
442
  let attempts = 0;
410
443
  let success = false;
411
444
  while (!success && attempts < 3 && !controller.signal.aborted) {
412
- const [ok, result, canRetry] = await uploadChunk(item.id, formData);
445
+ const [ok, result, canRetry] = await sendChunk(i, formData, start);
413
446
  if (ok) {
414
447
  success = true;
448
+ emitProgress(i + 1, end);
415
449
  if (result.type === "UPLOAD_STARTED" && result.driveId) {
416
450
  driveId = result.driveId;
417
- updateUpload(item.id, { driveId });
418
- addLog(item.id, "success", `Upload session started with ID: ${driveId}`);
451
+ log("success", `Upload session started with ID: ${driveId}`);
419
452
  } else if (result.type === "UPLOAD_COMPLETE") {
420
- addLog(item.id, "success", `Upload completed successfully`);
421
- if (onUploadComplete) onUploadComplete(result.item);
453
+ if (result.driveId) driveId = result.driveId;
454
+ log("success", `Upload completed successfully`);
455
+ completedItem = result.item;
422
456
  }
423
457
  } else {
458
+ if (result === "Cancelled") throw new Error("Cancelled");
424
459
  if (!canRetry) {
425
- addLog(item.id, "error", `Non-retryable error: ${result}`);
460
+ log("error", `Non-retryable error: ${result}`);
426
461
  throw new Error(result);
427
462
  }
428
463
  attempts++;
429
- addLog(item.id, "warning", `Retry attempt ${attempts}/3 after error`);
464
+ log("warning", `Retry attempt ${attempts}/3 after error`);
430
465
  if (attempts === 3) {
431
- addLog(item.id, "error", `Max retry attempts reached: ${result}`);
466
+ log("error", `Max retry attempts reached: ${result}`);
432
467
  throw new Error(result);
433
468
  }
434
469
  await new Promise((r) => setTimeout(r, 1e3 * attempts));
435
470
  }
436
471
  }
472
+ if (!success && controller.signal.aborted) throw new Error("Cancelled");
437
473
  }
438
- addLog(item.id, "success", `All ${totalChunks} chunks uploaded successfully`);
439
- updateUpload(item.id, { status: "complete", currentChunk: totalChunks });
474
+ log("success", `All ${totalChunks} chunks uploaded successfully`);
475
+ emitProgress(totalChunks, totalBytes);
476
+ if (completedItem !== void 0) onComplete?.(completedItem);
477
+ return { id, status: "complete", driveId: driveId ?? "", file: toDriveFile(completedItem), item: completedItem };
440
478
  } catch (error) {
441
479
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
442
480
  if (errorMessage === "Cancelled") {
443
- addLog(item.id, "warning", "Upload cancelled by user");
444
- updateUpload(item.id, { status: "cancelled" });
445
- } else {
446
- addLog(item.id, "error", `Upload failed: ${errorMessage}`);
447
- updateUpload(item.id, { status: "error", error: errorMessage });
481
+ log("warning", "Upload cancelled by user");
482
+ return { id, status: "cancelled", driveId: driveId ?? null };
448
483
  }
449
- } finally {
450
- abortControllers.current.delete(item.id);
484
+ log("error", `Upload failed: ${errorMessage}`);
485
+ return { id, status: "error", driveId: driveId ?? null, error: errorMessage };
451
486
  }
452
487
  };
453
- const uploadFiles = React3.useCallback(async (files, folderId) => {
454
- const newUploads = [];
455
- files.forEach((file) => {
488
+ const cancel = () => {
489
+ if (cancelled) return;
490
+ cancelled = true;
491
+ controller.abort();
492
+ activeXhr?.abort();
493
+ if (driveId) {
494
+ fetch(`${endpoint}?action=cancel&id=${driveId}`, {
495
+ method: "POST",
496
+ credentials: withCredentials ? "include" : "same-origin"
497
+ }).catch(() => {
498
+ });
499
+ }
500
+ };
501
+ if (signal) {
502
+ if (signal.aborted) cancel();
503
+ else signal.addEventListener("abort", cancel, { once: true });
504
+ }
505
+ return { id, promise: run(), cancel };
506
+ };
507
+ var uploadFiles = (files, options) => {
508
+ const { concurrency = MAX_CONCURRENT_UPLOADS, onFileComplete, ...base } = options;
509
+ const slots = Math.max(1, concurrency);
510
+ const entries = [];
511
+ const handles = [];
512
+ files.forEach((file) => {
513
+ const id = generateId();
514
+ const entry = { id, file, cancelRequested: false, real: null, settle: () => {
515
+ } };
516
+ const promise = new Promise((resolve) => {
517
+ entry.settle = resolve;
518
+ });
519
+ entries.push(entry);
520
+ handles.push({
521
+ id,
522
+ promise,
523
+ cancel: () => {
524
+ entry.cancelRequested = true;
525
+ entry.real?.cancel();
526
+ }
527
+ });
528
+ });
529
+ const results = [];
530
+ let resolveAll = () => {
531
+ };
532
+ const allPromise = new Promise((resolve) => {
533
+ resolveAll = resolve;
534
+ });
535
+ let nextIndex = 0;
536
+ let active = 0;
537
+ let settledCount = 0;
538
+ let cancelledAll = false;
539
+ const finalize = (entry, result) => {
540
+ entry.settle(result);
541
+ results.push(result);
542
+ onFileComplete?.(result);
543
+ settledCount++;
544
+ if (settledCount === entries.length) resolveAll(results);
545
+ };
546
+ const startNext = () => {
547
+ while (active < slots && nextIndex < entries.length) {
548
+ const entry = entries[nextIndex++];
549
+ if (entry.cancelRequested || cancelledAll) {
550
+ finalize(entry, { id: entry.id, status: "cancelled", driveId: null });
551
+ continue;
552
+ }
553
+ active++;
554
+ const handle = uploadFile({ ...base, file: entry.file, id: entry.id });
555
+ entry.real = handle;
556
+ if (entry.cancelRequested) handle.cancel();
557
+ handle.promise.then((result) => {
558
+ active--;
559
+ finalize(entry, result);
560
+ startNext();
561
+ });
562
+ }
563
+ };
564
+ if (entries.length === 0) resolveAll(results);
565
+ else startNext();
566
+ return {
567
+ uploads: handles,
568
+ cancelAll: () => {
569
+ cancelledAll = true;
570
+ entries.forEach((entry) => {
571
+ entry.cancelRequested = true;
572
+ entry.real?.cancel();
573
+ });
574
+ },
575
+ promise: allPromise
576
+ };
577
+ };
578
+
579
+ // src/client/hooks/use-upload.ts
580
+ var MAX_CONCURRENT_UPLOADS2 = 2;
581
+ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUploadComplete) => {
582
+ const [uploads, setUploads] = React3.useState([]);
583
+ const handles = React3.useRef(/* @__PURE__ */ new Map());
584
+ const filesRef = React3.useRef(/* @__PURE__ */ new Map());
585
+ const metaRef = React3.useRef(/* @__PURE__ */ new Map());
586
+ const startedRef = React3.useRef(/* @__PURE__ */ new Set());
587
+ const updateUpload = React3.useCallback((id, updates) => {
588
+ setUploads((prev) => prev.map((u) => u.id === id ? { ...u, ...updates } : u));
589
+ }, []);
590
+ const addLog = React3.useCallback((id, type, message) => {
591
+ setUploads((prev) => prev.map((u) => {
592
+ if (u.id !== id) return u;
593
+ const logs = u.logs || [];
594
+ return { ...u, logs: [...logs, { type, message, timestamp: Date.now() }] };
595
+ }));
596
+ }, []);
597
+ const startUpload = React3.useCallback(
598
+ (item) => {
599
+ const file = filesRef.current.get(item.id);
600
+ const meta = metaRef.current.get(item.id);
601
+ if (!file) return;
602
+ updateUpload(item.id, { status: "uploading" });
603
+ const handle = uploadFile({
604
+ apiEndpoint,
605
+ file,
606
+ folderId: meta?.folderId ?? null,
607
+ accountId: activeAccountId,
608
+ withCredentials,
609
+ id: item.id,
610
+ onLog: ({ type, message }) => addLog(item.id, type, message),
611
+ onProgress: ({ percent, currentChunk, totalChunks }) => updateUpload(item.id, { percent, currentChunk, totalChunks }),
612
+ onComplete: (uploaded) => onUploadComplete?.(uploaded)
613
+ });
614
+ handles.current.set(item.id, { cancel: handle.cancel });
615
+ handle.promise.then((result) => {
616
+ handles.current.delete(item.id);
617
+ if (result.status === "complete") {
618
+ updateUpload(item.id, { status: "complete", percent: 100, driveId: result.driveId });
619
+ } else if (result.status === "cancelled") {
620
+ updateUpload(item.id, { status: "cancelled" });
621
+ } else {
622
+ updateUpload(item.id, { status: "error", error: result.error });
623
+ }
624
+ });
625
+ },
626
+ [apiEndpoint, activeAccountId, withCredentials, onUploadComplete, addLog, updateUpload]
627
+ );
628
+ const uploadFiles2 = React3.useCallback(async (files, folderId) => {
629
+ const newUploads = files.map((file) => {
456
630
  const id = `upload_${Date.now()}_${Math.random().toString(36).slice(2)}`;
457
- const chunkSize = getChunkSize(file.size);
458
631
  filesRef.current.set(id, file);
459
632
  metaRef.current.set(id, { folderId });
460
- newUploads.push({
633
+ return {
461
634
  id,
462
635
  name: file.name,
463
636
  size: file.size,
464
637
  status: "queued",
465
638
  currentChunk: 0,
466
- totalChunks: Math.ceil(file.size / chunkSize),
639
+ totalChunks: 1,
640
+ percent: 0,
467
641
  logs: []
468
- });
642
+ };
469
643
  });
470
644
  setUploads((prev) => [...prev, ...newUploads]);
471
645
  }, []);
472
646
  const cancelUpload = React3.useCallback(
473
- async (id) => {
474
- const controller = abortControllers.current.get(id);
475
- if (controller) {
476
- controller.abort();
477
- } else {
478
- updateUpload(id, { status: "cancelled" });
479
- }
480
- const upload = uploads.find((u) => u.id === id);
481
- if (upload?.driveId) {
482
- fetch(`${apiEndpoint.replace(/\/$/, "")}?action=cancel&id=${upload.driveId}`, {
483
- method: "POST",
484
- credentials: withCredentials ? "include" : "same-origin"
485
- }).catch(() => {
486
- });
487
- }
647
+ (id) => {
648
+ const handle = handles.current.get(id);
649
+ if (handle) handle.cancel();
650
+ else updateUpload(id, { status: "cancelled" });
488
651
  },
489
- [apiEndpoint, updateUpload, uploads, withCredentials]
652
+ [updateUpload]
490
653
  );
491
654
  const cancelAllUploads = React3.useCallback(async () => {
492
655
  uploads.forEach((u) => {
@@ -497,17 +660,14 @@ var useUpload = (apiEndpoint, activeAccountId, withCredentials = false, onUpload
497
660
  }, [uploads, cancelUpload]);
498
661
  React3.useEffect(() => {
499
662
  const activeCount = uploads.filter((u) => u.status === "uploading").length;
500
- if (activeCount >= MAX_CONCURRENT_UPLOADS) return;
501
- const queued = uploads.find((u) => u.status === "queued");
663
+ if (activeCount >= MAX_CONCURRENT_UPLOADS2) return;
664
+ const queued = uploads.find((u) => u.status === "queued" && !startedRef.current.has(u.id));
502
665
  if (queued) {
503
- const file = filesRef.current.get(queued.id);
504
- const meta = metaRef.current.get(queued.id);
505
- if (file) {
506
- processItem(queued, file, meta?.folderId || null);
507
- }
666
+ startedRef.current.add(queued.id);
667
+ startUpload(queued);
508
668
  }
509
- }, [uploads]);
510
- return { uploads, uploadFiles, cancelUpload, cancelAllUploads };
669
+ }, [uploads, startUpload]);
670
+ return { uploads, uploadFiles: uploadFiles2, cancelUpload, cancelAllUploads };
511
671
  };
512
672
  var cssContent = ".nd-drive-root,.nd-drive-root *,.nd-drive-root ::backdrop,.nd-drive-root :after,.nd-drive-root :before{--nd-tw-translate-x:0;--nd-tw-translate-y:0;--nd-tw-translate-z:0;--nd-tw-scale-x:1;--nd-tw-scale-y:1;--nd-tw-scale-z:1;--nd-tw-space-y-reverse:0;--nd-tw-divide-y-reverse:0;--nd-tw-border-style:solid;--nd-tw-gradient-from:#0000;--nd-tw-gradient-via:#0000;--nd-tw-gradient-to:#0000;--nd-tw-gradient-from-position:0%;--nd-tw-gradient-via-position:50%;--nd-tw-gradient-to-position:100%;--nd-tw-shadow:0 0 #0000;--nd-tw-shadow-alpha:100%;--nd-tw-inset-shadow:0 0 #0000;--nd-tw-inset-shadow-alpha:100%;--nd-tw-ring-shadow:0 0 #0000;--nd-tw-inset-ring-shadow:0 0 #0000;--nd-tw-ring-offset-width:0px;--nd-tw-ring-offset-color:#fff;--nd-tw-ring-offset-shadow:0 0 #0000;--nd-tw-space-x-reverse:0}\n/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */.nd\\:pointer-events-none{pointer-events:none}.nd\\:sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}.nd\\:absolute,.nd\\:sr-only{position:absolute}.nd\\:fixed{position:fixed}.nd\\:relative{position:relative}.nd\\:sticky{position:sticky}.nd\\:inset-0{inset:calc(var(--nd-spacing)*0)}.nd\\:inset-x-0{inset-inline:calc(var(--nd-spacing)*0)}.nd\\:inset-y-0{inset-block:calc(var(--nd-spacing)*0)}.nd\\:top-0{top:calc(var(--nd-spacing)*0)}.nd\\:top-1\\.5{top:calc(var(--nd-spacing)*1.5)}.nd\\:top-1\\/2{top:50%}.nd\\:top-2{top:calc(var(--nd-spacing)*2)}.nd\\:top-3{top:calc(var(--nd-spacing)*3)}.nd\\:top-4{top:calc(var(--nd-spacing)*4)}.nd\\:top-\\[50\\%\\]{top:50%}.nd\\:right-0{right:calc(var(--nd-spacing)*0)}.nd\\:right-0\\.5{right:calc(var(--nd-spacing)*.5)}.nd\\:right-1\\.5{right:calc(var(--nd-spacing)*1.5)}.nd\\:right-2{right:calc(var(--nd-spacing)*2)}.nd\\:right-3{right:calc(var(--nd-spacing)*3)}.nd\\:right-4{right:calc(var(--nd-spacing)*4)}.nd\\:bottom-0{bottom:calc(var(--nd-spacing)*0)}.nd\\:bottom-1\\.5{bottom:calc(var(--nd-spacing)*1.5)}.nd\\:bottom-2{bottom:calc(var(--nd-spacing)*2)}.nd\\:left-0{left:calc(var(--nd-spacing)*0)}.nd\\:left-2{left:calc(var(--nd-spacing)*2)}.nd\\:left-2\\.5{left:calc(var(--nd-spacing)*2.5)}.nd\\:left-\\[50\\%\\]{left:50%}.nd\\:z-10{z-index:10}.nd\\:z-50{z-index:50}.nd\\:col-start-2{grid-column-start:2}.nd\\:container{width:100%;@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.nd\\:mx-auto{margin-inline:auto}.nd\\:my-1{margin-block:calc(var(--nd-spacing)*1)}.nd\\:mt-0\\.5{margin-top:calc(var(--nd-spacing)*.5)}.nd\\:mt-1{margin-top:calc(var(--nd-spacing)*1)}.nd\\:mt-1\\.5{margin-top:calc(var(--nd-spacing)*1.5)}.nd\\:mt-2{margin-top:calc(var(--nd-spacing)*2)}.nd\\:mt-4{margin-top:calc(var(--nd-spacing)*4)}.nd\\:mr-2{margin-right:calc(var(--nd-spacing)*2)}.nd\\:mb-1\\.5{margin-bottom:calc(var(--nd-spacing)*1.5)}.nd\\:mb-2{margin-bottom:calc(var(--nd-spacing)*2)}.nd\\:mb-3{margin-bottom:calc(var(--nd-spacing)*3)}.nd\\:mb-4{margin-bottom:calc(var(--nd-spacing)*4)}.nd\\:ml-5\\.5{margin-left:calc(var(--nd-spacing)*5.5)}.nd\\:ml-auto{margin-left:auto}.nd\\:line-clamp-1{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.nd\\:flex{display:flex}.nd\\:grid{display:grid}.nd\\:hidden{display:none}.nd\\:inline-flex{display:inline-flex}.nd\\:aspect-square{aspect-ratio:1/1}.nd\\:size-1\\.5{height:calc(var(--nd-spacing)*1.5);width:calc(var(--nd-spacing)*1.5)}.nd\\:size-2{height:calc(var(--nd-spacing)*2);width:calc(var(--nd-spacing)*2)}.nd\\:size-2\\.5{height:calc(var(--nd-spacing)*2.5);width:calc(var(--nd-spacing)*2.5)}.nd\\:size-3{height:calc(var(--nd-spacing)*3);width:calc(var(--nd-spacing)*3)}.nd\\:size-3\\.5{height:calc(var(--nd-spacing)*3.5);width:calc(var(--nd-spacing)*3.5)}.nd\\:size-4{height:calc(var(--nd-spacing)*4);width:calc(var(--nd-spacing)*4)}.nd\\:size-5{height:calc(var(--nd-spacing)*5);width:calc(var(--nd-spacing)*5)}.nd\\:size-6{height:calc(var(--nd-spacing)*6);width:calc(var(--nd-spacing)*6)}.nd\\:size-7{height:calc(var(--nd-spacing)*7);width:calc(var(--nd-spacing)*7)}.nd\\:size-8{height:calc(var(--nd-spacing)*8);width:calc(var(--nd-spacing)*8)}.nd\\:size-9{height:calc(var(--nd-spacing)*9);width:calc(var(--nd-spacing)*9)}.nd\\:size-10{height:calc(var(--nd-spacing)*10);width:calc(var(--nd-spacing)*10)}.nd\\:size-12{height:calc(var(--nd-spacing)*12);width:calc(var(--nd-spacing)*12)}.nd\\:size-16{height:calc(var(--nd-spacing)*16);width:calc(var(--nd-spacing)*16)}.nd\\:size-full{height:100%;width:100%}.nd\\:h-1{height:calc(var(--nd-spacing)*1)}.nd\\:h-1\\.5{height:calc(var(--nd-spacing)*1.5)}.nd\\:h-2{height:calc(var(--nd-spacing)*2)}.nd\\:h-3\\.5{height:calc(var(--nd-spacing)*3.5)}.nd\\:h-4{height:calc(var(--nd-spacing)*4)}.nd\\:h-5{height:calc(var(--nd-spacing)*5)}.nd\\:h-6{height:calc(var(--nd-spacing)*6)}.nd\\:h-7{height:calc(var(--nd-spacing)*7)}.nd\\:h-8{height:calc(var(--nd-spacing)*8)}.nd\\:h-9{height:calc(var(--nd-spacing)*9)}.nd\\:h-10{height:calc(var(--nd-spacing)*10)}.nd\\:h-11{height:calc(var(--nd-spacing)*11)}.nd\\:h-12{height:calc(var(--nd-spacing)*12)}.nd\\:h-14{height:calc(var(--nd-spacing)*14)}.nd\\:h-auto{height:auto}.nd\\:h-full{height:100%}.nd\\:h-px{height:1px}.nd\\:max-h-40{max-height:calc(var(--nd-spacing)*40)}.nd\\:max-h-80{max-height:calc(var(--nd-spacing)*80)}.nd\\:max-h-\\[85vh\\]{max-height:85vh}.nd\\:min-h-0{min-height:calc(var(--nd-spacing)*0)}.nd\\:min-h-4{min-height:calc(var(--nd-spacing)*4)}.nd\\:w-1\\/3{width:33.33333%}.nd\\:w-2{width:calc(var(--nd-spacing)*2)}.nd\\:w-3\\.5{width:calc(var(--nd-spacing)*3.5)}.nd\\:w-3\\/4{width:75%}.nd\\:w-4{width:calc(var(--nd-spacing)*4)}.nd\\:w-6{width:calc(var(--nd-spacing)*6)}.nd\\:w-7{width:calc(var(--nd-spacing)*7)}.nd\\:w-8{width:calc(var(--nd-spacing)*8)}.nd\\:w-20{width:calc(var(--nd-spacing)*20)}.nd\\:w-24{width:calc(var(--nd-spacing)*24)}.nd\\:w-40{width:calc(var(--nd-spacing)*40)}.nd\\:w-52{width:calc(var(--nd-spacing)*52)}.nd\\:w-56{width:calc(var(--nd-spacing)*56)}.nd\\:w-70{width:calc(var(--nd-spacing)*70)}.nd\\:w-72{width:calc(var(--nd-spacing)*72)}.nd\\:w-fit{width:fit-content}.nd\\:w-full{width:100%}.nd\\:w-px{width:1px}.nd\\:max-w-24{max-width:calc(var(--nd-spacing)*24)}.nd\\:max-w-25{max-width:calc(var(--nd-spacing)*25)}.nd\\:max-w-30{max-width:calc(var(--nd-spacing)*30)}.nd\\:max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.nd\\:max-w-lg{max-width:var(--nd-container-lg)}.nd\\:min-w-0{min-width:calc(var(--nd-spacing)*0)}.nd\\:min-w-\\[8rem\\]{min-width:8rem}.nd\\:flex-1{flex:1}.nd\\:shrink-0{flex-shrink:0}.nd\\:origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.nd\\:translate-x-\\[-50\\%\\]{--nd-tw-translate-x:-50%;translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}.nd\\:-translate-y-1\\/2,.nd\\:translate-y-\\[-50\\%\\]{--nd-tw-translate-y:-50%;translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}.nd\\:translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--nd-tw-translate-y:calc(-50% - 2px);translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}.nd\\:scale-105{--nd-tw-scale-x:105%;--nd-tw-scale-y:105%;--nd-tw-scale-z:105%;scale:var(--nd-tw-scale-x) var(--nd-tw-scale-y)}.nd\\:scale-\\[1\\.02\\]{scale:1.02}.nd\\:rotate-45{rotate:45deg}.nd\\:animate-\\[indeterminate_1\\.5s_ease-in-out_infinite\\]{animation:indeterminate 1.5s ease-in-out infinite}.nd\\:animate-spin{animation:var(--nd-animate-spin)}.nd\\:cursor-default{cursor:default}.nd\\:cursor-pointer{cursor:pointer}.nd\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.nd\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.nd\\:grid-cols-\\[0_1fr\\]{grid-template-columns:0 1fr}.nd\\:flex-col{flex-direction:column}.nd\\:flex-col-reverse{flex-direction:column-reverse}.nd\\:flex-row{flex-direction:row}.nd\\:flex-nowrap{flex-wrap:nowrap}.nd\\:flex-wrap{flex-wrap:wrap}.nd\\:items-center{align-items:center}.nd\\:items-start{align-items:flex-start}.nd\\:justify-between{justify-content:space-between}.nd\\:justify-center{justify-content:center}.nd\\:justify-end{justify-content:flex-end}.nd\\:justify-start{justify-content:flex-start}.nd\\:justify-items-start{justify-items:start}.nd\\:gap-0{gap:calc(var(--nd-spacing)*0)}.nd\\:gap-0\\.5{gap:calc(var(--nd-spacing)*.5)}.nd\\:gap-1{gap:calc(var(--nd-spacing)*1)}.nd\\:gap-1\\.5{gap:calc(var(--nd-spacing)*1.5)}.nd\\:gap-2{gap:calc(var(--nd-spacing)*2)}.nd\\:gap-2\\.5{gap:calc(var(--nd-spacing)*2.5)}.nd\\:gap-3{gap:calc(var(--nd-spacing)*3)}.nd\\:gap-4{gap:calc(var(--nd-spacing)*4)}.nd\\:space-y-0{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*0*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*0*var(--nd-tw-space-y-reverse))}}.nd\\:space-y-0\\.5{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*.5*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*.5*var(--nd-tw-space-y-reverse))}}.nd\\:space-y-1{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*1*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*1*var(--nd-tw-space-y-reverse))}}.nd\\:space-y-2{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*2*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*2*var(--nd-tw-space-y-reverse))}}.nd\\:space-y-3{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*3*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*3*var(--nd-tw-space-y-reverse))}}.nd\\:space-y-4{:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*4*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*4*var(--nd-tw-space-y-reverse))}}.nd\\:gap-y-0\\.5{row-gap:calc(var(--nd-spacing)*.5)}.nd\\:divide-y{:where(&>:not(:last-child)){--nd-tw-divide-y-reverse:0;border-bottom-style:var(--nd-tw-border-style);border-bottom-width:calc(1px*(1 - var(--nd-tw-divide-y-reverse)));border-top-style:var(--nd-tw-border-style);border-top-width:calc(1px*var(--nd-tw-divide-y-reverse))}}.nd\\:divide-border\\/50{:where(&>:not(:last-child)){border-color:var(--nd-border);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-border) 50%,transparent)}}}.nd\\:truncate{text-overflow:ellipsis;white-space:nowrap}.nd\\:overflow-hidden,.nd\\:truncate{overflow:hidden}.nd\\:overflow-x-auto{overflow-x:auto}.nd\\:overflow-y-auto{overflow-y:auto}.nd\\:rounded{border-radius:.25rem}.nd\\:rounded-2xl{border-radius:calc(var(--nd-radius) + 8px)}.nd\\:rounded-\\[2px\\]{border-radius:2px}.nd\\:rounded-full{border-radius:calc(infinity*1px)}.nd\\:rounded-lg{border-radius:var(--nd-radius)}.nd\\:rounded-md{border-radius:calc(var(--nd-radius) - 2px)}.nd\\:rounded-none{border-radius:0}.nd\\:rounded-sm{border-radius:calc(var(--nd-radius) - 4px)}.nd\\:rounded-xl{border-radius:calc(var(--nd-radius) + 4px)}.nd\\:rounded-xs{border-radius:var(--nd-radius-xs)}.nd\\:border{border-style:var(--nd-tw-border-style);border-width:1px}.nd\\:border-2{border-style:var(--nd-tw-border-style);border-width:2px}.nd\\:border-t{border-top-style:var(--nd-tw-border-style);border-top-width:1px}.nd\\:border-r{border-right-style:var(--nd-tw-border-style);border-right-width:1px}.nd\\:border-b{border-bottom-style:var(--nd-tw-border-style);border-bottom-width:1px}.nd\\:border-l{border-left-style:var(--nd-tw-border-style);border-left-width:1px}.nd\\:border-dashed{--nd-tw-border-style:dashed;border-style:dashed}.nd\\:border-border{border-color:var(--nd-border)}.nd\\:border-border\\/50{border-color:var(--nd-border);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-border) 50%,transparent)}}.nd\\:border-destructive{border-color:var(--nd-destructive)}.nd\\:border-destructive\\/20{border-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-destructive) 20%,transparent)}}.nd\\:border-emerald-500\\/20{border-color:var(--nd-color-emerald-500);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-color-emerald-500) 20%,transparent)}}.nd\\:border-input{border-color:var(--nd-input)}.nd\\:border-muted-foreground\\/25{border-color:var(--nd-muted-foreground);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-muted-foreground) 25%,transparent)}}.nd\\:border-primary{border-color:var(--nd-primary)}.nd\\:border-primary\\/50{border-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-primary) 50%,transparent)}}.nd\\:border-transparent{border-color:transparent}.nd\\:border-yellow-500\\/20{border-color:var(--nd-color-yellow-500);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-color-yellow-500) 20%,transparent)}}.nd\\:bg-accent\\/30{background-color:var(--nd-accent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-accent) 30%,transparent)}}.nd\\:bg-background{background-color:var(--nd-background)}.nd\\:bg-background\\/50{background-color:var(--nd-background);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-background) 50%,transparent)}}.nd\\:bg-background\\/95{background-color:var(--nd-background);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-background) 95%,transparent)}}.nd\\:bg-black\\/50{background-color:var(--nd-color-black);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-black) 50%,transparent)}}.nd\\:bg-black\\/60{background-color:var(--nd-color-black);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-black) 60%,transparent)}}.nd\\:bg-black\\/80{background-color:var(--nd-color-black);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-black) 80%,transparent)}}.nd\\:bg-blue-500\\/10{background-color:var(--nd-color-blue-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-blue-500) 10%,transparent)}}.nd\\:bg-border{background-color:var(--nd-border)}.nd\\:bg-card{background-color:var(--nd-card)}.nd\\:bg-destructive{background-color:var(--nd-destructive)}.nd\\:bg-destructive\\/5{background-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-destructive) 5%,transparent)}}.nd\\:bg-destructive\\/10{background-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-destructive) 10%,transparent)}}.nd\\:bg-emerald-500{background-color:var(--nd-color-emerald-500)}.nd\\:bg-emerald-500\\/5{background-color:var(--nd-color-emerald-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-emerald-500) 5%,transparent)}}.nd\\:bg-emerald-500\\/10{background-color:var(--nd-color-emerald-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-emerald-500) 10%,transparent)}}.nd\\:bg-foreground{background-color:var(--nd-foreground)}.nd\\:bg-muted{background-color:var(--nd-muted)}.nd\\:bg-muted-foreground{background-color:var(--nd-muted-foreground)}.nd\\:bg-muted\\/5{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 5%,transparent)}}.nd\\:bg-muted\\/20{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 20%,transparent)}}.nd\\:bg-muted\\/30{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 30%,transparent)}}.nd\\:bg-muted\\/40{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 40%,transparent)}}.nd\\:bg-muted\\/50{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 50%,transparent)}}.nd\\:bg-muted\\/80{background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 80%,transparent)}}.nd\\:bg-popover{background-color:var(--nd-popover)}.nd\\:bg-primary{background-color:var(--nd-primary)}.nd\\:bg-primary-foreground{background-color:var(--nd-primary-foreground)}.nd\\:bg-primary\\/5{background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 5%,transparent)}}.nd\\:bg-primary\\/10{background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 10%,transparent)}}.nd\\:bg-primary\\/20{background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 20%,transparent)}}.nd\\:bg-primary\\/90{background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 90%,transparent)}}.nd\\:bg-secondary{background-color:var(--nd-secondary)}.nd\\:bg-transparent{background-color:transparent}.nd\\:bg-yellow-500{background-color:var(--nd-color-yellow-500)}.nd\\:bg-yellow-500\\/5{background-color:var(--nd-color-yellow-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-yellow-500) 5%,transparent)}}.nd\\:bg-yellow-500\\/10{background-color:var(--nd-color-yellow-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-yellow-500) 10%,transparent)}}.nd\\:bg-gradient-to-r{--nd-tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--nd-tw-gradient-stops))}.nd\\:from-blue-500{--nd-tw-gradient-from:var(--nd-color-blue-500);--nd-tw-gradient-stops:var(--nd-tw-gradient-via-stops,var(--nd-tw-gradient-position),var(--nd-tw-gradient-from) var(--nd-tw-gradient-from-position),var(--nd-tw-gradient-to) var(--nd-tw-gradient-to-position))}.nd\\:from-yellow-500{--nd-tw-gradient-from:var(--nd-color-yellow-500);--nd-tw-gradient-stops:var(--nd-tw-gradient-via-stops,var(--nd-tw-gradient-position),var(--nd-tw-gradient-from) var(--nd-tw-gradient-from-position),var(--nd-tw-gradient-to) var(--nd-tw-gradient-to-position))}.nd\\:to-cyan-500{--nd-tw-gradient-to:var(--nd-color-cyan-500);--nd-tw-gradient-stops:var(--nd-tw-gradient-via-stops,var(--nd-tw-gradient-position),var(--nd-tw-gradient-from) var(--nd-tw-gradient-from-position),var(--nd-tw-gradient-to) var(--nd-tw-gradient-to-position))}.nd\\:to-orange-500{--nd-tw-gradient-to:var(--nd-color-orange-500);--nd-tw-gradient-stops:var(--nd-tw-gradient-via-stops,var(--nd-tw-gradient-position),var(--nd-tw-gradient-from) var(--nd-tw-gradient-from-position),var(--nd-tw-gradient-to) var(--nd-tw-gradient-to-position))}.nd\\:to-purple-500{--nd-tw-gradient-to:var(--nd-color-purple-500);--nd-tw-gradient-stops:var(--nd-tw-gradient-via-stops,var(--nd-tw-gradient-position),var(--nd-tw-gradient-from) var(--nd-tw-gradient-from-position),var(--nd-tw-gradient-to) var(--nd-tw-gradient-to-position))}.nd\\:fill-blue-500\\/20{fill:var(--nd-color-blue-500);@supports (color:color-mix(in lab,red,red)){fill:color-mix(in oklab,var(--nd-color-blue-500) 20%,transparent)}}.nd\\:fill-current{fill:currentcolor}.nd\\:fill-foreground{fill:var(--nd-foreground)}.nd\\:object-contain{object-fit:contain}.nd\\:object-cover{object-fit:cover}.nd\\:p-0{padding:calc(var(--nd-spacing)*0)}.nd\\:p-0\\.5{padding:calc(var(--nd-spacing)*.5)}.nd\\:p-1{padding:calc(var(--nd-spacing)*1)}.nd\\:p-1\\.5{padding:calc(var(--nd-spacing)*1.5)}.nd\\:p-2{padding:calc(var(--nd-spacing)*2)}.nd\\:p-2\\.5{padding:calc(var(--nd-spacing)*2.5)}.nd\\:p-3{padding:calc(var(--nd-spacing)*3)}.nd\\:p-4{padding:calc(var(--nd-spacing)*4)}.nd\\:p-6{padding:calc(var(--nd-spacing)*6)}.nd\\:p-8{padding:calc(var(--nd-spacing)*8)}.nd\\:p-12{padding:calc(var(--nd-spacing)*12)}.nd\\:px-1{padding-inline:calc(var(--nd-spacing)*1)}.nd\\:px-1\\.5{padding-inline:calc(var(--nd-spacing)*1.5)}.nd\\:px-2{padding-inline:calc(var(--nd-spacing)*2)}.nd\\:px-2\\.5{padding-inline:calc(var(--nd-spacing)*2.5)}.nd\\:px-3{padding-inline:calc(var(--nd-spacing)*3)}.nd\\:px-4{padding-inline:calc(var(--nd-spacing)*4)}.nd\\:px-6{padding-inline:calc(var(--nd-spacing)*6)}.nd\\:py-1{padding-block:calc(var(--nd-spacing)*1)}.nd\\:py-1\\.5{padding-block:calc(var(--nd-spacing)*1.5)}.nd\\:py-2{padding-block:calc(var(--nd-spacing)*2)}.nd\\:py-2\\.5{padding-block:calc(var(--nd-spacing)*2.5)}.nd\\:py-3{padding-block:calc(var(--nd-spacing)*3)}.nd\\:py-4{padding-block:calc(var(--nd-spacing)*4)}.nd\\:py-6{padding-block:calc(var(--nd-spacing)*6)}.nd\\:py-8{padding-block:calc(var(--nd-spacing)*8)}.nd\\:py-12{padding-block:calc(var(--nd-spacing)*12)}.nd\\:pr-7{padding-right:calc(var(--nd-spacing)*7)}.nd\\:pb-8{padding-bottom:calc(var(--nd-spacing)*8)}.nd\\:pl-5\\.5{padding-left:calc(var(--nd-spacing)*5.5)}.nd\\:pl-6{padding-left:calc(var(--nd-spacing)*6)}.nd\\:pl-8{padding-left:calc(var(--nd-spacing)*8)}.nd\\:text-center{text-align:center}.nd\\:text-left{text-align:left}.nd\\:text-right{text-align:right}.nd\\:text-base{font-size:var(--nd-text-base);line-height:var(--nd-tw-leading,var(--nd-text-base--line-height))}.nd\\:text-lg{font-size:var(--nd-text-lg);line-height:var(--nd-tw-leading,var(--nd-text-lg--line-height))}.nd\\:text-sm{font-size:var(--nd-text-sm);line-height:var(--nd-tw-leading,var(--nd-text-sm--line-height))}.nd\\:text-xs{font-size:var(--nd-text-xs);line-height:var(--nd-tw-leading,var(--nd-text-xs--line-height))}.nd\\:text-\\[10px\\]{font-size:10px}.nd\\:text-\\[11px\\]{font-size:11px}.nd\\:leading-none{--nd-tw-leading:1;line-height:1}.nd\\:leading-tight{--nd-tw-leading:var(--nd-leading-tight);line-height:var(--nd-leading-tight)}.nd\\:font-medium{--nd-tw-font-weight:var(--nd-font-weight-medium);font-weight:var(--nd-font-weight-medium)}.nd\\:font-normal{--nd-tw-font-weight:var(--nd-font-weight-normal);font-weight:var(--nd-font-weight-normal)}.nd\\:font-semibold{--nd-tw-font-weight:var(--nd-font-weight-semibold);font-weight:var(--nd-font-weight-semibold)}.nd\\:tracking-tight{--nd-tw-tracking:var(--nd-tracking-tight);letter-spacing:var(--nd-tracking-tight)}.nd\\:tracking-wide{--nd-tw-tracking:var(--nd-tracking-wide);letter-spacing:var(--nd-tracking-wide)}.nd\\:tracking-widest{--nd-tw-tracking:var(--nd-tracking-widest);letter-spacing:var(--nd-tracking-widest)}.nd\\:text-balance{text-wrap:balance}.nd\\:break-words{overflow-wrap:break-word}.nd\\:whitespace-nowrap{white-space:nowrap}.nd\\:whitespace-pre-wrap{white-space:pre-wrap}.nd\\:text-amber-500{color:var(--nd-color-amber-500)}.nd\\:text-background{color:var(--nd-background)}.nd\\:text-blue-500{color:var(--nd-color-blue-500)}.nd\\:text-blue-600{color:var(--nd-color-blue-600)}.nd\\:text-card-foreground{color:var(--nd-card-foreground)}.nd\\:text-destructive{color:var(--nd-destructive)}.nd\\:text-emerald-500{color:var(--nd-color-emerald-500)}.nd\\:text-emerald-600{color:var(--nd-color-emerald-600)}.nd\\:text-foreground{color:var(--nd-foreground)}.nd\\:text-gray-400{color:var(--nd-color-gray-400)}.nd\\:text-green-500{color:var(--nd-color-green-500)}.nd\\:text-muted-foreground{color:var(--nd-muted-foreground)}.nd\\:text-muted-foreground\\/50{color:var(--nd-muted-foreground);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--nd-muted-foreground) 50%,transparent)}}.nd\\:text-muted-foreground\\/60{color:var(--nd-muted-foreground);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--nd-muted-foreground) 60%,transparent)}}.nd\\:text-muted-foreground\\/70{color:var(--nd-muted-foreground);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--nd-muted-foreground) 70%,transparent)}}.nd\\:text-orange-500{color:var(--nd-color-orange-500)}.nd\\:text-popover-foreground{color:var(--nd-popover-foreground)}.nd\\:text-primary{color:var(--nd-primary)}.nd\\:text-primary-foreground{color:var(--nd-primary-foreground)}.nd\\:text-purple-500{color:var(--nd-color-purple-500)}.nd\\:text-red-500{color:var(--nd-color-red-500)}.nd\\:text-secondary-foreground{color:var(--nd-secondary-foreground)}.nd\\:text-slate-500{color:var(--nd-color-slate-500)}.nd\\:text-white{color:var(--nd-color-white)}.nd\\:text-yellow-500{color:var(--nd-color-yellow-500)}.nd\\:text-yellow-600{color:var(--nd-color-yellow-600)}.nd\\:uppercase{text-transform:uppercase}.nd\\:tabular-nums{--nd-tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--nd-tw-ordinal,) var(--nd-tw-slashed-zero,) var(--nd-tw-numeric-figure,) var(--nd-tw-numeric-spacing,) var(--nd-tw-numeric-fraction,)}.nd\\:underline-offset-4{text-underline-offset:4px}.nd\\:opacity-50{opacity:50%}.nd\\:opacity-60{opacity:60%}.nd\\:opacity-70{opacity:70%}.nd\\:shadow-2xl{--nd-tw-shadow:0 25px 50px -12px var(--nd-tw-shadow-color,rgba(0,0,0,.25))}.nd\\:shadow-2xl,.nd\\:shadow-lg{box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}.nd\\:shadow-lg{--nd-tw-shadow:0 10px 15px -3px var(--nd-tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--nd-tw-shadow-color,rgba(0,0,0,.1))}.nd\\:shadow-md{--nd-tw-shadow:0 4px 6px -1px var(--nd-tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--nd-tw-shadow-color,rgba(0,0,0,.1))}.nd\\:shadow-md,.nd\\:shadow-sm{box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}.nd\\:shadow-sm{--nd-tw-shadow:0 1px 3px 0 var(--nd-tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--nd-tw-shadow-color,rgba(0,0,0,.1))}.nd\\:shadow-xs{--nd-tw-shadow:0 1px 2px 0 var(--nd-tw-shadow-color,rgba(0,0,0,.05))}.nd\\:ring-2,.nd\\:shadow-xs{box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}.nd\\:ring-2{--nd-tw-ring-shadow:var(--nd-tw-ring-inset,) 0 0 0 calc(2px + var(--nd-tw-ring-offset-width)) var(--nd-tw-ring-color,currentcolor)}.nd\\:ring-primary{--nd-tw-ring-color:var(--nd-primary)}.nd\\:ring-offset-background{--nd-tw-ring-offset-color:var(--nd-background)}.nd\\:backdrop-blur-sm{--nd-tw-backdrop-blur:blur(var(--nd-blur-sm));-webkit-backdrop-filter:var(--nd-tw-backdrop-blur,) var(--nd-tw-backdrop-brightness,) var(--nd-tw-backdrop-contrast,) var(--nd-tw-backdrop-grayscale,) var(--nd-tw-backdrop-hue-rotate,) var(--nd-tw-backdrop-invert,) var(--nd-tw-backdrop-opacity,) var(--nd-tw-backdrop-saturate,) var(--nd-tw-backdrop-sepia,);backdrop-filter:var(--nd-tw-backdrop-blur,) var(--nd-tw-backdrop-brightness,) var(--nd-tw-backdrop-contrast,) var(--nd-tw-backdrop-grayscale,) var(--nd-tw-backdrop-hue-rotate,) var(--nd-tw-backdrop-invert,) var(--nd-tw-backdrop-opacity,) var(--nd-tw-backdrop-saturate,) var(--nd-tw-backdrop-sepia,)}.nd\\:transition{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--nd-tw-gradient-from,--nd-tw-gradient-via,--nd-tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:transition-\\[color\\,box-shadow\\]{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:color,box-shadow;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:transition-all{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:all;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:transition-colors{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--nd-tw-gradient-from,--nd-tw-gradient-via,--nd-tw-gradient-to;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:transition-opacity{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:opacity;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:transition-transform{transition-duration:var(--nd-tw-duration,var(--nd-default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--nd-tw-ease,var(--nd-default-transition-timing-function))}.nd\\:duration-200{--nd-tw-duration:200ms;transition-duration:.2s}.nd\\:duration-300{--nd-tw-duration:300ms;transition-duration:.3s}.nd\\:duration-500{--nd-tw-duration:500ms;transition-duration:.5s}.nd\\:ease-in-out{--nd-tw-ease:var(--nd-ease-in-out);transition-timing-function:var(--nd-ease-in-out)}.nd\\:outline-none{--nd-tw-outline-style:none;outline-style:none}.nd\\:select-none{-webkit-user-select:none;user-select:none}.nd\\:hover\\:border-border{&:hover{@media (hover:hover){border-color:var(--nd-border)}}}.nd\\:hover\\:border-primary\\/50{&:hover{@media (hover:hover){border-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--nd-primary) 50%,transparent)}}}}.nd\\:hover\\:bg-accent{&:hover{@media (hover:hover){background-color:var(--nd-accent)}}}.nd\\:hover\\:bg-accent\\/50{&:hover{@media (hover:hover){background-color:var(--nd-accent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-accent) 50%,transparent)}}}}.nd\\:hover\\:bg-background{&:hover{@media (hover:hover){background-color:var(--nd-background)}}}.nd\\:hover\\:bg-destructive\\/15{&:hover{@media (hover:hover){background-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-destructive) 15%,transparent)}}}}.nd\\:hover\\:bg-destructive\\/90{&:hover{@media (hover:hover){background-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-destructive) 90%,transparent)}}}}.nd\\:hover\\:bg-muted{&:hover{@media (hover:hover){background-color:var(--nd-muted)}}}.nd\\:hover\\:bg-muted\\/20{&:hover{@media (hover:hover){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 20%,transparent)}}}}.nd\\:hover\\:bg-muted\\/50{&:hover{@media (hover:hover){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 50%,transparent)}}}}.nd\\:hover\\:bg-primary\\/15{&:hover{@media (hover:hover){background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 15%,transparent)}}}}.nd\\:hover\\:bg-primary\\/90{&:hover{@media (hover:hover){background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 90%,transparent)}}}}.nd\\:hover\\:bg-secondary\\/80{&:hover{@media (hover:hover){background-color:var(--nd-secondary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-secondary) 80%,transparent)}}}}.nd\\:hover\\:text-accent-foreground{&:hover{@media (hover:hover){color:var(--nd-accent-foreground)}}}.nd\\:hover\\:text-destructive{&:hover{@media (hover:hover){color:var(--nd-destructive)}}}.nd\\:hover\\:text-foreground{&:hover{@media (hover:hover){color:var(--nd-foreground)}}}.nd\\:hover\\:underline{&:hover{@media (hover:hover){text-decoration-line:underline}}}.nd\\:hover\\:opacity-100{&:hover{@media (hover:hover){opacity:100%}}}.nd\\:hover\\:shadow-sm{&:hover{@media (hover:hover){--nd-tw-shadow:0 1px 3px 0 var(--nd-tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--nd-tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}}}.nd\\:focus\\:bg-accent{&:focus{background-color:var(--nd-accent)}}.nd\\:focus\\:text-accent-foreground{&:focus{color:var(--nd-accent-foreground)}}.nd\\:focus\\:text-destructive{&:focus{color:var(--nd-destructive)}}.nd\\:focus\\:ring-2{&:focus{--nd-tw-ring-shadow:var(--nd-tw-ring-inset,) 0 0 0 calc(2px + var(--nd-tw-ring-offset-width)) var(--nd-tw-ring-color,currentcolor);box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}}.nd\\:focus\\:ring-primary{&:focus{--nd-tw-ring-color:var(--nd-primary)}}.nd\\:focus\\:ring-ring{&:focus{--nd-tw-ring-color:var(--nd-ring)}}.nd\\:focus\\:ring-offset-2{&:focus{--nd-tw-ring-offset-width:2px;--nd-tw-ring-offset-shadow:var(--nd-tw-ring-inset,) 0 0 0 var(--nd-tw-ring-offset-width) var(--nd-tw-ring-offset-color)}}.nd\\:focus\\:outline-hidden{&:focus{--nd-tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline:2px solid transparent;outline-offset:2px}}}.nd\\:focus\\:outline-none{&:focus{--nd-tw-outline-style:none;outline-style:none}}.nd\\:focus-visible\\:border-ring{&:focus-visible{border-color:var(--nd-ring)}}.nd\\:focus-visible\\:ring-2{&:focus-visible{--nd-tw-ring-shadow:var(--nd-tw-ring-inset,) 0 0 0 calc(2px + var(--nd-tw-ring-offset-width)) var(--nd-tw-ring-color,currentcolor);box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}}.nd\\:focus-visible\\:ring-\\[3px\\]{&:focus-visible{--nd-tw-ring-shadow:var(--nd-tw-ring-inset,) 0 0 0 calc(3px + var(--nd-tw-ring-offset-width)) var(--nd-tw-ring-color,currentcolor);box-shadow:var(--nd-tw-inset-shadow),var(--nd-tw-inset-ring-shadow),var(--nd-tw-ring-offset-shadow),var(--nd-tw-ring-shadow),var(--nd-tw-shadow)}}.nd\\:focus-visible\\:ring-destructive\\/20{&:focus-visible{--nd-tw-ring-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){--nd-tw-ring-color:color-mix(in oklab,var(--nd-destructive) 20%,transparent)}}}.nd\\:focus-visible\\:ring-primary{&:focus-visible{--nd-tw-ring-color:var(--nd-primary)}}.nd\\:focus-visible\\:ring-ring\\/50{&:focus-visible{--nd-tw-ring-color:var(--nd-ring);@supports (color:color-mix(in lab,red,red)){--nd-tw-ring-color:color-mix(in oklab,var(--nd-ring) 50%,transparent)}}}.nd\\:disabled\\:pointer-events-none{&:disabled{pointer-events:none}}.nd\\:disabled\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.nd\\:disabled\\:opacity-50{&:disabled{opacity:50%}}.nd\\:has-\\[\\>svg\\]\\:grid-cols-\\[calc\\(var\\(--spacing\\)\\*4\\)_1fr\\]{&:has(>svg){grid-template-columns:calc(var(--spacing)*4) 1fr}}.nd\\:has-\\[\\>svg\\]\\:gap-x-3{&:has(>svg){column-gap:calc(var(--nd-spacing)*3)}}.nd\\:has-\\[\\>svg\\]\\:px-2\\.5{&:has(>svg){padding-inline:calc(var(--nd-spacing)*2.5)}}.nd\\:has-\\[\\>svg\\]\\:px-3{&:has(>svg){padding-inline:calc(var(--nd-spacing)*3)}}.nd\\:has-\\[\\>svg\\]\\:px-4{&:has(>svg){padding-inline:calc(var(--nd-spacing)*4)}}.nd\\:data-\\[disabled\\]\\:pointer-events-none{&[data-disabled]{pointer-events:none}}.nd\\:data-\\[disabled\\]\\:opacity-50{&[data-disabled]{opacity:50%}}.nd\\:data-\\[orientation\\=horizontal\\]\\:h-px{&[data-orientation=horizontal]{height:1px}}.nd\\:data-\\[orientation\\=horizontal\\]\\:w-full{&[data-orientation=horizontal]{width:100%}}.nd\\:data-\\[orientation\\=vertical\\]\\:h-full{&[data-orientation=vertical]{height:100%}}.nd\\:data-\\[orientation\\=vertical\\]\\:w-px{&[data-orientation=vertical]{width:1px}}.nd\\:\\*\\:data-\\[slot\\=alert-description\\]\\:text-destructive\\/90{:is(&>*){&[data-slot=alert-description]{color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--nd-destructive) 90%,transparent)}}}}.nd\\:data-\\[state\\=closed\\]\\:duration-300{&[data-state=closed]{--nd-tw-duration:300ms;transition-duration:.3s}}.nd\\:data-\\[state\\=open\\]\\:bg-accent{&[data-state=open]{background-color:var(--nd-accent)}}.nd\\:data-\\[state\\=open\\]\\:bg-secondary{&[data-state=open]{background-color:var(--nd-secondary)}}.nd\\:data-\\[state\\=open\\]\\:text-accent-foreground{&[data-state=open]{color:var(--nd-accent-foreground)}}.nd\\:data-\\[state\\=open\\]\\:text-muted-foreground{&[data-state=open]{color:var(--nd-muted-foreground)}}.nd\\:data-\\[state\\=open\\]\\:duration-500{&[data-state=open]{--nd-tw-duration:500ms;transition-duration:.5s}}.nd\\:sm\\:top-2{@media (width >= 40rem){top:calc(var(--nd-spacing)*2)}}.nd\\:sm\\:right-2{@media (width >= 40rem){right:calc(var(--nd-spacing)*2)}}.nd\\:sm\\:bottom-2{@media (width >= 40rem){bottom:calc(var(--nd-spacing)*2)}}.nd\\:sm\\:mt-0{@media (width >= 40rem){margin-top:calc(var(--nd-spacing)*0)}}.nd\\:sm\\:mb-3{@media (width >= 40rem){margin-bottom:calc(var(--nd-spacing)*3)}}.nd\\:sm\\:inline{@media (width >= 40rem){display:inline}}.nd\\:sm\\:size-3\\.5{@media (width >= 40rem){height:calc(var(--nd-spacing)*3.5);width:calc(var(--nd-spacing)*3.5)}}.nd\\:sm\\:size-6{@media (width >= 40rem){height:calc(var(--nd-spacing)*6);width:calc(var(--nd-spacing)*6)}}.nd\\:sm\\:size-10{@media (width >= 40rem){height:calc(var(--nd-spacing)*10);width:calc(var(--nd-spacing)*10)}}.nd\\:sm\\:w-32{@media (width >= 40rem){width:calc(var(--nd-spacing)*32)}}.nd\\:sm\\:w-80{@media (width >= 40rem){width:calc(var(--nd-spacing)*80)}}.nd\\:sm\\:max-w-37\\.5{@media (width >= 40rem){max-width:calc(var(--nd-spacing)*37.5)}}.nd\\:sm\\:max-w-lg{@media (width >= 40rem){max-width:var(--nd-container-lg)}}.nd\\:sm\\:max-w-md{@media (width >= 40rem){max-width:var(--nd-container-md)}}.nd\\:sm\\:max-w-none{@media (width >= 40rem){max-width:none}}.nd\\:sm\\:max-w-sm{@media (width >= 40rem){max-width:var(--nd-container-sm)}}.nd\\:sm\\:max-w-xs{@media (width >= 40rem){max-width:var(--nd-container-xs)}}.nd\\:sm\\:min-w-50{@media (width >= 40rem){min-width:calc(var(--nd-spacing)*50)}}.nd\\:sm\\:grid-cols-3{@media (width >= 40rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.nd\\:sm\\:grid-cols-4{@media (width >= 40rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.nd\\:sm\\:flex-row{@media (width >= 40rem){flex-direction:row}}.nd\\:sm\\:justify-end{@media (width >= 40rem){justify-content:flex-end}}.nd\\:sm\\:gap-1\\.5{@media (width >= 40rem){gap:calc(var(--nd-spacing)*1.5)}}.nd\\:sm\\:gap-3{@media (width >= 40rem){gap:calc(var(--nd-spacing)*3)}}.nd\\:sm\\:space-y-6{@media (width >= 40rem){:where(&>:not(:last-child)){--nd-tw-space-y-reverse:0;margin-block-end:calc(var(--nd-spacing)*6*(1 - var(--nd-tw-space-y-reverse)));margin-block-start:calc(var(--nd-spacing)*6*var(--nd-tw-space-y-reverse))}}}.nd\\:sm\\:space-x-2{@media (width >= 40rem){:where(&>:not(:last-child)){--nd-tw-space-x-reverse:0;margin-inline-end:calc(var(--nd-spacing)*2*(1 - var(--nd-tw-space-x-reverse)));margin-inline-start:calc(var(--nd-spacing)*2*var(--nd-tw-space-x-reverse))}}}.nd\\:sm\\:rounded-lg{@media (width >= 40rem){border-radius:var(--nd-radius)}}.nd\\:sm\\:rounded-xl{@media (width >= 40rem){border-radius:calc(var(--nd-radius) + 4px)}}.nd\\:sm\\:p-2{@media (width >= 40rem){padding:calc(var(--nd-spacing)*2)}}.nd\\:sm\\:p-3{@media (width >= 40rem){padding:calc(var(--nd-spacing)*3)}}.nd\\:sm\\:px-2{@media (width >= 40rem){padding-inline:calc(var(--nd-spacing)*2)}}.nd\\:sm\\:px-4{@media (width >= 40rem){padding-inline:calc(var(--nd-spacing)*4)}}.nd\\:sm\\:pb-12{@media (width >= 40rem){padding-bottom:calc(var(--nd-spacing)*12)}}.nd\\:sm\\:text-left{@media (width >= 40rem){text-align:left}}.nd\\:sm\\:text-sm{@media (width >= 40rem){font-size:var(--nd-text-sm);line-height:var(--nd-tw-leading,var(--nd-text-sm--line-height))}}.nd\\:md\\:inset-auto{@media (width >= 48rem){inset:auto}}.nd\\:md\\:top-4{@media (width >= 48rem){top:calc(var(--nd-spacing)*4)}}.nd\\:md\\:top-\\[50\\%\\]{@media (width >= 48rem){top:50%}}.nd\\:md\\:right-4{@media (width >= 48rem){right:calc(var(--nd-spacing)*4)}}.nd\\:md\\:left-\\[50\\%\\]{@media (width >= 48rem){left:50%}}.nd\\:md\\:flex{@media (width >= 48rem){display:flex}}.nd\\:md\\:hidden{@media (width >= 48rem){display:none}}.nd\\:md\\:size-7{@media (width >= 48rem){height:calc(var(--nd-spacing)*7);width:calc(var(--nd-spacing)*7)}}.nd\\:md\\:size-12{@media (width >= 48rem){height:calc(var(--nd-spacing)*12);width:calc(var(--nd-spacing)*12)}}.nd\\:md\\:max-h-\\[90vh\\]{@media (width >= 48rem){max-height:90vh}}.nd\\:md\\:w-\\[95vw\\]{@media (width >= 48rem){width:95vw}}.nd\\:md\\:max-w-5xl{@media (width >= 48rem){max-width:var(--nd-container-5xl)}}.nd\\:md\\:translate-x-\\[-50\\%\\]{@media (width >= 48rem){--nd-tw-translate-x:-50%;translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}}.nd\\:md\\:translate-y-\\[-50\\%\\]{@media (width >= 48rem){--nd-tw-translate-y:-50%;translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}}.nd\\:md\\:grid-cols-4{@media (width >= 48rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.nd\\:md\\:grid-cols-5{@media (width >= 48rem){grid-template-columns:repeat(5,minmax(0,1fr))}}.nd\\:md\\:flex-row{@media (width >= 48rem){flex-direction:row}}.nd\\:md\\:gap-4{@media (width >= 48rem){gap:calc(var(--nd-spacing)*4)}}.nd\\:md\\:rounded-md{@media (width >= 48rem){border-radius:calc(var(--nd-radius) - 2px)}}.nd\\:md\\:rounded-xl{@media (width >= 48rem){border-radius:calc(var(--nd-radius) + 4px)}}.nd\\:md\\:border{@media (width >= 48rem){border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-style:var(--nd-tw-border-style);border-top-width:1px}}.nd\\:md\\:bg-transparent{@media (width >= 48rem){background-color:transparent}}.nd\\:md\\:p-4{@media (width >= 48rem){padding:calc(var(--nd-spacing)*4)}}.nd\\:md\\:text-sm{@media (width >= 48rem){font-size:var(--nd-text-sm);line-height:var(--nd-tw-leading,var(--nd-text-sm--line-height))}}.nd\\:lg\\:flex{@media (width >= 64rem){display:flex}}.nd\\:lg\\:hidden{@media (width >= 64rem){display:none}}.nd\\:lg\\:w-56{@media (width >= 64rem){width:calc(var(--nd-spacing)*56)}}.nd\\:lg\\:grid-cols-5{@media (width >= 64rem){grid-template-columns:repeat(5,minmax(0,1fr))}}.nd\\:lg\\:grid-cols-6{@media (width >= 64rem){grid-template-columns:repeat(6,minmax(0,1fr))}}.nd\\:xl\\:grid-cols-6{@media (width >= 80rem){grid-template-columns:repeat(6,minmax(0,1fr))}}.nd\\:xl\\:grid-cols-7{@media (width >= 80rem){grid-template-columns:repeat(7,minmax(0,1fr))}}.nd\\:dark\\:border-input{&:is(.dark *){border-color:var(--nd-input)}}.nd\\:dark\\:bg-accent\\/20{&:is(.dark *){background-color:var(--nd-accent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-accent) 20%,transparent)}}}.nd\\:dark\\:bg-background\\/30{&:is(.dark *){background-color:var(--nd-background);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-background) 30%,transparent)}}}.nd\\:dark\\:bg-background\\/80{&:is(.dark *){background-color:var(--nd-background);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-background) 80%,transparent)}}}.nd\\:dark\\:bg-blue-500\\/20{&:is(.dark *){background-color:var(--nd-color-blue-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-blue-500) 20%,transparent)}}}.nd\\:dark\\:bg-card\\/50{&:is(.dark *){background-color:var(--nd-card);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-card) 50%,transparent)}}}.nd\\:dark\\:bg-destructive\\/15{&:is(.dark *){background-color:var(--nd-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-destructive) 15%,transparent)}}}.nd\\:dark\\:bg-emerald-500\\/20{&:is(.dark *){background-color:var(--nd-color-emerald-500);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-color-emerald-500) 20%,transparent)}}}.nd\\:dark\\:bg-input\\/30{&:is(.dark *){background-color:var(--nd-input);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-input) 30%,transparent)}}}.nd\\:dark\\:bg-muted\\/10{&:is(.dark *){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 10%,transparent)}}}.nd\\:dark\\:bg-muted\\/20{&:is(.dark *){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 20%,transparent)}}}.nd\\:dark\\:bg-muted\\/30{&:is(.dark *){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 30%,transparent)}}}.nd\\:dark\\:bg-primary\\/10{&:is(.dark *){background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 10%,transparent)}}}.nd\\:dark\\:bg-primary\\/15{&:is(.dark *){background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 15%,transparent)}}}.nd\\:dark\\:text-blue-400{&:is(.dark *){color:var(--nd-color-blue-400)}}.nd\\:dark\\:text-emerald-400{&:is(.dark *){color:var(--nd-color-emerald-400)}}.nd\\:dark\\:text-yellow-500{&:is(.dark *){color:var(--nd-color-yellow-500)}}.nd\\:dark\\:hover\\:bg-accent\\/30{&:is(.dark *){&:hover{@media (hover:hover){background-color:var(--nd-accent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-accent) 30%,transparent)}}}}}.nd\\:dark\\:hover\\:bg-accent\\/50{&:is(.dark *){&:hover{@media (hover:hover){background-color:var(--nd-accent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-accent) 50%,transparent)}}}}}.nd\\:dark\\:hover\\:bg-input\\/50{&:is(.dark *){&:hover{@media (hover:hover){background-color:var(--nd-input);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-input) 50%,transparent)}}}}}.nd\\:dark\\:hover\\:bg-muted\\/30{&:is(.dark *){&:hover{@media (hover:hover){background-color:var(--nd-muted);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-muted) 30%,transparent)}}}}}.nd\\:dark\\:hover\\:bg-primary\\/20{&:is(.dark *){&:hover{@media (hover:hover){background-color:var(--nd-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--nd-primary) 20%,transparent)}}}}}.nd\\:\\[\\&_p\\]\\:leading-relaxed{& p{--nd-tw-leading:var(--nd-leading-relaxed);line-height:var(--nd-leading-relaxed)}}.nd\\:\\[\\&\\>svg\\]\\:size-4{&>svg{height:calc(var(--nd-spacing)*4);width:calc(var(--nd-spacing)*4)}}.nd\\:\\[\\&\\>svg\\]\\:translate-y-0\\.5{&>svg{--nd-tw-translate-y:calc(var(--nd-spacing)*0.5);translate:var(--nd-tw-translate-x) var(--nd-tw-translate-y)}}.nd\\:\\[\\&\\>svg\\]\\:text-current{&>svg{color:currentcolor}}:host,:root{--nd-color-red-500:oklch(63.7% 0.237 25.331);--nd-color-orange-500:oklch(70.5% 0.213 47.604);--nd-color-amber-500:oklch(76.9% 0.188 70.08);--nd-color-yellow-500:oklch(79.5% 0.184 86.047);--nd-color-yellow-600:oklch(68.1% 0.162 75.834);--nd-color-green-500:oklch(72.3% 0.219 149.579);--nd-color-emerald-400:oklch(76.5% 0.177 163.223);--nd-color-emerald-500:oklch(69.6% 0.17 162.48);--nd-color-emerald-600:oklch(59.6% 0.145 163.225);--nd-color-cyan-500:oklch(71.5% 0.143 215.221);--nd-color-blue-400:oklch(70.7% 0.165 254.624);--nd-color-blue-500:oklch(62.3% 0.214 259.815);--nd-color-blue-600:oklch(54.6% 0.245 262.881);--nd-color-purple-500:oklch(62.7% 0.265 303.9);--nd-color-slate-500:oklch(55.4% 0.046 257.417);--nd-color-gray-400:oklch(70.7% 0.022 261.325);--nd-color-black:#000;--nd-color-white:#fff;--nd-spacing:0.25rem;--nd-container-xs:20rem;--nd-container-sm:24rem;--nd-container-md:28rem;--nd-container-lg:32rem;--nd-container-5xl:64rem;--nd-text-xs:0.75rem;--nd-text-xs--line-height:1.33333;--nd-text-sm:0.875rem;--nd-text-sm--line-height:1.42857;--nd-text-base:1rem;--nd-text-base--line-height:1.5;--nd-text-lg:1.125rem;--nd-text-lg--line-height:1.55556;--nd-font-weight-normal:400;--nd-font-weight-medium:500;--nd-font-weight-semibold:600;--nd-tracking-tight:-0.025em;--nd-tracking-wide:0.025em;--nd-tracking-widest:0.1em;--nd-leading-tight:1.25;--nd-leading-relaxed:1.625;--nd-radius-xs:0.125rem;--nd-ease-in-out:cubic-bezier(0.4,0,0.2,1);--nd-animate-spin:nd-spin 1s linear infinite;--nd-blur-sm:8px;--nd-default-transition-duration:150ms;--nd-default-transition-timing-function:cubic-bezier(0.4,0,0.2,1)}.nd-drive-root{--nd-card:oklch(1 0 0);--nd-card-foreground:oklch(0.145 0 0);--nd-popover:oklch(1 0 0);--nd-popover-foreground:oklch(0.145 0 0);--nd-primary:oklch(0.205 0 0);--nd-primary-foreground:oklch(0.985 0 0);--nd-secondary:oklch(0.97 0 0);--nd-secondary-foreground:oklch(0.205 0 0);--nd-muted:oklch(0.97 0 0);--nd-muted-foreground:oklch(0.556 0 0);--nd-accent:oklch(0.97 0 0);--nd-accent-foreground:oklch(0.205 0 0);--nd-destructive:oklch(0.577 0.245 27.325);--nd-destructive-foreground:210 40% 98%;--nd-border:oklch(0.922 0 0);--nd-input:oklch(0.922 0 0);--nd-ring:oklch(0.708 0 0);--nd-radius:0.625rem;--nd-background:oklch(1 0 0);--nd-foreground:oklch(0.145 0 0);--nd-chart-1:oklch(0.646 0.222 41.116);--nd-chart-2:oklch(0.6 0.118 184.704);--nd-chart-3:oklch(0.398 0.07 227.392);--nd-chart-4:oklch(0.828 0.189 84.429);--nd-chart-5:oklch(0.769 0.188 70.08);--nd-sidebar:oklch(0.985 0 0);--nd-sidebar-foreground:oklch(0.145 0 0);--nd-sidebar-primary:oklch(0.205 0 0);--nd-sidebar-primary-foreground:oklch(0.985 0 0);--nd-sidebar-accent:oklch(0.97 0 0);--nd-sidebar-accent-foreground:oklch(0.205 0 0);--nd-sidebar-border:oklch(0.922 0 0);--nd-sidebar-ring:oklch(0.708 0 0)}.dark .nd-drive-root{--nd-background:oklch(0.145 0 0);--nd-foreground:oklch(0.985 0 0);--nd-card:oklch(0.205 0 0);--nd-card-foreground:oklch(0.985 0 0);--nd-popover:oklch(0.205 0 0);--nd-popover-foreground:oklch(0.985 0 0);--nd-primary:oklch(0.922 0 0);--nd-primary-foreground:oklch(0.205 0 0);--nd-secondary:oklch(0.269 0 0);--nd-secondary-foreground:oklch(0.985 0 0);--nd-muted:oklch(0.269 0 0);--nd-muted-foreground:oklch(0.708 0 0);--nd-accent:oklch(0.269 0 0);--nd-accent-foreground:oklch(0.985 0 0);--nd-destructive:oklch(0.704 0.191 22.216);--nd-destructive-foreground:210 40% 98%;--nd-border:oklch(1 0 0/10%);--nd-input:oklch(1 0 0/15%);--nd-ring:oklch(0.556 0 0);--nd-chart-1:oklch(0.488 0.243 264.376);--nd-chart-2:oklch(0.696 0.17 162.48);--nd-chart-3:oklch(0.769 0.188 70.08);--nd-chart-4:oklch(0.627 0.265 303.9);--nd-chart-5:oklch(0.645 0.246 16.439);--nd-sidebar:oklch(0.205 0 0);--nd-sidebar-foreground:oklch(0.985 0 0);--nd-sidebar-primary:oklch(0.488 0.243 264.376);--nd-sidebar-primary-foreground:oklch(0.985 0 0);--nd-sidebar-accent:oklch(0.269 0 0);--nd-sidebar-accent-foreground:oklch(0.985 0 0);--nd-sidebar-border:oklch(1 0 0/10%);--nd-sidebar-ring:oklch(0.556 0 0)}@keyframes nd-indeterminate{0%{transform:translateX(-100%)}50%{transform:translateX(200%)}to{transform:translateX(-100%)}}@keyframes nd-spin{to{transform:rotate(1turn)}}@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){.nd-drive-root,.nd-drive-root *,.nd-drive-root ::backdrop,.nd-drive-root :after,.nd-drive-root :before{--nd-tw-translate-x:0;--nd-tw-translate-y:0;--nd-tw-translate-z:0;--nd-tw-scale-x:1;--nd-tw-scale-y:1;--nd-tw-scale-z:1;--nd-tw-space-y-reverse:0;--nd-tw-divide-y-reverse:0;--nd-tw-border-style:solid;--nd-tw-gradient-position:initial;--nd-tw-gradient-from:#0000;--nd-tw-gradient-via:#0000;--nd-tw-gradient-to:#0000;--nd-tw-gradient-stops:initial;--nd-tw-gradient-via-stops:initial;--nd-tw-gradient-from-position:0%;--nd-tw-gradient-via-position:50%;--nd-tw-gradient-to-position:100%;--nd-tw-leading:initial;--nd-tw-font-weight:initial;--nd-tw-tracking:initial;--nd-tw-ordinal:initial;--nd-tw-slashed-zero:initial;--nd-tw-numeric-figure:initial;--nd-tw-numeric-spacing:initial;--nd-tw-numeric-fraction:initial;--nd-tw-shadow:0 0 #0000;--nd-tw-shadow-color:initial;--nd-tw-shadow-alpha:100%;--nd-tw-inset-shadow:0 0 #0000;--nd-tw-inset-shadow-color:initial;--nd-tw-inset-shadow-alpha:100%;--nd-tw-ring-color:initial;--nd-tw-ring-shadow:0 0 #0000;--nd-tw-inset-ring-color:initial;--nd-tw-inset-ring-shadow:0 0 #0000;--nd-tw-ring-inset:initial;--nd-tw-ring-offset-width:0px;--nd-tw-ring-offset-color:#fff;--nd-tw-ring-offset-shadow:0 0 #0000;--nd-tw-backdrop-blur:initial;--nd-tw-backdrop-brightness:initial;--nd-tw-backdrop-contrast:initial;--nd-tw-backdrop-grayscale:initial;--nd-tw-backdrop-hue-rotate:initial;--nd-tw-backdrop-invert:initial;--nd-tw-backdrop-opacity:initial;--nd-tw-backdrop-saturate:initial;--nd-tw-backdrop-sepia:initial;--nd-tw-duration:initial;--nd-tw-ease:initial;--nd-tw-space-x-reverse:0}}";
513
673
  var styleId = "nd-injected-styles";
@@ -2547,7 +2707,7 @@ var DriveUpload = (props) => {
2547
2707
  const hasAutoClosedRef = React3.useRef(false);
2548
2708
  const inputRef = React3.useRef(null);
2549
2709
  const { currentFolderId, setItems, apiEndpoint, activeAccountId, withCredentials, fetchItems, isLoading } = useDrive();
2550
- const { uploads, uploadFiles, cancelUpload, cancelAllUploads } = useUpload(apiEndpoint, activeAccountId, withCredentials, (uploadedItem) => {
2710
+ const { uploads, uploadFiles: uploadFiles2, cancelUpload, cancelAllUploads } = useUpload(apiEndpoint, activeAccountId, withCredentials, (uploadedItem) => {
2551
2711
  if (uploadedItem) {
2552
2712
  setItems((prev) => [uploadedItem, ...prev]);
2553
2713
  }
@@ -2574,10 +2734,10 @@ var DriveUpload = (props) => {
2574
2734
  if (!files || files.length === 0) return;
2575
2735
  const filteredFiles = filterFiles(Array.from(files));
2576
2736
  if (filteredFiles.length === 0) return;
2577
- uploadFiles(filteredFiles, currentFolderId);
2737
+ uploadFiles2(filteredFiles, currentFolderId);
2578
2738
  setManuallyOpened(false);
2579
2739
  setShowUploadsDialog(true);
2580
- }, [uploadFiles, currentFolderId, filterFiles]);
2740
+ }, [uploadFiles2, currentFolderId, filterFiles]);
2581
2741
  const handleDrag = React3.useCallback((e, dragging) => {
2582
2742
  e.preventDefault();
2583
2743
  e.stopPropagation();
@@ -2609,7 +2769,7 @@ var DriveUpload = (props) => {
2609
2769
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:divide-y nd:max-h-80 nd:overflow-y-auto", children: [
2610
2770
  uploads.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nd:p-4 nd:text-center nd:text-sm nd:text-muted-foreground", children: "No uploads" }),
2611
2771
  uploads.map((upload) => {
2612
- const percent = upload.status === "complete" ? 100 : upload.status === "error" || !upload.totalChunks ? 0 : Math.round(upload.currentChunk / upload.totalChunks * 100);
2772
+ const percent = upload.status === "complete" ? 100 : upload.status === "error" ? 0 : Math.round(upload.percent ?? 0);
2613
2773
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:px-4 nd:py-2.5", children: [
2614
2774
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:flex nd:items-start nd:gap-2 nd:mb-1.5", children: [
2615
2775
  /* @__PURE__ */ jsxRuntime.jsx(UploadStatusIcon, { status: upload.status }),
@@ -3155,16 +3315,16 @@ var DriveFileChooser = (props) => {
3155
3315
  onChange(uploaded);
3156
3316
  }
3157
3317
  }, [multiple, onChange]);
3158
- const { uploads, uploadFiles } = useUpload(apiEndpoint, activeAccountId, withCredentials, handleUploaded);
3318
+ const { uploads, uploadFiles: uploadFiles2 } = useUpload(apiEndpoint, activeAccountId, withCredentials, handleUploaded);
3159
3319
  const openPicker = React3.useCallback(() => {
3160
3320
  if (unauthenticatedMode) fileInputRef.current?.click();
3161
3321
  else setIsOpen(true);
3162
3322
  }, [unauthenticatedMode]);
3163
3323
  const handleFilePick = React3.useCallback((e) => {
3164
3324
  const picked = Array.from(e.target.files ?? []);
3165
- if (picked.length) uploadFiles(multiple ? picked : [picked[0]], null);
3325
+ if (picked.length) uploadFiles2(multiple ? picked : [picked[0]], null);
3166
3326
  e.target.value = "";
3167
- }, [uploadFiles, multiple]);
3327
+ }, [uploadFiles2, multiple]);
3168
3328
  const activeUploads = unauthenticatedMode ? uploads.filter((u) => ["queued", "uploading", "error"].includes(u.status)) : [];
3169
3329
  React3.useEffect(() => {
3170
3330
  if (isOpen) {
@@ -3266,9 +3426,9 @@ var DriveFileChooser = (props) => {
3266
3426
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nd:flex nd:items-center nd:gap-2 nd:min-w-0", children: [
3267
3427
  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" }),
3268
3428
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nd:text-sm nd:truncate nd:flex-1 nd:min-w-0", children: u.name }),
3269
- /* @__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)}%` })
3429
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "nd:text-xs nd:text-muted-foreground nd:shrink-0", children: u.status === "error" ? "Failed" : `${Math.round(u.percent ?? 0)}%` })
3270
3430
  ] }),
3271
- u.status !== "error" && /* @__PURE__ */ jsxRuntime.jsx(Progress, { value: Math.round(u.currentChunk / Math.max(1, u.totalChunks) * 100), className: "nd:mt-1.5" }),
3431
+ u.status !== "error" && /* @__PURE__ */ jsxRuntime.jsx(Progress, { value: Math.round(u.percent ?? 0), className: "nd:mt-1.5" }),
3272
3432
  u.status === "error" && u.error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "nd:text-xs nd:text-destructive nd:mt-1", children: u.error })
3273
3433
  ] }, u.id)) }),
3274
3434
  /* @__PURE__ */ jsxRuntime.jsx(Dialog2, { open: isOpen, onOpenChange: setIsOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(Dialog2Content, { showCloseButton: false, className: "nd-drive-root", children: [
@@ -3988,6 +4148,8 @@ exports.DriveProvider = DriveProvider;
3988
4148
  exports.DriveSidebar = DriveSidebar;
3989
4149
  exports.DriveStorageIndicator = DriveStorageIndicator;
3990
4150
  exports.DriveUpload = DriveUpload;
4151
+ exports.uploadFile = uploadFile;
4152
+ exports.uploadFiles = uploadFiles;
3991
4153
  exports.useDrive = useDrive;
3992
4154
  exports.useDriveDnd = useDriveDnd;
3993
4155
  exports.useUpload = useUpload;