@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.
Files changed (283) hide show
  1. package/assets/css/primitives.css +1113 -0
  2. package/assets/css/screens.css +1097 -0
  3. package/assets/css/shell.css +258 -0
  4. package/assets/css/tokens.css +236 -0
  5. package/components/AcceptDialog.vue +17 -18
  6. package/components/AccessCard/AvailableStats.vue +24 -16
  7. package/components/AccessCardAddForm.vue +42 -42
  8. package/components/AccessCardAssignToUnitForm.vue +13 -21
  9. package/components/AccessCardDeleteDialog.vue +41 -39
  10. package/components/AccessCardDetailsDialog.vue +125 -79
  11. package/components/AccessCardPreviewDialog.vue +58 -84
  12. package/components/AccessCardQrTagging.vue +60 -63
  13. package/components/AccessCardReplaceForm.vue +27 -23
  14. package/components/AccessManagement.vue +86 -85
  15. package/components/AddEqupmentForm.vue +18 -22
  16. package/components/AddPassKeyToVisitor.vue +95 -73
  17. package/components/AppButton.vue +62 -0
  18. package/components/AppCard.vue +20 -0
  19. package/components/AppDateField.vue +49 -0
  20. package/components/AppField.vue +76 -0
  21. package/components/AppKpiTile.vue +65 -0
  22. package/components/AppSegmented.vue +38 -0
  23. package/components/AppSelect.vue +247 -0
  24. package/components/AreaChecklistHistoryLogs.vue +51 -44
  25. package/components/AreaChecklistHistoryMain.vue +14 -7
  26. package/components/AreaFormDialog.vue +71 -59
  27. package/components/AreaMain.vue +73 -107
  28. package/components/AttachmentsViewer.vue +84 -22
  29. package/components/AttendanceCheckInOutDialog.vue +85 -88
  30. package/components/AttendanceDetailsDialog.vue +57 -63
  31. package/components/AttendanceMain.vue +4 -3
  32. package/components/AttendanceMapSearchDialog.vue +42 -44
  33. package/components/AttendanceSettingsDialog.vue +79 -63
  34. package/components/Avatar/Main.vue +54 -2
  35. package/components/BillingMain.vue +26 -30
  36. package/components/BtnUploadFile.vue +53 -11
  37. package/components/BuildingForm.vue +34 -27
  38. package/components/BuildingManagement/buildings.vue +39 -39
  39. package/components/BuildingManagement/units.vue +26 -42
  40. package/components/BuildingUnitFormAdd.vue +20 -23
  41. package/components/BuildingUnitFormEdit.vue +8 -4
  42. package/components/BulletinBoardForm.vue +19 -24
  43. package/components/BulletinBoardManagement.vue +49 -57
  44. package/components/BulletinBoardView.vue +9 -6
  45. package/components/BulletinExpirationChip.vue +13 -4
  46. package/components/Button/Close.vue +2 -2
  47. package/components/CameraForm.vue +21 -22
  48. package/components/CameraMain.vue +50 -49
  49. package/components/Card/DeleteConfirmation.vue +24 -22
  50. package/components/Card/MemberInfoSummary.vue +28 -3
  51. package/components/Card/Toggle.vue +15 -3
  52. package/components/CardToolbar.vue +37 -0
  53. package/components/Carousel.vue +56 -36
  54. package/components/Chat/Bubbles.vue +43 -14
  55. package/components/Chat/Information.vue +49 -32
  56. package/components/Chat/ListCard.vue +38 -9
  57. package/components/Chat/Message.vue +41 -15
  58. package/components/Chat/Navigation.vue +27 -15
  59. package/components/Chat/SkeletonLoader.vue +9 -2
  60. package/components/ChecklistItemRow.vue +25 -1
  61. package/components/CleaningScheduleMain.vue +44 -49
  62. package/components/ClientDetailForm.vue +81 -56
  63. package/components/ClientMain.vue +92 -82
  64. package/components/ConfirmDialog.vue +14 -8
  65. package/components/Container/Standard.vue +9 -7
  66. package/components/CreateSubsciptionPlan.vue +148 -89
  67. package/components/DashboardEmptyState.vue +48 -3
  68. package/components/DashboardMain.vue +924 -676
  69. package/components/DashboardPanel.vue +84 -21
  70. package/components/DeliveryCompany.vue +34 -20
  71. package/components/Dialog/DeleteConfirmation.vue +20 -21
  72. package/components/Dialog/ReplaceAutofillPrompt.vue +19 -26
  73. package/components/Dialog/ReusablePrompt.vue +30 -29
  74. package/components/Dialog/UpdateMoreAction.vue +62 -59
  75. package/components/DocumentForm.vue +14 -21
  76. package/components/DocumentManagement.vue +162 -108
  77. package/components/DocumentViewer.vue +29 -12
  78. package/components/DrawImage.vue +29 -21
  79. package/components/EntryPass/QrTemplatePreview.vue +27 -16
  80. package/components/EntryPassInformation.vue +40 -10
  81. package/components/EntryPassMain.vue +49 -27
  82. package/components/EquipmentItemMain.vue +84 -97
  83. package/components/EquipmentManagementMain.vue +81 -103
  84. package/components/Facility/BookingSetup.vue +43 -52
  85. package/components/Feedback/Form.vue +26 -12
  86. package/components/FeedbackMain.vue +35 -49
  87. package/components/FileInput.vue +75 -58
  88. package/components/FileInputWithList.vue +59 -12
  89. package/components/FormDialog.vue +60 -21
  90. package/components/HidAccessLogDashboard.vue +512 -490
  91. package/components/HidCameraCaptureDialog.vue +216 -0
  92. package/components/HidEnabledGate.vue +67 -9
  93. package/components/HidIntercomManagement.vue +1322 -653
  94. package/components/HidQrCodeConfiguration.vue +1030 -258
  95. package/components/HidReaderForm.vue +142 -59
  96. package/components/HidReaderManagement.vue +211 -323
  97. package/components/HidServiceSettingsPanel.vue +44 -13
  98. package/components/HidUserEnrollment.vue +1185 -412
  99. package/components/HygieneUpdateMoreAction.vue +44 -44
  100. package/components/IncidentReport/Authorities.vue +30 -18
  101. package/components/IncidentReport/IncidentInformation.vue +10 -10
  102. package/components/IncidentReport/IncidentInformationDownload.vue +3 -4
  103. package/components/IncidentReport/affectedEntities.vue +41 -20
  104. package/components/Input/Date.vue +3 -0
  105. package/components/Input/DatePicker.vue +1 -2
  106. package/components/Input/DateTimePicker.vue +1 -1
  107. package/components/Input/File.vue +55 -10
  108. package/components/Input/FileV2.vue +39 -6
  109. package/components/Input/InputPhoneNumberV2.vue +2 -1
  110. package/components/Input/ListGroupSelection.vue +56 -8
  111. package/components/Input/NRICNumber.vue +1 -0
  112. package/components/Input/NewDate.vue +1 -0
  113. package/components/Input/Number.vue +1 -0
  114. package/components/Input/Password.vue +1 -0
  115. package/components/Input/PhoneNumber.vue +21 -1
  116. package/components/Input/VehicleNumber.vue +1 -0
  117. package/components/InputLabel.vue +2 -2
  118. package/components/InvitationClientForm.vue +21 -19
  119. package/components/InvitationForm.vue +15 -21
  120. package/components/InvitationMain.vue +46 -61
  121. package/components/Layout/Header.vue +263 -36
  122. package/components/Layout/NavigationDrawer.vue +300 -30
  123. package/components/ListItem.vue +33 -3
  124. package/components/LocalPagination.vue +27 -3
  125. package/components/ManageChecklistMain.vue +136 -86
  126. package/components/MemberInformation.vue +32 -16
  127. package/components/MemberMain.vue +113 -93
  128. package/components/MyAttendanceMain.vue +3 -5
  129. package/components/NavigationItem.vue +83 -3
  130. package/components/Nfc/NFCPatrolReportMain.vue +47 -33
  131. package/components/Nfc/NFCPatrolRouteForm.vue +18 -20
  132. package/components/Nfc/NFCPatrolRouteMain.vue +116 -103
  133. package/components/Nfc/NFCPatrolSettings.vue +14 -4
  134. package/components/Nfc/NFCTagForm.vue +22 -8
  135. package/components/Nfc/NFCTagMain.vue +41 -43
  136. package/components/Nfc/PatrolReport/DailyReportTab.vue +8 -1
  137. package/components/Nfc/PatrolReport/MonthlyReportTab.vue +8 -1
  138. package/components/Nfc/PatrolReport/MonthlyReportTable.vue +5 -3
  139. package/components/Nfc/PatrolReport/PatrolActivityTable.vue +26 -6
  140. package/components/Nfc/PatrolReport/PatrolReportTab.vue +8 -0
  141. package/components/Nfc/PatrolReport/PatrolRouteSummary.vue +41 -9
  142. package/components/Nfc/PatrolReport/RemarksDialog.vue +39 -9
  143. package/components/Nfc/PatrolReport/ReportEmptyState.vue +29 -9
  144. package/components/Nfc/PatrolReport/ReportFilters.vue +19 -10
  145. package/components/Nfc/PatrolReport/ReportLocationHeader.vue +32 -6
  146. package/components/Nfc/PatrolReport/SummaryReportTable.vue +28 -6
  147. package/components/NotificationSettings.vue +373 -0
  148. package/components/NumberSettingField.vue +9 -2
  149. package/components/OnlineFormConfigurationForm.vue +725 -237
  150. package/components/OnlineFormFill.vue +213 -106
  151. package/components/OnlineFormRenderPreview.vue +25 -30
  152. package/components/OnlineFormsConfiguration.vue +113 -109
  153. package/components/OrgViewDialog.vue +34 -16
  154. package/components/OvernightParkingAvailability.vue +49 -26
  155. package/components/OvernightParkingManagement.vue +78 -18
  156. package/components/PageHeader.vue +43 -0
  157. package/components/PassInformation.vue +109 -53
  158. package/components/PasswordConfirmation.vue +44 -26
  159. package/components/PeopleForm.vue +41 -20
  160. package/components/PhotoUpload.vue +110 -48
  161. package/components/PlaceholderComponent.vue +35 -19
  162. package/components/PlanActionsMenu.vue +12 -2
  163. package/components/PlanStatusBadge.vue +7 -8
  164. package/components/PlateNumberDisplay.vue +9 -6
  165. package/components/QrTemplate/PrintDialog.vue +66 -43
  166. package/components/RolePermissionFormCreate.vue +104 -79
  167. package/components/RolePermissionFormPreviewUpdate.vue +111 -109
  168. package/components/RolePermissionMain.vue +183 -81
  169. package/components/ScanVisitorQRCode.vue +99 -35
  170. package/components/ScheduleAreaMain.vue +34 -59
  171. package/components/ScheduleTaskForm.vue +61 -42
  172. package/components/ScheduleTaskMain.vue +56 -69
  173. package/components/SearchVehicleNumberUser.vue +39 -37
  174. package/components/ServiceProviderFormCreate.vue +29 -20
  175. package/components/ServiceProviderInvitationPrompt.vue +155 -0
  176. package/components/ServiceProviderMain.vue +601 -432
  177. package/components/Signature.vue +40 -34
  178. package/components/SignaturePad.vue +5 -29
  179. package/components/SiteSettings.vue +41 -11
  180. package/components/SiteSettingsWorkOrder.vue +61 -30
  181. package/components/SlideCardGroup.vue +35 -11
  182. package/components/Snackbar.vue +36 -3
  183. package/components/SpecificAttr.vue +18 -8
  184. package/components/StatusChip.vue +156 -0
  185. package/components/StockCard.vue +17 -12
  186. package/components/SubscriptionPlanTable.vue +207 -140
  187. package/components/SwitchContext.vue +201 -9
  188. package/components/TableHygiene.vue +36 -46
  189. package/components/TableList.vue +10 -10
  190. package/components/TableListSecondary.vue +105 -54
  191. package/components/TableMain.vue +251 -78
  192. package/components/TableV3.vue +61 -70
  193. package/components/TiptapEditor.vue +33 -40
  194. package/components/TiptapEditorQr.vue +5 -2
  195. package/components/Tooltip/Info.vue +69 -24
  196. package/components/UnitMain.vue +40 -60
  197. package/components/UnitPersonCard.vue +42 -13
  198. package/components/VehicleAddSelection.vue +48 -32
  199. package/components/VehicleForm.vue +112 -129
  200. package/components/VehicleManagement.vue +26 -12
  201. package/components/VehicleUpdateMoreAction.vue +59 -46
  202. package/components/VisitorDataFromScannedQRCodeForm.vue +90 -65
  203. package/components/VisitorForm.vue +774 -210
  204. package/components/VisitorFormSelection.vue +40 -37
  205. package/components/VisitorManagement.vue +239 -82
  206. package/components/VisitorPassKeyQRScanner.vue +65 -18
  207. package/components/VisitorSearchResultSummary.vue +60 -16
  208. package/components/VisitorSocketPopUp.vue +22 -14
  209. package/components/VisitorsReportPreview.vue +44 -29
  210. package/components/WorkOrder/Create.vue +26 -17
  211. package/components/WorkOrder/ListView.vue +38 -7
  212. package/components/WorkOrder/Main.vue +62 -59
  213. package/composables/useFeedback.ts +3 -3
  214. package/composables/useHidAmico.ts +269 -0
  215. package/composables/useHidNavigation.ts +2 -9
  216. package/composables/useMember.ts +3 -3
  217. package/composables/useNFCPatrolDailyReport.ts +13 -0
  218. package/composables/useNFCPatrolMonthlyReport.ts +22 -56
  219. package/composables/useNFCPatrolReport.ts +13 -0
  220. package/composables/useNotificationPreference.ts +87 -0
  221. package/composables/useOnlineFormPages.ts +2 -0
  222. package/composables/useRole.ts +22 -0
  223. package/composables/useServiceProvider.ts +3 -3
  224. package/composables/useServiceProviderInvitation.ts +145 -0
  225. package/composables/useSipWebPhone.ts +336 -0
  226. package/composables/useSubscriptionPlan.ts +62 -0
  227. package/composables/useThemePreference.ts +63 -0
  228. package/composables/useVisitor.ts +6 -1
  229. package/composables/useWebUsb.ts +127 -37
  230. package/composables/useWorkOrder.ts +17 -3
  231. package/error.vue +30 -6
  232. package/nuxt.config.ts +36 -0
  233. package/package.json +25 -4
  234. package/pages/[org]/[site]/access-mgmt/administrator/index.vue +2 -2
  235. package/pages/[org]/[site]/access-mgmt/{identity-mapping → hid-cards}/index.vue +2 -2
  236. package/pages/[org]/[site]/access-mgmt/intercom/index.vue +1 -1
  237. package/pages/notification-settings.vue +19 -0
  238. package/pages/payment-method-linked.vue +34 -10
  239. package/pages/require-customer.vue +48 -10
  240. package/pages/require-organization-membership.vue +32 -8
  241. package/pages/unauthorized.vue +29 -4
  242. package/plugins/secure-member.client.ts +21 -56
  243. package/plugins/vuetify.ts +69 -2
  244. package/types/nfc-patrol-report.ts +3 -2
  245. package/types/site.d.ts +71 -0
  246. package/types/subscription.ts +18 -11
  247. package/utils/breadcrumb.test.ts +108 -0
  248. package/utils/breadcrumb.ts +82 -0
  249. package/utils/dashboard.test.ts +118 -0
  250. package/utils/dashboard.ts +53 -0
  251. package/utils/data.test.ts +95 -0
  252. package/utils/data.ts +40 -2
  253. package/utils/hid-discover.test.ts +102 -0
  254. package/utils/list-page.test.ts +60 -0
  255. package/utils/list-page.ts +38 -0
  256. package/utils/materialSymbols.ts +363 -0
  257. package/utils/nav-sections.test.ts +190 -0
  258. package/utils/nav-sections.ts +151 -0
  259. package/utils/nfc-patrol-report.test.ts +130 -0
  260. package/utils/nfc-patrol-report.ts +101 -0
  261. package/utils/role.test.ts +69 -0
  262. package/utils/role.ts +10 -0
  263. package/utils/route-name.test.ts +85 -0
  264. package/utils/route-name.ts +24 -0
  265. package/utils/status.test.ts +110 -0
  266. package/utils/status.ts +135 -0
  267. package/utils/table-card.test.ts +84 -0
  268. package/utils/theme-aa-ledger.ts +148 -0
  269. package/utils/theme.test.ts +485 -7
  270. package/utils/theme.ts +295 -110
  271. package/.changeset/README.md +0 -8
  272. package/.changeset/config.json +0 -11
  273. package/.editorconfig +0 -12
  274. package/.github/workflows/main.yml +0 -17
  275. package/.github/workflows/publish-staging.yml +0 -47
  276. package/.github/workflows/publish.yml +0 -39
  277. package/PUBLISHING.md +0 -269
  278. package/components/HidIdentityMapping.vue +0 -975
  279. package/components/ScheduleTaskAreaFormDialog.vue +0 -144
  280. package/components/ScheduleTaskAreaUpdateMoreAction.vue +0 -109
  281. package/components/ScheduleTastTicketMain.vue +0 -182
  282. package/components/TableWithButton.vue +0 -94
  283. package/test/visitor-socket.test.mjs +0 -36
