@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
@@ -2,7 +2,7 @@
2
2
  <v-row no-gutters align="center" justify="center">
3
3
  <v-col cols="12" lg="12">
4
4
  <TableMain
5
- :title="`${siteName} Units`"
5
+ :title="`${siteName} Equipment`"
6
6
  :items="items"
7
7
  :headers="headers"
8
8
  :loading="loading"
@@ -20,10 +20,8 @@
20
20
  <v-row no-gutters align="center" class="w-100">
21
21
  <v-col cols="auto" v-if="canAddEquipment">
22
22
  <v-btn
23
- class="text-none"
24
- rounded="pill"
25
- variant="tonal"
26
- size="large"
23
+ class="text-none screen-btn-primary"
24
+ variant="flat"
27
25
  @click="onCreateUnit()"
28
26
  >
29
27
  Add Equipment
@@ -32,7 +30,7 @@
32
30
 
33
31
  <v-spacer />
34
32
 
35
- <v-col cols="auto">
33
+ <v-col cols="auto" class="filter-field">
36
34
  <v-text-field
37
35
  v-model="searchInput"
38
36
  density="compact"
@@ -47,11 +45,15 @@
47
45
  </template>
48
46
 
49
47
  <template #item.attachment="{ value }">
48
+ <!--
49
+ `variant="tonal"` drew Vuetify's own grey slab in the cell, the one
50
+ off-design control left on the row. The design's ghost button.
51
+ -->
50
52
  <v-btn
51
53
  v-if="value"
52
54
  size="small"
53
- variant="tonal"
54
- class="text-none"
55
+ variant="outlined"
56
+ class="screen-btn-ghost"
55
57
  @click.stop="viewAttachment(value)"
56
58
  >
57
59
  View Image
@@ -60,7 +62,11 @@
60
62
  </template>
61
63
 
62
64
  <template #item.status="{ value }">
63
- <v-chip class="text-capitalize">{{ value || "N/A" }}</v-chip>
65
+ <StatusChip
66
+ class="text-capitalize"
67
+ :status="value"
68
+ :label="value || 'N/A'"
69
+ />
64
70
  </template>
65
71
 
66
72
  <template #item.block="{ value }">
@@ -141,67 +147,54 @@
141
147
  </HygieneUpdateMoreAction>
142
148
  </v-dialog>
143
149
 
144
- <v-dialog v-model="dialogDeleteEquipment" max-width="450">
145
- <v-card>
146
- <v-toolbar>
147
- <v-row no-gutters class="fill-height px-6" align="center">
148
- <span class="font-weight-bold text-h6 text-capitalize">
149
- Delete {{ selectedEquipment?.name || "Unit" }}
150
- </span>
151
- </v-row>
152
- </v-toolbar>
153
- <v-card-text>
154
- <span class="text-subtitle-2"
155
- >Are you sure you want to delete this equipment?</span
156
- >
157
- </v-card-text>
150
+ <!--
151
+ All three dialogs were `v-toolbar` title bars over toolbar footers carrying
152
+ two block buttons, the confirm one on `color="black"` - not a token, so it
153
+ painted a light-theme fill on the dark theme, and the toolbar surface sat
154
+ visibly lighter than the card it was on. They are the shared `.screen-modal`
155
+ shape now. Same fields, same labels, same handlers, same busy states.
156
+ -->
157
+ <v-dialog v-model="dialogDeleteEquipment" max-width="520">
158
+ <v-card class="screen-modal">
159
+ <v-card-title class="text-capitalize">
160
+ Delete {{ selectedEquipment?.name || "Unit" }}
161
+ </v-card-title>
158
162
 
159
- <v-toolbar class="pa-0" density="compact">
160
- <v-row no-gutters>
161
- <v-col cols="6" class="pa-0">
162
- <v-btn
163
- block
164
- variant="text"
165
- class="text-none"
166
- size="large"
167
- @click="dialogDeleteEquipment = false"
168
- height="48"
169
- >
170
- Cancel
171
- </v-btn>
172
- </v-col>
163
+ <v-card-text class="screen-modal__body">
164
+ Are you sure you want to delete this equipment?
165
+ </v-card-text>
173
166
 
