@7365admin1/layer-common 3.2.2-staging.129 → 3.2.2-staging.130

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.
@@ -32,11 +32,12 @@
32
32
 
33
33
  <template #extension>
34
34
  <v-row no-gutters class="w-100 d-flex flex-column">
35
- <v-card
36
- class="w-100 filter-bar d-flex align-center ga-5"
37
- flat
38
- :height="60"
39
- >
35
+ <!--
36
+ A bare `v-card` here paints Vuetify's own `surface`, a shade off
37
+ the table card it sits inside. A plain row on the card's own
38
+ background, with both filters on the design's field.
39
+ -->
40
+ <div class="w-100 filter-bar d-flex align-center ga-5">
40
41
  <v-text-field
41
42
  v-model="searchInput"
42
43
  density="compact"
@@ -45,6 +46,7 @@
45
46
  max-width="300"
46
47
  append-inner-icon="mdi-magnify"
47
48
  hide-details
49
+ class="filter-field"
48
50
  />
49
51
  <v-select
50
52
  v-model="status"
@@ -55,8 +57,9 @@
55
57
  clearable
56
58
  hide-details
57
59
  max-width="200"
60
+ class="filter-field"
58
61
  />
59
- </v-card>
62
+ </div>
60
63
  </v-row>
61
64
  </template>
62
65
 
@@ -19,23 +19,24 @@
19
19
  >
20
20
  <template #extension>
21
21
  <v-row no-gutters class="w-100 d-flex flex-column">
22
- <v-card
23
- class="w-100 px-3 d-flex align-center ga-5 py-2"
24
- flat
25
- :height="60"
26
- >
22
+ <!--
23
+ A bare `v-card` here paints Vuetify's own `surface`, a slab a
24
+ shade off the table card it sits inside. A plain row on the
25
+ card's own background, with the filter on the design's field.
26
+ -->
27
+ <div class="w-100 px-3 d-flex align-center ga-5 py-2">
27
28
  <v-select
28
29
  v-model="areaTypeFilter"
29
30
  :items="typeOptions"
30
31
  density="compact"
31
32
  hide-details
32
- class="mx-2"
33
+ class="mx-2 filter-field"
33
34
  style="max-width: 160px"
34
35
  item-title="title"
35
36
  item-value="value"
36
37
  label="Type"
37
38
  />
38
- </v-card>
39
+ </div>
39
40
  </v-row>
40
41
  </template>
41
42
 
@@ -213,64 +214,50 @@
213
214
  </HygieneUpdateMoreAction>
214
215
  </v-dialog>
215
216
 
216
- <v-dialog v-model="dialogDeleteItem" max-width="450">
217
- <v-card>
218
- <v-toolbar>
219
- <v-row no-gutters class="fill-height px-6" align="center">
220
- <span class="font-weight-bold text-h6 text-capitalize">
221
- Delete {{ selectedItem?.name || entityTypeLabel }}
222
- </span>
223
- </v-row>
224
- </v-toolbar>
225
- <v-card-text>
226
- <span class="text-subtitle-2"
227
- >Are you sure you want to delete this {{ entityTypeLabel }}?</span
228
- >
217
+ <!--
218
+ Both dialogs were `v-toolbar` title bars over toolbar footers of two block
219
+ buttons, the confirm one on `color="black"` - not a token, so it painted a
220
+ light-theme fill on the dark theme, and the toolbar surface sat visibly
221
+ lighter than the card. The shared `.screen-modal` shape now, same copy,
222
+ same labels, same handlers, same busy states.
223
+ -->
224
+ <v-dialog v-model="dialogDeleteItem" max-width="520">
225
+ <v-card class="screen-modal">
226
+ <v-card-title class="text-capitalize">
227
+ Delete {{ selectedItem?.name || entityTypeLabel }}
228
+ </v-card-title>
229
+
230
+ <v-card-text class="screen-modal__body">
231
+ Are you sure you want to delete this {{ entityTypeLabel }}?
229
232
  </v-card-text>
230
233
 
231
- <v-toolbar class="pa-0" density="compact">
232
- <v-row no-gutters>
233
- <v-col cols="6" class="pa-0">
234
- <v-btn
235
- block
236
- variant="text"
237
- class="text-none"
238
- size="large"
239
- @click="dialogDeleteItem = false"
240
- height="48"
241
- >
242
- Cancel
243
- </v-btn>
244
- </v-col>
245
-
246
- <v-col cols="6" class="pa-0">
247
- <v-btn
248
- block
249
- variant="flat"
250
- color="black"
251
- class="text-none font-weight-bold rounded-0"
252
- height="48"
253
- :loading="submitting"
254
- @click="_deleteItem"
255
- >
256
- Delete
257
- </v-btn>
258
- </v-col>
259
- </v-row>
260
- </v-toolbar>
234
+ <div class="screen-modal__footer">
235
+ <v-btn
236
+ class="screen-btn-ghost"
237
+ variant="outlined"
238
+ :disabled="submitting"
239
+ @click="dialogDeleteItem = false"
240
+ >
241
+ Cancel
242
+ </v-btn>
243
+ <v-btn
244
+ class="screen-btn-primary"
245
+ variant="flat"
246
+ :loading="submitting"
247
+ @click="_deleteItem"
248
+ >
249
+ Delete
250
+ </v-btn>
251
+ </div>
261
252
  </v-card>