@@ -1,31 +1,37 @@
1
+ <!--
2
+ THE DASHBOARD PANEL.
3
+
4
+ The `isPropertyMode` branch of DashboardMain already draws its panels the
5
+ design's way, inline: a `.dashboard-card` surface carrying `.figma-panel`
6
+ padding, a header whose `h2` is the card title and whose action is a bare
7
+ text affordance, then the body. This component is what the OTHER two
8
+ branches use, and it was still a `v-card` with Vuetify typography - which is
9
+ why the same dashboard looked new for property-management and old for the
10
+ five service verticals.
11
+
12
+ So it now draws that same construction, with the property branch's literal
13
+ values, on `AppCard`. Copied here rather than reached for across components:
14
+ the `.figma-*` rules are global to DashboardMain, and depending on a
15
+ sibling's stylesheet is how a panel silently loses its padding later.
16
+ -->
1
17
  <template>
2
- <v-card
3
- flat
4
- border
5
- rounded="lg"
6
- class="d-flex flex-column w-100"
7
- style="min-height: 200px"
8
- >
9
- <div class="d-flex align-center justify-space-between pa-5 pb-3">
10
- <h2 class="text-body-1 font-weight-black text-blue-grey-darken-4 mb-0">
11
- {{ title }}
12
- </h2>
13
- <v-btn
18
+ <AppCard class="dashboard-panel">
19
+ <div class="dashboard-panel__header">
20
+ <h2>{{ title }}</h2>
21
+ <button
14
22
  v-if="actionLabel"
