@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,6 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
-
|
|
3
|
+
<!-- AppCard, not VCard: the design's 14px radius and 1px rule, without
|
|
4
|
+
Vuetify's own elevation and 4px corner fighting the class for it.
|
|
5
|
+
Same swap as TiptapEditor, which wraps the same editor. -->
|
|
6
|
+
<AppCard class="mx-auto">
|
|
4
7
|
<VuetifyTiptap
|
|
5
8
|
v-model="content"
|
|
6
9
|
markdown-theme="github"
|
|
@@ -9,7 +12,7 @@
|
|
|
9
12
|
:maxWidth="maxWidth"
|
|
10
13
|
:disabled="isViewMode"
|
|
11
14
|
/>
|
|
12
|
-
</
|
|
15
|
+
</AppCard>
|
|
13
16
|
</div>
|
|
14
17
|
</template>
|
|
15
18
|
|
|
@@ -1,33 +1,78 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The little "i" that explains a field.
|
|
3
|
+
|
|
4
|
+
TWO FIXES, one of them the same defect batch P found in the toast:
|
|
5
|
+
|
|
6
|
+
1. `size` is declared `default: ""`. An EMPTY STRING IS NOT `undefined`, so
|
|
7
|
+
Vue's default machinery never runs and the empty string reaches Vuetify,
|
|
8
|
+
which builds the class `v-btn--size-` - a class that matches nothing. The
|
|
9
|
+
button then had no size class at all and fell back to the bare `.v-btn`
|
|
10
|
+
box. `props.size || undefined` lets Vuetify's own default apply when a
|
|
11
|
+
caller says nothing, which is what the prop was written to mean.
|
|
12
|
+
2. `p-0 m-0` are not Vuetify classes and never were - nothing in this project
|
|
13
|
+
defines them. Dead attributes, removed.
|
|
14
|
+
|
|
15
|
+
DESIGN GAP, STATED: the handoff draws no tooltip anywhere (`grep -i tooltip`
|
|
16
|
+
returns nothing). So the surface below is not invented - it is the same
|
|
17
|
+
assembly the toast uses for the same reason: the design's inner radius, its
|
|
18
|
+
menu shadow, its font and its button type scale, applied to Vuetify's
|
|
19
|
+
tooltip in place of a 4px Roboto pill.
|
|
20
|
+
-->
|
|
1
21
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
22
|
+
<v-tooltip v-bind="$attrs" :text="text" content-class="app-tooltip" @click.stop>
|
|
23
|
+
<template #activator="{ props: activatorProps }">
|
|
24
|
+
<v-btn
|
|
25
|
+
icon="mdi-information-symbol"
|
|
26
|
+
v-bind="activatorProps"
|
|
27
|
+
class="d-flex align-center"
|
|
28
|
+
:density="density"
|
|
29
|
+
:size="props.size || undefined"
|
|
30
|
+
color="primary-button"
|
|
31
|
+
/>
|
|
32
|
+
</template>
|
|
33
|
+
</v-tooltip>
|
|
8
34
|
</template>
|
|
9
35
|
|
|
10
36
|
<script setup lang="ts">
|
|
37
|
+
import type { VTooltip } from "vuetify/components";
|
|
11
38
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
type TTooltipDensity = VTooltip["$props"]["density"]
|
|
39
|
+
type TTooltipDensity = VTooltip["$props"]["density"];
|
|
15
40
|
|
|
16
41
|
const props = defineProps({
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
})
|
|
30
|
-
|
|
42
|
+
text: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: "",
|
|
45
|
+
},
|
|
46
|
+
size: {
|
|
47
|
+
type: String,
|
|
48
|
+
default: "",
|
|
49
|
+
},
|
|
50
|
+
density: {
|
|
51
|
+
type: String as PropType<TTooltipDensity>,
|
|
52
|
+
default: "default",
|
|
53
|
+
},
|
|
54
|
+
});
|
|
31
55
|
</script>
|
|
32
56
|
|
|
33
|
-
<style
|
|
57
|
+
<style>
|
|
58
|
+
/* NOT scoped: a tooltip teleports to the overlay container, outside this
|
|
59
|
+
component's DOM, so a scoped rule cannot reach it. The class is namespaced
|
|
60
|
+
for the same reason. */
|
|
61
|
+
.v-tooltip > .v-overlay__content.app-tooltip {
|
|
62
|
+
/* MEASURED FIRST, then fixed. Left to Vuetify the panel came out
|
|
63
|
+
`rgb(251,251,248)` on the light page - `--sidebar`, the navigation-rail
|
|
64
|
+
colour, 1.03:1 against `--bg` with no border. The identical fall-through
|
|
65
|
+
batch P found behind the invisible toast. `--card` + `--border` is what
|
|
66
|
+
every other floating panel in this product uses (see `.app-profile-menu`
|
|
67
|
+
in `Layout/Header.vue`), so the edge is what carries the boundary. */
|
|
68
|
+
background: var(--card);
|
|
69
|
+
border: 1px solid var(--border);
|
|
70
|
+
color: var(--text2);
|
|
71
|
+
border-radius: var(--r-inner);
|
|
72
|
+
box-shadow: var(--shadow-menu);
|
|
73
|
+
font-family: var(--font-sans);
|
|
74
|
+
font-size: var(--fs-btn);
|
|
75
|
+
font-weight: 600;
|
|
76
|
+
letter-spacing: 0;
|
|
77
|
+
}
|
|
78
|
+
</style>
|
package/components/UnitMain.vue
CHANGED
|
@@ -24,10 +24,8 @@
|
|
|
24
24
|
<!-- Primary action -->
|
|
25
25
|
<v-btn
|
|
26
26
|
v-if="canCreateUnit"
|
|
27
|
-
class="text-none mr-3"
|
|
28
|
-
|
|
29
|
-
variant="tonal"
|
|
30
|
-
size="large"
|
|
27
|
+
class="text-none mr-3 screen-btn-primary"
|
|
28
|
+
variant="flat"
|
|
31
29
|
@click="onCreateUnit()"
|
|
32
30
|
>
|
|
33
31
|
Add Unit
|
|
@@ -37,10 +35,8 @@
|
|
|
37
35
|
<template #activator="{ props: t }">
|
|
38
36
|
<v-btn
|
|
39
37
|
v-bind="t"
|
|
40
|
-
class="ma-1"
|
|
41
|
-
variant="
|
|
42
|
-
size="large"
|
|
43
|
-
rounded="pill"
|
|
38
|
+
class="ma-1 screen-icon-btn"
|
|
39
|
+
variant="flat"
|
|
44
40
|
href="/files/unit-sample-data.xlsx"
|
|
45
41
|
target="_blank"
|
|
46
42
|
download
|
|
@@ -55,10 +51,8 @@
|
|
|
55
51
|
<template #activator="{ props: t }">
|
|
56
52
|
<v-btn
|
|
57
53
|
v-bind="t"
|
|
58
|
-
class="ma-1"
|
|
59
|
-
variant="
|
|
60
|
-
size="large"
|
|
61
|
-
rounded="pill"
|
|
54
|
+
class="ma-1 screen-icon-btn"
|
|
55
|
+
variant="flat"
|
|
62
56
|
@click="onImportData"
|
|
63
57
|
>
|
|
64
58
|
<v-icon>mdi-upload</v-icon>
|
|
@@ -71,10 +65,8 @@
|
|
|
71
65
|
<template #activator="{ props: t }">
|
|
72
66
|
<v-btn
|
|
73
67
|
v-bind="t"
|
|
74
|
-
class="ma-1"
|
|
75
|
-
variant="
|
|
76
|
-
size="large"
|
|
77
|
-
rounded="pill"
|
|
68
|
+
class="ma-1 screen-icon-btn"
|
|
69
|
+
variant="flat"
|
|
78
70
|
@click="handleDownloadExcel"
|
|
79
71
|
:loading="isDownloading"
|
|
80
72
|
>
|
|
@@ -88,7 +80,7 @@
|
|
|
88
80
|
|
|
89
81
|
<v-spacer />
|
|
90
82
|
|
|
91
|
-
<v-col cols="auto">
|
|
83
|
+
<v-col cols="auto" class="filter-field">
|
|
92
84
|
<v-text-field
|
|
93
85
|
v-model="searchInput"
|
|
94
86
|
density="compact"
|
|
@@ -149,51 +141,39 @@
|
|
|
149
141
|
</HygieneUpdateMoreAction>
|
|
150
142
|
</v-dialog>
|
|
151
143
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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?
|
|
165
157
|
</v-card-text>
|
|
166
158
|
|
|
167
|
-
<
|
|
168
|
-
<v-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
variant="flat"
|
|
186
|
-
color="black"
|
|
187
|
-
class="text-none font-weight-bold"
|
|
188
|
-
height="48"
|
|
189
|
-
:loading="submitting"
|
|
190
|
-
@click="_deleteUnit"
|
|
191
|
-
>
|
|
192
|
-
Delete
|
|
193
|
-
</v-btn>
|
|
194
|
-
</v-col>
|
|
195
|
-
</v-row>
|
|
196
|
-
</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>
|
|
197
177
|
</v-card>
|
|
198
178
|
</v-dialog>
|
|
199
179
|
|
|
@@ -3,26 +3,26 @@
|
|
|
3
3
|
<v-row>
|
|
4
4
|
<v-col cols="12" md="4" class="mt-2">
|
|
5
5
|
<InputLabel class="font-weight-bold" title="Name" />
|
|
6
|
-
<v-text-field :model-value="person.name"
|
|
7
|
-
:class="{ 'no-pointer': readOnly }" />
|
|
6
|
+
<v-text-field :model-value="person.name" class="filter-field" density="comfortable"
|
|
7
|
+
:readonly="readOnly" :class="{ 'no-pointer': readOnly }" />
|
|
8
8
|
</v-col>
|
|
9
9
|
|
|
10
10
|
<v-col cols="12" md="4" class="mt-2">
|
|
11
11
|
<InputLabel class="font-weight-bold" title="Email Address" />
|
|
12
|
-
<v-text-field :model-value="person.email"
|
|
13
|
-
:class="{ 'no-pointer': readOnly }" />
|
|
12
|
+
<v-text-field :model-value="person.email" class="filter-field" density="comfortable"
|
|
13
|
+
:readonly="readOnly" :class="{ 'no-pointer': readOnly }" />
|
|
14
14
|
</v-col>
|
|
15
15
|
|
|
16
16
|
<v-col cols="12" md="4" class="mt-2">
|
|
17
17
|
<InputLabel class="font-weight-bold" title="NRIC" />
|
|
18
|
-
<v-text-field :model-value="person.nric"
|
|
19
|
-
:class="{ 'no-pointer': readOnly }" />
|
|
18
|
+
<v-text-field :model-value="person.nric" class="filter-field" density="comfortable"
|
|
19
|
+
:readonly="readOnly" :class="{ 'no-pointer': readOnly }" />
|
|
20
20
|
</v-col>
|
|
21
21
|
|
|
22
22
|
<v-col cols="12" md="4" class="mt-2">
|
|
23
23
|
<InputLabel class="font-weight-bold" title="Mobile Number" />
|
|
24
|
-
<v-text-field :model-value="person.contact"
|
|
25
|
-
:class="{ 'no-pointer': readOnly }" />
|
|
24
|
+
<v-text-field :model-value="person.contact" class="filter-field" density="comfortable"
|
|
25
|
+
:readonly="readOnly" :class="{ 'no-pointer': readOnly }" />
|
|
26
26
|
</v-col>
|
|
27
27
|
</v-row>
|
|
28
28
|
|
|
@@ -30,11 +30,14 @@
|
|
|
30
30
|
<v-col cols="12" md="4" class="mt-2">
|
|
31
31
|
<InputLabel class="font-weight-bold" title="Other Documents and Files" :viewMode="readOnly" />
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
<!-- Was `text-blue-darken-2`, a fixed Vuetify blue that stays the same
|
|
34
|
+
on the dark theme. An empty note is `--muted`; a file link is
|
|
35
|
+
`--accent-text`, the design's link ink. -->
|
|
36
|
+
<p v-if="!person.files?.length" class="screen-hint unit-person__empty ml-2 mt-5">
|
|
34
37
|
**No documents to display**
|
|
35
38
|
</p>
|
|
36
|
-
<v-list v-else dense nav class="mt-2">
|
|
37
|
-
<v-list-item v-for="file in person.files" :key="file.id" class="
|
|
39
|
+
<v-list v-else dense nav class="mt-2 unit-person__files">
|
|
40
|
+
<v-list-item v-for="file in person.files" :key="file.id" class="unit-person__file"
|
|
38
41
|
:href="getFileUrl(file.id)" target="_blank">
|
|
39
42
|
<v-list-item-content>
|
|
40
43
|
<v-list-item-title class="d-flex align-center">
|
|
@@ -53,11 +56,14 @@
|
|
|
53
56
|
<v-col v-if="prop.showOwnerOption" cols="12" md="4">
|
|
54
57
|
<v-checkbox :model-value="person.isOwner" readonly hide-details density="compact" @click="handleClick">
|
|
55
58
|
<template #label>
|
|
56
|
-
<span class="
|
|
59
|
+
<span class="unit-person__check-label ml-2">Is Owner?</span>
|
|
57
60
|
</template>
|
|
58
61
|
</v-checkbox>
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
<!-- `text-gray-5` is not a Vuetify class and not a token - it resolved
|
|
64
|
+
to nothing, so this sat on the body ink. `.screen-hint` is the
|
|
65
|
+
design's sub-line. -->
|
|
66
|
+
<span class="d-flex screen-hint ml-7">As owner, you will be receiving emails and updates
|
|
61
67
|
related to this unit.</span>
|
|
62
68
|
</v-col>
|
|
63
69
|
</v-row>
|
|
@@ -120,4 +126,27 @@ const handleClick = () => {
|
|
|
120
126
|
.no-pointer {
|
|
121
127
|
pointer-events: none;
|
|
122
128
|
}
|
|
129
|
+
|
|
130
|
+
/* `.screen-hint` carries the ink; only the size is stated here, and it is the
|
|
131
|
+
cell size, not Vuetify's `text-caption` (12px/400 Roboto). */
|
|
132
|
+
.unit-person__empty {
|
|
133
|
+
font-size: var(--fs-cell);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* A `v-list` paints Vuetify's own `surface` - a square-cornered lighter slab
|
|
137
|
+
sitting on the card, measured on the dark theme. The files are links on the
|
|
138
|
+
card, so the list carries no surface of its own. */
|
|
139
|
+
.unit-person__files {
|
|
140
|
+
background: transparent;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.unit-person__file {
|
|
144
|
+
color: var(--accent-text);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.unit-person__check-label {
|
|
148
|
+
font-size: var(--fs-cell);
|
|
149
|
+
font-weight: var(--fw-cell);
|
|
150
|
+
color: var(--text);
|
|
151
|
+
}
|
|
123
152
|
</style>
|
|
@@ -1,36 +1,24 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<v-card width="100%">
|
|
3
|
-
<v-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
tile
|
|
23
|
-
block
|
|
24
|
-
variant="text"
|
|
25
|
-
class="text-none"
|
|
26
|
-
size="48"
|
|
27
|
-
@click="cancel"
|
|
28
|
-
>
|
|
29
|
-
Cancel
|
|
30
|
-
</v-btn>
|
|
31
|
-
</v-col>
|
|
32
|
-
</v-row>
|
|
33
|
-
</v-toolbar>
|
|
2
|
+
<v-card width="100%" class="screen-modal vehicle-add">
|
|
3
|
+
<v-card-title>Add Vehicle</v-card-title>
|
|
4
|
+
|
|
5
|
+
<div class="screen-modal__body vehicle-add__body">
|
|
6
|
+
<p class="vehicle-add__hint">Please Select Status</p>
|
|
7
|
+
<AppButton
|
|
8
|
+
v-for="item in selection"
|
|
9
|
+
:key="item.value"
|
|
10
|
+
class="vehicle-add__option"
|
|
11
|
+
@click="select(item.value)"
|
|
12
|
+
>
|
|
13
|
+
{{ item.label }}
|
|
14
|
+
</AppButton>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="vehicle-add__footer">
|
|
18
|
+
<AppButton variant="ghost" class="vehicle-add__cancel" @click="cancel">
|
|
19
|
+
Cancel
|
|
20
|
+
</AppButton>
|
|
21
|
+
</div>
|
|
34
22
|
</v-card>
|
|
35
23
|
</template>
|
|
36
24
|
|
|
@@ -56,3 +44,31 @@ function select(value: TVehicleType | 'seasonpass') {
|
|
|
56
44
|
emit("select", value);
|
|
57
45
|
}
|
|
58
46
|
</script>
|
|
47
|
+
|
|
48
|
+
<style scoped>
|
|
49
|
+
/* The three choices are full-width by the screen's own design, so the only
|
|
50
|
+
thing said here is the width and the stack - the button itself is AppButton. */
|
|
51
|
+
.vehicle-add__body {
|
|
52
|
+
padding: 20px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.vehicle-add__hint {
|
|
56
|
+
margin: 0 0 14px;
|
|
57
|
+
text-align: center;
|
|
58
|
+
font-size: var(--fs-cell);
|
|
59
|
+
color: var(--muted);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.vehicle-add__option {
|
|
63
|
+
display: flex;
|
|
64
|
+
width: 100%;
|
|
65
|
+
margin-bottom: 10px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.vehicle-add__footer {
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: flex-end;
|
|
71
|
+
gap: 8px;
|
|
72
|
+
padding: 0 20px 20px;
|
|
73
|
+
}
|
|
74
|
+
</style>
|