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

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.
@@ -22,9 +22,7 @@
22
22
 
23
23
  <div class="edit-btn mb-5" v-if="imgEditable">
24
24
  <v-btn
25
- color="primary"
26
- height="42px"
27
- width="100px"
25
+ class="screen-btn-primary"
28
26
  @click.stop="onMediaEdit(item.url, idx)"
29
27
  >
30
28
  Edit
@@ -32,14 +30,9 @@
32
30
  </div>
33
31
 
34
32
  <div class="delete-btn mb-3" v-if="imgDelete">
35
- <v-btn
36
- color="red"
37
- height="42px"
38
- width="100px"
39
- @click.stop="onMediaDelete(item.url)"
40
- >
33
+ <AppButton variant="err" @click.stop="onMediaDelete(item.url)">
41
34
  Delete
42
- </v-btn>
35
+ </AppButton>
43
36
  </div>
44
37
  </v-carousel-item>
45
38
 
@@ -53,20 +46,15 @@
53
46
  <source :src="item.url" />
54
47
  </video>
55
48
  <div class="play-overlay">
56
- <v-btn class="play-btn" icon size="55" color="primary">
49
+ <v-btn class="play-btn" icon size="55">
57
50
  <v-icon icon="mdi-play" size="40" />
58
51
  </v-btn>
59
52
  </div>
60
53
 
61
54
  <div class="delete-btn pb-4" v-if="imgDelete">
62
- <v-btn
63
- color="red"
64
- height="42px"
65
- width="100px"
66
- @click.stop="onMediaDelete(item.url)"
67
- >
55
+ <AppButton variant="err" @click.stop="onMediaDelete(item.url)">
68
56
  Delete
69
- </v-btn>
57
+ </AppButton>
70
58
  </div>
71
59
  </div>
72
60
  </v-carousel-item>
@@ -82,19 +70,16 @@
82
70
  <v-icon
83
71
  :icon="getFileIcon(item.type)"
84
72
  size="150"
85
- :color="getFileIconColor(getFileIcon(item.type))"
73
+ :class="getFileIconTone(getFileIcon(item.type))"
86
74
  />
87
- <div class="text-h6 text-center text-wrap mt-2">{{ item.name }}</div>
75
+ <div class="screen-card-title text-center text-wrap mt-2">
76
+ {{ item.name }}
77
+ </div>
88
78
 
89
79
  <div class="delete-btn pb-4" v-if="imgDelete">
90
- <v-btn
91
- color="red"
92
- height="42px"
93
- width="100px"
94
- @click.stop="onMediaDelete(item.url)"
95
- >
80
+ <AppButton variant="err" @click.stop="onMediaDelete(item.url)">
96
81
  Delete
97
- </v-btn>
82
+ </AppButton>
98
83
  </div>
99
84
  </div>
100
85
  </v-carousel-item>
@@ -105,7 +90,7 @@
105
90
 
106
91
  <!-- Dialog for fullscreen view -->
107
92
  <v-dialog v-model="isDialogOpen" max-width="700">
108
- <v-card>
93
+ <v-card class="screen-modal">
109
94
  <v-btn icon class="close-btn" @click="isDialogOpen = false">
110
95
  <v-icon icon="mdi-close" size="40" />
111
96
  </v-btn>
@@ -346,14 +331,21 @@ const getFileIcon = (type: string) => {
346
331
  return iconMap[type] || "mdi-file-outline";
347
332
  };
348
333
 