15
- variant="text"
16
- color="primary"
17
- size="small"
18
- class="text-none font-weight-bold"
23
+ class="dashboard-panel__action"
24
+ type="button"
19
25
  @click="$emit('action')"
20
26
  >
21
27
  {{ actionLabel }}
22
- </v-btn>
28
+ </button>
23
29
  </div>
24
30
 
25
- <div class="flex-1-1-100 overflow-y-auto pa-5 pt-0" style="max-height: 400px">
31
+ <div class="dashboard-panel__body">
26
32
  <slot />
27
33
  </div>
28
- </v-card>
34
+ </AppCard>
29
35
  </template>
30
36
 
31
37
  <script setup lang="ts">
@@ -36,9 +42,66 @@ defineProps({
36
42
  },
37
43
  actionLabel: {
38
44
  type: String,
39
- default: '',
45
+ default: "",
40
46
  },
41
47
  });
42
48
 
43
- defineEmits(['action']);
49
+ defineEmits(["action"]);
44
50
  </script>
51
+
52
+ <style scoped>
53
+ /* `.dashboard-card` + `.dashboard-panel` + `.figma-panel`, resolved: the
54
+ figma layer wins the shadow and the padding, so the panel is a flat 14px
55
+ card at 26px/28px/24px and 276px tall. */
56
+ .dashboard-panel {
57
+ box-shadow: none;
58
+ display: flex;
59
+ flex-direction: column;
60
+ font-family: var(--font-sans);
61
+ height: 100%;
62
+ min-height: 276px;
63
+ padding: 26px 28px 24px;
64
+ width: 100%;
65
+ }
66
+
67
+ .dashboard-panel__header {
68
+ align-items: center;
69
+ display: flex;
70
+ gap: 16px;
71
+ justify-content: space-between;
72
+ min-height: 18px;
73
+ }
74
+
75
+ /* The panel heading is the design's card title: 15.5px/800, sentence case. */
76
+ .dashboard-panel__header h2 {
77
+ color: var(--text);
78
+ font-family: var(--font-sans);
79
+ font-size: var(--fs-card-title);
80
+ font-weight: var(--fw-card-title);
81
+ letter-spacing: 0;
82
+ line-height: 1.2;
83
+ margin: 0;
84
+ text-transform: none;
85
+ }
86
+
87
+ /* Not an AppButton: the design's panel action is a text affordance, 12px/800
88
+ with no box - the same one the property branch already ships. */
89
+ .dashboard-panel__action {
90
+ appearance: none;
91
+ background: transparent;
92
+ border: 0;
93
+ color: rgb(var(--v-theme-primary));
94
+ cursor: pointer;
95
+ font-size: 12px;
96
+ font-weight: 800;
97
+ line-height: 1;
98
+ padding: 0;
99
+ white-space: nowrap;
100
+ }
101
+
102
+ .dashboard-panel__body {
103
+ flex: 1;
104
+ margin-top: 20px;
105
+ min-width: 0;
106
+ }
107
+ </style>
@@ -1,22 +1,27 @@
1
1
  <template>