262
253
  </v-dialog>
263
254
 
264
- <v-dialog v-if="isToiletLocation" v-model="dialogShowQR" max-width="500">
265
- <v-card>
266
- <v-toolbar>
267
- <v-row no-gutters class="fill-height px-6" align="center">
268
- <span class="font-weight-bold text-h6 text-capitalize">
269
- QR Code for {{ selectedItem?.name || "Toilet Location" }}
270
- </span>
271
- </v-row>
272
- </v-toolbar>
273
- <v-card-text class="d-flex justify-center pa-6">
255
+ <v-dialog v-if="isToiletLocation" v-model="dialogShowQR" max-width="520">
256
+ <v-card class="screen-modal">
257
+ <v-card-title class="text-capitalize">
258
+ QR Code for {{ selectedItem?.name || "Toilet Location" }}
259
+ </v-card-title>
260
+ <v-card-text class="screen-modal__body d-flex justify-center">
274
261
  <v-row no-gutters class="d-flex justify-center">
275
262
  <v-col cols="12" class="text-center">
276
263
  <div v-if="qrLoading" class="d-flex flex-column align-center">
@@ -301,36 +288,23 @@
301
288
  </v-row>
302
289
  </v-card-text>
303
290
 
304
- <v-toolbar class="pa-0" density="compact">
305
- <v-row no-gutters>
306
- <v-col cols="6" class="pa-0">
307
- <v-btn
308
- block
309
- variant="text"
310
- class="text-none"
311
- size="large"
312
- @click="dialogShowQR = false"
313
- height="48"
314
- >
315
- Cancel
316
- </v-btn>
317
- </v-col>
318
-
319
- <v-col cols="6" class="pa-0">
320
- <v-btn
321
- block
322
- variant="flat"
323
- color="black"
324
- class="text-none font-weight-bold rounded-0"
325
- height="48"
326
- :loading="qrLoading"
327
- @click="onDownloadQrCode"
328
- >
329
- Download
330
- </v-btn>
331
- </v-col>
332
- </v-row>
333
- </v-toolbar>
291
+ <div class="screen-modal__footer">
292
+ <v-btn
293
+ class="screen-btn-ghost"
294
+ variant="outlined"
295
+ @click="dialogShowQR = false"
296
+ >
297
+ Cancel
298
+ </v-btn>
299
+ <v-btn
300
+ class="screen-btn-primary"
301
+ variant="flat"
302
+ :loading="qrLoading"
303
+ @click="onDownloadQrCode"
304
+ >
305
+ Download
306
+ </v-btn>
307
+ </div>
334
308
  </v-card>
335
309
  </v-dialog>
336
310
 
@@ -98,11 +98,15 @@
98
98
  </template>
99
99
  </TableMain>
100
100
  <div v-else class="pa-4">
101
- <v-card variant="outlined" class="pa-4">
102
- <div class="text-subtitle-1">
101
+ <!--
102
+ Was an outlined `v-card` painted from Vuetify's own `surface`. The
103
+ design's card, and the notice at the design's cell size.
104
+ -->
105
+ <AppCard class="pa-4">
106
+ <div class="cs-no-permission">
103
107
  You do not have permission to view cleaning schedules.
104
108
  </div>
105
- </v-card>
109
+ </AppCard>
106
110
  </div>
107
111
  </v-col>
108
112
  </v-row>
@@ -327,3 +331,11 @@ function showMessage(msg: string, color: string = "error") {
327
331
  }
328
332
  }
329
333
  </script>
334
+
335
+ <style scoped>
336
+ .cs-no-permission {
337
+ font-family: var(--font-sans);
338
+ font-size: var(--fs-cell);
339
+ color: var(--muted);
340
+ }
341
+ </style>
@@ -198,22 +198,28 @@
198
198
  </v-dialog>
199
199
 
200
200
  <!-- Main Equipment Item Dialog -->
201
+ <!--
202
+ All three dialogs were hand-drawn: a 20px/700 title bar, a divider, and a
203
+ `v-card-actions` footer of two 56px block buttons with square corners, the
204
+ confirm one on `color="black"` - not a token, so it painted a light-theme
205
+ fill on the dark theme. The shared `.screen-modal` shape now. Same fields,
206
+ same labels, same handlers, same busy states.
207
+ -->
201
208
  <v-dialog v-model="dialogEquipmentItem" max-width="540" persistent>
202
- <v-card>
203
- <v-card-title class="d-flex align-center pa-4">
204
- <span class="text-h6 font-weight-bold">Equipment Item</span>
209
+ <v-card class="screen-modal">
210
+ <v-card-title class="d-flex align-center">
211
+ Equipment Item
205
212
  <v-spacer />
206
213
  <v-btn
207
214
  icon="mdi-close"