174
- <v-col cols="6" class="pa-0">
175
- <v-btn
176
- block
177
- variant="flat"
178
- color="black"
179
- class="text-none font-weight-bold"
180
- height="48"
181
- :loading="submitting"
182
- @click="_deleteEquipment"
183
- >
184
- Delete
185
- </v-btn>
186
- </v-col>
187
- </v-row>
188
- </v-toolbar>
167
+ <div class="screen-modal__footer">
168
+ <v-btn
169
+ class="screen-btn-ghost"
170
+ variant="outlined"
171
+ :disabled="submitting"
172
+ @click="dialogDeleteEquipment = false"
173
+ >
174
+ Cancel
175
+ </v-btn>
176
+ <v-btn
177
+ class="screen-btn-primary"
178
+ variant="flat"
179
+ :loading="submitting"
180
+ @click="_deleteEquipment"
181
+ >
182
+ Delete
183
+ </v-btn>
184
+ </div>
189
185
  </v-card>
190
186
  </v-dialog>
191
187
 
192
- <v-dialog v-model="dialogStockAction" max-width="450">
193
- <v-card>
194
- <v-toolbar>
195
- <v-row no-gutters class="fill-height px-6" align="center">
196
- <span class="font-weight-bold text-h6 text-capitalize">
197
- {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
198
- </span>
199
- </v-row>
200
- </v-toolbar>
201
- <v-card-text class="pa-4">
188
+ <v-dialog v-model="dialogStockAction" max-width="520">
189
+ <v-card class="screen-modal">
190
+ <v-card-title class="text-capitalize">
191
+ {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
192
+ </v-card-title>
193
+
194
+ <v-card-text class="screen-modal__body">
202
195
  <v-form ref="stockActionFormRef" v-model="stockActionValid">
203
196
  <v-row no-gutters>
204
- <v-col cols="12" class="mb-4">
197
+ <v-col cols="12">
205
198
  <InputLabel
206
199
  for="stockActionQty"
207
200
  title="Quantity"
@@ -212,68 +205,53 @@
212
205
  v-model.number="stockActionQuantity"
213
206
  :rules="[requiredRule]"
214
207
  density="comfortable"
215
- variant="outlined"
216
208
  type="number"
217
209
  min="1"
218
210
  placeholder="Enter quantity"
219
211
  hide-details="auto"
212
+ class="filter-field"
220
213
  />
221
214
  </v-col>
222
215
  </v-row>
223
216
  </v-form>
224
217
  </v-card-text>
225
218
 
226
- <v-toolbar class="pa-0" density="compact">
227
- <v-row no-gutters>
228
- <v-col cols="6" class="pa-0">
229
- <v-btn
230
- block
231
- variant="text"
232
- class="text-none"
233
- size="large"
234
- @click="dialogStockAction = false"
235
- height="48"
236
- >
237
- Cancel
238
- </v-btn>
239
- </v-col>
240
-
241
- <v-col cols="6" class="pa-0">
242
- <v-btn
243
- block
244
- variant="flat"
245
- color="black"
246
- class="text-none font-weight-bold rounded-0"
247
- height="48"
248
- :loading="submitting"
249
- @click="stockActionMode === 'add' ? _addStock() : _requestItem()"
250
- >
251
- {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
252
- </v-btn>
253
- </v-col>
254
- </v-row>
255
- </v-toolbar>
219
+ <div class="screen-modal__footer">
220
+ <v-btn
221
+ class="screen-btn-ghost"
222
+ variant="outlined"
223
+ :disabled="submitting"
224
+ @click="dialogStockAction = false"
225
+ >
226
+ Cancel
227
+ </v-btn>
228
+ <v-btn
229
+ class="screen-btn-primary"
230
+ variant="flat"
231
+ :loading="submitting"
232
+ @click="stockActionMode === 'add' ? _addStock() : _requestItem()"
233
+ >
234
+ {{ stockActionMode === "add" ? "Add Stock" : "Checkout Item" }}
235
+ </v-btn>
236
+ </div>
256
237
  </v-card>
257
238
  </v-dialog>
258
239
 
259
240
  <v-dialog v-model="showAttachmentDialog" max-width="720" persistent>
260
- <v-card rounded="lg">
261
- <v-card-title class="d-flex align-center pa-4">
262
- <span class="text-h6 font-weight-bold">Attachment</span>
263
-
241
+ <v-card class="screen-modal">
242
+ <v-card-title class="d-flex align-center">
243
+ Attachment
264
244
  <v-spacer />
265
-
266
245
  <v-btn
267
246
  icon="mdi-close"
268
247
  variant="text"
269
- size="small"
248
+ class="screen-modal__close"
249
+ aria-label="Close"
270
250
  @click="(showAttachmentDialog = false), (attachmentUrl = '')"
271
251
  />
272
252
  </v-card-title>
273
253
 
274
- <v-divider />
275
-
276
- <v-card-text class="pa-6">
254
+ <v-card-text class="screen-modal__body">
277
255
  <v-img :src="attachmentUrl" contain />
278
256
  </v-card-text>
279
257
  </v-card>
@@ -79,7 +79,7 @@
79
79
  <p class="flex-grow-1">Booking Fee</p>
80
80
  <v-switch
81
81
  v-model="facility.isBookingFeeEnabled"
82
- color="success"
82
+ color="accent"
83
83
  hide-details
84
84
  @update:modelValue="onChangeIsBookingFeeEnabled"
85
85
  ></v-switch>
@@ -139,7 +139,7 @@
139
139
  />
140
140
  </v-col>
141
141
  <v-col cols="12" class="mt-4">
142
- <v-card class="mx-auto border-sm pa-2" color="grey-lighten-4" tile>
142
+ <v-card class="mx-auto border-sm pa-2 fee-summary" tile>
143
143
  <v-row no-gutters align="center">
144
144
  <v-col cols="" class="text-caption"> Total Booking Fee </v-col>
145
145
  <v-col cols="" class="text-right text-caption">
@@ -169,7 +169,7 @@
169
169
  </v-card>
170
170
  </v-col>
171
171
  <v-col cols="12" class="mt-4">
172
- <v-card class="mx-auto border-sm pa-2" color="grey-lighten-4" tile>
172
+ <v-card class="mx-auto border-sm pa-2 fee-summary" tile>
173
173
  <v-row no-gutters align="center">
174
174
  <v-col class="text-caption"> Peak Total Booking Fee </v-col>
175
175
  <v-col class="text-right text-caption">
@@ -210,7 +210,7 @@
210
210
  <p class="flex-grow-1">Guest</p>
211
211
  <v-switch
212
212
  v-model="facility.isGuestEnabled"
213
- color="success"
213
+ color="accent"
214
214
  hide-details
215
215
  :disabled="!facility.isBookingFeeEnabled"
216
216
  />
@@ -256,7 +256,7 @@
256
256
  />
257
257
  </v-col>
258
258
  <v-col cols="12" class="mt-4">
259
- <v-card class="mx-auto border-sm pa-2" color="grey-lighten-4" tile>
259
+ <v-card class="mx-auto border-sm pa-2 fee-summary" tile>
260
260
  <v-row no-gutters align="center">
261
261
  <v-col class="text-caption">
262
262
  Total Booking Fee for Guest
@@ -288,7 +288,7 @@
288
288
  </v-card>
289
289
  </v-col>
290
290
  <v-col cols="12" class="mt-4">
291
- <v-card class="mx-auto border-sm pa-2" color="grey-lighten-4" tile>
291
+ <v-card class="mx-auto border-sm pa-2 fee-summary" tile>
292
292
  <v-row no-gutters align="center">
293
293
  <v-col class="text-caption">
294
294
  Peak Total Booking Fee for Guest
@@ -332,7 +332,7 @@
332
332
  <p class="flex-grow-1">Deposit</p>
333
333
  <v-switch
334
334
  v-model="facility.isDepositEnabled"
335
- color="success"
335
+ color="accent"
336
336
  hide-details
337
337
  @update:modelValue="onChangeIsDepositFeeEnabled"
338
338
  ></v-switch>
@@ -366,7 +366,7 @@
366
366
  <p class="flex-grow-1">Booking Policy</p>
367
367
  <v-switch
368
368
  v-model="facility.isBookingPolicyEnabled"
369
- color="success"
369
+ color="accent"
370
370
  hide-details
371
371
  />
372
372
  </div>
@@ -419,16 +419,14 @@
419
419
  ></v-number-input>
420
420
  </v-col>
421
421
  <v-col cols="12" md="2" class="pa-1">
422
- <v-btn
422
+ <AppButton
423
423
  :disabled="!sampleData.description && !sampleData.count"
424
424
  type="submit"
425
- color="primary"
425
+ class="w-100"
426
426
  @click="upsertChecklist()"
427
- block
428
- size="large"
429
427
  >
430
428
  {{ !isEditing ? "Add" : "Edit" }}
431
- </v-btn>
429
+ </AppButton>
432
430
  </v-col>
433
431
  </v-row>
434
432
  </section>
@@ -445,7 +443,7 @@
445
443
  <v-icon
446
444
  icon="mdi-drag"
447
445
  class="drag-handle cursor-move mr-2"
448
- color="grey-lighten-1"
446
+ color="muted"
449
447
  />
450
448
  </template>
451
449
 
@@ -465,7 +463,7 @@
465
463
  ? 'mdi-message'
466
464
  : 'mdi-message-outline'
467
465
  "
468
- :color="item.permanentRemarks ? 'primary' : 'grey-darken-1'"
466
+ :color="item.permanentRemarks ? 'primary' : 'muted'"
469
467
  variant="text"
470
468
  density="comfortable"
471
469
  @click="remarksDialog(true, item?.permanentRemarks, index)"
@@ -503,7 +501,7 @@
503
501
  <v-switch
504
502
  v-model="isBookingUnitLimitEnabled"
505
503
  class="d-flex align-center"
506
- color="primary"
504
+ color="accent"
507
505
  hide-details
508
506
  @update:model-value="onToggleBookingUnitLimit"
509
507
  />
@@ -541,7 +539,7 @@
541
539
  <v-switch
542
540
  v-model="isMaxNumberGuestLimitEnabled"
543
541
  class="d-flex align-center"
544
- color="primary"
542
+ color="accent"
545
543
  hide-details
546
544
  @update:model-value="onToggleMaxNumberGuestLimit"
547
545
  />
@@ -578,7 +576,7 @@
578
576
  <v-switch
579
577
  v-model="isCancelAllowedLimitEnabled"
580
578
  class="d-flex align-center"
581
- color="primary"
579
+ color="accent"
582
580
  hide-details
583
581
  @update:model-value="onToggleCancelAllowedLimit"
584
582
  />
@@ -607,17 +605,14 @@
607
605
  width="300"
608
606
  persistent
609
607
  >
610
- <v-card class="rounded-lg">
611
- <v-toolbar class="border-b">
612
- <span class="pl-6 font-weight-bold">Permanent Remarks</span>
613
- <v-spacer />
614
- <v-icon
615
- icon="mdi-close"
616
- size="30"
617
- class="pr-6"
618
- @click="remarksDialog(false)"
619
- />
620
- </v-toolbar>
608
+ <!-- Was a `v-card` with a bare `v-toolbar` heading, which Vuetify paints
609
+ from its own `surface` - a slab visibly lighter than the card on the
610
+ dark theme. The design's modal heading is the card's own title row. -->
611
+ <v-card class="screen-modal">
612
+ <v-card-title class="d-flex align-center">
613
+ <span class="flex-grow-1">Permanent Remarks</span>
614
+ <v-icon icon="mdi-close" size="30" @click="remarksDialog(false)" />
615
+ </v-card-title>
621
616
 
622
617
  <v-row no-gutters class="pa-4">
623
618
  <!-- remarks -->
@@ -635,13 +630,9 @@
635
630
  <!-- clear/confirm buttons-->
636
631
  <v-col cols="12" class="mt-4">
637
632
  <v-row no-gutters>
638
- <v-btn
639
- block
640
- text="confirm"
641
- color="primary"
642
- flat
643
- @click="confirmRemarks()"
644
- />
633
+ <AppButton class="w-100" @click="confirmRemarks()">
634
+ Confirm
635
+ </AppButton>
645
636
  </v-row>
646
637
  </v-col>
647
638
  </v-row>
@@ -650,18 +641,18 @@
650
641
 
651
642
  <!-- delete -->
652
643
  <v-dialog v-model="isDeleteItem" width="500" persistent class="text-center">
653
- <v-card class="rounded-xl">
654
- <!-- HEADER -->
655
- <v-toolbar class="border-b pb-2 pr-4">
656
- <v-spacer />
644
+ <v-card class="screen-modal">
645
+ <!-- HEADER - the close cross sat in a `v-toolbar`, a second grey slab
646
+ above the card on the dark theme. It is the title row's own end. -->
647
+ <v-card-title class="d-flex justify-end">
657
648
  <v-icon
658
649
  icon="mdi-close"
659
650
  size="x-large"
660
651
  @click="isDeleteItem = false"
661
652
  />
662
- </v-toolbar>
653
+ </v-card-title>
663
654
 
664
- <v-card-text class="d-flex flex-column align-center">
655
+ <v-card-text class="screen-modal__body d-flex flex-column align-center">
665
656
  <img
666
657
  src="/icons/delete-dialog-icon.svg"
667
658
  alt="delete-dialog-icon"
@@ -671,15 +662,8 @@
671
662
  />
672
663
  Are you sure you want to delete this?
673
664
  </v-card-text>
674
- <v-col>
675
- <v-btn
676
- text="yes"
677
- type="submit"
678
- color="primary"
679
- @click="confirmDelete()"
680
- width="50%"
681
- elevation="0"
682
- />
665
+ <v-col class="d-flex justify-center pb-4">
666
+ <AppButton type="submit" @click="confirmDelete()">Yes</AppButton>
683
667
  </v-col>
684
668
  </v-card>
685
669
  </v-dialog>
@@ -1080,10 +1064,17 @@ function onToggleCancelAllowedLimit(val: any) {
1080
1064
  }
1081
1065
 
1082
1066
  .list-feature-toggle {
1083
- border: 1px solid #bbbaba;
1067
+ border: 1px solid var(--border);
1084
1068
  height: 50px;
1085
1069
  }
1086
1070
 
1071
+ /* The four fee-summary panels asked Vuetify for `grey-lighten-4` - #f5f5f5 in
1072
+ BOTH themes, so a white slab inside a dark card. `--bg` is the design's
1073
+ recessed surface and follows the theme. */
1074
+ .fee-summary {
1075
+ background: var(--bg);
1076
+ }
1077
+
1087
1078
  .drag-area {
1088
1079
  cursor: grab;
1089
1080
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <FormDialog v-model="dialog" @close="closeDialog">
3
3
  <template #title>
4
- <span class="text-h6 font-weight-medium pt-1 text-capitalize">
4
+ <span class="screen-card-title pt-1 text-capitalize">
5
5
  {{ isEditMode ? "Edit Feedback" : "Create Feedback" }}
6
6
  </span>
7
7
  </template>
@@ -22,13 +22,13 @@
22
22
  item-value="value"
23
23
  item-props
24
24
  variant="outlined"
25
- density="compact"
26
- class="mb-2"
25
+ density="comfortable"
26
+ class="mb-2 filter-field"
27
27
  clearable
28
28
  :custom-filter="customFilter"
29
29
  :rules="[requiredRule]"
30
30
  >
31
- <template #label> Subject <span class="text-red">*</span> </template>
31
+ <template #label> Subject <span class="feedback-form__required">*</span> </template>
32
32
  </v-autocomplete>
33
33
 
34
34
  <!-- <v-autocomplete
@@ -44,37 +44,43 @@
44
44
  clearable
45
45
  :rules="[requiredRule]"
46
46
  >
47
- <template #label> Category <span class="text-red">*</span> </template>
47
+ <template #label> Category <span class="feedback-form__required">*</span> </template>
48
48
  </v-autocomplete> -->
49
49
 
50
50
  <v-text-field
51
51
  label="Location"
52
52
  variant="outlined"
53
- density="compact"
53
+ density="comfortable"
54
+ class="mb-2 filter-field"
54
55
  v-model="localFeedback.location"
55
56
  :rules="[requiredRule]"
56
57
  >
57
- <template #label> Location <span class="text-red">*</span> </template>
58
+ <template #label> Location <span class="feedback-form__required">*</span> </template>
58
59
  </v-text-field>
59
60
 
60
61
  <v-textarea
61
62
  label="Description"
62
63
  variant="outlined"
63
- density="compact"
64
+ density="comfortable"
65
+ class="filter-field"
64
66
  auto-grow
65
67
  rows="4"
66
68
  v-model="localFeedback.description"
67
69
  :rules="[requiredRule]"
68
70
  >
69
- <template #label> Description <span class="text-red">*</span> </template>
71
+ <template #label> Description <span class="feedback-form__required">*</span> </template>
70
72
  </v-textarea>
71
73
 
72
74
  <template #footer>
75
+ <!-- `color="primary-button"` was already the right token (the FILL, not
76
+ the `primary` foreground) and `height="40"` already the right number,
77
+ but both were stated by hand. `.screen-btn-primary` is where the
78
+ layer says that once, and it wins over Vuetify's `--v-btn-height`
79
+ without an `!important`. -->
73
80
  <v-btn
74
- color="primary-button"
75
- class="text-capitalize mb-4"
81
+ class="text-capitalize mb-4 screen-btn-primary"
82
+ variant="flat"
76
83
  block
77
- height="40"
78
84
  :loading="loading"
79
85
  :disabled="loading || !isFormValid"
80
86
  @click="submitFeedback"
@@ -171,3 +177,11 @@ const customFilter = (value: string, query: string, item: any) => {
171
177
  return title.includes(search) || subtitle.includes(search);
172
178
  };
173
179
  </script>
180
+
181
+ <style scoped>
182
+ /* Was `text-red`, a fixed Vuetify red that is the same red on both themes.
183
+ `--err` is the theme's error ink and follows it. */
184
+ .feedback-form__required {
185
+ color: var(--err);
186
+ }
187
+ </style>