2
2
  <v-row no-gutters class="pa-3">
3
3
  <v-col cols="12">
4
- <v-card width="100%" variant="outlined" border="thin" rounded="lg" max-width="700" max-height="500"
5
- style="overflow-y: auto;">
6
- <v-toolbar density="compact" color="grey-lighten-4 pl-2 pr-4">
7
- <v-row v-if="!hideTitle" no-gutters class="px-3 font-weight-bold">
8
- Delivery Companies
9
- </v-row>
4
+ <AppCard class="delivery-company__card">
5
+ <!--
6
+ The one toolbar the design puts on top of the card. It was a
7
+ hardcoded grey-lighten-4 bar, which stays light in dark mode
8
+ and painted as a white slab there.
9
+ -->
10
+ <CardToolbar>
11
+ <template #left>
12
+ <span v-if="!hideTitle" class="screen-card-title">
13
+ Delivery Companies
14
+ </span>
15
+ </template>
10
16
 
11
- <template #append>
12
- <v-btn v-if="!props.readOnly" variant="flat" color="primary" class="text-none"
13
- @click="handleAdd">
17
+ <template #right>
18
+ <AppButton v-if="!props.readOnly" @click="handleAdd">
14
19
  Add
15
- </v-btn>
20
+ </AppButton>
16
21
  </template>