208
215
  variant="text"
209
- size="small"
216
+ class="screen-modal__close"
217
+ aria-label="Close"
210
218
  @click="dialogEquipmentItem = false"
211
219
  />
212
220
  </v-card-title>
213
221
 
214
- <v-divider />
215
-
216
- <v-card-text class="pa-6">
222
+ <v-card-text class="screen-modal__body">
217
223
  <v-form ref="equipmentItemFormRef">
218
224
  <!-- Add Equipment Section -->
219
225
  <v-row no-gutters class="mb-4">
@@ -374,49 +380,40 @@
374
380
  </v-form>
375
381
  </v-card-text>
376
382
 
377
- <v-divider />
378
-
379
- <v-card-actions class="pa-0">
380
- <v-row no-gutters>
381
- <v-col cols="6">
382
- <v-btn
383
- block
384
- variant="text"
385
- size="large"
386
- height="56"
387
- class="text-none font-weight-medium rounded-0"
388
- @click="dialogEquipmentItem = false"
389
- >
390
- Cancel
391
- </v-btn>
392
- </v-col>
393
- <v-col cols="6">
394
- <v-btn
395
- block
396
- variant="flat"
397
- color="black"
398
- size="large"
399
- height="56"
400
- class="text-none font-weight-bold rounded-0"
401
- :loading="submitting"
402
- @click="_equipmentItem()"
403
- >
404
- Checkout Item
405
- </v-btn>
406
- </v-col>
407
- </v-row>
408
- </v-card-actions>
383
+ <div class="screen-modal__footer">
384
+ <v-btn
385
+ class="screen-btn-ghost"
386
+ variant="outlined"
387
+ :disabled="submitting"
388
+ @click="dialogEquipmentItem = false"
389
+ >
390
+ Cancel
391
+ </v-btn>
392
+ <v-btn
393
+ class="screen-btn-primary"
394
+ variant="flat"
395
+ :loading="submitting"
396
+ @click="_equipmentItem()"
397
+ >
398
+ Checkout Item
399
+ </v-btn>
400
+ </div>
409
401
  </v-card>
410
402
  </v-dialog>
411
403
 
412
404
  <Snackbar v-model="messageSnackbar" :text="message" :color="messageColor" />
413
405
 
414
406
  <v-dialog v-model="dialogPhotoForItem" max-width="720" persistent>
415
- <v-card rounded="lg">
416
- <v-card-title class="d-flex align-center pa-4">
407
+ <v-card class="screen-modal">
408
+ <v-card-title class="d-flex align-center">
417
409
  <div>
418
- <div class="text-h6 font-weight-bold">Item Photos</div>
419
- <div class="text-caption text-medium-emphasis">
410
+ Item Photos
411
+ <!--
412
+ The handoff draws no sub-line under a modal title. `--muted` at
413
+ 12px, the figure batch I's `AttachmentsViewer` settled on, rather
414
+ than a third number.
415
+ -->
416
+ <div class="eqi-modal-sub">
420
417
  {{ equipmentItems[activePhotoIndex ?? 0]?.supplyName || "Item" }}
421
418
  </div>
422
419
  </div>
@@ -426,15 +423,14 @@
426
423
  <v-btn
427
424
  icon="mdi-close"
428
425
  variant="text"
429
- size="small"
426
+ class="screen-modal__close"
427
+ aria-label="Close"
430
428
  @click="dialogPhotoForItem = false"
431
429
  />
432
430
  </v-card-title>
433
431
 
434
- <v-divider />
435
-
436
432
  <!-- Body -->
437
- <v-card-text class="pa-6" v-if="activePhotoIndex !== null">
433
+ <v-card-text class="screen-modal__body" v-if="activePhotoIndex !== null">
438
434
  <PhotoUpload
439
435
  title="Add / Take Photos"
440
436
  v-model="currentPhotos"
@@ -443,63 +439,42 @@
443
439
  />
444
440
  </v-card-text>
445
441
 
446
- <v-divider />
447
-
448
442
  <!-- Footer -->
449
- <v-card-actions class="pa-0">
450
- <v-row no-gutters class="w-100">
451
- <v-col cols="6">
452
- <v-btn
453
- block
454
- variant="text"
455
- size="large"
456
- height="56"
457
- class="text-none font-weight-medium rounded-0"
458
- @click="dialogPhotoForItem = false"
459
- >
460
- Cancel
461
- </v-btn>
462
- </v-col>
463
-
464
- <v-col cols="6">
465
- <v-btn
466
- block
467
- variant="flat"
468
- color="black"
469
- size="large"
470
- height="56"
471
- class="text-none font-weight-bold rounded-0"
472
- @click="dialogPhotoForItem = false"
473
- >
474
- Done
475
- </v-btn>
476
- </v-col>
477
- </v-row>
478
- </v-card-actions>
443
+ <div class="screen-modal__footer">
444
+ <v-btn
445
+ class="screen-btn-ghost"
446
+ variant="outlined"
447
+ @click="dialogPhotoForItem = false"
448
+ >
449
+ Cancel
450
+ </v-btn>
451
+ <v-btn
452
+ class="screen-btn-primary"
453
+ variant="flat"
454
+ @click="dialogPhotoForItem = false"
455
+ >
456
+ Done
457
+ </v-btn>
458
+ </div>
479
459
  </v-card>
