@7365admin1/layer-common 3.2.2-staging.111 → 3.2.2-staging.113

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.
@@ -1,20 +1,17 @@
1
1
  <template>
2
- <v-card width="100%">
3
- <v-toolbar>
4
- <v-row no-gutters class="fill-height px-6" align="center">
5
- <span class="font-weight-bold text-h5 text-capitalize">
6
- {{ prop.mode }} Block {{ (prop.mode === "edit" && building.block) ? `- ${building.block}` : "" }}
7
- </span>
8
- </v-row>
9
- </v-toolbar>
10
- <v-card-text style="max-height: 100vh; overflow-y: auto" class="pa-0">
2
+ <v-card width="100%" class="screen-modal">
3
+ <v-card-title class="text-capitalize">
4
+ {{ prop.mode }} Block {{ (prop.mode === "edit" && building.block) ? `- ${building.block}` : "" }}
5
+ </v-card-title>
6
+
7
+ <v-card-text class="screen-modal__body pa-0">
11
8
  <v-form v-model="validForm" :disabled="disable">
12
9
  <v-row no-gutters class="px-6 pt-4">
13
10
  <v-col cols="12" class="mt-2">
14
11
  <v-row no-gutters>
15
12
  <InputLabel class="text-capitalize font-weight-bold" title="Block Name" required />
16
13
  <v-col cols="12">
17
- <v-text-field v-model="building.name" density="comfortable" :rules="[requiredRule]"></v-text-field>
14
+ <v-text-field v-model="building.name" class="filter-field" density="comfortable" :rules="[requiredRule]"></v-text-field>
18
15
  </v-col>
19
16
  </v-row>
20
17
  </v-col>
@@ -26,7 +23,7 @@
26
23
  <InputLabel class="text-capitalize font-weight-bold" title="Block No." required />
27
24
  <v-col cols="12">
28
25
  <v-select v-model.number="building.block" :items="blocks" item-title="label" item-value="value"
29
- density="comfortable" :rules="[
26
+ class="filter-field" density="comfortable" :rules="[
30
27
  requiredRule,
31
28
  () =>
32
29
  (building.block && building.block > 0) ||
@@ -45,7 +42,7 @@
45
42
  <v-row no-gutters>
46
43
  <InputLabel class="text-capitalize font-weight-bold" title="No. of Levels" required />
47
44
  <v-col cols="12">
48
- <v-text-field v-model.number="buildingLevels" density="comfortable" :rules="[requiredRule]"
45
+ <v-text-field v-model.number="buildingLevels" class="filter-field" density="comfortable" :rules="[requiredRule]"
49
46
  type="number" @update:model-value="setBuildingLevels()"></v-text-field>
50
47
  </v-col>
51
48
  </v-row>
@@ -73,7 +70,7 @@
73
70
  <v-col cols="12">
74
71
  <v-row no-gutters>
75
72
  <v-col :cols="prop.mode === 'edit' ? 10 : 12">
76
- <v-text-field v-model.trim="building.levels[levelIndex].name" density="comfortable"></v-text-field>
73
+ <v-text-field v-model.trim="building.levels[levelIndex].name" class="filter-field" density="comfortable"></v-text-field>
77
74
  </v-col>
78
75
  <v-col v-if="prop.mode === 'edit'" cols="2" class="d-flex align-center pb-5 justify-end">
79
76
  <v-btn icon variant="text" color="error" :disabled="disable"
@@ -92,7 +89,7 @@
92
89
  <v-row no-gutters class="px-6 w-100">
93
90
  <v-row no-gutters v-for="(newLevelsItem, index) in newLevelsArray" :key="index" :cols="12" class="w-100">
94
91
  <v-col :cols="prop.mode === 'edit' ? 10 : 12">
95
- <v-text-field v-model.trim="newLevelsArray[index]" density="comfortable"></v-text-field>
92
+ <v-text-field v-model.trim="newLevelsArray[index]" class="filter-field" density="comfortable"></v-text-field>
96
93
  </v-col>
97
94
  <v-col v-if="prop.mode === 'edit'" cols="2" class="d-flex align-center pb-5 justify-end">
98
95
  <v-btn icon variant="text" color="error" @click="newLevelsArray.splice(index, 1)">
@@ -104,7 +101,7 @@
104
101
 
105
102
  <v-row v-if="prop.mode === 'edit'" no-gutters class="px-6 w-100">
106
103
  <v-col cols="10">