17
- </v-toolbar>
22
+ </CardToolbar>
18
23
 
19
- <v-card-text class="pa-0" style="min-height: 100px;">
24
+ <div class="pa-0" style="min-height: 100px;">
20
25
  <template v-if="companies.length > 0">
21
26
  <draggable :list="companies" item-key="index" class="drag-area"
22
27
  :disabled="editingIndex !== null">
@@ -60,11 +65,11 @@
60
65
  </draggable>
61
66
  </template>
62
67
 
63
- <div v-else class="text-center py-5">
68
+ <div v-else class="screen-empty text-center py-5">
64
69
  No delivery companies added yet.
65
70
  </div>
66
- </v-card-text>
67
- </v-card>
71
+ </div>
72
+ </AppCard>
68
73
  </v-col>
69
74
 
70
75
  <v-dialog v-model="dialog.add" persistent width="450">
@@ -82,12 +87,13 @@
82
87
  </v-card-text>
83
88
 
84
89
  <v-toolbar>
85
- <v-row no-gutters justify="end" align="center" class="px-5">
86
- <v-btn variant="text" text="Cancel" @click="dialog.add = false" />
87
- <v-btn variant="flat" color="primary" class="text-none ml-2"
88
- @click="saveEdit(companies.length)">
90
+ <v-row no-gutters justify="end" align="center" class="px-5 ga-2">
91
+ <AppButton variant="ghost" @click="dialog.add = false">
92
+ Cancel
93
+ </AppButton>
94
+ <AppButton @click="saveEdit(companies.length)">
89
95
  Add