480
460
  </v-dialog>
481
461
 
482
462
  <v-dialog v-model="showAttachmentDialog" max-width="720" persistent>
483
- <v-card rounded="lg">
484
- <v-card-title class="d-flex align-center pa-4">
485
- <div>
486
- <div class="text-h6 font-weight-bold">Attachment</div>
487
- </div>
488
-
463
+ <v-card class="screen-modal">
464
+ <v-card-title class="d-flex align-center">
465
+ Attachment
489
466
  <v-spacer />
490
-
491
467
  <v-btn
492
468
  icon="mdi-close"
493
469
  variant="text"
494
- size="small"
470
+ class="screen-modal__close"
471
+ aria-label="Close"
495
472
  @click="(showAttachmentDialog = false), (attachmentUrl = '')"
496
473
  />
497
474
  </v-card-title>
498
475
 
499
- <v-divider />
500
-
501
476
  <!-- Body -->
502
- <v-card-text class="pa-6">
477
+ <v-card-text class="screen-modal__body">
503
478
  <v-img :src="attachmentUrl" contain />
504
479
  </v-card-text>
505
480
  </v-card>
@@ -817,4 +792,18 @@ const currentPhotoIds = computed({
817
792
  });
818
793
  </script>
819
794
 
820
- <style scoped></style>
795
+ <style scoped>
796
+ /*
797
+ The sub-line under the "Item Photos" title. The handoff draws no such line,
798
+ so it takes the figure already settled on for one: `--muted` at 12px.
799
+ Scoped to `.v-card-title` because Vuetify's own title rule would otherwise
800
+ hand it the 20px it gives everything inside.
801
+ */
802
+ .screen-modal .v-card-title .eqi-modal-sub {
803
+ font-family: var(--font-sans);
804
+ font-size: 12px;
805
+ font-weight: 400;
806
+ line-height: 1.4;
807
+ color: var(--muted);
808
+ }
809
+ </style>
@@ -45,11 +45,15 @@
45
45
  </template>
46
46
 
47
47
  <template #item.attachment="{ value }">
48
+ <!--
49
+ `variant="tonal"` drew Vuetify's own grey slab in the cell, the one
50
+ off-design control left on the row. The design's ghost button.
51
+ -->
48
52
  <v-btn
49
53
  v-if="value"
50
54
  size="small"
51
- variant="tonal"
52
- class="text-none"
55
+ variant="outlined"
56
+ class="screen-btn-ghost"
53
57
  @click.stop="viewAttachment(value)"
54
58
  >
55
59
  View Image
@@ -143,67 +147,54 @@
143
147
  </HygieneUpdateMoreAction>
144
148
  </v-dialog>
145
149
 
146
- <v-dialog v-model="dialogDeleteEquipment" max-width="450">
147
- <v-card>
148
- <v-toolbar>
149
- <v-row no-gutters class="fill-height px-6" align="center">
150
- <span class="font-weight-bold text-h6 text-capitalize">
151
- Delete {{ selectedEquipment?.name || "Unit" }}
152
- </span>
153
- </v-row>
154
- </v-toolbar>
155
- <v-card-text>
156
- <span class="text-subtitle-2"
157
- >Are you sure you want to delete this equipment?</span
158
- >
159
- </v-card-text>
150
+ <!--
151
+ All three dialogs were `v-toolbar` title bars over toolbar footers carrying
152
+ two block buttons, the confirm one on `color="black"` - not a token, so it
153
+ painted a light-theme fill on the dark theme, and the toolbar surface sat
154
+ visibly lighter than the card it was on. They are the shared `.screen-modal`
155
+ shape now. Same fields, same labels, same handlers, same busy states.
156
+ -->
157
+ <v-dialog v-model="dialogDeleteEquipment" max-width="520">
158
+ <v-card class="screen-modal">
159
+ <v-card-title class="text-capitalize">
160
+ Delete {{ selectedEquipment?.name || "Unit" }}
161
+ </v-card-title>
160
162
 
161
- <v-toolbar class="pa-0" density="compact">
162
- <v-row no-gutters>
163
- <v-col cols="6" class="pa-0">
164
- <v-btn
165
- block
166
- variant="text"
167
- class="text-none"
168
- size="large"
169
- @click="dialogDeleteEquipment = false"
170
- height="48"
171
- >
172
- Cancel
173
- </v-btn>
174
- </v-col>
163
+ <v-card-text class="screen-modal__body">
164
+ Are you sure you want to delete this equipment?
165
+ </v-card-text>
175
166
 