107
- <v-text-field v-model.trim="activeNewLevelInput" density="comfortable" class="w-100"
104
+ <v-text-field v-model.trim="activeNewLevelInput" class="filter-field w-100" density="comfortable"
108
105
  placeholder="Add new level" @click="addNewLevelErrorMessage = ''"></v-text-field>
109
106
  </v-col>
110
107
  <v-col cols="2" class="d-flex align-center pb-5 justify-end">
@@ -150,22 +147,22 @@
150
147
  </v-form>
151
148
  </v-card-text>
152
149
 
153
- <v-toolbar density="compact">
150
+ <v-card-actions class="screen-modal__footer">
154
151
  <v-row no-gutters>
155
- <v-col cols="6">
156
- <v-btn tile block variant="text" class="text-none" size="48" @click="cancel" :disabled="disable">
152
+ <v-col cols="6" class="pr-2">
153
+ <v-btn block variant="outlined" class="text-none screen-btn-ghost" @click="cancel" :disabled="disable">
157
154
  Cancel
158
155
  </v-btn>
159
156
  </v-col>
160
157
 
161
- <v-col cols="6">
162
- <v-btn tile block variant="flat" color="black" class="text-none" size="48" :disabled="!validForm || disable"
158
+ <v-col cols="6" class="pl-2">
159
+ <v-btn block variant="flat" class="text-none screen-btn-primary" :disabled="!validForm || disable"
163
160
  @click="submit" :loading="disable">
164
161
  Submit
165
162
  </v-btn>
166
163
  </v-col>
167
164
  </v-row>
168
- </v-toolbar>
165
+ </v-card-actions>
169
166
 
170
167
  <ConfirmDialog v-model="confirmDeleteLevelDialog" :loading="loading.deletingLevel" width="450" persistent>
171
168
  <template #title>
@@ -178,16 +175,24 @@
178
175
 
179
176
  <template #footer>
180
177
  <v-row no-gutters class="w-100">
181
- <v-col cols="6">
182
- <v-btn tile block size="48" variant="text" class="text-none" :disabled="loading.deletingLevel"
178
+ <v-col cols="6" class="pr-2">
179
+ <v-btn block variant="outlined" class="text-none screen-btn-ghost" :disabled="loading.deletingLevel"
183
180
  @click="closeDeleteLevelPrompt">
184
181
  Cancel
185
182
  </v-btn>
186
183
  </v-col>
187
184
 
188
- <v-col cols="6">
189
- <v-btn tile block size="48" variant="flat" color="error" class="text-none" :loading="loading.deletingLevel"
190
- :disabled="loading.deletingLevel" @click="confirmDeleteLevel">
185
+ <v-col cols="6" class="pl-2">
186
+ <!-- Left on Vuetify's own error fill, deliberately. It must NOT
187
+ take `.screen-btn-primary` - that class sets `background` and
188
+ would repaint a delete button accent blue. And the handoff
189
+ draws no modal, so it specifies no destructive button: making
190
+ one out of `--err` puts white on a token that LIGHTENS in dark
191
+ theme, which measured 2.99:1 - the same fill-used-as-ink trap
192
+ as the Upload button. So this keeps today's appearance and only
193
+ loses the 40px height. A destructive button needs a spec. -->
194
+ <v-btn block variant="flat" color="error" class="text-none"
195
+ :loading="loading.deletingLevel" :disabled="loading.deletingLevel" @click="confirmDeleteLevel">
191
196
  Delete
192
197
  </v-btn>
193
198
  </v-col>
@@ -1,18 +1,14 @@
1
1
  <template>
2
2
  <v-card
3
+ class="screen-modal"
3
4
  width="100%"
4
5
  :loading="loading.processing"
5
6
  :disabled="loading.processing || getAnnouncementByIdPending"
6
7
  :key="`form-key-${formKey}`"
7
8
  >
8
- <v-toolbar>
9
- <v-row no-gutters class="fill-height px-6" align="center">
10
- <span class="font-weight-bold text-h5 text-capitalize">
11
- {{ prop.mode }} Announcement
12
- </span>
13
- </v-row>
14
- </v-toolbar>
15
- <v-card-text style="max-height: 100vh; overflow-y: auto" class="pa-6">
9
+ <v-card-title class="text-capitalize">{{ prop.mode }} Announcement</v-card-title>
10
+
11
+ <v-card-text class="screen-modal__body pa-6">
16
12
  <v-form
17
13
  ref="formRef"
18
14
  v-model="validForm"
@@ -61,7 +57,7 @@
61
57
  density="compact"
62
58
  color="transparent"
63
59
  flat
64
- class="ml-3 text-black"
60
+ class="ml-3"
65
61
  @mousedown.stop
