@7365admin1/layer-common 3.2.2-staging.127 → 3.2.2-staging.128

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.
@@ -99,22 +99,22 @@
99
99
  style="max-height: calc(100vh - 280px)"
100
100
  >
101
101
  <template #item.companyName="{ item }">
102
- <span class="text-body-2 d-block text-truncate sp-col-company">{{
102
+ <span class="d-block text-truncate sp-col-company">{{
103
103
  item.companyName
104
104
  }}</span>
105
105
  </template>
106
106
  <template #item.email="{ item }">
107
- <span class="text-body-2 d-block text-truncate sp-col-email">{{
107
+ <span class="d-block text-truncate sp-col-email">{{
108
108
  item.email
109
109
  }}</span>
110
110
  </template>
111
111
  <template #item.type="{ item }">
112
- <span class="text-body-2 d-block text-truncate sp-col-type">{{
112
+ <span class="d-block text-truncate sp-col-type">{{
113
113
  item.type
114
114
  }}</span>
115
115
  </template>
116
116
  <template #item.members="{ item }">
117
- <span class="text-body-2">{{ item.members }}</span>
117
+ <span>{{ item.members }}</span>
118
118
  </template>
119
119
  <template #item.status="{ item }">
120
120
  <!--
@@ -129,10 +129,9 @@
129
129
  :status="item.statusRaw || item.status"
130
130
  :label="item.status"
131
131
  />
132
- <div
133
- v-if="item.rejectionReason"
134
- class="text-caption text-medium-emphasis mt-1 sp-reject-reason"
135
- >
132
+ <!-- Was `text-caption text-medium-emphasis` - Roboto 12px at
133
+ Vuetify's 60% opacity. The design's sub-line is `--muted`. -->
134
+ <div v-if="item.rejectionReason" class="mt-1 sp-reject-reason">
136
135
  Seven365 said: {{ item.rejectionReason }}
137
136
  </div>
138
137
  </template>
@@ -168,9 +167,11 @@
168
167
  :subtitle="resendHint(item)"
169
168
  @click="openInviteAction(item, 'resend')"
170
169
  />
170
+ <!-- `base-color="error"` is Vuetify's own red (#B00020 light,
171
+ #CF6679 dark), not the design's `--err`. -->
171
172
  <v-list-item
172
173
  title="Delete invitation"
173
- base-color="error"
174
+ class="sp-menu-danger"
174
175
  @click="openInviteAction(item, 'delete')"
175
176
  />
176
177
  </v-list>
@@ -195,11 +196,11 @@
195
196
  />
196
197
  <v-list-item
197
198
  :title="rowActionLabel(item)"
198
- :base-color="
199
- item.source === 'provider' && listTab === 'inactive'
200
- ? undefined
201
- : 'error'
202
- "
199
+ :class="{
200
+ 'sp-menu-danger': !(
201
+ item.source === 'provider' && listTab === 'inactive'
202
+ ),
203
+ }"
203
204
  @click="onDeleteRow(item)"
204
205
  />
205
206
  </v-list>
@@ -208,73 +209,86 @@
208
209
  </v-data-table>
209
210
  </div>
210
211
 
211
- <div
212
- v-if="!canViewServiceProviders"
213
- class="pa-4 text-body-2 text-medium-emphasis"
214
- >
212
+ <div v-if="!canViewServiceProviders" class="pa-4 sp-no-permission">
215
213
  You do not have permission to view service providers.
216
214
  </div>
217
215
  </AppCard>
218
216
  </div>
219
217
 
220
- <v-dialog v-model="viewDialog" max-width="514">
221
- <v-card rounded="lg" class="sp-members-card">
222
- <v-card-title class="sp-members-title">
223
- Members ({{ memberDialogCount }})
224
- </v-card-title>
218
+ <!--
219
+ THE MEMBERS DIALOG ON THE DESIGN'S MODAL.
225
220
 
226
- <v-divider />
227
-
228
- <v-table class="sp-members-table">
229
- <thead>
230
- <tr>
231
- <th>Name</th>
232
- <th class="text-right">Role</th>
233
- </tr>
234
- </thead>
235
- <tbody>
236
- <tr v-if="loadingMembers">
237
- <td colspan="2" class="text-center text-medium-emphasis">
238
- Loading...
239
- </td>
240
- </tr>
241
- <tr v-else-if="!serviceProviderMembers.length">
242
- <td colspan="2" class="text-center text-medium-emphasis">
243
- No members found.
244
- </td>
245
- </tr>
246
- <template v-else>
247
- <tr v-for="member in serviceProviderMembers" :key="member._id">
248
- <td>{{ member.name }}</td>
249
- <td class="text-right">{{ member.role }}</td>
250
- </tr>
251
- </template>
252
- </tbody>
253
- </v-table>
221
+ Was a `rounded="lg"` v-card whose title was a hand-drawn 20px/700 bar and
222
+ whose table painted its own 64px rows in `#667085` - a literal grey that is
223
+ the same grey on the dark theme, where the card behind it is nearly black.
224
+ It is `.screen-modal` now: the design's radius, shadow and card surface, the
225
+ shared `v-card-title` size/weight, the body as the thing that scrolls, and
226
+ the shared ghost footer instead of a block text button pretending to be one.
254
227
 
255
- <v-divider />
228
+ Same members, same two columns, same loading and empty copy, same close.
229
+ -->
230
+ <v-dialog v-model="viewDialog" max-width="514">
231
+ <v-card class="screen-modal">
232
+ <v-card-title>Members ({{ memberDialogCount }})</v-card-title>
233
+
234
+ <div class="screen-modal__body sp-members-scroll">
235
+ <v-table class="sp-members-table">
236
+ <thead>
237
+ <tr>
238
+ <th>Name</th>
239
+ <th class="text-right">Role</th>
240
+ </tr>
241
+ </thead>
242
+ <tbody>
243
+ <tr v-if="loadingMembers">
244
+ <td colspan="2" class="text-center sp-members-note">
245
+ Loading...
246
+ </td>
247
+ </tr>
248
+ <tr v-else-if="!serviceProviderMembers.length">
249
+ <td colspan="2" class="text-center sp-members-note">
250
+ No members found.
251
+ </td>
252
+ </tr>
253
+ <template v-else>
254
+ <tr v-for="member in serviceProviderMembers" :key="member._id">
255
+ <td>{{ member.name }}</td>
256
+ <td class="text-right">{{ member.role }}</td>
257
+ </tr>
258
+ </template>
259
+ </tbody>
260
+ </v-table>
261
+ </div>
256
262
 
257
- <v-card-actions class="pa-0">
263
+ <div class="screen-modal__footer">
258
264
  <v-btn
259
- block
260
- variant="text"
261
- height="56"
262
- class="text-none font-weight-bold"
265
+ class="screen-btn-ghost"
266
+ variant="outlined"
263
267
  @click="viewDialog = false"
264
268
  >
265
269
  Close
266
270
  </v-btn>
267
- </v-card-actions>
271
+ </div>
268
272
  </v-card>
269
273
  </v-dialog>
270
274
 
271
- <v-dialog v-model="statusDialog" max-width="728" persistent>
272
- <v-card rounded="lg" class="sp-status-card">
273
- <v-card-title class="sp-status-title">
274
- {{ statusDialogTitle }}
275
- </v-card-title>
275
+ <!--
276
+ THE TWO CONFIRMATIONS ON THE DESIGN'S MODAL.
277
+
278
+ Both were a 728px card with an 82px `#f5f5f5` title bar in 28px/700, a
279
+ 44px/46px body in 24px type, and two 82px-tall half-width buttons on
280
+ hardcoded `#ffffff` / `#00263a` - none of which is a token, so the whole
281
+ thing drew light-theme colours on the dark theme. They are the shared
282
+ confirmation shape now: `.screen-modal`, the design's title, the body at
283
+ `--fs-cell`, and the ghost-then-primary footer stated once in `screens.css`.
276
284
 
277
- <v-card-text class="sp-status-body">
285
+ Same question, same copy, same labels, same handlers, same busy states.
286
+ -->
287
+ <v-dialog v-model="statusDialog" max-width="520" persistent>
288
+ <v-card class="screen-modal">
289
+ <v-card-title>{{ statusDialogTitle }}</v-card-title>
290
+
291
+ <v-card-text class="screen-modal__body">
278
292
  <div class="sp-status-question">
279
293
  {{ statusDialogQuestion }}
280
294
  </div>
@@ -283,48 +297,34 @@
283
297
  </div>
284
298
  </v-card-text>
285
299
 
286
- <v-divider />
287
-
288
- <v-card-actions class="pa-0">
289
- <v-row no-gutters class="fill-height">
290
- <v-col cols="6">
291
- <v-btn
292
- block
293
- variant="flat"
294
- height="82"
295
- class="text-none sp-status-cancel"
296
- :disabled="statusUpdating"
297
- @click="closeStatusDialog"
298
- >
299
- Cancel
300
- </v-btn>
301
- </v-col>
302
- <v-col cols="6">
303
- <v-btn
304
- block
305
- variant="flat"
306
- height="82"
307
- class="text-none sp-status-confirm"
308
- :loading="statusUpdating"
309
- @click="confirmStatusChange"
310
- >
311
- {{ statusConfirmLabel }}
312
- </v-btn>
313
- </v-col>
314
- </v-row>
315
- </v-card-actions>
300
+ <div class="screen-modal__footer">
301
+ <v-btn
302
+ class="screen-btn-ghost"
303
+ variant="outlined"
304
+ :disabled="statusUpdating"
305
+ @click="closeStatusDialog"
306
+ >
307
+ Cancel
308
+ </v-btn>
309
+ <v-btn
310
+ class="screen-btn-primary"
311
+ variant="flat"
312
+ :loading="statusUpdating"
313
+ @click="confirmStatusChange"
314
+ >
315
+ {{ statusConfirmLabel }}
316
+ </v-btn>
317
+ </div>
316
318
  </v-card>
317
319
  </v-dialog>
318
320
 
319
321
  <!-- Cancel / Resend / Delete an invitation. Same shape as the provider
320
322
  dialog above so the two read as one product. -->
321
- <v-dialog v-model="inviteDialog" max-width="728" persistent>
322
- <v-card rounded="lg" class="sp-status-card">
323
- <v-card-title class="sp-status-title">
324
- {{ inviteDialogTitle }}
325
- </v-card-title>
323
+ <v-dialog v-model="inviteDialog" max-width="520" persistent>
324
+ <v-card class="screen-modal">
325
+ <v-card-title>{{ inviteDialogTitle }}</v-card-title>
326
326
 
327
- <v-card-text class="sp-status-body">
327
+ <v-card-text class="screen-modal__body">
328
328
  <div class="sp-status-question">
329
329
  {{ inviteDialogQuestion }}
330
330
  </div>
@@ -333,47 +333,51 @@
333
333
  </div>
334
334
  </v-card-text>
335
335
 
336
- <v-divider />
337
-
338
- <v-card-actions class="pa-0">
339
- <v-row no-gutters class="fill-height">
340
- <v-col cols="6">
341
- <v-btn
342
- block
343
- variant="flat"
344
- height="82"
345
- class="text-none sp-status-cancel"
346
- :disabled="inviteWorking"
347
- @click="closeInviteDialog"
348
- >
349
- Keep it
350
- </v-btn>
351
- </v-col>
352
- <v-col cols="6">
353
- <v-btn
354
- block
355
- variant="flat"
356
- height="82"
357
- class="text-none sp-status-confirm"
358
- :loading="inviteWorking"
359
- @click="confirmInviteAction"
360
- >
361
- {{ inviteConfirmLabel }}
362
- </v-btn>
363
- </v-col>
364
- </v-row>
365
- </v-card-actions>
336
+ <div class="screen-modal__footer">
337
+ <v-btn
338
+ class="screen-btn-ghost"
339
+ variant="outlined"
340
+ :disabled="inviteWorking"
341
+ @click="closeInviteDialog"
342
+ >
343
+ Keep it
344
+ </v-btn>
345
+ <v-btn
346
+ class="screen-btn-primary"
347
+ variant="flat"
348
+ :loading="inviteWorking"
349
+ @click="confirmInviteAction"
350
+ >
351
+ {{ inviteConfirmLabel }}
352
+ </v-btn>
353
+ </div>
366
354
  </v-card>
367
355
  </v-dialog>
368
356
 
357
+ <!--
358
+ ADD SERVICE PROVIDER, on the design's modal.
359
+
360
+ The heading was a bare `v-toolbar` - Vuetify paints that from its own
361
+ `surface`, a grey slab across the top of the card and visibly lighter than
362
+ the card on the dark theme - carrying a `text-h5` (24px/500 Roboto). The
363
+ footer was a SECOND toolbar holding a text Cancel and a `color="black"`
364
+ Submit: a literal black fill in both themes. Both are the shared shapes now,
365
+ and the four untokenised fields take `.filter-field`.
366
+ -->
369
367
  <v-dialog v-model="createDialog" width="500" persistent>
370
- <v-card width="100%">
371
- <v-toolbar>
372
- <v-row no-gutters class="fill-height px-6" align="center">
373
- <span class="font-weight-bold text-h5"> Add Service Provider </span>
374
- </v-row>
375
- </v-toolbar>
376
- <v-card-text style="max-height: 100vh; overflow-y: auto">
368
+ <v-card class="screen-modal">
369
+ <v-card-title class="d-flex align-center">
370
+ Add Service Provider
371
+ <v-spacer />
372
+ <v-btn
373
+ variant="text"
374
+ icon="mdi-close"
375
+ class="screen-modal__close"
376
+ aria-label="Close"
377
+ @click="setServiceProvider({ mode: 'add', dialog: false })"
378
+ />
379
+ </v-card-title>
380
+ <v-card-text class="screen-modal__body">
377
381
  <v-form
378
382
  v-model="validServiceProvider"
379
383
  :disabled="disableServiceProvider"
@@ -387,6 +391,7 @@
387
391
  v-model="serviceProvider.name"
388
392
  density="comfortable"
389
393
  :rules="[requiredRule]"
394
+ class="filter-field"
390
395
  ></v-text-field>
391
396
  </v-col>
392
397
  </v-row>
@@ -403,6 +408,7 @@
403
408
  :items="natureOfBusinessV3"
404
409
  density="comfortable"
405
410
  :rules="[requiredRule]"
411
+ class="filter-field"
406
412
  ></v-select>
407
413
  </v-col>
408
414
  </v-row>
@@ -416,6 +422,7 @@
416
422
  v-model="serviceProvider.email"
417
423
  density="comfortable"
418
424
  :rules="[emailRule, requiredRule]"
425
+ class="filter-field"
419
426
  ></v-text-field>
420
427
  </v-col>
421
428
  </v-row>
@@ -430,6 +437,7 @@
430
437
  density="comfortable"
431
438
  no-resize
432
439
  rows="2"
440
+ class="filter-field"
433
441
  ></v-textarea>
434
442
  </v-col>
435
443
  </v-row>
@@ -452,9 +460,10 @@
452
460
  <v-col cols="12" class="my-2">
453
461
  <v-row no-gutters>
454
462
  <v-col cols="12" class="text-center">
455
- <span
456
- class="text-none text-subtitle-2 font-weight-medium text-error"
457
- >
463
+ <!-- `text-error` is Vuetify's error colour, not the design's
464
+ `--err`; the two disagree, and only one of them moves
465
+ with the theme. -->
466
+ <span class="sp-form-error">
458
467
  {{ messageServiceProvider }}
459
468
  </span>
460
469
  </v-col>
@@ -463,50 +472,52 @@
463
472
  </v-row>
464
473
  </v-form>
465
474
  </v-card-text>
466
- <v-toolbar>
467
- <v-row class="px-6">
468
- <v-col cols="6">
469
- <v-btn
470
- block
471
- variant="text"
472
- class="text-none"
473
- size="large"
474
- @click="setServiceProvider({ mode: 'add', dialog: false })"
475
- >
476
- Cancel
477
- </v-btn>
478
- </v-col>
479
-
480
- <v-col cols="6">
481
- <v-btn
482
- block
483
- variant="flat"
484
- color="black"
485
- class="text-none"
486
- size="small"
487
- :disabled="!validServiceProvider"
488
- :loading="disableServiceProvider"
489
- @click="submitServiceProviderAdd"
490
- >
491
- Submit
492
- </v-btn>
493
- </v-col>
494
- </v-row>
495
- </v-toolbar>
475
+ <div class="screen-modal__footer">
476
+ <v-btn
477
+ class="screen-btn-ghost"
478
+ variant="outlined"
479
+ @click="setServiceProvider({ mode: 'add', dialog: false })"
480
+ >
481
+ Cancel
482
+ </v-btn>
483
+ <v-btn
484
+ class="screen-btn-primary"
485
+ variant="flat"
486
+ :disabled="!validServiceProvider"
487
+ :loading="disableServiceProvider"
488
+ @click="submitServiceProviderAdd"
489
+ >
490
+ Submit
491
+ </v-btn>
492
+ </div>
496
493
  </v-card>
497
494
  </v-dialog>
498
495
 
496
+ <!--
497
+ INVITE SERVICE PROVIDER, on the design's modal.
498
+
499
+ Was a `rounded="lg"` card with a 76px toolbar heading in `text-h5`, a body
500
+ padded 48/44/34 whose fields were forced to 64px tall and 20px type, and a
501
+ footer of two 76px square-cornered buttons on hardcoded `#ffffff` /
502
+ `#0b253b` at 20px/700. None of those figures is in the handoff and none of
503
+ those colours is a token. It is the shared modal now, with the same fields
504
+ and the same two actions in the same order.
505
+ -->
499
506
  <v-dialog v-model="createInviteDialog" width="580" persistent>
500
- <v-card width="100%" rounded="lg" class="sp-invite-card">
501
- <v-toolbar flat color="transparent" class="table-card__toolbar" height="76">
502
- <v-row no-gutters class="fill-height px-6" align="center">
503
- <span class="font-weight-bold text-h5">
504
- Invite Service Provider
505
- </span>
506
- </v-row>
507
- </v-toolbar>
508
-
509
- <v-card-text class="sp-invite-body">
507
+ <v-card class="screen-modal">
508
+ <v-card-title class="d-flex align-center">
509
+ Invite Service Provider
510
+ <v-spacer />
511
+ <v-btn
512
+ variant="text"
513
+ icon="mdi-close"
514
+ class="screen-modal__close"
515
+ aria-label="Close"
516
+ @click="setServiceProvider({ mode: 'invite', dialog: false })"
517
+ />
518
+ </v-card-title>
519
+
520
+ <v-card-text class="screen-modal__body">
510
521
  <v-form
511
522
  v-model="validServiceProvider"
512
523
  :disabled="disableServiceProvider"
@@ -522,6 +533,7 @@
522
533
  variant="outlined"
523
534
  density="comfortable"
524
535
  :rules="[requiredRule, emailRule]"
536
+ class="filter-field"
525
537
  ></v-text-field>
526
538
  </v-col>
527
539
  </v-row>
@@ -547,6 +559,7 @@
547
559
  readonly
548
560
  variant="outlined"
549
561
  density="comfortable"
562
+ class="filter-field"
550
563
  />
551
564
  </v-col>
552
565
  </v-row>
@@ -570,6 +583,7 @@
570
583
  variant="outlined"
571
584
  density="comfortable"
572
585
  :rules="[requiredRule]"
586
+ class="filter-field"
573
587
  ></v-select>
574
588
  </v-col>
575
589
  </v-row>
@@ -587,6 +601,7 @@
587
601
  variant="outlined"
588
602
  density="comfortable"
589
603
  :rules="[requiredRule]"
604
+ class="filter-field"
590
605
  @update:model-value="setInviteSiteName"
591
606
  ></v-select>
592
607
  </v-col>
@@ -598,9 +613,10 @@
598
613
  <v-col cols="12" class="my-2">
599
614
  <v-row no-gutters>
600
615
  <v-col cols="12" class="text-center">
601
- <span
602
- class="text-none text-subtitle-2 font-weight-medium text-error"
603
- >
616
+ <!-- `text-error` is Vuetify's error colour, not the design's
617
+ `--err`; the two disagree, and only one of them moves
618
+ with the theme. -->
619
+ <span class="sp-form-error">
604
620
  {{ messageServiceProvider }}
605
621
  </span>
606
622
  </v-col>
@@ -610,35 +626,24 @@
610
626
  </v-form>
611
627
  </v-card-text>
612
628
 
613
- <v-toolbar flat height="76" class="sp-invite-footer">
614
- <v-row no-gutters class="fill-height">
615
- <v-col cols="6" class="fill-height">
616
- <v-btn
617
- block
618
- variant="flat"
619
- class="text-none sp-invite-footer-btn"
620
- height="76"
621
- @click="setServiceProvider({ mode: 'invite', dialog: false })"
622
- >
623
- Back
624
- </v-btn>
625
- </v-col>
626
-
627
- <v-col cols="6" class="fill-height">
628
- <v-btn
629
- block
630
- variant="flat"
631
- class="text-none sp-invite-submit-btn"
632
- height="76"
633
- :disabled="!canSubmitInvite"
634
- :loading="disableServiceProvider"
635
- @click="submitServiceProviderInvite()"
636
- >
637
- Submit
638
- </v-btn>
639
- </v-col>
640
- </v-row>
641
- </v-toolbar>
629
+ <div class="screen-modal__footer">
630
+ <v-btn
631
+ class="screen-btn-ghost"
632
+ variant="outlined"
633
+ @click="setServiceProvider({ mode: 'invite', dialog: false })"
634
+ >
635
+ Back
636
+ </v-btn>
637
+ <v-btn
638
+ class="screen-btn-primary"
639
+ variant="flat"
640
+ :disabled="!canSubmitInvite"
641
+ :loading="disableServiceProvider"
642
+ @click="submitServiceProviderInvite()"
643
+ >
644
+ Submit
645
+ </v-btn>
646
+ </div>
642
647
  </v-card>
643
648
  </v-dialog>
644
649
 
@@ -1498,142 +1503,81 @@ async function submitServiceProviderInvite() {
1498
1503
  max-width: 180px;
1499
1504
  }
1500
1505
 
1501
- .sp-table :deep(thead th) {
1502
- font-weight: 600;
1503
- font-size: 0.8125rem;
1504
- color: rgba(0, 0, 0, 0.7);
1505
- }
1506
-
1506
+ /* The header/cell type is `.table-card`'s, stated once in `screens.css`; what
1507
+ was here was a `rgba(0,0,0,0.7)` header that never reached the glass anyway
1508
+ (the shared rule carries `!important`) and would have been a black-on-black
1509
+ header on the dark theme if it had. Only the alignment is kept. */
1507
1510
  .sp-table :deep(tbody td) {
1508
1511
  vertical-align: middle;
1509
1512
  }
1510
1513
 
1511
- .sp-invite-card {
1512
- overflow: hidden;
1513
- }
1514
-
1515
- .sp-invite-body {
1516
- max-height: 100vh;
1517
- overflow-y: auto;
1518
- padding: 48px 44px 34px;
1519
- }
1520
-
1521
- .sp-invite-body :deep(.v-field) {
1522
- border-radius: 6px;
1514
+ /* The design's sub-line: `--muted` at 12px, the same figure batch I's
1515
+ `AttachmentsViewer` settled on. There is no `--fs-sub` token. */
1516
+ .sp-reject-reason,
1517
+ .sp-no-permission,
1518
+ .sp-members-note {
1519
+ font-family: var(--font-sans);
1520
+ font-size: 12px;
1521
+ color: var(--muted);
1523
1522
  }
1524
1523
 
1525
- .sp-invite-body :deep(.v-field__input) {
1526
- min-height: 64px;
1527
- font-size: 1.25rem;
1524
+ /* A row menu is teleported out of this component's subtree by `v-menu`, so the
1525
+ scoped attribute lands on the item and the title needs `:deep`. */
1526
+ .sp-menu-danger :deep(.v-list-item-title) {
1527
+ color: var(--err);
1528
1528
  }
1529
1529
 
1530
- .sp-invite-footer {
1531
- border-top: 1px solid rgba(0, 0, 0, 0.12);
1532
- }
1533
-
1534
- .sp-invite-footer-btn {
1535
- border-radius: 0;
1536
- background: #ffffff !important;
1537
- color: #111827 !important;
1538
- font-size: 1.25rem;
1539
- font-weight: 700;
1540
- }
1541
-
1542
- .sp-invite-submit-btn {
1543
- border-radius: 0;
1544
- background: #0b253b !important;
1545
- color: #ffffff !important;
1546
- font-size: 1.25rem;
1547
- font-weight: 700;
1548
- }
1549
-
1550
- .sp-members-card {
1551
- overflow: hidden;
1552
- }
1553
-
1554
- .sp-members-title {
1555
- min-height: 56px;
1556
- display: flex;
1557
- align-items: center;
1558
- padding: 0 16px;
1559
- font-size: 1.25rem;
1560
- font-weight: 700;
1530
+ .sp-form-error {
1531
+ font-family: var(--font-sans);
1532
+ font-size: 12px;
1533
+ font-weight: 500;
1534
+ color: var(--err);
1561
1535
  }
1562
1536
 
1563
- .sp-members-table {
1537
+ /* The modal body scrolls, not the card - the shared rule; this only bounds it
1538
+ so a long member list does not push the footer off the screen. */
1539
+ .sp-members-scroll {
1564
1540
  max-height: 444px;
1565
- overflow-y: auto;
1566
1541
  }
1567
1542
 
1568
1543
  .sp-members-table :deep(th) {
1569
- height: 64px;
1570
- color: #667085;
1571
- font-size: 1rem;
1572
- font-weight: 500;
1544
+ color: var(--muted);
1545
+ font-size: var(--fs-table-head);
1546
+ font-weight: var(--fw-table-head);
1547
+ letter-spacing: var(--ls-table-head);
1548
+ text-transform: uppercase;
1549
+ background: var(--thead);
1573
1550
  }
1574
1551
 
1575
1552
  .sp-members-table :deep(td) {
1576
- height: 64px;
1577
- color: #667085;
1578
- font-size: 1rem;
1579
- }
1580
-
1581
- .sp-status-card {
1582
- overflow: hidden;
1583
- }
1584
-
1585
- .sp-status-title {
1586
- min-height: 82px;
1587
- display: flex;
1588
- align-items: center;
1589
- padding: 0 24px;
1590
- background: #f5f5f5;
1591
- color: #101828;
1592
- font-size: 1.75rem;
1593
- font-weight: 700;
1594
- }
1595
-
1596
- .sp-status-body {
1597
- padding: 44px 46px 42px;
1553
+ color: var(--text);
1554
+ font-size: var(--fs-cell);
1598
1555
  }
1599
1556
 
1600
1557
  .sp-status-question {
1601
- color: #101828;
1602
- font-size: 1.5rem;
1603
- font-weight: 700;
1558
+ color: var(--text);
1559
+ font-size: var(--fs-card-title);
1560
+ font-weight: var(--fw-card-title);
1604
1561
  line-height: 1.35;
1605
1562
  }
1606
1563
 
1607
1564
  .sp-status-copy {
1608
- margin-top: 28px;
1609
- color: #667085;
1610
- font-size: 1.5rem;
1611
- line-height: 1.2;
1612
- }
1613
-
1614
- .sp-status-cancel {
1615
- color: #101828;
1616
- background: #ffffff;
1617
- font-size: 1.5rem;
1618
- font-weight: 700;
1565
+ margin-top: 12px;
1566
+ color: var(--muted);
1567
+ font-size: var(--fs-cell);
1568
+ line-height: 1.5;
1619
1569
  }
1620
1570
 
1621
- .sp-status-confirm {
1622
- color: #ffffff;
1623
- background: #00263a;
1624
- font-size: 1.5rem;
1625
- font-weight: 700;
1626
- }
1627
1571
  .sp-existing-title {
1628
- font-size: 1.125rem;
1629
- font-weight: 700;
1630
- color: #101828;
1572
+ font-size: var(--fs-card-title);
1573
+ font-weight: var(--fw-card-title);
1574
+ color: var(--text);
1631
1575
  margin-bottom: 16px;
1632
1576
  }
1633
1577
 
1634
1578
  .sp-existing-copy {
1635
- font-size: 1rem;
1636
- color: #344054;
1579
+ font-size: var(--fs-cell);
1580
+ color: var(--muted);
1637
1581
  line-height: 1.5;
1638
1582
  margin-bottom: 24px;
1639
1583
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@7365admin1/layer-common",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
- "version": "3.2.2-staging.127",
5
+ "version": "3.2.2-staging.128",
6
6
  "author": "7365admin1",
7
7
  "main": "./nuxt.config.ts",
8
8
  "//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",