176
- <v-col cols="6" class="pa-0">
177
- <v-btn
178
- block
179
- variant="flat"
180
- color="black"
181
- class="text-none font-weight-bold"
182
- height="48"
183
- :loading="submitting"
184
- @click="_deleteEquipment"
185
- >
186
- Delete
187
- </v-btn>
188
- </v-col>
189
- </v-row>
190
- </v-toolbar>
167
+ <div class="screen-modal__footer">
168
+ <v-btn
169
+ class="screen-btn-ghost"
170
+ variant="outlined"
171
+ :disabled="submitting"
172
+ @click="dialogDeleteEquipment = false"
173
+ >
174
+ Cancel
175
+ </v-btn>
176
+ <v-btn
177
+ class="screen-btn-primary"
178
+ variant="flat"
179
+ :loading="submitting"
180
+ @click="_deleteEquipment"
181
+ >
182
+ Delete
183
+ </v-btn>
184
+ </div>
191
185
  </v-card>
192
186
  </v-dialog>
193
187
 
194
- <v-dialog v-model="dialogStockAction" max-width="450">
195
- <v-card>
196
- <v-toolbar>
197
- <v-row no-gutters class="fill-height px-6" align="center">
198
- <span class="font-weight-bold text-h6 text-capitalize">
199
- {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
200
- </span>
201
- </v-row>
202
- </v-toolbar>
203
- <v-card-text class="pa-4">
188
+ <v-dialog v-model="dialogStockAction" max-width="520">
189
+ <v-card class="screen-modal">
190
+ <v-card-title class="text-capitalize">
191
+ {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
192
+ </v-card-title>
193
+
194
+ <v-card-text class="screen-modal__body">
204
195
  <v-form ref="stockActionFormRef" v-model="stockActionValid">
205
196
  <v-row no-gutters>
206
- <v-col cols="12" class="mb-4">
197
+ <v-col cols="12">
207
198
  <InputLabel
208
199
  for="stockActionQty"
209
200
  title="Quantity"
@@ -214,68 +205,53 @@
214
205
  v-model.number="stockActionQuantity"
215
206
  :rules="[requiredRule]"
216
207
  density="comfortable"
217
- variant="outlined"
218
208
  type="number"
219
209
  min="1"
220
210
  placeholder="Enter quantity"
221
211
  hide-details="auto"
212
+ class="filter-field"
222
213
  />
223
214
  </v-col>
224
215
  </v-row>
225
216
  </v-form>
226
217
  </v-card-text>
227
218
 
228
- <v-toolbar class="pa-0" density="compact">
229
- <v-row no-gutters>
230
- <v-col cols="6" class="pa-0">
231
- <v-btn
232
- block
233
- variant="text"
234
- class="text-none"
235
- size="large"
236
- @click="dialogStockAction = false"
237
- height="48"
238
- >
239
- Cancel
240
- </v-btn>
241
- </v-col>
242
-
243
- <v-col cols="6" class="pa-0">
244
- <v-btn
245
- block
246
- variant="flat"
247
- color="black"
248
- class="text-none font-weight-bold rounded-0"
249
- height="48"
250
- :loading="submitting"
251
- @click="stockActionMode === 'add' ? _addStock() : _requestItem()"
252
- >
253
- {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
254
- </v-btn>
255
- </v-col>
256
- </v-row>
257
- </v-toolbar>
219
+ <div class="screen-modal__footer">
220
+ <v-btn
221
+ class="screen-btn-ghost"
222
+ variant="outlined"
223
+ :disabled="submitting"
224
+ @click="dialogStockAction = false"
225
+ >
226
+ Cancel
227
+ </v-btn>
228
+ <v-btn
229
+ class="screen-btn-primary"
230
+ variant="flat"
231
+ :loading="submitting"
232
+ @click="stockActionMode === 'add' ? _addStock() : _requestItem()"
233
+ >
234
+ {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
235
+ </v-btn>
236
+ </div>
258
237
  </v-card>
259
238
  </v-dialog>
260
239
 
261
240
  <v-dialog v-model="showAttachmentDialog" max-width="720" persistent>
262
- <v-card rounded="lg">
263
- <v-card-title class="d-flex align-center pa-4">
264
- <span class="text-h6 font-weight-bold">Attachment</span>
265
-
241
+ <v-card class="screen-modal">
242
+ <v-card-title class="d-flex align-center">
243
+ Attachment
266
244
  <v-spacer />
267
-
268
245
  <v-btn
269
246
  icon="mdi-close"
270
247
  variant="text"
271
- size="small"
248
+ class="screen-modal__close"
249
+ aria-label="Close"
272
250
  @click="(showAttachmentDialog = false), (attachmentUrl = '')"
273
251
  />
274
252
  </v-card-title>
275
253
 
276
- <v-divider />
277
-
278
- <v-card-text class="pa-6">
254
+ <v-card-text class="screen-modal__body">
279
255
  <v-img :src="attachmentUrl" contain />
280
256
  </v-card-text>
281
257
  </v-card>
@@ -184,13 +184,20 @@
184
184
 
185
185
  <Snackbar v-model="messageSnackbar" :text="message" :color="messageColor" />
186
186
 
187
- <v-dialog v-model="assignRoleDialog" max-width="400px">
188
- <v-card>
189
- <v-card-title class="text-h5">Assign Role</v-card-title>
190
- <v-card-text>
191
- <v-form v-model="memberRoleForm" @submit.prevent="updateMemberRole()">
187
+ <!--
188
+ Was a `text-h5` title, an untokenised select, and two block buttons - the
189
+ submit one on `color="black"`, not a token, so it drew a light-theme fill
190
+ on the dark theme. The shared `.screen-modal` shape now. The footer stays
191
+ INSIDE the `v-form` because Submit is a `type="submit"` and moving it out
192
+ would break the form's own submit.
193
+ -->
194
+ <v-dialog v-model="assignRoleDialog" max-width="520">
195
+ <v-card class="screen-modal">
196
+ <v-card-title>Assign Role</v-card-title>
197
+ <v-form v-model="memberRoleForm" @submit.prevent="updateMemberRole()">
198
+ <v-card-text class="screen-modal__body">
192
199
  <v-row no-gutters>
193
- <v-col cols="12" class="mb-2">
200
+ <v-col cols="12">
194
201
  <v-row no-gutters>
195
202
  <InputLabel class="text-capitalize" title="Name" required />
196
203
  <v-col cols="12">
@@ -207,6 +214,7 @@
207
214
  : ''
208
215
  "
209
216
  persistent-hint
217
+ class="filter-field"
210
218
  ></v-select>
211
219
  </v-col>
212
220
 
@@ -215,34 +223,27 @@
215
223
  </v-col>
216
224
  </v-row>
217
225
  </v-col>
218
-
219
- <v-col cols="12">
220
- <v-row>
221
- <v-col cols="6">
222
- <v-btn
223
- block
224
- variant="text"
225
- @click="setMember({ mode: 'assign-role' })"
226
- >
227
- Cancel
228
- </v-btn>
229
- </v-col>
230
- <v-col cols="6">
231
- <v-btn
232
- block
233
- variant="flat"
234
- color="black"
235
- :disabled="!memberRoleForm"
236
- type="submit"
237
- >
238
- Submit
239
- </v-btn>
240
- </v-col>
241
- </v-row>
242
- </v-col>
243
226
  </v-row>
244
- </v-form>
245
- </v-card-text>
227
+ </v-card-text>
228
+
229
+ <div class="screen-modal__footer">
230
+ <v-btn
231
+ class="screen-btn-ghost"
232
+ variant="outlined"
233
+ @click="setMember({ mode: 'assign-role' })"
234
+ >
235
+ Cancel
236
+ </v-btn>
237
+ <v-btn
238
+ class="screen-btn-primary"
239
+ variant="flat"
240
+ :disabled="!memberRoleForm"
241
+ type="submit"
242
+ >
243
+ Submit
244
+ </v-btn>
245
+ </div>
246
+ </v-form>
246
247
  </v-card>
247
248
  </v-dialog>
248
249
  </div>
@@ -105,23 +105,23 @@
105
105
  />
106
106
  </v-dialog>
107
107
 
108
- <v-dialog v-model="confirmDialog" max-width="450">
109
- <v-card>
110
- <v-toolbar>
111
- <v-row no-gutters class="fill-height px-6" align="center">
112
- <span class="font-weight-bold text-h6 text-capitalize">
113
- Delete Role
114
- </span>
115
- </v-row>
116
- </v-toolbar>
108
+ <!--
109
+ Was a `v-toolbar` title bar over a toolbar footer of two block buttons,
110
+ the confirm one on `color="black"` - not a token, so it drew a
111
+ light-theme fill on the dark theme. The shared confirmation shape now.
112
+ Same question, same reassignment rows, same disabled rule.
113
+ -->
114
+ <v-dialog v-model="confirmDialog" max-width="520">
115
+ <v-card class="screen-modal">
116
+ <v-card-title>Delete Role</v-card-title>
117
117
 
118
- <v-card-text>
119
- <span v-if="!hasAssignedMembers" class="text-subtitle-2">
118
+ <v-card-text class="screen-modal__body">
119
+ <span v-if="!hasAssignedMembers">
120
120
  Are you sure you want to delete this role? This action cannot be
121
121
  undone.
122
122
  </span>
123
123
  <template v-else>
124
- <p class="text-subtitle-2 mb-4">
124
+ <p class="mb-4">
125
125
  There are currently
126
126
  <span class="text-error font-weight-bold">
127
127
  {{ deletionPreview.members.length }}
@@ -138,7 +138,7 @@
138
138
  class="mb-3 pa-3 border rounded-lg"
139
139
  align="center"
140
140
  >
141
- <v-col cols="12" sm="5" class="text-body-2 mb-2 mb-sm-0">
141
+ <v-col cols="12" sm="5" class="mb-2 mb-sm-0">
142
142
  {{ member.name || member.user }}
143
143
  </v-col>
144
144
  <v-col cols="12" sm="7">
@@ -150,43 +150,32 @@
150
150
  label="Reassign role"
151
151
  density="comfortable"
152
152
  hide-details
153
+ class="filter-field"
153
154
  />
154
155
  </v-col>
155
156
  </v-row>
156
157
  </template>
157
158
  </v-card-text>
158
159
 
159
- <v-toolbar class="pa-0" density="compact">
160
- <v-row no-gutters>
161
- <v-col cols="6" class="pa-0">
162
- <v-btn
163
- block
164
- variant="text"
165
- class="text-none"
166
- size="large"
167
- height="48"
168
- @click="closeDeleteDialog"
169
- :disabled="deleteLoading"
170
- >
171
- Cancel
172
- </v-btn>
173
- </v-col>
174
- <v-col cols="6" class="pa-0">
175
- <v-btn
176
- block
177
- variant="flat"
178
- color="black"
179
- class="text-none font-weight-bold rounded-0"
180
- height="48"
181
- @click="handleDeleteRole"
182
- :loading="deleteLoading"
183
- :disabled="hasAssignedMembers && !canConfirmDeletion"
184
- >
185
- {{ hasAssignedMembers ? "Confirm" : "Delete" }}
186
- </v-btn>
187
- </v-col>
188
- </v-row>
189
- </v-toolbar>
160
+ <div class="screen-modal__footer">
161
+ <v-btn
162
+ class="screen-btn-ghost"
163
+ variant="outlined"
164
+ :disabled="deleteLoading"
165
+ @click="closeDeleteDialog"
166
+ >
167
+ Cancel
168
+ </v-btn>
169
+ <v-btn
170
+ class="screen-btn-primary"
171
+ variant="flat"
172
+ :loading="deleteLoading"
173
+ :disabled="hasAssignedMembers && !canConfirmDeletion"
174
+ @click="handleDeleteRole"
175
+ >
176
+ {{ hasAssignedMembers ? "Confirm" : "Delete" }}
177
+ </v-btn>
178
+ </div>
190
179
  </v-card>
191
180
  </v-dialog>
192
181
 
@@ -20,17 +20,18 @@
20
20
 
21
21
  <template #extension>
22
22
  <v-row no-gutters class="w-100 d-flex flex-column">
23
- <v-card
24
- class="w-100 filter-bar d-flex align-center ga-5"
25
- flat
26
- :height="60"
27
- >
23
+ <!--
24
+ A bare `v-card` here paints Vuetify's own `surface`, a shade off
25
+ the table card it sits inside. A plain row on the card's own
26
+ background, with both filters on the design's field.
27
+ -->
28
+ <div class="w-100 filter-bar d-flex align-center ga-5">
28
29
  <v-select
29
30
  v-model="statusFilter"
30
31
  :items="statusOptions"
31
32
  density="compact"
32
33
  hide-details
33
- class="mx-2"
34
+ class="mx-2 filter-field"
34
35
  style="max-width: 160px"
35
36
  item-title="title"
36
37
  item-value="value"
@@ -42,13 +43,13 @@
42
43
  :items="typeOptions"
43
44
  density="compact"
44
45
  hide-details
45
- class="mx-2"
46
+ class="mx-2 filter-field"
46
47
  style="max-width: 160px"
47
48
  item-title="title"
48
49
  item-value="value"
49
50
  label="Type"
50
51
  />
51
- </v-card>
52
+ </div>
52
53
  </v-row>
53
54
  </template>
54
55
  <template #actions>
@@ -106,9 +107,17 @@
106
107
  (item.status && String(item.status).toLowerCase() === 'accepted')
107
108
  "
108
109
  >
109
- <span class="text-capitalize" color="success" variant="tonal">
110
- {{ item.acceptedByName || item.acceptedBy || "Accepted" }}
111
- </span>
110
+ <!--
111
+ `color`/`variant` on a plain `<span>` do nothing - Vuetify only
112
+ reads them on its own components, so this drew as bare cell text
113
+ while reading as a tonal green chip. It is the accepted chip the
114
+ sibling branches already use.
115
+ -->
116
+ <StatusChip
117
+ status="Accepted"
118
+ class="text-capitalize"
119
+ :label="item.acceptedByName || item.acceptedBy || 'Accepted'"
120
+ />
112
121
  </div>
113
122
  <div v-else-if="isScheduleClosed">
114
123
  <StatusChip status="Closed" class="text-capitalize" />
@@ -297,51 +297,41 @@
297
297
  </HygieneUpdateMoreAction>
298
298
  </v-dialog>
299
299
 
300
- <v-dialog v-model="dialogDeleteTask" max-width="450">
301
- <v-card>
302
- <v-toolbar>
303
- <v-row no-gutters class="fill-height px-6" align="center">
304
- <span class="font-weight-bold text-h6 text-capitalize">
305
- Delete {{ selectedTask?.title || "Schedule Task" }}
306
- </span>
307
- </v-row>
308
- </v-toolbar>
309
- <v-card-text>
310
- <span class="text-subtitle-2"
311
- >Are you sure you want to delete this schedule task?</span
312
- >
300
+ <!--
301
+ Was a `v-toolbar` title bar (Vuetify paints that from its own `surface`,
302
+ a grey slab visibly lighter than the card on dark) over a second toolbar
303
+ carrying two block buttons, the confirm one on `color="black"` - not a
304
+ token, so it drew a light-theme fill on the dark theme. It is the shared
305
+ confirmation shape now, the same one every converted screen uses.
306
+ -->
307
+ <v-dialog v-model="dialogDeleteTask" max-width="520">
308
+ <v-card class="screen-modal">
309
+ <v-card-title class="text-capitalize">
310
+ Delete {{ selectedTask?.title || "Schedule Task" }}
311
+ </v-card-title>
312
+
313
+ <v-card-text class="screen-modal__body">
314
+ Are you sure you want to delete this schedule task?
313
315
  </v-card-text>
314
316
 
315
- <v-toolbar class="pa-0" density="compact">
316
- <v-row no-gutters>
317
- <v-col cols="6" class="pa-0">
318
- <v-btn
319
- block
320
- variant="text"
321
- class="text-none"
322
- size="large"
323
- @click="dialogDeleteTask = false"
324
- height="48"
325
- >
326
- Cancel
327
- </v-btn>
328
- </v-col>
329
-
330
- <v-col cols="6" class="pa-0">
331
- <v-btn
332
- block
333
- variant="flat"
334
- color="black"
335
- class="text-none font-weight-bold"
336
- height="48"
337
- :loading="submitting"
338
- @click="_deleteScheduleTask"
339
- >
340
- Delete
341
- </v-btn>
342
- </v-col>
343
- </v-row>
344
- </v-toolbar>
317
+ <div class="screen-modal__footer">
318
+ <v-btn
319
+ class="screen-btn-ghost"
320
+ variant="outlined"
321
+ :disabled="submitting"
322
+ @click="dialogDeleteTask = false"
323
+ >
324
+ Cancel
325
+ </v-btn>
326
+ <v-btn
327
+ class="screen-btn-primary"
328
+ variant="flat"
329
+ :loading="submitting"
330
+ @click="_deleteScheduleTask"
331
+ >
332
+ Delete
333
+ </v-btn>
334
+ </div>
345
335
  </v-card>
346
336
  </v-dialog>
347
337
 
@@ -141,51 +141,39 @@
141
141
  </HygieneUpdateMoreAction>
142
142
  </v-dialog>
143
143
 
144
- <v-dialog v-model="dialogDeleteUnit" max-width="450">
145
- <v-card>
146
- <v-toolbar>
147
- <v-row no-gutters class="fill-height px-6" align="center">
148
- <span class="font-weight-bold text-h6 text-capitalize">
149
- Delete {{ selectedUnit?.name || "Unit" }}
150
- </span>
151
- </v-row>
152
- </v-toolbar>
153
- <v-card-text>
154
- <span class="text-subtitle-2"
155
- >Are you sure you want to delete this unit?</span
156
- >
144
+ <!--
145
+ Was a `v-toolbar` title bar over a toolbar footer of two block buttons, the
146
+ confirm one on `color="black"` - not a token, so it drew a light-theme fill
147
+ on the dark theme. The shared confirmation shape now.
148
+ -->
149
+ <v-dialog v-model="dialogDeleteUnit" max-width="520">
150
+ <v-card class="screen-modal">
151
+ <v-card-title class="text-capitalize">
152
+ Delete {{ selectedUnit?.name || "Unit" }}
153
+ </v-card-title>
154
+
155
+ <v-card-text class="screen-modal__body">
156
+ Are you sure you want to delete this unit?
157
157
  </v-card-text>
158
158
 
159
- <v-toolbar class="pa-0" density="compact">
160
- <v-row no-gutters>
161
- <v-col cols="6" class="pa-0">
162
- <v-btn
163
- block
164
- variant="text"
165
- class="text-none"
166
- size="large"
167
- @click="dialogDeleteUnit = false"
168
- height="48"
169
- >
170
- Cancel
171
- </v-btn>
172
- </v-col>
173
-
174
- <v-col cols="6" class="pa-0">
175
- <v-btn
176
- block
177
- variant="flat"
178
- color="black"
179
- class="text-none font-weight-bold"
180
- height="48"
181
- :loading="submitting"
182
- @click="_deleteUnit"
183
- >
184
- Delete
185
- </v-btn>
186
- </v-col>
187
- </v-row>
188
- </v-toolbar>
159
+ <div class="screen-modal__footer">
160
+ <v-btn
161
+ class="screen-btn-ghost"
162
+ variant="outlined"
163
+ :disabled="submitting"
164
+ @click="dialogDeleteUnit = false"
165
+ >
166
+ Cancel
167
+ </v-btn>
168
+ <v-btn
169
+ class="screen-btn-primary"
170
+ variant="flat"
171
+ :loading="submitting"
172
+ @click="_deleteUnit"
173
+ >
174
+ Delete
175
+ </v-btn>
176
+ </div>
189
177
  </v-card>
190
178
  </v-dialog>
191
179
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@7365admin1/layer-common",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
- "version": "3.2.2-staging.129",
5
+ "version": "3.2.2-staging.130",
6
6
  "author": "7365admin1",
7
7
  "main": "./nuxt.config.ts",
8
8
  "//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",