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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mbkbucket",
3
- "version": "1.2.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",
@@ -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: flex;
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
- .skeleton-box.s-200 {
1098
- width: 200px;
1099
- height: 16px;
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
- flex-direction: column;
1191
- text-align: center;
1250
+ gap: 0.75rem;
1192
1251
  }
1193
1252
 
1194
1253
  .stats-icon {
1195
- margin: 0 auto;
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.35rem;
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;