feat(server): track upload status via manifest and /status API
- Persist per-box file metadata in a .warpbox.json manifest, including IDs and status fields (pending/uploading/complete/failed) - Add GET /box/:id/status to return current file states for clients polling upload progress - Update upload handling to mark failures and completion in the manifest and decorate responses - Add CSS states for loading/failed files and disable interactions for unavailable itemsfeat(server): track upload status via manifest and /status API - Persist per-box file metadata in a .warpbox.json manifest, including IDs and status fields (pending/uploading/complete/failed) - Add GET /box/:id/status to return current file states for clients polling upload progress - Update upload handling to mark failures and completion in the manifest and decorate responses - Add CSS states for loading/failed files and disable interactions for unavailable items
This commit is contained in:
@@ -74,6 +74,28 @@
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.box-file.is-loading,
|
||||
.box-file.is-failed {
|
||||
color: #666666;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
.box-file.is-loading {
|
||||
animation: box-loading-pulse 900ms steps(2, end) infinite;
|
||||
}
|
||||
|
||||
.box-file.is-failed {
|
||||
opacity: 0.58;
|
||||
}
|
||||
|
||||
.box-file.is-failed .box-file-name::after {
|
||||
content: " (failed)";
|
||||
}
|
||||
|
||||
.box-file[aria-disabled="true"] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.box-file:hover,
|
||||
.box-file:focus-visible {
|
||||
color: #ffffff;
|
||||
@@ -99,6 +121,16 @@
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@keyframes box-loading-pulse {
|
||||
0% {
|
||||
opacity: 0.48;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0.82;
|
||||
}
|
||||
}
|
||||
|
||||
.box-file-name {
|
||||
font-size: 13px;
|
||||
line-height: 13px;
|
||||
|
||||
Reference in New Issue
Block a user