@7365admin1/layer-common 3.2.7 → 3.2.8-staging.201
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 +1113 -0
- package/assets/css/screens.css +1097 -0
- package/assets/css/shell.css +258 -0
- package/assets/css/tokens.css +236 -0
- package/components/AcceptDialog.vue +17 -18
- package/components/AccessCard/AvailableStats.vue +24 -16
- package/components/AccessCardAddForm.vue +42 -42
- package/components/AccessCardAssignToUnitForm.vue +13 -21
- package/components/AccessCardDeleteDialog.vue +41 -39
- package/components/AccessCardDetailsDialog.vue +125 -79
- package/components/AccessCardPreviewDialog.vue +58 -84
- package/components/AccessCardQrTagging.vue +60 -63
- package/components/AccessCardReplaceForm.vue +27 -23
- package/components/AccessManagement.vue +86 -85
- package/components/AddEqupmentForm.vue +18 -22
- package/components/AddPassKeyToVisitor.vue +95 -73
- package/components/AppButton.vue +62 -0
- package/components/AppCard.vue +20 -0
- package/components/AppDateField.vue +49 -0
- package/components/AppField.vue +76 -0
- package/components/AppKpiTile.vue +65 -0
- package/components/AppSegmented.vue +38 -0
- package/components/AppSelect.vue +247 -0
- package/components/AreaChecklistHistoryLogs.vue +51 -44
- package/components/AreaChecklistHistoryMain.vue +14 -7
- package/components/AreaFormDialog.vue +71 -59
- package/components/AreaMain.vue +73 -107
- package/components/AttachmentsViewer.vue +84 -22
- package/components/AttendanceCheckInOutDialog.vue +85 -88
- package/components/AttendanceDetailsDialog.vue +57 -63
- package/components/AttendanceMain.vue +4 -3
- package/components/AttendanceMapSearchDialog.vue +42 -44
- package/components/AttendanceSettingsDialog.vue +79 -63
- package/components/Avatar/Main.vue +54 -2
- package/components/BillingMain.vue +26 -30
- package/components/BtnUploadFile.vue +53 -11
- package/components/BuildingForm.vue +34 -27
- package/components/BuildingManagement/buildings.vue +39 -39
- package/components/BuildingManagement/units.vue +26 -42
- package/components/BuildingUnitFormAdd.vue +20 -23
- package/components/BuildingUnitFormEdit.vue +8 -4
- package/components/BulletinBoardForm.vue +19 -24
- package/components/BulletinBoardManagement.vue +49 -57
- package/components/BulletinBoardView.vue +9 -6
- package/components/BulletinExpirationChip.vue +13 -4
- package/components/Button/Close.vue +2 -2
- package/components/CameraForm.vue +21 -22
- package/components/CameraMain.vue +50 -49
- package/components/Card/DeleteConfirmation.vue +24 -22
- package/components/Card/MemberInfoSummary.vue +28 -3
- package/components/Card/Toggle.vue +15 -3
- package/components/CardToolbar.vue +37 -0
- package/components/Carousel.vue +56 -36
- package/components/Chat/Bubbles.vue +43 -14
- package/components/Chat/Information.vue +49 -32
- package/components/Chat/ListCard.vue +38 -9
- package/components/Chat/Message.vue +41 -15
- package/components/Chat/Navigation.vue +27 -15
- package/components/Chat/SkeletonLoader.vue +9 -2
- package/components/ChecklistItemRow.vue +25 -1
- package/components/CleaningScheduleMain.vue +44 -49
- package/components/ClientDetailForm.vue +81 -56
- package/components/ClientMain.vue +92 -82
- package/components/ConfirmDialog.vue +14 -8
- package/components/Container/Standard.vue +9 -7
- package/components/CreateSubsciptionPlan.vue +148 -89
- package/components/DashboardEmptyState.vue +48 -3
- package/components/DashboardMain.vue +924 -676
- package/components/DashboardPanel.vue +84 -21
- package/components/DeliveryCompany.vue +34 -20
- package/components/Dialog/DeleteConfirmation.vue +20 -21
- package/components/Dialog/ReplaceAutofillPrompt.vue +19 -26
- package/components/Dialog/ReusablePrompt.vue +30 -29
- package/components/Dialog/UpdateMoreAction.vue +62 -59
- package/components/DocumentForm.vue +14 -21
- package/components/DocumentManagement.vue +162 -108
- package/components/DocumentViewer.vue +29 -12
- package/components/DrawImage.vue +29 -21
- package/components/EntryPass/QrTemplatePreview.vue +27 -16
- package/components/EntryPassInformation.vue +40 -10
- package/components/EntryPassMain.vue +49 -27
- package/components/EquipmentItemMain.vue +84 -97
- package/components/EquipmentManagementMain.vue +81 -103
- package/components/Facility/BookingSetup.vue +43 -52
- package/components/Feedback/Form.vue +26 -12
- package/components/FeedbackMain.vue +35 -49
- package/components/FileInput.vue +75 -58
- package/components/FileInputWithList.vue +59 -12
- package/components/FormDialog.vue +60 -21
- package/components/HidAccessLogDashboard.vue +512 -490
- package/components/HidCameraCaptureDialog.vue +216 -0
- package/components/HidEnabledGate.vue +67 -9
- package/components/HidIntercomManagement.vue +1322 -653
- package/components/HidQrCodeConfiguration.vue +1030 -258
- package/components/HidReaderForm.vue +142 -59
- package/components/HidReaderManagement.vue +211 -323
- package/components/HidServiceSettingsPanel.vue +44 -13
- package/components/HidUserEnrollment.vue +1185 -412
- package/components/HygieneUpdateMoreAction.vue +44 -44
- package/components/IncidentReport/Authorities.vue +30 -18
- package/components/IncidentReport/IncidentInformation.vue +10 -10
- package/components/IncidentReport/IncidentInformationDownload.vue +3 -4
- package/components/IncidentReport/affectedEntities.vue +41 -20
- package/components/Input/Date.vue +3 -0
- package/components/Input/DatePicker.vue +1 -2
- package/components/Input/DateTimePicker.vue +1 -1
- package/components/Input/File.vue +55 -10
- package/components/Input/FileV2.vue +39 -6
- package/components/Input/InputPhoneNumberV2.vue +2 -1
- package/components/Input/ListGroupSelection.vue +56 -8
- package/components/Input/NRICNumber.vue +1 -0
- package/components/Input/NewDate.vue +1 -0
- package/components/Input/Number.vue +1 -0
- package/components/Input/Password.vue +1 -0
- package/components/Input/PhoneNumber.vue +21 -1
- package/components/Input/VehicleNumber.vue +1 -0
- package/components/InputLabel.vue +2 -2
- package/components/InvitationClientForm.vue +21 -19
- package/components/InvitationForm.vue +15 -21
- package/components/InvitationMain.vue +46 -61
- package/components/Layout/Header.vue +263 -36
- package/components/Layout/NavigationDrawer.vue +300 -30
- package/components/ListItem.vue +33 -3
- package/components/LocalPagination.vue +27 -3
- package/components/ManageChecklistMain.vue +136 -86
- package/components/MemberInformation.vue +32 -16
- package/components/MemberMain.vue +113 -93
- package/components/MyAttendanceMain.vue +3 -5
- package/components/NavigationItem.vue +83 -3
- package/components/Nfc/NFCPatrolReportMain.vue +47 -33
- package/components/Nfc/NFCPatrolRouteForm.vue +18 -20
- package/components/Nfc/NFCPatrolRouteMain.vue +116 -103
- package/components/Nfc/NFCPatrolSettings.vue +14 -4
- package/components/Nfc/NFCTagForm.vue +22 -8
- package/components/Nfc/NFCTagMain.vue +41 -43
- package/components/Nfc/PatrolReport/DailyReportTab.vue +8 -1
- package/components/Nfc/PatrolReport/MonthlyReportTab.vue +8 -1
- package/components/Nfc/PatrolReport/MonthlyReportTable.vue +5 -3
- package/components/Nfc/PatrolReport/PatrolActivityTable.vue +26 -6
- package/components/Nfc/PatrolReport/PatrolReportTab.vue +8 -0
- package/components/Nfc/PatrolReport/PatrolRouteSummary.vue +41 -9
- package/components/Nfc/PatrolReport/RemarksDialog.vue +39 -9
- package/components/Nfc/PatrolReport/ReportEmptyState.vue +29 -9
- package/components/Nfc/PatrolReport/ReportFilters.vue +19 -10
- package/components/Nfc/PatrolReport/ReportLocationHeader.vue +32 -6
- package/components/Nfc/PatrolReport/SummaryReportTable.vue +28 -6
- package/components/NotificationSettings.vue +373 -0
- package/components/NumberSettingField.vue +9 -2
- package/components/OnlineFormConfigurationForm.vue +725 -237
- package/components/OnlineFormFill.vue +213 -106
- package/components/OnlineFormRenderPreview.vue +25 -30
- package/components/OnlineFormsConfiguration.vue +113 -109
- package/components/OrgViewDialog.vue +34 -16
- package/components/OvernightParkingAvailability.vue +49 -26
- package/components/OvernightParkingManagement.vue +78 -18
- package/components/PageHeader.vue +43 -0
- package/components/PassInformation.vue +109 -53
- package/components/PasswordConfirmation.vue +44 -26
- package/components/PeopleForm.vue +41 -20
- package/components/PhotoUpload.vue +110 -48
- package/components/PlaceholderComponent.vue +35 -19
- package/components/PlanActionsMenu.vue +12 -2
- package/components/PlanStatusBadge.vue +7 -8
- package/components/PlateNumberDisplay.vue +9 -6
- package/components/QrTemplate/PrintDialog.vue +66 -43
- package/components/RolePermissionFormCreate.vue +104 -79
- package/components/RolePermissionFormPreviewUpdate.vue +111 -109
- package/components/RolePermissionMain.vue +183 -81
- package/components/ScanVisitorQRCode.vue +99 -35
- package/components/ScheduleAreaMain.vue +34 -59
- package/components/ScheduleTaskForm.vue +61 -42
- package/components/ScheduleTaskMain.vue +56 -69
- package/components/SearchVehicleNumberUser.vue +39 -37
- package/components/ServiceProviderFormCreate.vue +29 -20
- package/components/ServiceProviderInvitationPrompt.vue +155 -0
- package/components/ServiceProviderMain.vue +601 -432
- package/components/Signature.vue +40 -34
- package/components/SignaturePad.vue +5 -29
- package/components/SiteSettings.vue +41 -11
- package/components/SiteSettingsWorkOrder.vue +61 -30
- package/components/SlideCardGroup.vue +35 -11
- package/components/Snackbar.vue +36 -3
- package/components/SpecificAttr.vue +18 -8
- package/components/StatusChip.vue +156 -0
- package/components/StockCard.vue +17 -12
- package/components/SubscriptionPlanTable.vue +207 -140
- package/components/SwitchContext.vue +201 -9
- package/components/TableHygiene.vue +36 -46
- package/components/TableList.vue +10 -10
- package/components/TableListSecondary.vue +105 -54
- package/components/TableMain.vue +251 -78
- package/components/TableV3.vue +61 -70
- package/components/TiptapEditor.vue +33 -40
- package/components/TiptapEditorQr.vue +5 -2
- package/components/Tooltip/Info.vue +69 -24
- package/components/UnitMain.vue +40 -60
- package/components/UnitPersonCard.vue +42 -13
- package/components/VehicleAddSelection.vue +48 -32
- package/components/VehicleForm.vue +112 -129
- package/components/VehicleManagement.vue +26 -12
- package/components/VehicleUpdateMoreAction.vue +59 -46
- package/components/VisitorDataFromScannedQRCodeForm.vue +90 -65
- package/components/VisitorForm.vue +774 -210
- package/components/VisitorFormSelection.vue +40 -37
- package/components/VisitorManagement.vue +239 -82
- package/components/VisitorPassKeyQRScanner.vue +65 -18
- package/components/VisitorSearchResultSummary.vue +60 -16
- package/components/VisitorSocketPopUp.vue +22 -14
- package/components/VisitorsReportPreview.vue +44 -29
- package/components/WorkOrder/Create.vue +26 -17
- package/components/WorkOrder/ListView.vue +38 -7
- package/components/WorkOrder/Main.vue +62 -59
- package/composables/useFeedback.ts +3 -3
- package/composables/useHidAmico.ts +269 -0
- package/composables/useHidNavigation.ts +2 -9
- package/composables/useMember.ts +3 -3
- package/composables/useNFCPatrolDailyReport.ts +13 -0
- package/composables/useNFCPatrolMonthlyReport.ts +22 -56
- package/composables/useNFCPatrolReport.ts +13 -0
- package/composables/useNotificationPreference.ts +87 -0
- package/composables/useOnlineFormPages.ts +2 -0
- package/composables/useRole.ts +22 -0
- package/composables/useServiceProvider.ts +3 -3
- package/composables/useServiceProviderInvitation.ts +145 -0
- package/composables/useSipWebPhone.ts +336 -0
- package/composables/useSubscriptionPlan.ts +62 -0
- package/composables/useThemePreference.ts +63 -0
- package/composables/useVisitor.ts +6 -1
- package/composables/useWebUsb.ts +127 -37
- package/composables/useWorkOrder.ts +17 -3
- package/error.vue +30 -6
- package/nuxt.config.ts +36 -0
- package/package.json +25 -4
- package/pages/[org]/[site]/access-mgmt/administrator/index.vue +2 -2
- package/pages/[org]/[site]/access-mgmt/{identity-mapping → hid-cards}/index.vue +2 -2
- package/pages/[org]/[site]/access-mgmt/intercom/index.vue +1 -1
- package/pages/notification-settings.vue +19 -0
- package/pages/payment-method-linked.vue +34 -10
- package/pages/require-customer.vue +48 -10
- package/pages/require-organization-membership.vue +32 -8
- package/pages/unauthorized.vue +29 -4
- package/plugins/secure-member.client.ts +21 -56
- package/plugins/vuetify.ts +69 -2
- package/types/nfc-patrol-report.ts +3 -2
- package/types/site.d.ts +71 -0
- package/types/subscription.ts +18 -11
- package/utils/breadcrumb.test.ts +108 -0
- package/utils/breadcrumb.ts +82 -0
- package/utils/dashboard.test.ts +118 -0
- package/utils/dashboard.ts +53 -0
- package/utils/data.test.ts +95 -0
- package/utils/data.ts +40 -2
- package/utils/hid-discover.test.ts +102 -0
- package/utils/list-page.test.ts +60 -0
- package/utils/list-page.ts +38 -0
- package/utils/materialSymbols.ts +363 -0
- package/utils/nav-sections.test.ts +190 -0
- package/utils/nav-sections.ts +151 -0
- package/utils/nfc-patrol-report.test.ts +130 -0
- package/utils/nfc-patrol-report.ts +101 -0
- package/utils/role.test.ts +69 -0
- package/utils/role.ts +10 -0
- package/utils/route-name.test.ts +85 -0
- package/utils/route-name.ts +24 -0
- package/utils/status.test.ts +110 -0
- package/utils/status.ts +135 -0
- package/utils/table-card.test.ts +84 -0
- package/utils/theme-aa-ledger.ts +148 -0
- package/utils/theme.test.ts +485 -7
- package/utils/theme.ts +295 -110
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -11
- package/.editorconfig +0 -12
- package/.github/workflows/main.yml +0 -17
- package/.github/workflows/publish-staging.yml +0 -47
- package/.github/workflows/publish.yml +0 -39
- package/PUBLISHING.md +0 -269
- package/components/HidIdentityMapping.vue +0 -975
- package/components/ScheduleTaskAreaFormDialog.vue +0 -144
- package/components/ScheduleTaskAreaUpdateMoreAction.vue +0 -109
- package/components/ScheduleTastTicketMain.vue +0 -182
- package/components/TableWithButton.vue +0 -94
- package/test/visitor-socket.test.mjs +0 -36
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-card width="100%" :loading="processing">
|
|
3
|
-
<v-toolbar>
|
|
2
|
+
<v-card width="100%" class="screen-modal" :loading="processing">
|
|
3
|
+
<v-toolbar class="screen-dialog-bar" flat>
|
|
4
4
|
<v-row no-gutters class="fill-height px-6" align="center">
|
|
5
|
-
<span class="
|
|
5
|
+
<span class="screen-card-title text-capitalize">
|
|
6
6
|
{{ prop.mode }} {{ prop.type }}
|
|
7
7
|
</span>
|
|
8
8
|
</v-row>
|
|
9
9
|
</v-toolbar>
|
|
10
10
|
<v-card-text style="max-height: 100vh; overflow-y: auto" class="pa-5 my-3">
|
|
11
11
|
<div class="w-100 d-flex justify-space-between ga-2">
|
|
12
|
-
<span v class="
|
|
12
|
+
<span v class="people-form__section w-100 mb-3">
|
|
13
13
|
<span v-if="step === 1">General Information</span>
|
|
14
14
|
<span v-else-if="step === 2">Pass Information</span>
|
|
15
15
|
</span>
|
|
16
|
-
<span class="
|
|
17
|
-
<span class="
|
|
16
|
+
<span class="people-form__step" style="text-wrap: nowrap;">Step
|
|
17
|
+
<span class="people-form__stepno">{{ step }}</span>/2</span>
|
|
18
18
|
</div>
|
|
19
19
|
<v-form ref="formRef" v-model="validForm" :disabled="processing" @click="errorMessage = ''">
|
|
20
20
|
<v-row no-gutters class="pt-4">
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
<v-col v-if="prop.mode === 'add'" cols="12" class="mt-2">
|
|
94
94
|
<v-checkbox v-model="createMore" density="comfortable" hide-details>
|
|
95
95
|
<template #label>
|
|
96
|
-
<span class="
|
|
96
|
+
<span class="people-form__step">
|
|
97
97
|
Create more
|
|
98
98
|
</span>
|
|
99
99
|
</template>
|
|
@@ -106,20 +106,14 @@
|
|
|
106
106
|
</v-card-text>
|
|
107
107
|
|
|
108
108
|
<v-row no-gutters class="w-100" v-if="errorMessage">
|
|
109
|
-
<p class="text-error w-100 text-center
|
|
109
|
+
<p class="text-error w-100 text-center people-form__error">{{ errorMessage }}</p>
|
|
110
110
|
</v-row>
|
|
111
|
-
<
|
|
112
|
-
<v-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
<v-col cols="6">
|
|
118
|
-
<v-btn tile block variant="flat" color="primary-button" class="text-none" size="48" :disabled="processing"
|
|
119
|
-
@click="handleNextPage" :text="step === 2 ? 'Submit' : 'Next'" />
|
|
120
|
-
</v-col>
|
|
121
|
-
</v-row>
|
|
122
|
-
</v-toolbar>
|
|
111
|
+
<div class="screen-modal__footer">
|
|
112
|
+
<v-btn v-if="step > 1" variant="outlined" class="screen-btn-ghost" @click="back" text="Back" />
|
|
113
|
+
<v-btn v-else variant="outlined" class="screen-btn-ghost" @click="close" text="Close" />
|
|
114
|
+
<v-btn variant="flat" class="screen-btn-primary" :disabled="processing"
|
|
115
|
+
@click="handleNextPage" :text="step === 2 ? 'Submit' : 'Next'" />
|
|
116
|
+
</div>
|
|
123
117
|
</v-card>
|
|
124
118
|
</template>
|
|
125
119
|
|
|
@@ -449,4 +443,31 @@ onMounted(() => {
|
|
|
449
443
|
.button-outline-class {
|
|
450
444
|
border: 1px solid rgba(var(--v-theme-primary));
|
|
451
445
|
}
|
|
446
|
+
|
|
447
|
+
/* Was `text-subtitle-1` / `text-subtitle-2` - Vuetify's 16px/14px scale, which
|
|
448
|
+
drew the section label LARGER than the card title above it. The step counter
|
|
449
|
+
step number is handled below and the error line keeps `text-error`;
|
|
450
|
+
only their sizes move. */
|
|
451
|
+
.people-form__section {
|
|
452
|
+
font-size: var(--fs-card-title);
|
|
453
|
+
font-weight: 700;
|
|
454
|
+
color: var(--text);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.people-form__step {
|
|
458
|
+
font-size: var(--fs-cell);
|
|
459
|
+
font-weight: 700;
|
|
460
|
+
color: var(--text2);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.people-form__error {
|
|
464
|
+
font-size: var(--fs-cell);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* The step number was `text-primary-button` - the design's FILL token used as
|
|
468
|
+
ink. On dark that is rgb(75,116,196) on rgb(28,30,36): 3.64:1 against a 4.5
|
|
469
|
+
floor. `--accent-text` is the foreground half of the same pair. */
|
|
470
|
+
.people-form__stepno {
|
|
471
|
+
color: var(--accent-text);
|
|
472
|
+
}
|
|
452
473
|
</style>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-row no-gutters class="mb-6">
|
|
3
3
|
<v-col cols="12">
|
|
4
|
-
<div class="
|
|
4
|
+
<div class="photo-upload__title mb-3">
|
|
5
5
|
{{ title }}
|
|
6
|
-
<span v-if="required" class="
|
|
6
|
+
<span v-if="required" class="photo-upload__req">*</span>
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<v-sheet
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
<v-icon
|
|
18
18
|
:icon="uploading ? 'mdi-loading mdi-spin' : 'mdi-camera-plus-outline'"
|
|
19
19
|
size="56"
|
|
20
|
-
:color="uploading ? 'grey' : 'primary'"
|
|
21
20
|
class="mb-3"
|
|
21
|
+
:class="uploading ? 'photo-upload__icon--wait' : 'photo-upload__icon'"
|
|
22
22
|
/>
|
|
23
|
-
<div class="
|
|
23
|
+
<div class="photo-upload__lead mb-1">
|
|
24
24
|
{{ uploading ? "Uploading Photo..." : "Add Photo" }}
|
|
25
25
|
</div>
|
|
26
|
-
<div class="
|
|
26
|
+
<div class="photo-upload__hint">
|
|
27
27
|
{{ uploading ? "Please wait" : "Take a photo or upload from device" }}
|
|
28
28
|
</div>
|
|
29
29
|
</v-sheet>
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
icon="mdi-close"
|
|
51
51
|
size="x-small"
|
|
52
52
|
variant="tonal"
|
|
53
|
-
|
|
54
|
-
class="delete-btn"
|
|
53
|
+
aria-label="Remove photo"
|
|
54
|
+
class="delete-btn photo-upload__remove"
|
|
55
55
|
@click.stop="removePhoto(index)"
|
|
56
56
|
style="position: absolute; top: -8px; right: -8px"
|
|
57
57
|
/>
|
|
@@ -60,11 +60,13 @@
|
|
|
60
60
|
</v-row>
|
|
61
61
|
|
|
62
62
|
<v-dialog v-model="showPhotoPreview" max-width="900">
|
|
63
|
-
<v-card>
|
|
63
|
+
<v-card class="screen-modal">
|
|
64
64
|
<v-card-actions class="pa-2 justify-end">
|
|
65
65
|
<v-btn
|
|
66
66
|
icon="mdi-close"
|
|
67
67
|
variant="text"
|
|
68
|
+
class="screen-modal__close"
|
|
69
|
+
aria-label="Close photo preview"
|
|
68
70
|
@click="showPhotoPreview = false"
|
|
69
71
|
/>
|
|
70
72
|
</v-card-actions>
|
|
@@ -75,46 +77,47 @@
|
|
|
75
77
|
</v-dialog>
|
|
76
78
|
|
|
77
79
|
<v-dialog v-model="photoOptionsDialog" max-width="420">
|
|
78
|
-
<v-card>
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
<v-card class="screen-modal">
|
|
81
|
+
<!-- `text-h6` is 20px/500 Roboto; the design's modal heading is the
|
|
82
|
+
`v-card-title` row's own size and weight. -->
|
|
83
|
+
<v-card-title class="d-flex align-center">
|
|
84
|
+
Add Photo
|
|
81
85
|
<v-spacer />
|
|
82
86
|
<v-btn
|
|
83
87
|
icon="mdi-close"
|
|
84
88
|
variant="text"
|
|
85
|
-
|
|
89
|
+
class="screen-modal__close"
|
|
90
|
+
aria-label="Close"
|
|
86
91
|
@click="photoOptionsDialog = false"
|
|
87
92
|
/>
|
|
88
93
|
</v-card-title>
|
|
89
94
|
|
|
90
|
-
<v-
|
|
91
|
-
|
|
92
|
-
<v-card-text class="pa-4">
|
|
95
|
+
<v-card-text class="screen-modal__body">
|
|
93
96
|
<v-list class="pa-0" bg-color="transparent">
|
|
94
97
|
<v-list-item class="rounded-lg mb-2" @click="openCameraFromOptions">
|
|
95
98
|
<template v-slot:prepend>
|
|
96
|
-
<v-avatar
|
|
97
|
-
<v-icon icon="mdi-camera"
|
|
99
|
+
<v-avatar variant="flat" size="48" class="photo-upload__avatar">
|
|
100
|
+
<v-icon icon="mdi-camera" />
|
|
98
101
|
</v-avatar>
|
|
99
102
|
</template>
|
|
100
|
-
<v-list-item-title class="
|
|
103
|
+
<v-list-item-title class="photo-upload__lead mb-1">
|
|
101
104
|
Take a Photo
|
|
102
105
|
</v-list-item-title>
|
|
103
|
-
<v-list-item-subtitle class="
|
|
106
|
+
<v-list-item-subtitle class="photo-upload__hint">
|
|
104
107
|
Use device camera to capture an image
|
|
105
108
|
</v-list-item-subtitle>
|
|
106
109
|
</v-list-item>
|
|
107
110
|
|
|
108
111
|
<v-list-item class="rounded-lg" @click="triggerFileInput">
|
|
109
112
|
<template v-slot:prepend>
|
|
110
|
-
<v-avatar
|
|
111
|
-
<v-icon icon="mdi-upload"
|
|
113
|
+
<v-avatar variant="flat" size="48" class="photo-upload__avatar">
|
|
114
|
+
<v-icon icon="mdi-upload" />
|
|
112
115
|
</v-avatar>
|
|
113
116
|
</template>
|
|
114
|
-
<v-list-item-title class="
|
|
117
|
+
<v-list-item-title class="photo-upload__lead mb-1">
|
|
115
118
|
Upload a Photo
|
|
116
119
|
</v-list-item-title>
|
|
117
|
-
<v-list-item-subtitle class="
|
|
120
|
+
<v-list-item-subtitle class="photo-upload__hint">
|
|
118
121
|
Select an image from your device
|
|
119
122
|
</v-list-item-subtitle>
|
|
120
123
|
</v-list-item>
|
|
@@ -124,17 +127,22 @@
|
|
|
124
127
|
</v-dialog>
|
|
125
128
|
|
|
126
129
|
<v-dialog v-model="showCameraDialog" max-width="720">
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
<!-- Was a bare `v-toolbar`, which Vuetify paints from its own `surface` -
|
|
131
|
+
a grey slab across the top of the card, lighter than the card on the
|
|
132
|
+
dark theme. -->
|
|
133
|
+
<v-card class="screen-modal">
|
|
134
|
+
<v-card-title class="d-flex align-center">
|
|
135
|
+
Camera
|
|
132
136
|
<v-spacer />
|
|
133
|
-
<v-btn
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
<v-btn
|
|
138
|
+
icon="mdi-close"
|
|
139
|
+
variant="text"
|
|
140
|
+
class="screen-modal__close"
|
|
141
|
+
aria-label="Close camera"
|
|
142
|
+
@click="closeCameraDialog"
|
|
143
|
+
/>
|
|
144
|
+
</v-card-title>
|
|
145
|
+
<v-card-text class="screen-modal__body">
|
|
138
146
|
<div class="d-flex flex-column align-center">
|
|
139
147
|
<div style="width: 100%; max-width: 640px">
|
|
140
148
|
<video
|
|
@@ -146,33 +154,32 @@
|
|
|
146
154
|
/>
|
|
147
155
|
</div>
|
|
148
156
|
<canvas ref="canvasRef" style="display: none"></canvas>
|
|
149
|
-
<div class="
|
|
157
|
+
<div class="screen-hint mt-2">
|
|
150
158
|
Tip: Allow camera permissions to use this feature.
|
|
151
159
|
</div>
|
|
152
160
|
</div>
|
|
153
161
|
</v-card-text>
|
|
154
|
-
|
|
162
|
+
<!-- Was a `v-card-actions` holding a plain text CANCEL and a 56px
|
|
163
|
+
`color="black"` bar forced to `rounded-0` - black is neither theme's
|
|
164
|
+
accent and reads as a hole in the dark modal. This is the design's
|
|
165
|
+
shared modal footer: ghost secondary, then the primary. -->
|
|
166
|
+
<div class="screen-modal__footer">
|
|
155
167
|
<v-btn
|
|
156
|
-
text
|
|
168
|
+
class="text-none screen-btn-ghost"
|
|
169
|
+
variant="outlined"
|
|
157
170
|
@click="closeCameraDialog"
|
|
158
|
-
class="text-none font-weight-medium"
|
|
159
171
|
>
|
|
160
|
-
|
|
172
|
+
Cancel
|
|
161
173
|
</v-btn>
|
|
162
|
-
<v-spacer />
|
|
163
174
|
<v-btn
|
|
164
|
-
|
|
175
|
+
class="text-none screen-btn-primary"
|
|
165
176
|
variant="flat"
|
|
166
|
-
color="black"
|
|
167
|
-
class="text-none font-weight-bold rounded-0"
|
|
168
|
-
height="56"
|
|
169
|
-
size="large"
|
|
170
177
|
@click="capturePhoto"
|
|
171
178
|
>
|
|
172
179
|
<v-icon class="mr-2">mdi-camera</v-icon>
|
|
173
|
-
|
|
180
|
+
Capture
|
|
174
181
|
</v-btn>
|
|
175
|
-
</
|
|
182
|
+
</div>
|
|
176
183
|
</v-card>
|
|
177
184
|
</v-dialog>
|
|
178
185
|
|
|
@@ -393,13 +400,68 @@ onBeforeUnmount(() => {
|
|
|
393
400
|
</script>
|
|
394
401
|
|
|
395
402
|
<style scoped>
|
|
403
|
+
/* Was `rgb(var(--v-theme-primary))`, i.e. the design's FOREGROUND token used
|
|
404
|
+
as a rule and a wash. `--accent-strong` is the accent's fill form, which is
|
|
405
|
+
what a hover state on a drop zone is. */
|
|
396
406
|
.upload-area {
|
|
397
407
|
&:hover:not(.upload-disabled) {
|
|
398
|
-
border-color:
|
|
399
|
-
background-color:
|
|
408
|
+
border-color: var(--accent-strong) !important;
|
|
409
|
+
background-color: var(--accent-soft);
|
|
400
410
|
}
|
|
401
411
|
}
|
|
402
412
|
|
|
413
|
+
/* The section title was `text-subtitle-2 font-weight-bold` and the two leads
|
|
414
|
+
`text-body-1 font-weight-medium` - Vuetify Roboto at Vuetify's sizes. These
|
|
415
|
+
take the design's card-title and cell type. */
|
|
416
|
+
.photo-upload__title {
|
|
417
|
+
font-family: var(--font-sans);
|
|
418
|
+
font-size: var(--fs-card-title);
|
|
419
|
+
font-weight: var(--fw-card-title);
|
|
420
|
+
color: var(--text);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.photo-upload__req {
|
|
424
|
+
color: var(--err);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
.photo-upload__lead {
|
|
428
|
+
font-family: var(--font-sans);
|
|
429
|
+
font-size: 13.5px;
|
|
430
|
+
font-weight: 600;
|
|
431
|
+
color: var(--text);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* Was `text-caption text-medium-emphasis` / `grey--text`, Vuetify's 60% alpha.
|
|
435
|
+
`--muted` is the design's sub-line and follows the theme. */
|
|
436
|
+
.photo-upload__hint {
|
|
437
|
+
font-family: var(--font-sans);
|
|
438
|
+
font-size: 12px;
|
|
439
|
+
color: var(--muted);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/* The drop-zone glyph was `color="primary"`, the FOREGROUND token; the
|
|
443
|
+
accent's ink form is the one held at >= 4.5:1 on the card. */
|
|
444
|
+
.photo-upload__icon {
|
|
445
|
+
color: var(--accent-text);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.photo-upload__icon--wait {
|
|
449
|
+
color: var(--muted);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* The two option tiles were `v-avatar color="primary" variant="tonal"` with a
|
|
453
|
+
`primary` glyph inside - accent on accent. */
|
|
454
|
+
.photo-upload__avatar {
|
|
455
|
+
background: var(--accent-soft);
|
|
456
|
+
color: var(--accent-text);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/* `color="error"` is Vuetify's palette red, not the theme's `--err`. */
|
|
460
|
+
.photo-upload__remove {
|
|
461
|
+
background: var(--err-bg);
|
|
462
|
+
color: var(--err);
|
|
463
|
+
}
|
|
464
|
+
|
|
403
465
|
.upload-disabled {
|
|
404
466
|
cursor: not-allowed !important;
|
|
405
467
|
opacity: 0.6;
|
|
@@ -1,34 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The "page under maintenance" screen — 38 routes across 10 applications.
|
|
3
|
+
|
|
4
|
+
What it was: `font-family: Arial` on `color: #333`. Not a token, not the
|
|
5
|
+
product font, and the same dark grey on the dark page. It was the one screen
|
|
6
|
+
in the estate that ignored both the theme switch and Manrope.
|
|
7
|
+
|
|
8
|
+
DESIGN GAP, STATED: the handoff draws no maintenance / under-construction
|
|
9
|
+
page at all. So this is assembled from the established primitive rather than
|
|
10
|
+
invented — `.screen-empty` (`assets/css/screens.css:149`) is the design's
|
|
11
|
+
centred, muted, 52px-padded empty block, and the heading takes the
|
|
12
|
+
`--fs-card-title` / `--fw-card-title` type the design uses for every other
|
|
13
|
+
panel heading (handoff line 133, `font-size:15.5px;font-weight:800`).
|
|
14
|
+
|
|
15
|
+
The 🚧 emoji is replaced by the central icon: emoji renders in the OS font,
|
|
16
|
+
which is neither Manrope nor a colour the theme controls. `mdi-wrench-clock`
|
|
17
|
+
is translated centrally to Material Symbols `build` — no hand-mapping here.
|
|
18
|
+
-->
|
|
1
19
|
<template>
|
|
2
|
-
<div class="
|
|
3
|
-
<
|
|
4
|
-
<
|
|
20
|
+
<div class="screen-empty placeholder-screen">
|
|
21
|
+
<v-icon icon="mdi-wrench-clock" size="32" />
|
|
22
|
+
<h1 class="placeholder-screen__title">Page Under Maintenance</h1>
|
|
23
|
+
<p class="placeholder-screen__body">
|
|
5
24
|
We're currently working on improving this page to serve you better. Please
|
|
6
25
|
check back soon!
|
|
7
26
|
</p>
|
|
8
|
-
<p>Thank you for your patience.</p>
|
|
27
|
+
<p class="placeholder-screen__body">Thank you for your patience.</p>
|
|
9
28
|
</div>
|
|
10
29
|
</template>
|
|
11
30
|
|
|
12
31
|
<style scoped>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
justify-content: center;
|
|
17
|
-
align-items: center;
|
|
18
|
-
text-align: center;
|
|
32
|
+
/* The only value kept from the old stylesheet: it is a whole route, so it
|
|
33
|
+
holds the viewport rather than collapsing to the height of three lines. */
|
|
34
|
+
.placeholder-screen {
|
|
19
35
|
min-height: 50vh;
|
|
20
|
-
margin: 0;
|
|
21
|
-
font-family: Arial, sans-serif;
|
|
22
|
-
color: #333;
|
|
23
36
|
}
|
|
24
37
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
.placeholder-screen__title {
|
|
39
|
+
margin: 0;
|
|
40
|
+
font-size: var(--fs-card-title);
|
|
41
|
+
font-weight: var(--fw-card-title);
|
|
42
|
+
color: var(--text);
|
|
28
43
|
}
|
|
29
44
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
.placeholder-screen__body {
|
|
46
|
+
max-width: 42ch;
|
|
47
|
+
margin: 0;
|
|
48
|
+
font-weight: var(--fw-cell);
|
|
33
49
|
}
|
|
34
50
|
</style>
|
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<!-- The per-row kebab and its dropdown. Both were Vuetify defaults: a text
|
|
3
|
+
icon button with no border, and a plain `v-list` panel at Vuetify's 4px
|
|
4
|
+
radius with no border at all. The design draws both - the kebab at
|
|
5
|
+
`iService365 Redesign.dc.html:494`, the dropdown at lines 79-90 - and
|
|
6
|
+
`.screen-kebab` / `.screen-menu` in `screens.css` carry those values. -->
|
|
2
7
|
<v-menu location="bottom end">
|
|
3
8
|
<template #activator="{ props }">
|
|
4
9
|
<v-btn
|
|
5
10
|
v-bind="props"
|
|
6
11
|
icon="mdi-dots-vertical"
|
|
7
12
|
variant="text"
|
|
8
|
-
|
|
13
|
+
class="screen-kebab"
|
|
9
14
|
/>
|
|
10
15
|
</template>
|
|
11
16
|
|
|
12
|
-
<v-list density="compact">
|
|
17
|
+
<v-list class="screen-menu" density="compact">
|
|
13
18
|
<v-list-item
|
|
19
|
+
class="screen-menu__item"
|
|
14
20
|
prepend-icon="mdi-pencil-outline"
|
|
15
21
|
title="Edit plan"
|
|
16
22
|
@click="$emit('edit')"
|
|
17
23
|
/>
|
|
18
24
|
|
|
25
|
+
<!-- Deactivating a plan is the destructive action, so it takes the
|
|
26
|
+
handoff's destructive row treatment (line 89): `--err` ink over an
|
|
27
|
+
`--err-bg` hover, not a filled red button. -->
|
|
19
28
|
<v-list-item
|
|
29
|
+
class="screen-menu__item screen-menu__item--danger"
|
|
20
30
|
prepend-icon="mdi-close-circle-outline"
|
|
21
31
|
title="Deactivate"
|
|
22
32
|
@click="$emit('deactivate')"
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
</v-chip>
|
|
2
|
+
<!--
|
|
3
|
+
The design's status pill, not Vuetify's tonal chip. The word is passed
|
|
4
|
+
through so `utils/status.ts` picks the tone: "Active" -> ok, and "Deactive"
|
|
5
|
+
is not a word the map names, so it comes out neutral - the same two colours
|
|
6
|
+
the old `success` / `grey` chip drew, now from the shared tokens.
|
|
7
|
+
-->
|
|
8
|
+
<StatusChip :status="isActive ? 'Active' : 'Deactive'" />
|
|
10
9
|
</template>
|
|
11
10
|
|
|
12
11
|
<script setup lang="ts">
|
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
{{ formatted }}
|
|
5
5
|
</span>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<!--
|
|
8
|
+
The overflow count is a tag, not a status, so it takes the design's
|
|
9
|
+
dotless neutral chip rather than Vuetify's default grey one.
|
|
10
|
+
-->
|
|
11
|
+
<StatusChip
|
|
8
12
|
v-if="extraCount > 0 && !showAll"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
</v-chip>
|
|
13
|
+
tone="neutral"
|
|
14
|
+
:dot="false"
|
|
15
|
+
:label="`+ ${extraCount}`"
|
|
16
|
+
/>
|
|
14
17
|
</div>
|
|
15
18
|
</template>
|
|
16
19
|
|