66
62
  @click.stop="handleRemoveRecipient(item)"
67
63
  />
@@ -112,10 +108,14 @@
112
108
  >Attachments</v-col
113
109
  >
114
110
  <v-col cols="12">
111
+ <!-- Was `color="primary-button"` on an OUTLINED button, i.e. a
112
+ FILL token used as ink - the exact case `utils/theme.ts`
113
+ warns about. Measured 3.64:1 on the dark card, under AA. It
114
+ is a secondary action, so it takes the design's ghost
115
+ button, whose `--text2` ink is readable in both themes. -->
115
116
  <v-btn
116
117
  text="Upload"
117
- class="text-capitalize"
118
- color="primary-button"
118
+ class="text-capitalize screen-btn-ghost"
119
119
  variant="outlined"
120
120
  min-width="150"
121
121
  @click="handleUpload"
@@ -161,34 +161,29 @@
161
161
  {{ errorMessage }}
162
162
  </p>
163
163
  </v-row>
164
- <v-toolbar density="compact">
164
+ <v-card-actions class="screen-modal__footer">
165
165
  <v-row no-gutters>
166
- <v-col cols="6">
166
+ <v-col cols="6" class="pr-2">
167
167
  <v-btn
168
- tile
169
168
  block
170
- variant="text"
171
- class="text-none"
172
- size="48"
169
+ variant="outlined"
170
+ class="text-none screen-btn-ghost"
173
171
  @click="close"
174
172
  text="Close"
175
173
  />
176
174
  </v-col>
177
- <v-col cols="6">
175
+ <v-col cols="6" class="pl-2">
178
176
  <v-btn
179
- tile
180
177
  block
181
178
  variant="flat"
182
- color="primary-button"
183
- class="text-none"
184
- size="48"
179
+ class="text-none screen-btn-primary"
185
180
  :text="prop.mode === 'add' ? 'Add Bulletin' : 'Save'"
186
181
  :disabled="loading.processing || !validForm"
187
182
  @click="onSubmit"
188
183
  />
189
184
  </v-col>
190
185
  </v-row>
191
- </v-toolbar>
186
+ </v-card-actions>
192
187
  </v-card>
193
188
  </template>
194
189
 
@@ -1,20 +1,15 @@
1
1
  <template>
2
- <v-card width="100%">
3
- <v-toolbar>
4
- <v-row no-gutters class="fill-height px-6" align="center">
5
- <span class="font-weight-bold text-h5 text-capitalize">
6
- {{ title }}
7
- </span>
8
- </v-row>
9
- </v-toolbar>
2
+ <v-card width="100%" class="screen-modal">
3
+ <v-card-title class="text-capitalize">{{ title }}</v-card-title>
10
4
 
11
- <v-card-text style="max-height: 100vh; overflow-y: auto" class="pa-5 my-5">
5
+ <v-card-text class="screen-modal__body pa-5">
12
6
  <v-form ref="formRef" v-model="validForm" :disabled="disable">
13
7
  <v-row no-gutters class="pt-4">
14
8
  <v-col v-if="isCCTV" cols="12">
15
9
  <InputLabel class="text-capitalize" title="Camera Name" required />
16
10
  <v-text-field
17
11
  v-model.trim="camera.name"
12
+ class="filter-field"
18
13
  density="comfortable"
19
14
  :rules="[requiredRule]"
20
15
  placeholder="Enter CCTV camera name"
@@ -24,6 +19,7 @@
24
19
  <InputLabel class="text-capitalize" title="URL" required />
25
20
  <v-text-field
26
21
  v-model.trim="camera.host"
22
+ class="filter-field"
27
23
  density="comfortable"
28
24
  :rules="[requiredRule, hostRule]"
29
25
  placeholder="Enter camera URL"
@@ -35,6 +31,7 @@
35
31
  <v-select
36
32
  v-model="camera.category"
37
33
  :items="anprCategoryOptions"
34
+ class="filter-field"
38
35
  density="comfortable"
39
36
  :rules="[requiredRule]"
40
37
  />
@@ -45,6 +42,7 @@
45
42
  <v-select
46
43
  v-model="camera.direction"
47
44
  :items="anprDirectionOptions"
45
+ class="filter-field"
48
46
  density="comfortable"
49
47
  :rules="[requiredRule]"
50
48
  />
@@ -55,6 +53,7 @@
55
53
  <v-select
56
54
  v-model="camera.guardPost"
57
55
  :items="guardPostOptions"
56
+ class="filter-field"
58
57
  density="comfortable"
59
58
  />
60
59
  </v-col> -->
