mbkbucket 1.2.1 → 1.4.0
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/.env.example +5 -2
- package/README.md +59 -14
- package/index.d.ts +67 -3
- package/index.js +5 -79
- package/lib/bucket.js +719 -411
- package/lib/config/index.js +134 -1
- package/lib/s3.js +304 -56
- package/package.json +2 -1
- package/public/bucketadmin.css +164 -19
- package/public/bucketadmin.js +317 -94
- package/views/bucket.handlebars +1 -1
- package/views/bucketadmincontent.handlebars +17 -14
- package/views/mbkbucket_info.handlebars +226 -0
- package/views/info.handlebars +0 -1056
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mbkbucket",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "S3 Bucket manager for mbktech.org apps",
|
|
5
5
|
"author": "Muhammad Bin Khalid",
|
|
6
6
|
"homepage": "https://github.com/MIbnEKhalid/mbkbucket#readme",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@aws-sdk/client-s3": "^3.968.0",
|
|
17
|
+
"@aws-sdk/s3-request-presigner": "^3.1000.0",
|
|
17
18
|
"compression": "^1.8.0",
|
|
18
19
|
"dotenv": "^16.6.1",
|
|
19
20
|
"express": "^4.22.1",
|
package/public/bucketadmin.css
CHANGED
|
@@ -43,6 +43,48 @@
|
|
|
43
43
|
padding: 1rem;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/* Collapsible Upload Section */
|
|
47
|
+
.upload-card-header {
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: space-between;
|
|
50
|
+
align-items: center;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.collapse-btn {
|
|
54
|
+
background: none;
|
|
55
|
+
border: none;
|
|
56
|
+
color: white;
|
|
57
|
+
padding: 0.5rem;
|
|
58
|
+
border-radius: 4px;
|
|
59
|
+
transition: all 0.3s ease;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.collapse-btn:hover {
|
|
64
|
+
background: rgba(255, 255, 255, 0.1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.collapse-btn i {
|
|
68
|
+
transition: transform 0.3s ease;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.collapse-btn.expanded i {
|
|
72
|
+
transform: rotate(180deg);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.collapsible-content {
|
|
76
|
+
padding: 0rem !important;
|
|
77
|
+
max-height: 0;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
transition: max-height 0.3s ease-out;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.collapsible-content.expanded {
|
|
83
|
+
padding: 1rem !important;
|
|
84
|
+
max-height: 2000px;
|
|
85
|
+
transition: max-height 0.3s ease-in;
|
|
86
|
+
}
|
|
87
|
+
|
|
46
88
|
/* File Stats Card - Welcome Style */
|
|
47
89
|
.file-stats {
|
|
48
90
|
background: linear-gradient(135deg, var(--primary-color-ml) 0%, var(--primary-dark-color-ml) 100%);
|
|
@@ -1077,32 +1119,30 @@
|
|
|
1077
1119
|
align-items: center;
|
|
1078
1120
|
}
|
|
1079
1121
|
|
|
1080
|
-
/* Skeleton loaders */
|
|
1122
|
+
/* Skeleton loaders - tuned grid to equalize column spacing visually */
|
|
1081
1123
|
.skeleton-row {
|
|
1082
|
-
display:
|
|
1124
|
+
display: grid;
|
|
1125
|
+
grid-template-columns: 48px minmax(120px, 1fr) minmax(120px, 1fr) minmax(120px, 240px); /* icon + 3 columns with balanced min widths */
|
|
1083
1126
|
gap: 1rem;
|
|
1084
1127
|
padding: 1rem;
|
|
1128
|
+
align-items: center;
|
|
1129
|
+
justify-items: stretch; /* make cells span their tracks evenly */
|
|
1085
1130
|
}
|
|
1086
1131
|
|
|
1132
|
+
/* make skeleton boxes flexible and responsive */
|
|
1087
1133
|
.skeleton-box {
|
|
1088
1134
|
background: linear-gradient(90deg, #f5f7fa, #eef2f6);
|
|
1089
1135
|
border-radius: 6px;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
.skeleton-box.s-80 {
|
|
1093
|
-
width: 80px;
|
|
1094
1136
|
height: 16px;
|
|
1137
|
+
width: 100%;
|
|
1138
|
+
min-width: 0;
|
|
1139
|
+
justify-self: stretch;
|
|
1095
1140
|
}
|
|
1096
1141
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
}
|
|
1101
|
-
|
|
1102
|
-
.skeleton-box.s-40 {
|
|
1103
|
-
width: 40px;
|
|
1104
|
-
height: 16px;
|
|
1105
|
-
}
|
|
1142
|
+
/* semantic size hints (max widths) and alignment to ensure visual balance */
|
|
1143
|
+
.skeleton-box.s-40 { max-width: 48px; justify-self: start; }
|
|
1144
|
+
.skeleton-box.s-80 { max-width: 160px; justify-self: center; }
|
|
1145
|
+
.skeleton-box.s-200 { max-width: 220px; justify-self: end; }
|
|
1106
1146
|
|
|
1107
1147
|
.skeleton-row .file-icon {
|
|
1108
1148
|
width: 40px;
|
|
@@ -1110,6 +1150,26 @@
|
|
|
1110
1150
|
border-radius: 8px;
|
|
1111
1151
|
}
|
|
1112
1152
|
|
|
1153
|
+
/* Responsive adjustments */
|
|
1154
|
+
@media (max-width: 992px) {
|
|
1155
|
+
.skeleton-row {
|
|
1156
|
+
grid-template-columns: 40px minmax(100px, 1fr) minmax(100px, 1fr) minmax(100px, 200px);
|
|
1157
|
+
gap: 0.9rem;
|
|
1158
|
+
}
|
|
1159
|
+
.skeleton-box.s-200 { max-width: 180px; }
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
@media (max-width: 768px) {
|
|
1163
|
+
.skeleton-row {
|
|
1164
|
+
grid-template-columns: 40px 1fr 1fr 1fr;
|
|
1165
|
+
gap: 0.75rem;
|
|
1166
|
+
}
|
|
1167
|
+
.skeleton-box.s-80 { justify-self: start; }
|
|
1168
|
+
.skeleton-box.s-200 { max-width: 140px; justify-self: end; }
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
|
|
1113
1173
|
.btn:disabled {
|
|
1114
1174
|
opacity: 0.5;
|
|
1115
1175
|
cursor: not-allowed;
|
|
@@ -1187,12 +1247,21 @@
|
|
|
1187
1247
|
}
|
|
1188
1248
|
|
|
1189
1249
|
.stats-content {
|
|
1190
|
-
|
|
1191
|
-
text-align: center;
|
|
1250
|
+
gap: 0.75rem;
|
|
1192
1251
|
}
|
|
1193
1252
|
|
|
1194
1253
|
.stats-icon {
|
|
1195
|
-
|
|
1254
|
+
width: 50px;
|
|
1255
|
+
height: 50px;
|
|
1256
|
+
font-size: 1.3rem;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
.stats-text h2 {
|
|
1260
|
+
font-size: 1.3rem;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
.stats-text p {
|
|
1264
|
+
font-size: 0.85rem;
|
|
1196
1265
|
}
|
|
1197
1266
|
|
|
1198
1267
|
.filter-form {
|
|
@@ -1209,8 +1278,23 @@
|
|
|
1209
1278
|
padding: 1rem;
|
|
1210
1279
|
}
|
|
1211
1280
|
|
|
1281
|
+
.stats-content {
|
|
1282
|
+
gap: 0.5rem;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
.stats-icon {
|
|
1286
|
+
width: 40px;
|
|
1287
|
+
height: 40px;
|
|
1288
|
+
font-size: 1.2rem;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1212
1291
|
.stats-text h2 {
|
|
1213
|
-
font-size: 1.
|
|
1292
|
+
font-size: 1.2rem;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
.stats-text p {
|
|
1296
|
+
font-size: 0.8rem;
|
|
1297
|
+
margin: 0.25rem 0 0;
|
|
1214
1298
|
}
|
|
1215
1299
|
|
|
1216
1300
|
.btn-group {
|
|
@@ -1481,6 +1565,67 @@
|
|
|
1481
1565
|
display: none;
|
|
1482
1566
|
}
|
|
1483
1567
|
|
|
1568
|
+
/* Additional utility classes for removing inline styles */
|
|
1569
|
+
.file-list-header {
|
|
1570
|
+
display: flex;
|
|
1571
|
+
justify-content: space-between;
|
|
1572
|
+
align-items: center;
|
|
1573
|
+
flex-wrap: wrap;
|
|
1574
|
+
gap: 1rem;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
.search-inline {
|
|
1578
|
+
flex: 1;
|
|
1579
|
+
max-width: 640px;
|
|
1580
|
+
display: flex;
|
|
1581
|
+
gap: 0.5rem;
|
|
1582
|
+
align-items: center;
|
|
1583
|
+
justify-content: center;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
.view-btn-left {
|
|
1587
|
+
border-top-right-radius: 0;
|
|
1588
|
+
border-bottom-right-radius: 0;
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
.view-btn-right {
|
|
1592
|
+
border-top-left-radius: 0;
|
|
1593
|
+
border-bottom-left-radius: 0;
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1596
|
+
.pagination-container {
|
|
1597
|
+
display: none;
|
|
1598
|
+
padding: 1rem;
|
|
1599
|
+
border-top: 1px solid var(--gray-light-color-ml);
|
|
1600
|
+
background: var(--light-color-ml);
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
.modal-body-text-style {
|
|
1604
|
+
color: var(--gray-color-ml);
|
|
1605
|
+
margin-bottom: 0;
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
.modal-body-text-top {
|
|
1609
|
+
color: var(--gray-color-ml);
|
|
1610
|
+
margin-top: 0.5rem;
|
|
1611
|
+
margin-bottom: 0;
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
.modal-header-spacing {
|
|
1615
|
+
margin-top: 0.5rem;
|
|
1616
|
+
color: var(--gray-color-ml);
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
.toast-container {
|
|
1620
|
+
position: fixed;
|
|
1621
|
+
bottom: 20px;
|
|
1622
|
+
right: 20px;
|
|
1623
|
+
z-index: 1050;
|
|
1624
|
+
display: flex;
|
|
1625
|
+
flex-direction: column;
|
|
1626
|
+
gap: 10px;
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1484
1629
|
@media (max-width: 768px) {
|
|
1485
1630
|
.dtm {
|
|
1486
1631
|
display: block;
|