90
- </v-btn>
96
+ </AppButton>
91
97
  </v-row>
92
98
  </v-toolbar>
93
99
  </v-card>
@@ -237,4 +243,12 @@ watch(initialCompanies, (val) => {
237
243
  .drag-handle {
238
244
  cursor: grab;
239
245
  }
246
+
247
+ /* The size cap the v-card carried as max-width/max-height attributes, kept
248
+ verbatim so the panel does not grow to the full page width. */
249
+ .delivery-company__card {
250
+ max-width: 700px;
251
+ max-height: 500px;
252
+ overflow-y: auto;
253
+ }
240
254
  </style>
@@ -1,30 +1,29 @@
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
- <span> {{ promptTitle }}</span>
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"> {{ promptTitle }}</span>
5
5
 
6
- <div v-if="message" class="text-error mt-2">
6
+ <!-- `text-error` is Vuetify's own class over `--v-theme-error`,
7
+ which is the design's `--err` in both themes - already a token,
8
+ so it stays. -->
9
+ <div v-if="message" class="text-error mt-2">
7
10
  {{ message }} Do you want to delete anyway?
8
11
  </div>
9
12
  </v-card-text>
10
13
 
11
- <v-toolbar class="pa-0" density="compact">
12
- <v-row no-gutters>
13
- <v-col cols="6" class="pa-0">
14
- <v-btn block variant="text" class="text-none" size="large" tile @click="emit('close')"
15
- height="48">
16
- Cancel
17
- </v-btn>
18
- </v-col>
14
+ <!-- The design's footer: two equal-width buttons, ghost then primary,
15
+ on a bordered strip. The handoff draws no destructive variant, so
16
+ the confirming action takes the primary shape like every other
17
+ modal's Submit. -->
18
+ <div class="screen-modal__footer">
19
+ <v-btn class="screen-btn-ghost" variant="outlined" @click="emit('close')">
20
+ Cancel
21
+ </v-btn>
19
22
 
20
- <v-col cols="6" class="pa-0">
21
- <v-btn block tile variant="flat" class="text-none" size="large" height="48" color="black"
22
- @click="emit('delete')">
23
- Delete
24
- </v-btn>
25
- </v-col>
26
- </v-row>
27
- </v-toolbar>
23
+ <v-btn class="screen-btn-primary" variant="flat" @click="emit('delete')">
24
+ Delete
25
+ </v-btn>
26
+ </div>
28
27
  </v-card>
29
28
  </template>
30
29
 
@@ -48,4 +47,4 @@ const emit = defineEmits(["close", "delete"])
48
47
 
49
48
  </script>
50
49
 
51
- <style scoped></style>
50
+ <style scoped></style>
@@ -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>
@@ -1,71 +1,67 @@
1
1
  <template>
2
- <v-card width="100%">
3
- <v-toolbar>
4
- <template v-if="$slots.header">
5
- <slot name="header" :title="title" :onClose="onClose" />
6
- </template>
7
- <template v-else>
8
- <v-row no-gutters class="fill-height px-6" align="center">
9
- <span class="font-weight-bold text-h5 text-capitalize">{{
10
- title
11
- }}</span>
12
- </v-row>
13
- </template>
14
- </v-toolbar>
2
+ <!-- The shared detail sheet several list screens open a row into. Its title
3
+ row and its footer were both `v-toolbar`s - fixed grey slabs that stay
4
+ grey on the dark theme - and the footer's action was a hardcoded
5
+ `color="black"` fill. -->
6
+ <v-card class="screen-modal" width="100%">
7
+ <template v-if="$slots.header">
8
+ <slot name="header" :title="title" :onClose="onClose" />
9
+ </template>
10
+ <v-card-title v-else class="text-capitalize">{{ title }}</v-card-title>
15
11
 
16
- <v-card-text style="max-height: 100vh; overflow-y: auto" class="pb-0" :class="contentNoPadding ? 'pa-0' : ''">
12
+ <v-card-text class="screen-modal__body pb-0" :class="contentNoPadding ? 'pa-0' : ''">
17
13
  <slot name="content" />
18
14
  </v-card-text>
19
15
 
20
- <v-toolbar class="pa-0" density="compact">
21
- <v-row no-gutters>
22
- <v-col :cols="(canUpdate || canDelete) ? 6 : 12" class="pa-0">
16
+ <!-- The design's footer strip: equal-width buttons, ghost then primary. -->
17
+ <div class="screen-modal__footer">
18
+ <v-btn
19
+ variant="outlined"
20
+ class="screen-btn-ghost"
21
+ @click="emit('close')"
22
+ >
23
+ Close
24
+ </v-btn>
25
+
26
+ <v-menu v-if="canUpdate || canDelete" contained>
27
+ <template #activator="{ props }">
23
28
  <v-btn
24
- block
25
- variant="text"
26
- class="text-none"
27
- size="large"
28
- @click="emit('close')"
29
- height="48"
29
+ variant="flat"
30
+ class="screen-btn-primary"
31
+ :disabled="disabled"
32
+ v-bind="props"
30
33
  >
31
- Close
34
+ More actions
32
35
  </v-btn>
33
- </v-col>
34
-
35
- <v-col v-if="canUpdate || canDelete" cols="6" class="pa-0" >
36
- <v-menu contained>
37
- <template #activator="{ props }">
38
- <v-btn
39
- block
40
- variant="flat"
41
- color="black"
42
- class="text-none"
43
- height="48"
44
- :disabled="disabled"
45
- v-bind="props"
46
- tile
47
- >
48
- More actions
49
- </v-btn>
50
- </template>
36
+ </template>
51
37
 
52
- <v-list class="pa-0">
53
- <v-list-item v-if="canUpdate" @click="emit('edit')">
54
- <v-list-item-title class="text-subtitle-2">
55
- {{ editButtonLabel }}
56
- </v-list-item-title>
57
- </v-list-item>
38
+ <!-- The dropdown itself is left as Vuetify draws it: the handoff
39
+ specifies the PROFILE dropdown (240px, 14px radius) and mentions a
40
+ per-row kebab menu without giving it a shape, and this menu opens
41
+ on a click the harness cannot drive, so it could not be
42
+ render-verified either. Only the row type and the destructive ink
43
+ change. -->
44
+ <v-list class="pa-0 update-more__list">
45
+ <v-list-item v-if="canUpdate" @click="emit('edit')">
46
+ <v-list-item-title>
47
+ {{ editButtonLabel }}
48
+ </v-list-item-title>
49
+ </v-list-item>
58
50
 
59
- <v-list-item v-if="canDelete" @click="emit('delete')" class="text-red">
60
- <v-list-item-title class="text-subtitle-2">
61
- {{ deleteButtonLabel }}
62
- </v-list-item-title>
63
- </v-list-item>
64
- </v-list>
65
- </v-menu>
66
- </v-col>
67
- </v-row>
68
- </v-toolbar>
51
+ <!-- `text-red` was Vuetify's fixed #f44336, the same red on both
52
+ themes. `text-error` is Vuetify's own class over
53
+ `--v-theme-error`, which IS the design's `--err`. The handoff's
54
+ one documented destructive treatment is the profile menu's
55
+ Logout row: "red Logout row (err color, err-bg hover)" - ink,
56
+ not a filled button - so this row follows it exactly. -->
57
+ <v-list-item v-if="canDelete" @click="emit('delete')" class="text-error">
58
+ <v-list-item-title>
59
+ {{ deleteButtonLabel }}
60
+ </v-list-item-title>
61
+ </v-list-item>
62
+ </v-list>
63
+ </v-menu>
64
+ </div>
69
65
  </v-card>
70
66
  </template>
71
67
 
@@ -105,4 +101,11 @@ const emit = defineEmits(["close", "edit", "delete"]);
105
101
  const { canUpdate, editButtonLabel, deleteButtonLabel, title, disabled } = prop;
106
102
  </script>
107
103
 
108
- <style scoped></style>
104
+ <style scoped>
105
+ /* `text-subtitle-2` was Vuetify's 0.875rem/500; the handoff names no type for
106
+ a menu row, so it takes the established cell type. */
107
+ .update-more__list :deep(.v-list-item-title) {
108
+ font-size: var(--fs-cell);
109
+ font-weight: var(--fw-cell);
110
+ }
111
+ </style>
@@ -1,13 +1,8 @@
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 }} Document
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">{{ prop.mode }} Document</v-card-title>
4
+
5
+ <v-card-text class="screen-modal__body pa-0">
11
6
  <v-form v-model="validForm" :disabled="disable">
