@7365admin1/layer-common 3.2.2-staging.110 → 3.2.2-staging.112
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/assets/css/primitives.css +6 -3
- package/assets/css/screens.css +94 -6
- package/components/AccessCardDeleteDialog.vue +41 -39
- package/components/AppButton.vue +2 -1
- package/components/AttendanceDetailsDialog.vue +57 -63
- package/components/ConfirmDialog.vue +14 -8
- package/components/Dialog/ReplaceAutofillPrompt.vue +19 -26
- package/components/Dialog/ReusablePrompt.vue +30 -29
- package/components/Dialog/UpdateMoreAction.vue +62 -59
- package/components/DocumentViewer.vue +29 -12
- package/components/OrgViewDialog.vue +34 -16
- package/components/PasswordConfirmation.vue +44 -26
- package/components/ScheduleTaskAreaFormDialog.vue +48 -51
- package/components/ScheduleTaskAreaUpdateMoreAction.vue +57 -62
- package/components/ServiceProviderInvitationPrompt.vue +48 -43
- package/package.json +1 -1
|
@@ -286,13 +286,16 @@
|
|
|
286
286
|
filter: none;
|
|
287
287
|
}
|
|
288
288
|
|
|
289
|
+
/* The design draws the ghost at the SAME size as the primary it stands next to
|
|
290
|
+
- Bulk Upload beside Add Unit, Scan QR Code beside Add Visitor are both
|
|
291
|
+
`height:40px; padding:0 16px; font-size:13.5px`, and only the fill, the
|
|
292
|
+
border and the weight differ. 38px / 0 14px / 13px was a smaller button than
|
|
293
|
+
the handoff asks for, and the 2px mismatch shows on every screen that draws
|
|
294
|
+
the pair. Height, padding and type therefore come from `.app-btn`. */
|
|
289
295
|
.app-btn--ghost {
|
|
290
|
-
height: 38px;
|
|
291
|
-
padding: 0 14px;
|
|
292
296
|
border: 1px solid var(--border);
|
|
293
297
|
background: var(--card);
|
|
294
298
|
color: var(--text2);
|
|
295
|
-
font-size: var(--fs-nav);
|
|
296
299
|
font-weight: var(--fw-btn);
|
|
297
300
|
}
|
|
298
301
|
|
package/assets/css/screens.css
CHANGED
|
@@ -242,9 +242,94 @@
|
|
|
242
242
|
font-size: var(--fs-cell);
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
/**
|
|
246
|
+
* ...and the same size again, because inside a real dialog the rule above
|
|
247
|
+
* never reached the glass. Vuetify scopes
|
|
248
|
+
*
|
|
249
|
+
* .v-dialog > .v-overlay__content > .v-card > .v-card-text { font-size: inherit }
|
|
250
|
+
*
|
|
251
|
+
* which is a FOUR-class chain against our one, so a `.screen-modal__body` in a
|
|
252
|
+
* `v-dialog` inherited the root 16px instead of the design's 13.5px --fs-cell.
|
|
253
|
+
* Measured on `AccessCardDeleteDialog`: 16px/400 where --fs-cell is 13.5px.
|
|
254
|
+
* It is invisible in a harness that mounts the card WITHOUT its dialog, which
|
|
255
|
+
* is how it survived. Naming the same chain plus the card's own class wins it
|
|
256
|
+
* back on specificity alone - no `!important`, same technique as the button
|
|
257
|
+
* height fix.
|
|
258
|
+
*/
|
|
259
|
+
.v-dialog > .v-overlay__content > .v-card.screen-modal > .screen-modal__body {
|
|
260
|
+
font-size: var(--fs-cell);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* The design's modal footer, literal from the prototype's Create Role dialog:
|
|
265
|
+
*
|
|
266
|
+
* <div style="display:flex;gap:10px;padding:16px 22px;
|
|
267
|
+
* border-top:1px solid var(--border)">
|
|
268
|
+
* <button style="flex:1; ...ghost">Cancel</button>
|
|
269
|
+
* <button style="flex:1; ...primary">Submit</button>
|
|
270
|
+
*
|
|
271
|
+
* Two EQUAL-WIDTH buttons on a bordered strip, ghost first. Stated once
|
|
272
|
+
* because the product opens confirm dialogs from a couple of dozen components
|
|
273
|
+
* and each of them was drawing its own footer by hand.
|
|
274
|
+
*/
|
|
275
|
+
.screen-modal__footer {
|
|
276
|
+
display: flex;
|
|
277
|
+
gap: 10px;
|
|
278
|
+
padding: 16px 22px;
|
|
279
|
+
border-top: 1px solid var(--border);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.screen-modal__footer > .v-btn,
|
|
283
|
+
.screen-modal__footer > .app-btn {
|
|
284
|
+
flex: 1;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* The modal's close control, literal from the same Create Role dialog:
|
|
289
|
+
*
|
|
290
|
+
* <button style="display:flex;align-items:center;justify-content:center;
|
|
291
|
+
* width:32px;height:32px;border:none;border-radius:8px;
|
|
292
|
+
* background:transparent;color:var(--muted);"
|
|
293
|
+
* style-hover="background:var(--hover)">close</button>
|
|
294
|
+
*
|
|
295
|
+
* Borderless and 32px square - NOT `.screen-icon-btn`, which is the bordered
|
|
296
|
+
* 40px square the design draws in a toolbar. The glyph is 19px.
|
|
297
|
+
*/
|
|
298
|
+
.screen-modal__close {
|
|
299
|
+
width: 32px;
|
|
300
|
+
height: 32px;
|
|
301
|
+
min-width: 32px;
|
|
302
|
+
border-radius: 8px;
|
|
303
|
+
background: transparent;
|
|
304
|
+
color: var(--muted);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.screen-modal__close:hover {
|
|
308
|
+
background: var(--hover);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.screen-modal__close .v-icon {
|
|
312
|
+
font-size: 19px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* The design's two buttons, for the dialogs and toolbars that draw their own.
|
|
317
|
+
*
|
|
318
|
+
* `.v-btn` is named on every selector below for SPECIFICITY, not decoration.
|
|
319
|
+
* Vuetify sizes its button from `--v-btn-height` (36px, set on
|
|
320
|
+
* `.v-btn--size-default`) and applies it at `.v-btn.v-btn--density-default` -
|
|
321
|
+
* two classes, which outrank a bare `.screen-btn-*`. So `height: var(--btn-h)`
|
|
322
|
+
* never reached the glass and EVERY one of these buttons drew at 36px against
|
|
323
|
+
* the design's 40. `min-width` lost the same argument at 64px.
|
|
324
|
+
*
|
|
325
|
+
* Beaten by specificity, not `!important` - the same way the central font
|
|
326
|
+
* re-point beat Vuetify's own font declarations. And the fix FEEDS
|
|
327
|
+
* `--v-btn-height` rather than overwriting `height`, so Vuetify's density
|
|
328
|
+
* arithmetic (including the icon button's `+12px`) keeps working off our number.
|
|
329
|
+
*/
|
|
330
|
+
.v-btn.screen-btn-primary {
|
|
331
|
+
--v-btn-height: var(--btn-h);
|
|
332
|
+
min-width: 0;
|
|
248
333
|
border-radius: var(--r-inner);
|
|
249
334
|
padding: 0 16px;
|
|
250
335
|
font-family: var(--font-sans);
|
|
@@ -269,10 +354,12 @@
|
|
|
269
354
|
* the input next to it - the same button Phase 2 gave the top bar - not a
|
|
270
355
|
* tinted pill.
|
|
271
356
|
*/
|
|
272
|
-
.screen-icon-btn {
|
|
357
|
+
.v-btn.screen-icon-btn {
|
|
358
|
+
--v-btn-height: var(--btn-h);
|
|
273
359
|
height: var(--btn-h);
|
|
274
360
|
width: var(--btn-h);
|
|
275
361
|
min-width: var(--btn-h);
|
|
362
|
+
padding: 0;
|
|
276
363
|
border-radius: var(--r-inner);
|
|
277
364
|
border: 1px solid var(--border);
|
|
278
365
|
background: var(--card);
|
|
@@ -283,8 +370,9 @@
|
|
|
283
370
|
opacity: 0;
|
|
284
371
|
}
|
|
285
372
|
|
|
286
|
-
.screen-btn-ghost {
|
|
287
|
-
height: var(--btn-h);
|
|
373
|
+
.v-btn.screen-btn-ghost {
|
|
374
|
+
--v-btn-height: var(--btn-h);
|
|
375
|
+
min-width: 0;
|
|
288
376
|
border-radius: var(--r-inner);
|
|
289
377
|
padding: 0 16px;
|
|
290
378
|
font-family: var(--font-sans);
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
<!-- 520px is the handoff's `--modal-w`; the card wears `.screen-modal` for
|
|
3
|
+
the 16px corner, the `--card` surface and the modal shadow. The two
|
|
4
|
+
`v-toolbar`s it used for the title row and the footer were grey slabs
|
|
5
|
+
that stay grey on the dark theme - a `v-card-title` and the shared
|
|
6
|
+
`.screen-modal__footer` are the same rows on the card's own surface. -->
|
|
7
|
+
<v-dialog :model-value="modelValue" width="520" persistent>
|
|
8
|
+
<v-card class="screen-modal" width="100%">
|
|
9
|
+
<v-card-title>Delete Card</v-card-title>
|
|
7
10
|
|
|
8
|
-
<v-card-text>
|
|
9
|
-
<p class="text-
|
|
11
|
+
<v-card-text class="screen-modal__body">
|
|
12
|
+
<p class="text-center mb-4">
|
|
10
13
|
Are you sure you want to delete this card? This action cannot be
|
|
11
14
|
undone.
|
|
12
15
|
</p>
|
|
13
16
|
|
|
14
17
|
<v-form v-model="validForm" :disabled="loading">
|
|
15
18
|
<InputLabel class="text-capitalize font-weight-bold" title="Remarks" required />
|
|
19
|
+
<!-- Still a `v-textarea`, not an `AppField`: Delete Card is gated on
|
|
20
|
+
`validForm`, which only exists because this `:rules` runs.
|
|
21
|
+
`.filter-field` gives it the design's 10px corner and 13.5px
|
|
22
|
+
type without taking the validation away. -->
|
|
16
23
|
<v-textarea
|
|
17
24
|
v-model="remarks"
|
|
25
|
+
class="filter-field"
|
|
18
26
|
placeholder="Enter remarks..."
|
|
19
27
|
persistent-placeholder
|
|
20
28
|
rows="3"
|
|
@@ -29,38 +37,32 @@
|
|
|
29
37
|
</v-row>
|
|
30
38
|
</v-card-text>
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
>
|
|
59
|
-
Delete Card
|
|
60
|
-
</v-btn>
|
|
61
|
-
</v-col>
|
|
62
|
-
</v-row>
|
|
63
|
-
</v-toolbar>
|
|
40
|
+
<!-- The design's footer: two equal-width buttons, ghost then primary, on
|
|
41
|
+
a bordered strip. The confirming button was a hardcoded color="black"
|
|
42
|
+
fill - the same black on both themes. The handoff draws no
|
|
43
|
+
destructive button, so it takes the primary shape like every other
|
|
44
|
+
modal's confirm; the destructive-variant gap stays a design
|
|
45
|
+
decision. `loading` keeps it a v-btn: AppButton has no in-flight
|
|
46
|
+
state, and this is the only signal the delete is running. -->
|
|
47
|
+
<div class="screen-modal__footer">
|
|
48
|
+
<v-btn
|
|
49
|
+
variant="outlined"
|
|
50
|
+
class="screen-btn-ghost"
|
|
51
|
+
:disabled="loading"
|
|
52
|
+
@click="handleClose"
|
|
53
|
+
>
|
|
54
|
+
Close
|
|
55
|
+
</v-btn>
|
|
56
|
+
<v-btn
|
|
57
|
+
variant="flat"
|
|
58
|
+
class="screen-btn-primary"
|
|
59
|
+
:loading="loading"
|
|
60
|
+
:disabled="!validForm || loading"
|
|
61
|
+
@click="handleConfirm"
|
|
62
|
+
>
|
|
63
|
+
Delete Card
|
|
64
|
+
</v-btn>
|
|
65
|
+
</div>
|
|
64
66
|
</v-card>
|
|
65
67
|
</v-dialog>
|
|
66
68
|
</template>
|
package/components/AppButton.vue
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
Variants, straight from the handoff:
|
|
11
11
|
primary 40px pill-radius accent fill, 13.5px/800, white label
|
|
12
|
-
ghost
|
|
12
|
+
ghost 40px, 1px border, card fill, 13.5px/700 in `--text2` - the SAME
|
|
13
|
+
box as primary; the handoff differs only in fill, border and weight
|
|
13
14
|
icon 32px transparent square, 8px radius
|
|
14
15
|
row 30px bordered square - the `more_vert` at the end of a table row
|
|
15
16
|
-->
|
|
@@ -4,16 +4,14 @@
|
|
|
4
4
|
:max-width="attendance?.checkOut?.timestamp ? 900 : 500"
|
|
5
5
|
persistent
|
|
6
6
|
>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
</v-row>
|
|
14
|
-
</v-toolbar>
|
|
7
|
+
<!-- The card wears `.screen-modal` (16px corner, `--card`, the modal
|
|
8
|
+
shadow). The `v-toolbar` that stood in for the title row and the one
|
|
9
|
+
that stood in for the footer were both fixed grey slabs that stay grey
|
|
10
|
+
on the dark theme. -->
|
|
11
|
+
<v-card class="screen-modal">
|
|
12
|
+
<v-card-title class="text-capitalize">Attendance Details</v-card-title>
|
|
15
13
|
|
|
16
|
-
<v-card-text class="pa-6">
|
|
14
|
+
<v-card-text class="screen-modal__body pa-6">
|
|
17
15
|
<v-row v-if="attendance" dense>
|
|
18
16
|
<v-col :cols="attendance.checkOut?.timestamp ? 6 : 12">
|
|
19
17
|
<v-row dense>
|
|
@@ -21,14 +19,14 @@
|
|
|
21
19
|
<InputLabel title="Check In" />
|
|
22
20
|
</v-col>
|
|
23
21
|
<v-col cols="12" class="mb-1">
|
|
24
|
-
<span class="
|
|
22
|
+
<span class="att-dlg__time">{{
|
|
25
23
|
attendance.checkIn?.timestamp
|
|
26
24
|
? formatDate(attendance.checkIn.timestamp)
|
|
27
25
|
: "N/A"
|
|
28
26
|
}}</span>
|
|
29
27
|
</v-col>
|
|
30
28
|
<v-col cols="12" class="mb-2">
|
|
31
|
-
<span class="
|
|
29
|
+
<span class="screen-hint att-dlg__meta">
|
|
32
30
|
{{
|
|
33
31
|
attendance.checkIn?.location?.latitude &&
|
|
34
32
|
attendance.checkIn?.location?.longitude
|
|
@@ -38,29 +36,21 @@
|
|
|
38
36
|
</span>
|
|
39
37
|
</v-col>
|
|
40
38
|
<v-col cols="12">
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
>
|
|
39
|
+
<!-- Was an inline `border: 1px solid rgba(0,0,0,.12)` - a
|
|
40
|
+
literal black rule that is the same black on the dark
|
|
41
|
+
theme. `--border` is that rule in each theme, and the
|
|
42
|
+
frame takes the design's inner radius. -->
|
|
43
|
+
<div v-if="attendance.checkIn?.img" class="att-dlg__frame">
|
|
47
44
|
<v-img
|
|
48
45
|
:src="getFileUrl(attendance.checkIn.img)"
|
|
49
46
|
height="280"
|
|
50
47
|
width="100%"
|
|
51
48
|
cover
|
|
52
49
|
></v-img>
|
|
53
|
-
</
|
|
54
|
-
<v-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class="pa-8 text-center"
|
|
58
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12); height: 280px"
|
|
59
|
-
>
|
|
60
|
-
<span class="text-caption text-medium-emphasis"
|
|
61
|
-
>No image</span
|
|
62
|
-
>
|
|
63
|
-
</v-card>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="att-dlg__frame att-dlg__frame--empty pa-8 text-center" v-else>
|
|
52
|
+
<span class="screen-hint att-dlg__meta">No image</span>
|
|
53
|
+
</div>
|
|
64
54
|
</v-col>
|
|
65
55
|
</v-row>
|
|
66
56
|
</v-col>
|
|
@@ -71,12 +61,12 @@
|
|
|
71
61
|
<InputLabel title="Check Out" />
|
|
72
62
|
</v-col>
|
|
73
63
|
<v-col cols="12" class="mb-1">
|
|
74
|
-
<span class="
|
|
64
|
+
<span class="att-dlg__time">{{
|
|
75
65
|
formatDate(attendance.checkOut.timestamp)
|
|
76
66
|
}}</span>
|
|
77
67
|
</v-col>
|
|
78
68
|
<v-col cols="12" class="mb-2">
|
|
79
|
-
<span class="
|
|
69
|
+
<span class="screen-hint att-dlg__meta">
|
|
80
70
|
{{
|
|
81
71
|
attendance.checkOut?.location?.latitude &&
|
|
82
72
|
attendance.checkOut?.location?.longitude
|
|
@@ -86,29 +76,17 @@
|
|
|
86
76
|
</span>
|
|
87
77
|
</v-col>
|
|
88
78
|
<v-col cols="12">
|
|
89
|
-
<v-
|
|
90
|
-
v-if="attendance.checkOut?.img"
|
|
91
|
-
variant="outlined"
|
|
92
|
-
class="pa-0"
|
|
93
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12)"
|
|
94
|
-
>
|
|
79
|
+
<div v-if="attendance.checkOut?.img" class="att-dlg__frame">
|
|
95
80
|
<v-img
|
|
96
81
|
:src="getFileUrl(attendance.checkOut.img)"
|
|
97
82
|
height="280"
|
|
98
83
|
width="100%"
|
|
99
84
|
cover
|
|
100
85
|
></v-img>
|
|
101
|
-
</
|
|
102
|
-
<v-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class="pa-8 text-center"
|
|
106
|
-
style="border: 1px solid rgba(0, 0, 0, 0.12); height: 280px"
|
|
107
|
-
>
|
|
108
|
-
<span class="text-caption text-medium-emphasis"
|
|
109
|
-
>No image</span
|
|
110
|
-
>
|
|
111
|
-
</v-card>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="att-dlg__frame att-dlg__frame--empty pa-8 text-center" v-else>
|
|
88
|
+
<span class="screen-hint att-dlg__meta">No image</span>
|
|
89
|
+
</div>
|
|
112
90
|
</v-col>
|
|
113
91
|
</v-row>
|
|
114
92
|
</v-col>
|
|
@@ -121,22 +99,11 @@
|
|
|
121
99
|
</v-row>
|
|
122
100
|
</v-card-text>
|
|
123
101
|
|
|
124
|
-
<
|
|
125
|
-
<v-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
variant="text"
|
|
130
|
-
class="text-none"
|
|
131
|
-
size="large"
|
|
132
|
-
@click="close"
|
|
133
|
-
height="48"
|
|
134
|
-
>
|
|
135
|
-
Close
|
|
136
|
-
</v-btn>
|
|
137
|
-
</v-col>
|
|
138
|
-
</v-row>
|
|
139
|
-
</v-toolbar>
|
|
102
|
+
<div class="screen-modal__footer">
|
|
103
|
+
<v-btn variant="outlined" class="screen-btn-ghost" @click="close">
|
|
104
|
+
Close
|
|
105
|
+
</v-btn>
|
|
106
|
+
</div>
|
|
140
107
|
</v-card>
|
|
141
108
|
</v-dialog>
|
|
142
109
|
</template>
|
|
@@ -183,3 +150,30 @@ watch(showDialog, (newVal) => {
|
|
|
183
150
|
}
|
|
184
151
|
});
|
|
185
152
|
</script>
|
|
153
|
+
|
|
154
|
+
<style scoped>
|
|
155
|
+
/* `text-body-1` was 1rem/400 and `text-caption text-medium-emphasis` was
|
|
156
|
+
0.75rem on Vuetify's 60%-alpha ink. The handoff names no type for a
|
|
157
|
+
label/value detail row, so both take the established cell and hint. */
|
|
158
|
+
.att-dlg__time {
|
|
159
|
+
font-size: var(--fs-cell);
|
|
160
|
+
font-weight: var(--fw-cell);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.att-dlg__meta {
|
|
164
|
+
font-size: var(--fs-breadcrumb);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.att-dlg__frame {
|
|
168
|
+
border: 1px solid var(--border);
|
|
169
|
+
border-radius: var(--r-inner);
|
|
170
|
+
overflow: hidden;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.att-dlg__frame--empty {
|
|
174
|
+
height: 280px;
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
justify-content: center;
|
|
178
|
+
}
|
|
179
|
+
</style>
|
|
@@ -1,36 +1,42 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
<!-- 520px is the handoff's `--modal-w`; the card was `rounded-xl` (24px) on a
|
|
3
|
+
Material elevation, where the design draws a 16px corner and its own
|
|
4
|
+
modal shadow. -->
|
|
5
|
+
<v-dialog v-model="dialog" max-width="520" persistent>
|
|
6
|
+
<v-card class="screen-modal pa-6">
|
|
4
7
|
<!-- Close Button -->
|
|
5
8
|
<v-btn
|
|
6
9
|
icon
|
|
7
10
|
variant="text"
|
|
8
11
|
size="small"
|
|
9
|
-
class="position-absolute"
|
|
12
|
+
class="screen-modal__close position-absolute"
|
|
10
13
|
style="top: 8px; right: 8px"
|
|
11
14
|
@click="closeDialog"
|
|
12
15
|
>
|
|
13
16
|
<v-icon>mdi-close</v-icon>
|
|
14
17
|
</v-btn>
|
|
15
18
|
|
|
16
|
-
<v-card-text class="text-center">
|
|
19
|
+
<v-card-text class="screen-modal__body text-center">
|
|
17
20
|
<v-row v-if="imageSrc" justify="center" class="py-10">
|
|
18
21
|
<v-img height="120" :src="imageSrc" alt="Dialog Image" contain />
|
|
19
22
|
</v-row>
|
|
20
23
|
|
|
21
|
-
<!-- Title Slot
|
|
22
|
-
|
|
24
|
+
<!-- Title Slot. The handoff's 17px/800 modal title belongs to a
|
|
25
|
+
bordered header row this dialog does not draw - a centred title
|
|
26
|
+
inside the body is a case it is silent on, so it takes the
|
|
27
|
+
established `.screen-card-title` primitive. -->
|
|
28
|
+
<div class="screen-card-title mb-2">
|
|
23
29
|
<slot name="title"></slot>
|
|
24
30
|
</div>
|
|
25
31
|
|
|
26
32
|
<!-- Description Slot -->
|
|
27
|
-
<div class="
|
|
33
|
+
<div class="mb-4">
|
|
28
34
|
<slot name="description"></slot>
|
|
29
35
|
</div>
|
|
30
36
|
</v-card-text>
|
|
31
37
|
|
|
32
38
|
<!-- Footer Slot -->
|
|
33
|
-
<v-card-actions>
|
|
39
|
+
<v-card-actions class="screen-modal__footer">
|
|
34
40
|
<slot name="footer"></slot>
|
|
35
41
|
</v-card-actions>
|
|
36
42
|
</v-card>
|
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-card width="100%" :disabled="loading" :loading="loading">
|
|
3
|
-
<v-card-text
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
</span>
|
|
10
|
-
</v-col>
|
|
11
|
-
</v-row>
|
|
2
|
+
<v-card class="screen-modal" width="100%" :disabled="loading" :loading="loading">
|
|
3
|
+
<v-card-text class="screen-modal__body pa-5 my-5 px-7 text-center">
|
|
4
|
+
<span class="screen-card-title d-block">{{ promptTitle }}</span>
|
|
5
|
+
|
|
6
|
+
<span class="d-block mt-5">
|
|
7
|
+
By proceeding, your previous user inputs will be replaced.
|
|
8
|
+
</span>
|
|
12
9
|
</v-card-text>
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
<!-- The design's footer: two equal-width buttons, ghost then primary,
|
|
12
|
+
on a bordered strip. Replaces the `v-toolbar` of two square 48px
|
|
13
|
+
tiles, whose Proceed was a hardcoded `color="black"` fill. -->
|
|
14
|
+
<div class="screen-modal__footer">
|
|
15
|
+
<v-btn class="screen-btn-ghost" variant="outlined" @click="emit('close')">
|
|
16
|
+
Cancel
|
|
17
|
+
</v-btn>
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
</v-btn>
|
|
27
|
-
</v-col>
|
|
28
|
-
</v-row>
|
|
29
|
-
</v-toolbar>
|
|
19
|
+
<v-btn class="screen-btn-primary" variant="flat" @click="emit('proceed')">
|
|
20
|
+
Proceed
|
|
21
|
+
</v-btn>
|
|
22
|
+
</div>
|
|
30
23
|
</v-card>
|
|
31
24
|
</template>
|
|
32
25
|
|
|
@@ -46,4 +39,4 @@ const emit = defineEmits(["close", "proceed"])
|
|
|
46
39
|
|
|
47
40
|
</script>
|
|
48
41
|
|
|
49
|
-
<style scoped></style>
|
|
42
|
+
<style scoped></style>
|
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-card width="100%" :disabled="loading" :loading="loading">
|
|
3
|
-
<v-card-text
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<span >
|
|
10
|
-
{{ message }}
|
|
11
|
-
</span>
|
|
12
|
-
</v-col>
|
|
13
|
-
</v-row>
|
|
2
|
+
<v-card class="screen-modal" width="100%" :disabled="loading" :loading="loading">
|
|
3
|
+
<v-card-text class="screen-modal__body pa-5 my-5 px-7 text-center">
|
|
4
|
+
<span class="screen-card-title d-block">{{ promptTitle }}</span>
|
|
5
|
+
|
|
6
|
+
<span v-if="message" class="d-block mt-5">
|
|
7
|
+
{{ message }}
|
|
8
|
+
</span>
|
|
14
9
|
</v-card-text>
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
<!-- The design's footer: two equal-width buttons, ghost then primary,
|
|
12
|
+
on a bordered strip. -->
|
|
13
|
+
<div class="screen-modal__footer">
|
|
14
|
+
<v-btn class="screen-btn-ghost" variant="outlined" @click="emit('close')">
|
|
15
|
+
Cancel
|
|
16
|
+
</v-btn>
|
|
17
|
+
|
|
18
|
+
<!-- The old default was a hardcoded `color="black"` fill, which is
|
|
19
|
+
the same black on the dark theme as on the light one. With no
|
|
20
|
+
colour asked for, the confirming action now takes the design's
|
|
21
|
+
primary shape like every other modal's Submit.
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
A caller that DOES name a colour keeps it: `NumberSettingField`
|
|
24
|
+
passes `red` to mark a destructive confirm, and the handoff
|
|
25
|
+
draws no destructive button, so overriding it here would be
|
|
26
|
+
inventing a control the design never named. Left as it renders
|
|
27
|
+
today and raised for a design decision. -->
|
|
28
|
+
<v-btn :class="confirmButtonColor ? 'text-none' : 'screen-btn-primary'"
|
|
29
|
+
variant="flat" :color="confirmButtonColor || undefined" @click="emit('proceed')">
|
|
30
|
+
{{ confirmLabel }}
|
|
31
|
+
</v-btn>
|
|
32
|
+
</div>
|
|
32
33
|
</v-card>
|
|
33
34
|
</template>
|
|
34
35
|
|
|
@@ -52,7 +53,7 @@ const props = defineProps({
|
|
|
52
53
|
},
|
|
53
54
|
confirmButtonColor: {
|
|
54
55
|
type: String,
|
|
55
|
-
default: "
|
|
56
|
+
default: ""
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
})
|
|
@@ -61,4 +62,4 @@ const emit = defineEmits(["close", "proceed"])
|
|
|
61
62
|
|
|
62
63
|
</script>
|
|
63
64
|
|
|
64
|
-
<style scoped></style>
|
|
65
|
+
<style scoped></style>
|