349
- function getFileIconColor(icon?: string) {
350
- if (icon === "mdi-file-pdf-box") return "#F44336"; // Red
351
- if (icon === "mdi-file-word-box") return "#2196F3"; // Blue
334
+ /**
335
+ * The file-type tone. The handoff draws no file-type icon palette at all, so
336
+ * the six distinctions this screen already made are kept and simply said in the
337
+ * tokens that carry those tones - the same reading `AttachmentsViewer` took.
338
+ * The one exception is the archive icon, which was purple: there is no purple
339
+ * token, so it falls in with the generic files on `--muted`. That IS a change
340
+ * of meaning and is recorded rather than papered over.
341
+ */
342
+ function getFileIconTone(icon?: string) {
343
+ if (icon === "mdi-file-pdf-box") return "tone-err";
344
+ if (icon === "mdi-file-word-box") return "tone-info";
352
345
  if (icon === "mdi-file-excel-box" || icon === "mdi-file-delimited-outline")
353
- return "#4CAF50"; // Green
354
- if (icon === "mdi-file-powerpoint-box") return "#FF9800"; // Orange
355
- if (icon === "mdi-zip-box-outline") return "#9C27B0"; // Purple
356
- return "grey";
346
+ return "tone-ok";
347
+ if (icon === "mdi-file-powerpoint-box") return "tone-warn";
348
+ return "tone-muted";
357
349
  }
358
350
 
359
351
  const message = ref("");
@@ -419,6 +411,13 @@ async function downloadFile({
419
411
  right: 5%;
420
412
  }
421
413
 
414
+ /**
415
+ * DELIBERATELY NOT `.screen-modal__close`. This close sits ON the picture, not
416
+ * on a card, so the design's borderless muted glyph would be unreadable over a
417
+ * bright photo in light theme and over a dark one in dark theme. The existing
418
+ * dark chip is legible on both, and the handoff draws no media lightbox at all
419
+ * - parity with a readable control wins over a primitive that would disappear.
420
+ */
422
421
  .close-btn {
423
422
  position: absolute;
424
423
  top: 10px;
@@ -440,8 +439,29 @@ async function downloadFile({
440
439
  pointer-events: auto;
441
440
  }
442
441
 
442
+ /* Was `color="primary"`, i.e. the FOREGROUND token used as a fill. The button
443
+ the design fills is `--accent-strong` with `--on-accent-strong` ink. */
443
444
  .play-btn {
444
- border-radius: 9999px;
445
+ border-radius: var(--r-pill);
446
+ background: var(--accent-strong);
447
+ color: var(--on-accent-strong);
448
+ }
449
+
450
+ /* The file-type tones, on tokens instead of six hard-coded hexes. */
451
+ .tone-err {
452
+ color: var(--err);
453
+ }
454
+ .tone-info {
455
+ color: var(--info);
456
+ }
457
+ .tone-ok {
458
+ color: var(--ok);
459
+ }
460
+ .tone-warn {
461
+ color: var(--warn);
462
+ }
463
+ .tone-muted {
464
+ color: var(--muted);
445
465
  }
446
466
 
447
467
  .dialog-video-container {
@@ -1,36 +1,32 @@
1
1
  <template>
2
- <v-card class="mb-2 pa-4 rounded-lg" width="400" elevation="2">
2
+ <v-card class="chat-bubble screen-card mb-2 pa-4" width="400" elevation="0">
3
3
  <v-row no-gutters align="center">
4
4
  <v-col cols="auto" class="mr-3">
5
- <v-avatar color="surface-variant" size="35">
5
+ <v-avatar class="chat-bubble__avatar" size="35">
6
6
  <v-img v-if="currentUser?.profile" width="15" height="15" />
7
- <span v-else class="text-h5">{{ getNameInitials(senderName) }}</span>
7
+ <span v-else>{{ getNameInitials(senderName) }}</span>
8
8
  </v-avatar>
9
9
  </v-col>
10
10
 
11
11
  <v-col class="d-flex flex-column">
12
- <span class="text-body-2 font-weight-medium">{{ senderName }}</span>
13
- <span class="text-caption text-grey">{{ role }}</span>
12
+ <span class="chat-bubble__sender">{{ senderName }}</span>
13
+ <span class="chat-bubble__sub">{{ role }}</span>
14
14
  </v-col>
15
15
  </v-row>
16
16
 
17
17
  <v-row no-gutters class="mt-1">
18
18
  <v-col>
19
- <span class="py-2">{{ message }}</span>
19
+ <span class="chat-bubble__text py-2">{{ message }}</span>
20
20
 
21
21
  <v-row no-gutters justify="space-between" align="center" class="mt-1">
22
22
  <v-col cols="auto">
23
- <span class="text-caption">{{ timestamp }}</span>
23
+ <span class="chat-bubble__sub">{{ timestamp }}</span>
24
24
  </v-col>
25
- <v-col
26
- v-if="isCurrentUser"
27
- cols="auto"
28
- class="d-flex align-center bg-grey-200"
29
- >
30
- <v-icon size="16" class="mr-1 text--secondary"
25
+ <v-col v-if="isCurrentUser" cols="auto" class="d-flex align-center">
26
+ <v-icon size="16" class="chat-bubble__sub mr-1"
31
27
  >mdi-eye-outline</v-icon
32
28
  >
33
- <span class="text-caption text--secondary">{{ seenLabel }}</span>
29
+ <span class="chat-bubble__sub">{{ seenLabel }}</span>
34
30
  </v-col>
35
31
  </v-row>
36
32
  </v-col>
@@ -51,3 +47,36 @@ defineProps<{
51
47
  const { currentUser } = useLocalAuth();
52
48
  const { getNameInitials } = useUtils();
53
49
  </script>
50
+
51
+ <style scoped>
52
+ .chat-bubble {
53
+ font-family: var(--font-sans);
54
+ color: var(--text);
55
+ }
56
+
57
+ /* Was `color="surface-variant"` with the initials at `text-h5`, i.e. a 24px
58
+ pair of letters in a 35px circle. The design's avatar is the tone wash with
59
+ the accent ink, and the initials fit inside it. */
60
+ .chat-bubble__avatar {
61
+ background: var(--hover);
62
+ color: var(--text2);
63
+ font-size: 13px;
64
+ font-weight: 700;
65
+ }
66
+
67
+ .chat-bubble__sender {
68
+ font-size: var(--fs-cell);
69
+ font-weight: 600;
70
+ }
71
+
72
+ .chat-bubble__text {
73
+ font-size: var(--fs-cell);
74
+ }
75
+
76
+ /* The role, the timestamp and the seen label were `text-grey`, `text-caption`
77
+ and `text--secondary` - three different greys for one sub-line. One tone. */
78
+ .chat-bubble__sub {
79
+ font-size: var(--fs-chip);
80
+ color: var(--muted);
81
+ }
82
+ </style>
@@ -1,21 +1,16 @@
1
1
  <template>
2
2
  <v-sheet
3
- elevation="1"
3
+ elevation="0"
4
4
  rounded="0"
5
- class="fill-height d-flex flex-column"
6
- style="border-right: 1px solid #e0e0e0; border-top: 1px solid #e0e0e0"
5
+ class="chat-info fill-height d-flex flex-column"
7
6
  >
8
7
  <v-row class="pa-4">
9
8
  <v-sheet
10
9
  class="overflow-y-auto flex-grow-1"
11
10
  :style="{ height: 'calc(100vh - 250px)', overflowX: 'hidden' }"
12
11
  >
13
- <v-col
14
- cols="12"
15
- class="mb-2"
16
- style="position: sticky; top: 0; background-color: white; z-index: 1"
17
- >
18
- <h3 class="text-h6">
12
+ <v-col cols="12" class="chat-info__head mb-2">
13
+ <h3 class="screen-card-title">
19
14
  {{ type === "workOrder" ? "Work Order" : "Feedback" }} Information
20
15
  </h3>
21
16
  </v-col>
@@ -105,7 +100,7 @@
105
100
  </v-col>
106
101
  <v-col v-else cols="6" class="py-1 text-right">
107
102
  <v-btn
108
- class="text-none text-capitalize text-blue"
103
+ class="chat-info__link text-none"
109
104
  rounded="pill"
110
105
  variant="flat"
111
106
  size="small"
@@ -130,13 +125,7 @@
130
125
  <v-row dense class="my-1">
131
126
  <v-col cols="6" class="py-1"><strong>Status:</strong></v-col>
132
127
  <v-col cols="6" class="py-1 text-right">
133
- <v-chip
134
- :color="getColorStatus(item.status)"
135
- size="x-small"
136
- text-color="white"
137
- >
138
- {{ item.status }}
139
- </v-chip>
128
+ <StatusChip :status="item.status" />
140
129
  </v-col>
141
130
  </v-row>
142
131
 
@@ -152,12 +141,11 @@
152
141
  </v-sheet>
153
142
  </v-row>
154
143
 
155
- <v-sheet class="px-4 py-2">
144
+ <v-sheet class="chat-info__actions px-4 py-2">
156
145
  <v-btn
157
146
  block
158
- color="primary"
159
147
  variant="flat"
160
- class="mb-2 text-capitalize"
148
+ class="screen-btn-primary mb-2"
161
149
  @click="$emit('edit')"
162
150
  >
163
151
  Edit
@@ -165,23 +153,15 @@
165
153
  <v-btn
166
154
  v-if="item?.status !== 'Completed'"
167
155
  block
168
- color="primary-button"
169
- density="default"
170
- class="mb-2 text-capitalize"
156
+ variant="flat"
157
+ class="screen-btn-primary mb-2"
171
158
  @click="$emit('mark-complete-request')"
172
159
  >
173
160
  Mark as Complete
174
161
  </v-btn>
175
- <v-btn
176
- block
177
- variant="flat"
178
- color="red"
179
- density="default"
180
- class="text-white text-capitalize"
181
- @click="$emit('delete')"
182
- >
162
+ <AppButton variant="err" class="chat-info__delete" @click="$emit('delete')">
183
163
  Delete
184
- </v-btn>
164
+ </AppButton>
185
165
  </v-sheet>
186
166
 
187
167
  <WorkOrderCreate
@@ -414,3 +394,40 @@ function showWorkOrderInfo(workOrderId: string) {
414
394
  };
415
395
  }
416
396
  </script>
397
+
398
+ <style scoped>
399
+ /* The same two hard-coded #e0e0e0 hairlines the other two chat panels carried,
400
+ and a sticky heading whose background was the literal word `white` - i.e. a
401
+ white bar across the dark theme. */
402
+ .chat-info {
403
+ background: var(--card);
404
+ border-right: 1px solid var(--border);
405
+ border-top: 1px solid var(--border);
406
+ font-family: var(--font-sans);
407
+ color: var(--text);
408
+ }
409
+
410
+ .chat-info__head {
411
+ position: sticky;
412
+ top: 0;
413
+ z-index: 1;
414
+ background: var(--card);
415
+ }
416
+
417
+ .chat-info__actions {
418
+ background: var(--card);
419
+ }
420
+
421
+ /* AppButton is a <button>, not a v-btn, so `block` does not reach it. */
422
+ .chat-info__delete {
423
+ width: 100%;
424
+ }
425
+
426
+ /* Was `text-blue` - a Vuetify palette word, not a token. */
427
+ .chat-info__link {
428
+ background: transparent;
429
+ color: var(--accent-text);
430
+ font-size: var(--fs-btn);
431
+ font-weight: var(--fw-btn-strong);
432
+ }
433
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <v-card class="mb-2 pa-2 rounded-lg border-sm" elevation="0">
2
+ <v-card class="chat-listcard screen-card mb-2 pa-2" elevation="0">
3
3
  <v-row no-gutters align="center">
4
4
  <v-col cols="12" sm="4" class="d-flex justify-center align-center">
5
5
  <v-img
@@ -15,30 +15,30 @@
15
15
  <v-col cols="12" sm="8" class="py-2 pe-1">
16
16
  <v-row dense>
17
17
  <v-col cols="12" class="d-flex align-center flex-wrap">
18
- <span class="text-caption font-weight-medium me-1">Created by</span>
18
+ <span class="chat-listcard__label me-1">Created by</span>
19
19
 
20
- <v-avatar color="surface-variant" size="20" class="me-1">
20
+ <v-avatar class="chat-listcard__avatar me-1" size="20">
21
21
  <v-img
22
22
  v-if="userProfile"
23
23
  :src="userProfile"
24
24
  width="20"
25
25
  height="20"
26
26
  />
27
- <span v-else class="text-overline">
27
+ <span v-else class="chat-listcard__initials">
28
28
  {{ getNameInitials }}
29
29
  </span>
30
30
  </v-avatar>
31
31
 
32
- <span class="text-caption">{{ createdByName || "Unknown" }}</span>
32
+ <span class="chat-listcard__cell">{{ createdByName || "Unknown" }}</span>
33
33
  </v-col>
34
34
 
35
- <v-col cols="12" class="text-caption">Subject: {{ subject }}</v-col>
35
+ <v-col cols="12" class="chat-listcard__cell">Subject: {{ subject }}</v-col>
36
36
 
37
- <v-col cols="12" class="text-caption">
38
- Status: <span class="text-orange">{{ status }}</span>
37
+ <v-col cols="12" class="chat-listcard__cell d-flex align-center ga-1">
38
+ Status: <StatusChip :status="status" />
39
39
  </v-col>
40
40
 
41
- <v-col cols="12" class="text-caption">
41
+ <v-col cols="12" class="chat-listcard__cell">
42
42
  Date Created: {{ createdAt }}
43
43
  </v-col>
44
44
  </v-row>
@@ -60,3 +60,32 @@ defineProps({
60
60
  getNameInitials: Function,
61
61
  });
62
62
  </script>
63
+
64
+ <style scoped>
65
+ .chat-listcard {
66
+ font-family: var(--font-sans);
67
+ color: var(--text);
68
+ }
69
+
70
+ .chat-listcard__cell,
71
+ .chat-listcard__label {
72
+ font-size: var(--fs-cell-dense);
73
+ }
74
+
75
+ .chat-listcard__label {
76
+ font-weight: 600;
77
+ }
78
+
79
+ /* Was `color="surface-variant"` with `text-overline` initials - 10px letters
80
+ with 1.6px tracking inside a 20px circle, which drew as one clipped glyph. */
81
+ .chat-listcard__avatar {
82
+ background: var(--hover);
83
+ color: var(--text2);
84
+ }
85
+
86
+ .chat-listcard__initials {
87
+ font-size: 9px;
88
+ font-weight: 700;
89
+ letter-spacing: 0;
90
+ }
91
+ </style>
@@ -1,18 +1,17 @@
1
1
  <template>
2
2
  <v-sheet
3
- elevation="1"
3
+ elevation="0"
4
4
  rounded="0"
5
- class="fill-height d-flex flex-column"
6
- style="border-right: 1px solid #e0e0e0; border-top: 1px solid #e0e0e0"
5
+ class="chat-panel fill-height d-flex flex-column"
7
6
  >
8
- <div style="border-bottom: 1px solid #e0e0e0" class="px-4 pt-4 pb-2 mb-2">
9
- <h3 class="text-h6">
7
+ <div class="chat-panel__head px-4 pt-4 pb-2 mb-2">
8
+ <h3 class="screen-card-title">
10
9
  {{ type === "workOrder" ? "Work Order" : "Feedback" }} Chat
11
10
  </h3>
12
11
  </div>
13
12
 
14
13
  <v-sheet
15
- class="overflow-y-auto flex-grow-1 pa-3"
14
+ class="chat-panel__thread overflow-y-auto flex-grow-1 pa-3"
16
15
  :style="{ height: 'calc(100vh - 300px)', overflowX: 'hidden' }"
17
16
  >
18
17
  <v-row
@@ -35,10 +34,11 @@
35
34
  </v-row>
36
35
  </v-sheet>
37
36
 
38
- <v-card class="mx-4 mb-4 mt-2 pa-3 rounded-lg" elevation="2">
37
+ <v-card class="screen-card mx-4 mb-4 mt-2 pa-3" elevation="0">
39
38
  <v-row no-gutters align="end">
40
39
  <v-col cols="10">
41
40
  <v-textarea
41
+ class="filter-field"
42
42
  label="Message"
43
43
  auto-grow
44
44
  hide-details
@@ -47,9 +47,7 @@
47
47
  />
48
48
  </v-col>
49
49
  <v-col cols="2" class="pl-2">
50
- <v-btn color="primary-button" block class="pa-4 py-6 text-capitalize"
51
- >Send</v-btn
52
- >
50
+ <v-btn class="screen-btn-primary" variant="flat" block>Send</v-btn>
53
51
  </v-col>
54
52
  </v-row>
55
53
 
@@ -57,23 +55,27 @@
57
55
 
58
56
  <v-row justify="start" no-gutters align="center">
59
57
  <v-col cols="auto">
60
- <v-icon size="20" class="mr-3">mdi-paperclip</v-icon>
58
+ <v-icon size="20" class="chat-panel__tool mr-3">mdi-paperclip</v-icon>
61
59
  </v-col>
62
60
 
63
61
  <v-col cols="auto">
64
- <v-icon size="20" class="mr-3">mdi-emoticon-happy-outline</v-icon>
62
+ <v-icon size="20" class="chat-panel__tool mr-3"
63
+ >mdi-emoticon-happy-outline</v-icon
64
+ >
65
65
  </v-col>
66
66
 
67
67
  <v-col cols="auto">
68
68
  <v-menu location="top" offset="10">
69
69
  <template #activator="{ props }">
70
70
  <v-btn icon v-bind="props" density="compact" variant="text">
71
- <v-icon size="20" color="gray">mdi-message-outline</v-icon>
71
+ <v-icon size="20" class="chat-panel__tool"
72
+ >mdi-message-outline</v-icon
73
+ >
72
74
  </v-btn>
73
75
  </template>
74
76
 
75
- <v-card min-width="350" class="rounded-lg">
76
- <v-card-title class="text-subtitle-1 font-weight-medium pb-1"
77
+ <v-card min-width="350" class="screen-card">
78
+ <v-card-title class="screen-card-title pb-1"
77
79
  >Quick Chat</v-card-title
78
80
  >
79
81
  <v-divider class="mb-1" />
@@ -156,3 +158,27 @@ const selectQuickChat = (msg: string) => {
156
158
  console.log("Quick Chat Selected:", msg);
157
159
  };
158
160
  </script>
161
+
162
+ <style scoped>
163
+ /* The panel's two rules were hard-coded `1px solid #e0e0e0`, which is a light-
164
+ theme hairline drawn on the dark theme as well. Same lines, on `--border`. */
165
+ .chat-panel {
166
+ background: var(--card);
167
+ border-right: 1px solid var(--border);
168
+ border-top: 1px solid var(--border);
169
+ }
170
+
171
+ .chat-panel__head {
172
+ border-bottom: 1px solid var(--border);
173
+ }
174
+
175
+ .chat-panel__thread {
176
+ background: var(--bg);
177
+ }
178
+
179
+ /* Was a bare icon and one `color="gray"` - not a token, and not the same tone
180
+ as the icon beside it. */
181
+ .chat-panel__tool {
182
+ color: var(--muted);
183
+ }
184
+ </style>
@@ -1,31 +1,24 @@
1
1
  <template>
2
- <v-sheet
3
- elevation="1"
4
- rounded="0"
5
- class="pa-4 fill-height"
6
- style="border-right: 1px solid #e0e0e0; border-top: 1px solid #e0e0e0"
7
- >
8
- <h3 class="text-h6 mb-4">{{ title }}</h3>
2
+ <v-sheet elevation="0" rounded="0" class="chat-nav pa-4 fill-height">
3
+ <h3 class="screen-card-title mb-4">{{ title }}</h3>
9
4
 
10
5
  <v-text-field
11
6
  v-model="search"
12
7
  @input="_search"
13
8
  label="Search"
14
9
  prepend-inner-icon="mdi-magnify"
15
- density="compact"
16
10
  hide-details
17
11
  variant="outlined"
18
- class="mb-4"
12
+ class="filter-field mb-4"
19
13
  />
20
14
 
21
15
  <v-select
22
16
  label="Filter by Status"
23
17
  :items="['All', 'In Progress', 'To Do', 'Done']"
24
18
  v-model="selectedStatus"
25
- density="compact"
26
19
  hide-details
27
20
  variant="outlined"
28
- class="mb-4"
21
+ class="filter-field mb-4"
29
22
  />
30
23
 
31
24
  <v-row dense class="mb-4" align="center">
@@ -43,7 +36,7 @@
43
36
  v-bind="props"
44
37
  v-model="startDate"
45
38
  label="Start Date"
46
- density="compact"
39
+ class="filter-field"
47
40
  variant="outlined"
48
41
  readonly
49
42
  hide-details
@@ -63,7 +56,7 @@
63
56
  </v-col>
64
57
 
65
58
  <v-col cols="2" class="d-flex align-center justify-center">
66
- <span class="text-subtitle-2">to</span>
59
+ <span class="chat-nav__to">to</span>
67
60
  </v-col>
68
61
 
69
62
  <v-col cols="5">
@@ -80,7 +73,7 @@
80
73
  v-bind="props"
81
74
  v-model="endDate"
82
75
  label="End Date"
83
- density="compact"
76
+ class="filter-field"
84
77
  variant="outlined"
85
78
  readonly
86
79
  hide-details
@@ -101,7 +94,7 @@
101
94
  </v-row>
102
95
 
103
96
  <v-sheet
104
- class="overflow-y-auto flex-grow-1 pa-3"
97
+ class="chat-nav__list overflow-y-auto flex-grow-1 pa-3"
105
98
  :style="{ height: 'calc(100vh - 320px)', overflowX: 'hidden' }"
106
99
  >
107
100
  <v-row dense>
@@ -148,3 +141,22 @@ function _search() {
148
141
  emit("search", search.value);
149
142
  }
150
143
  </script>
144
+
145
+ <style scoped>
146
+ /* Same two hard-coded #e0e0e0 hairlines the chat panel carried, on --border. */
147
+ .chat-nav {
148
+ background: var(--card);
149
+ border-right: 1px solid var(--border);
150
+ border-top: 1px solid var(--border);
151
+ }
152
+
153
+ .chat-nav__list {
154
+ background: var(--bg);
155
+ }
156
+
157
+ .chat-nav__to {
158
+ font-family: var(--font-sans);
159
+ font-size: var(--fs-cell);
160
+ color: var(--muted);
161
+ }
162
+ </style>