@@ -63,6 +62,7 @@
63
62
  <InputLabel class="text-capitalize" title="User" required />
64
63
  <v-text-field
65
64
  v-model.trim="camera.username"
65
+ class="filter-field"
66
66
  density="comfortable"
67
67
  :rules="[requiredRule]"
68
68
  placeholder="Enter username"
@@ -74,6 +74,7 @@
74
74
  <v-text-field
75
75
  v-model.trim="camera.password"
76
76
  type="password"
77
+ class="filter-field"
77
78
  density="comfortable"
78
79
  :rules="[requiredRule]"
79
80
  placeholder="Enter password"
@@ -86,6 +87,7 @@
86
87
  v-model="camera.status"
87
88
  hide-details
88
89
  inset
90
+ class="filter-field"
89
91
  density="comfortable"
90
92
  true-value="active"
91
93
  false-value="inactive"
@@ -97,27 +99,24 @@
97
99
  </v-form>
98
100
  </v-card-text>
99
101
 
100
- <v-toolbar density="compact">
102
+ <!-- Was a `v-toolbar`: a grey slab with square (`tile`) buttons and a
103
+ hardcoded `color="black"` primary. The gate on Submit is unchanged. -->
104
+ <v-card-actions class="screen-modal__footer">
101
105
  <v-row no-gutters>
102
- <v-col cols="6">
106
+ <v-col cols="6" class="pr-2">
103
107
  <v-btn
104
- tile
105
108
  block
106
- variant="text"
107
- class="text-none"
108
- size="48"
109
+ variant="outlined"
110
+ class="text-none screen-btn-ghost"
109
111
  @click="back"
110
112
  text="Cancel"
111
113
  />
112
114
  </v-col>
113
- <v-col cols="6">
115
+ <v-col cols="6" class="pl-2">
114
116
  <v-btn
115
- tile
116
117
  block
117
118
  variant="flat"
118
- color="black"
119
- class="text-none"
120
- size="48"
119
+ class="text-none screen-btn-primary"
121
120
  :disabled="!validForm || disable || !hasChanges"
122
121
  @click="submit"
123
122
  :loading="disable"
@@ -125,7 +124,7 @@
125
124
  />
126
125
  </v-col>
127
126
  </v-row>
128
- </v-toolbar>
127
+ </v-card-actions>
129
128
  </v-card>
130
129
  </template>
131
130
 
@@ -1,36 +1,42 @@
1
1
  <template>
2
- <v-dialog v-model="dialog" max-width="400" persistent>
3
- <v-card class="rounded-xl pa-6" elevation="2">
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
- <div class="text-h6 font-weight-medium mb-2">
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="text-body-1 mb-4">
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 style="max-height: 100vh; overflow-y: auto" class="pa-5 my-5 px-7 text-center">
4
- <v-row no-gutters>
5
- <v-col cols="12" class="font-weight-bold text-h6">{{ promptTitle }}</v-col>
6
- <v-col cols="12" class="mt-5">
7
- <span>
8
- By proceeding, your previous user inputs will be replaced.
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
- <v-toolbar class="pa-0" density="compact">
15
- <v-row no-gutters>
16
- <v-col cols="6" class="pa-0">
17
- <v-btn block variant="text" class="text-none" size="large" tile @click="emit('close')" height="48">
18
- Cancel
19
- </v-btn>
20
- </v-col>
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
- <v-col cols="6" class="pa-0">
23
- <v-btn block tile variant="flat" class="text-none" size="large" height="48" color="black"
24
- @click="emit('proceed')">
25
- Proceed
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 style="max-height: 100vh; overflow-y: auto" class="pa-5 my-5 px-7 text-center">
4
- <v-row no-gutters>
5
- <v-col cols="12" class="text-h6 font-weight-bold">
6
- <span class=""> {{ promptTitle }}</span>
7
- </v-col>
8
- <v-col v-if="message" cols="12" class="mt-5">
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
- <v-toolbar class="pa-0" density="compact">
17
- <v-row no-gutters>
18
- <v-col cols="6" class="pa-0">
19
- <v-btn block variant="text" class="text-none" size="large" tile @click="emit('close')" height="48">
20
- Cancel
21
- </v-btn>
22
- </v-col>
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
- <v-col cols="6" class="pa-0">
25
- <v-btn block tile variant="flat" class="text-none" size="large" height="48"
26
- :color="confirmButtonColor" @click="emit('proceed')">
27
- {{ confirmLabel }}
28
- </v-btn>
29
- </v-col>
30
- </v-row>
31
- </v-toolbar>
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: "black"
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>