12
7
  <v-col cols="12" class="px-6">
13
8
  <InputLabel class="text-capitalize" title="Document Attachment" />
@@ -24,6 +19,7 @@
24
19
  <InputLabel class="text-capitalize" title="Document Name" />
25
20
  <v-text-field
26
21
  v-model.trim="document.name"
22
+ class="filter-field"
27
23
  density="comfortable"
28
24
  ></v-text-field>
29
25
  </v-col>
@@ -42,15 +38,15 @@
42
38
  </v-form>
43
39
  </v-card-text>
44
40
 
45
- <v-toolbar density="compact">
41
+ <!-- Was a `v-toolbar`: a grey slab with square (`tile`) buttons and a
42
+ hardcoded `color="black"` primary. The gate on Submit is unchanged. -->
43
+ <v-card-actions class="screen-modal__footer">
46
44
  <v-row no-gutters>
47
- <v-col cols="6">
45
+ <v-col cols="6" class="pr-2">
48
46
  <v-btn
49
- tile
50
47
  block
51
- variant="text"
52
- class="text-none"
53
- size="48"
48
+ variant="outlined"
49
+ class="text-none screen-btn-ghost"
54
50
  @click="cancel"
55
51
  :disabled="disable"
56
52
  >
@@ -58,14 +54,11 @@
58
54
  </v-btn>
59
55
  </v-col>
60
56
 
61
- <v-col cols="6">
57
+ <v-col cols="6" class="pl-2">
62
58
  <v-btn
63
- tile
64
59
  block
65
60
  variant="flat"
66
- color="black"
67
- class="text-none"
68
- size="48"
61
+ class="text-none screen-btn-primary"
69
62
  :disabled="
70
63
  !validForm ||
71
64
  disable ||
@@ -79,7 +72,7 @@
79
72
  </v-btn>
80
73
  </v-col>
81
74
  </v-row>
82
- </v-toolbar>
75
+ </v-card-actions>
83
76
  </v-card>
84
77
  </template>
85
78
  <script setup lang="ts">