@7365admin1/layer-common 3.2.1-staging.72 → 3.2.2
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/CHANGELOG.md +39 -0
- package/components/EntryPassInformation.vue +4 -4
- package/components/FeedbackMain.vue +7 -7
- package/components/HidAccessLogDashboard.vue +44 -119
- package/components/HidIdentityMapping.vue +975 -0
- package/components/HidIntercomManagement.vue +201 -808
- package/components/HidQrCodeConfiguration.vue +95 -907
- package/components/HidServiceSettingsPanel.vue +1 -20
- package/components/HidUserEnrollment.vue +81 -392
- package/components/Layout/NavigationDrawer.vue +2 -43
- package/components/NavigationItem.vue +0 -9
- package/components/Nfc/NFCPatrolRouteMain.vue +7 -52
- package/components/OnlineFormConfigurationForm.vue +224 -620
- package/components/OnlineFormFill.vue +8 -36
- package/components/OnlineFormsConfiguration.vue +2 -6
- package/components/QrTemplate/CreditCardLandscape.vue +12 -19
- package/components/QrTemplate/PrintDialog.vue +196 -209
- package/components/SiteSettings.vue +2 -4
- package/components/VisitorForm.vue +78 -201
- package/components/VisitorManagement.vue +2 -1
- package/composables/useComment.ts +3 -3
- package/composables/useHidAmico.ts +0 -127
- package/composables/useHidNavigation.ts +7 -0
- package/composables/useOnlineFormPages.ts +0 -2
- package/composables/useSiteSettings.ts +0 -50
- package/composables/useWebUsb.ts +37 -127
- package/middleware/member.ts +4 -0
- package/package.json +1 -2
- package/pages/[org]/[site]/access-mgmt/identity-mapping/index.vue +23 -0
- package/pages/[org]/[site]/access-mgmt/intercom/index.vue +1 -1
- package/plugins/secure-member.client.ts +56 -21
- package/plugins/vuetify.ts +9 -37
- package/types/site.d.ts +0 -71
- package/.changeset/camera-wall-gated-endpoint.md +0 -47
- package/.changeset/camera-wall-plain-english.md +0 -60
- package/.changeset/camera-wall-selection-and-guidance.md +0 -65
- package/.changeset/dark-primary-contrast.md +0 -39
- package/components/CameraWall.vue +0 -1034
- package/components/CameraWallTile.vue +0 -818
- package/components/HidCameraCaptureDialog.vue +0 -199
- package/composables/useSipWebPhone.ts +0 -311
- package/utils/camera-wall.test.ts +0 -571
- package/utils/camera-wall.ts +0 -926
- package/utils/theme.test.ts +0 -201
- package/utils/theme.ts +0 -136
|
@@ -1,41 +1,9 @@
|
|
|
1
1
|
<!-- LayoutNavigationDrawer.vue -->
|
|
2
2
|
<template>
|
|
3
|
-
|
|
4
|
-
`bg-brand-surface`, not `bg-primary`: `primary` is a foreground colour on a
|
|
5
|
-
dark page (it has to carry `class="text-primary"` sentences at 4.5:1), and a
|
|
6
|
-
fill that carries a label cannot also be that. `brand-surface` is a real
|
|
7
|
-
surface in each theme - see `utils/theme.ts` - so the drawer belongs to the
|
|
8
|
-
application it is in rather than being the one panel the theme switch never
|
|
9
|
-
reached. Its label reads 15.43:1 light, 13.21:1 dark.
|
|
10
|
-
|
|
11
|
-
NO HARDCODED LABEL COLOUR ANYWHERE IN HERE. Vuetify paints the drawer with
|
|
12
|
-
`on-brand-surface` and the list inside it inherits that through
|
|
13
|
-
`bg-transparent`, which the drawer supplies to every `v-list` it contains.
|
|
14
|
-
A `text-white` in here (or in an app's `#action` / `#services` slot) is
|
|
15
|
-
white on a light rail at 1.13:1.
|
|
16
|
-
|
|
17
|
-
`floating` dropped so the drawer draws its own edge, and the three
|
|
18
|
-
opacities below are raised on this element only:
|
|
19
|
-
|
|
20
|
-
- `border-opacity` 0.45. A surface is a low-contrast panel by design
|
|
21
|
-
(1.13:1 light, 1.19:1 dark against the page), so the edge is what carries
|
|
22
|
-
the boundary: 3.27:1 light, 4.33:1 dark. The theme-wide value stays where
|
|
23
|
-
it is; raising that would redraw every table and card edge in eleven
|
|
24
|
-
applications.
|
|
25
|
-
- `hover-opacity` 0.08. Material's 0.04 is 1.11:1 on this rail, which is
|
|
26
|
-
not feedback. 0.08 is 1.17:1 light, 1.24:1 dark.
|
|
27
|
-
- `activated-opacity` 0.18. The active item is `primary` text on a
|
|
28
|
-
primary-tinted fill (see `NavigationItem.vue`); 0.12 left the fill at
|
|
29
|
-
1.15:1, 0.18 is 1.44:1 light, 1.33:1 dark.
|
|
30
|
-
-->
|
|
31
|
-
<v-navigation-drawer
|
|
32
|
-
v-model="drawer"
|
|
33
|
-
permanent
|
|
34
|
-
class="bg-brand-surface brand-drawer"
|
|
35
|
-
>
|
|
3
|
+
<v-navigation-drawer v-model="drawer" permanent floating class="bg-primary">
|
|
36
4
|
<v-list>
|
|
37
5
|
<v-list-item>
|
|
38
|
-
<v-list-item-title class="text-h6">
|
|
6
|
+
<v-list-item-title class="text-h6 text-white">
|
|
39
7
|
{{ props.title || APP_NAME }}
|
|
40
8
|
</v-list-item-title>
|
|
41
9
|
</v-list-item>
|
|
@@ -123,12 +91,3 @@ const handleClick = (item: any) => {
|
|
|
123
91
|
emit("navigate", item);
|
|
124
92
|
};
|
|
125
93
|
</script>
|
|
126
|
-
|
|
127
|
-
<style scoped>
|
|
128
|
-
/* Scoped to the drawer: none of these reach the rest of the application. */
|
|
129
|
-
.brand-drawer {
|
|
130
|
-
--v-border-opacity: 0.45;
|
|
131
|
-
--v-hover-opacity: 0.08;
|
|
132
|
-
--v-activated-opacity: 0.18;
|
|
133
|
-
}
|
|
134
|
-
</style>
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
`color="primary"` is applied by Vuetify only while the item is active, so the
|
|
3
|
-
page you are on is named by colour and not just by a 1.15:1 tint you cannot
|
|
4
|
-
see. `primary` reads 14.56:1 on the light rail and 5.38:1 on the dark one,
|
|
5
|
-
and it is the one brand colour that is a foreground in both themes.
|
|
6
|
-
-->
|
|
7
1
|
<template>
|
|
8
2
|
<v-list-group v-if="children && children.length">
|
|
9
3
|
<template #activator="{ props: groupProps }">
|
|
10
4
|
<v-list-item
|
|
11
5
|
v-bind="groupProps"
|
|
12
6
|
:prepend-icon="icon"
|
|
13
|
-
color="primary"
|
|
14
7
|
class="text-subtitle-2"
|
|
15
8
|
@click.stop="onParentClick"
|
|
16
9
|
>
|
|
@@ -32,7 +25,6 @@
|
|
|
32
25
|
v-else-if="routeTo"
|
|
33
26
|
:prepend-icon="icon"
|
|
34
27
|
:to="routeTo"
|
|
35
|
-
color="primary"
|
|
36
28
|
class="text-subtitle-2"
|
|
37
29
|
>
|
|
38
30
|
{{ title }}
|
|
@@ -42,7 +34,6 @@
|
|
|
42
34
|
v-else-if="props.link"
|
|
43
35
|
:prepend-icon="icon"
|
|
44
36
|
:href="props.link"
|
|
45
|
-
color="primary"
|
|
46
37
|
class="text-subtitle-2"
|
|
47
38
|
>
|
|
48
39
|
{{ title }}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
<v-row no-gutters class="mb-4" align="center">
|
|
5
5
|
<v-col cols="12" md="6">
|
|
6
6
|
<v-btn
|
|
7
|
-
v-if="props.canCreateNfcPatrol"
|
|
8
7
|
rounded="pill"
|
|
9
8
|
variant="outlined"
|
|
10
9
|
|
|
@@ -83,12 +82,7 @@
|
|
|
83
82
|
</v-col>
|
|
84
83
|
|
|
85
84
|
<!-- Add Dialog -->
|
|
86
|
-
<v-dialog
|
|
87
|
-
v-if="props.canCreateNfcPatrol"
|
|
88
|
-
v-model="dialogAdd"
|
|
89
|
-
persistent
|
|
90
|
-
max-width="900"
|
|
91
|
-
>
|
|
85
|
+
<v-dialog v-model="dialogAdd" persistent max-width="900">
|
|
92
86
|
<NFCPatrolRouteForm
|
|
93
87
|
title="Add Route"
|
|
94
88
|
:site="props.site"
|
|
@@ -100,12 +94,7 @@
|
|
|
100
94
|
</v-dialog>
|
|
101
95
|
|
|
102
96
|
<!-- Edit Dialog -->
|
|
103
|
-
<v-dialog
|
|
104
|
-
v-if="props.canUpdateNfcPatrol"
|
|
105
|
-
v-model="dialogEdit"
|
|
106
|
-
persistent
|
|
107
|
-
max-width="900"
|
|
108
|
-
>
|
|
97
|
+
<v-dialog v-model="dialogEdit" persistent max-width="900">
|
|
109
98
|
<NFCPatrolRouteForm
|
|
110
99
|
title="Edit Route"
|
|
111
100
|
:site="props.site"
|
|
@@ -201,10 +190,7 @@
|
|
|
201
190
|
|
|
202
191
|
<v-toolbar class="pa-0" density="compact">
|
|
203
192
|
<v-row no-gutters>
|
|
204
|
-
<v-col
|
|
205
|
-
:cols="props.canUpdateNfcPatrol || props.canDeleteNfcPatrol ? 6 : 12"
|
|
206
|
-
class="pa-0"
|
|
207
|
-
>
|
|
193
|
+
<v-col cols="6" class="pa-0">
|
|
208
194
|
<v-btn
|
|
209
195
|
block
|
|
210
196
|
variant="text"
|
|
@@ -217,11 +203,7 @@
|
|
|
217
203
|
</v-btn>
|
|
218
204
|
</v-col>
|
|
219
205
|
|
|
220
|
-
<v-col
|
|
221
|
-
v-if="props.canUpdateNfcPatrol || props.canDeleteNfcPatrol"
|
|
222
|
-
cols="6"
|
|
223
|
-
class="pa-0"
|
|
224
|
-
>
|
|
206
|
+
<v-col cols="6" class="pa-0">
|
|
225
207
|
<v-menu>
|
|
226
208
|
<template #activator="{ props }">
|
|
227
209
|
<v-btn
|
|
@@ -238,17 +220,13 @@
|
|
|
238
220
|
</template>
|
|
239
221
|
|
|
240
222
|
<v-list class="pa-0">
|
|
241
|
-
<v-list-item
|
|
223
|
+
<v-list-item @click="openDialogEdit()">
|
|
242
224
|
<v-list-item-title class="text-subtitle-2">
|
|
243
225
|
Edit Route
|
|
244
226
|
</v-list-item-title>
|
|
245
227
|
</v-list-item>
|
|
246
228
|
|
|
247
|
-
<v-list-item
|
|
248
|
-
v-if="props.canDeleteNfcPatrol"
|
|
249
|
-
@click="openDialogDelete()"
|
|
250
|
-
class="text-red"
|
|
251
|
-
>
|
|
229
|
+
<v-list-item @click="openDialogDelete()" class="text-red">
|
|
252
230
|
<v-list-item-title class="text-subtitle-2">
|
|
253
231
|
Delete Route
|
|
254
232
|
</v-list-item-title>
|
|
@@ -262,12 +240,7 @@
|
|
|
262
240
|
</v-dialog>
|
|
263
241
|
|
|
264
242
|
<!-- Delete Dialog -->
|
|
265
|
-
<v-dialog
|
|
266
|
-
v-if="props.canDeleteNfcPatrol"
|
|
267
|
-
v-model="dialogDelete"
|
|
268
|
-
persistent
|
|
269
|
-
width="540"
|
|
270
|
-
>
|
|
243
|
+
<v-dialog v-model="dialogDelete" persistent width="540">
|
|
271
244
|
<v-card width="100%">
|
|
272
245
|
<v-card-text
|
|
273
246
|
style="max-height: 100vh; overflow-y: auto"
|
|
@@ -331,18 +304,6 @@ const props = defineProps({
|
|
|
331
304
|
type: String,
|
|
332
305
|
required: true,
|
|
333
306
|
},
|
|
334
|
-
canCreateNfcPatrol: {
|
|
335
|
-
type: Boolean,
|
|
336
|
-
default: false,
|
|
337
|
-
},
|
|
338
|
-
canUpdateNfcPatrol: {
|
|
339
|
-
type: Boolean,
|
|
340
|
-
default: false,
|
|
341
|
-
},
|
|
342
|
-
canDeleteNfcPatrol: {
|
|
343
|
-
type: Boolean,
|
|
344
|
-
default: false,
|
|
345
|
-
},
|
|
346
307
|
headers: {
|
|
347
308
|
type: Array as PropType<Array<any>>,
|
|
348
309
|
default: () => [
|
|
@@ -445,8 +406,6 @@ const messageSnackbar = ref(false);
|
|
|
445
406
|
const messageColor = ref("");
|
|
446
407
|
|
|
447
408
|
async function openDialogEdit() {
|
|
448
|
-
if (!props.canUpdateNfcPatrol) return;
|
|
449
|
-
|
|
450
409
|
try {
|
|
451
410
|
// Fetch the full route details from the API
|
|
452
411
|
const response = await getRouteById(selectedRoute.value._id);
|
|
@@ -472,8 +431,6 @@ async function openDialogEdit() {
|
|
|
472
431
|
}
|
|
473
432
|
|
|
474
433
|
function openDialogDelete() {
|
|
475
|
-
if (!props.canDeleteNfcPatrol) return;
|
|
476
|
-
|
|
477
434
|
dialogDelete.value = true;
|
|
478
435
|
|
|
479
436
|
if (dialogPreview.value) dialogPreview.value = false;
|
|
@@ -545,8 +502,6 @@ function handleRowClick(_: any, data: any) {
|
|
|
545
502
|
}
|
|
546
503
|
|
|
547
504
|
async function submitDelete() {
|
|
548
|
-
if (!props.canDeleteNfcPatrol) return;
|
|
549
|
-
|
|
550
505
|
try {
|
|
551
506
|
await deleteRouteById(selectedRoute.value._id ?? "");
|
|
552
507
|
await getRoutesRefresh();
|