nexus-shared 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +795 -0
- package/README.md +220 -14
- package/dist/Client.Index.d.ts +13 -0
- package/dist/Client.Index.js +13 -0
- package/dist/Components/Chats/ChatComposer.d.ts +7 -1
- package/dist/Components/Chats/ChatComposer.js +9 -6
- package/dist/Components/Chats/ChatParts.d.ts +15 -2
- package/dist/Components/Chats/ChatParts.js +15 -4
- package/dist/Components/Chats/ChatPopup.d.ts +46 -0
- package/dist/Components/Chats/ChatPopup.js +34 -0
- package/dist/Components/Chats/ChatThread.d.ts +9 -1
- package/dist/Components/Chats/ChatThread.js +54 -6
- package/dist/Components/Dashboards/DashboardBoard.d.ts +62 -0
- package/dist/Components/Dashboards/DashboardBoard.js +594 -0
- package/dist/Components/Dashboards/DashboardWidgets.d.ts +155 -0
- package/dist/Components/Dashboards/DashboardWidgets.js +159 -0
- package/dist/Components/Dashboards/WidgetFrame.d.ts +51 -0
- package/dist/Components/Dashboards/WidgetFrame.js +45 -0
- package/dist/Components/Documents/Button.d.ts +6 -1
- package/dist/Components/Documents/Button.js +2 -2
- package/dist/Components/Documents/TabButtons.d.ts +6 -0
- package/dist/Components/Documents/TabButtons.js +5 -4
- package/dist/Components/Domains/DomainCard.d.ts +98 -0
- package/dist/Components/Domains/DomainCard.js +182 -0
- package/dist/Components/Forms/ApiForm.js +5 -1
- package/dist/Components/Forms/Crud.js +72 -24
- package/dist/Components/Forms/CrudActions.d.ts +5 -4
- package/dist/Components/Forms/CrudActions.js +42 -12
- package/dist/Components/Forms/CrudHistory.d.ts +6 -1
- package/dist/Components/Forms/CrudHistory.js +14 -6
- package/dist/Components/Forms/CrudParts.d.ts +11 -4
- package/dist/Components/Forms/CrudParts.js +76 -10
- package/dist/Components/Forms/CrudRowForms.js +65 -5
- package/dist/Components/Forms/CrudTree.js +7 -7
- package/dist/Components/Forms/CrudWorkspace.d.ts +15 -5
- package/dist/Components/Forms/CrudWorkspace.js +19 -11
- package/dist/Components/Forms/Form.d.ts +3 -2
- package/dist/Components/Forms/Form.js +33 -26
- package/dist/Components/Forms/FormQuestion.d.ts +6 -0
- package/dist/Components/Forms/FormQuestion.js +28 -0
- package/dist/Components/Forms/SubmitForm.js +2 -15
- package/dist/Components/Inputs/ComputedInput.d.ts +51 -0
- package/dist/Components/Inputs/ComputedInput.js +179 -0
- package/dist/Components/Inputs/Dropdown.js +4 -2
- package/dist/Components/Inputs/GroupForm.js +3 -2
- package/dist/Components/Inputs/InputRenderer.d.ts +5 -1
- package/dist/Components/Inputs/MarkdownEditor.d.ts +6 -0
- package/dist/Components/Inputs/MarkdownEditor.js +32 -6
- package/dist/Components/Inputs/PictureInput.js +8 -3
- package/dist/Components/Inputs/RowsInput.d.ts +14 -1
- package/dist/Components/Inputs/RowsInput.js +78 -5
- package/dist/Components/Inputs/TabularForm.js +16 -3
- package/dist/Components/Inputs/TreeView.d.ts +24 -1
- package/dist/Components/Inputs/TreeView.js +84 -7
- package/dist/Components/Layouts/Popup.d.ts +22 -2
- package/dist/Components/Layouts/Popup.js +108 -6
- package/dist/Components/Messages/MailClient.d.ts +50 -0
- package/dist/Components/Messages/MailClient.js +410 -0
- package/dist/Components/Messages/MailColumns.d.ts +21 -0
- package/dist/Components/Messages/MailColumns.js +92 -0
- package/dist/Components/Messages/MailCompose.d.ts +46 -0
- package/dist/Components/Messages/MailCompose.js +154 -0
- package/dist/Components/Messages/MailReader.d.ts +43 -0
- package/dist/Components/Messages/MailReader.js +207 -0
- package/dist/Components/Messages/MailThread.d.ts +71 -0
- package/dist/Components/Messages/MailThread.js +185 -0
- package/dist/Components/Messages/MessageBell.d.ts +41 -0
- package/dist/Components/Messages/MessageBell.js +76 -0
- package/dist/Components/Viewers/DataTable.js +7 -5
- package/dist/Components/Viewers/DataTableColumns.d.ts +2 -2
- package/dist/Components/Viewers/DataTableColumns.js +2 -1
- package/dist/Components/Viewers/DataTableParts.d.ts +3 -1
- package/dist/Components/Viewers/DataTableParts.js +2 -2
- package/dist/Components/Viewers/OwnerFiles.d.ts +57 -5
- package/dist/Components/Viewers/OwnerFiles.js +142 -31
- package/dist/Helpers/ApiModules.js +4 -0
- package/dist/Helpers/AuditEntries.d.ts +50 -0
- package/dist/Helpers/AuditEntries.js +96 -0
- package/dist/Helpers/ChatBackend.d.ts +8 -1
- package/dist/Helpers/ChatBackend.js +18 -0
- package/dist/Helpers/ChatHelpers.d.ts +2 -0
- package/dist/Helpers/ChatHelpers.js +4 -1
- package/dist/Helpers/CrudColumns.d.ts +44 -6
- package/dist/Helpers/CrudColumns.js +63 -13
- package/dist/Helpers/CrudHelpers.d.ts +36 -1
- package/dist/Helpers/CrudHelpers.js +61 -0
- package/dist/Helpers/CrudPickerPlan.d.ts +58 -0
- package/dist/Helpers/CrudPickerPlan.js +46 -0
- package/dist/Helpers/CrudRowForms.d.ts +18 -1
- package/dist/Helpers/CrudRowForms.js +35 -2
- package/dist/Helpers/DashboardHelpers.d.ts +115 -0
- package/dist/Helpers/DashboardHelpers.js +305 -0
- package/dist/Helpers/DomainCards.d.ts +140 -0
- package/dist/Helpers/DomainCards.js +370 -0
- package/dist/Helpers/FileAdapter.d.ts +82 -2
- package/dist/Helpers/FileAdapter.js +72 -1
- package/dist/Helpers/FormStore.d.ts +11 -1
- package/dist/Helpers/FormStore.js +66 -19
- package/dist/Helpers/InputConditions.d.ts +6 -0
- package/dist/Helpers/InputConditions.js +24 -0
- package/dist/Helpers/InputMemory.js +40 -30
- package/dist/Helpers/InputNarrowing.d.ts +38 -6
- package/dist/Helpers/InputNarrowing.js +102 -21
- package/dist/Helpers/MailClientHelpers.d.ts +96 -0
- package/dist/Helpers/MailClientHelpers.js +211 -0
- package/dist/Helpers/MessageBackend.d.ts +152 -0
- package/dist/Helpers/MessageBackend.js +329 -0
- package/dist/Helpers/MessageHelpers.d.ts +160 -0
- package/dist/Helpers/MessageHelpers.js +573 -0
- package/dist/Helpers/MessageUnread.d.ts +95 -0
- package/dist/Helpers/MessageUnread.js +245 -0
- package/dist/Helpers/NexusDriveAdapter.d.ts +17 -1
- package/dist/Helpers/NexusDriveAdapter.js +32 -3
- package/dist/Helpers/NumberHelpers.d.ts +61 -0
- package/dist/Helpers/NumberHelpers.js +124 -8
- package/dist/Helpers/PagedPicker.d.ts +42 -0
- package/dist/Helpers/PagedPicker.js +85 -0
- package/dist/Helpers/RowsStore.d.ts +24 -0
- package/dist/Helpers/RowsStore.js +79 -10
- package/dist/Helpers/TableHelpers.d.ts +15 -2
- package/dist/Helpers/TableHelpers.js +28 -1
- package/dist/Helpers/TableStore.d.ts +7 -3
- package/dist/Helpers/TableStore.js +9 -4
- package/dist/Helpers/ToolbarFit.d.ts +23 -0
- package/dist/Helpers/ToolbarFit.js +30 -0
- package/dist/Helpers/TreeStore.d.ts +75 -6
- package/dist/Helpers/TreeStore.js +182 -18
- package/dist/Interfaces/ApiInterfaces.d.ts +10 -1
- package/dist/Interfaces/ApiInterfaces.js +10 -1
- package/dist/Interfaces/ChatInterfaces.d.ts +22 -0
- package/dist/Interfaces/CrudInterfaces.d.ts +78 -5
- package/dist/Interfaces/DashboardInterfaces.d.ts +123 -0
- package/dist/Interfaces/DashboardInterfaces.js +1 -0
- package/dist/Interfaces/DomainInterfaces.d.ts +145 -0
- package/dist/Interfaces/DomainInterfaces.js +1 -0
- package/dist/Interfaces/FileInterfaces.d.ts +21 -0
- package/dist/Interfaces/FileInterfaces.js +2 -0
- package/dist/Interfaces/FormInterfaces.d.ts +78 -11
- package/dist/Interfaces/InputInterfaces.d.ts +12 -5
- package/dist/Interfaces/MailInterfaces.d.ts +192 -0
- package/dist/Interfaces/MailInterfaces.js +1 -0
- package/dist/Interfaces/TableInterfaces.d.ts +28 -2
- package/dist/Services/JoinSources.d.ts +47 -6
- package/dist/Services/JoinSources.js +68 -33
- package/dist/Services/MessageApi.d.ts +18 -0
- package/dist/Services/MessageApi.js +64 -0
- package/dist/Shared.Index.d.ts +12 -0
- package/dist/Shared.Index.js +12 -0
- package/package.json +7 -1
- package/src/Styles/Nexus.Button.css +29 -0
- package/src/Styles/Nexus.Chat.css +114 -22
- package/src/Styles/Nexus.Crud.css +119 -28
- package/src/Styles/Nexus.Dashboard.css +763 -0
- package/src/Styles/Nexus.Domain.css +384 -0
- package/src/Styles/Nexus.Editor.css +20 -0
- package/src/Styles/Nexus.Files.css +27 -0
- package/src/Styles/Nexus.Index.css +3 -0
- package/src/Styles/Nexus.Input.css +31 -0
- package/src/Styles/Nexus.Mail.css +1062 -0
- package/src/Styles/Nexus.Popup.css +58 -0
- package/src/Styles/Nexus.Table.css +1458 -1449
- package/src/Styles/Nexus.Theme.Picker.css +1 -0
- package/src/Styles/Nexus.Tree.css +10 -0
|
@@ -0,0 +1,1062 @@
|
|
|
1
|
+
@layer nexus.components {
|
|
2
|
+
/*
|
|
3
|
+
* A mail thread (`MailThread`): the chat panel's frame, body and reply box, with a head over them - the subject, the
|
|
4
|
+
* people, the record it is about. The head is a band across the panel divided by a line, never a box of its own, and
|
|
5
|
+
* it holds its height while it loads (bones where the subject and the names go), so the thread under it does not move
|
|
6
|
+
* when it lands. It opens the thread's one scroll (`ChatThread` `lead`): a tall record's card or fifty people are read
|
|
7
|
+
* by scrolling the thread, never in a box of their own.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* A head over the thread: a little taller than a chat panel by default. */
|
|
11
|
+
.nx-chat-panel.nx-mail {
|
|
12
|
+
--nx-chat-height: min(70vh, 640px);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.nx-mail__head {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: var(--nx-space-1);
|
|
19
|
+
padding: var(--nx-space-2) var(--nx-space-3);
|
|
20
|
+
border-bottom: 1px solid var(--nx-border);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.nx-mail__title {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-wrap: wrap;
|
|
26
|
+
gap: var(--nx-space-1) var(--nx-space-2);
|
|
27
|
+
align-items: baseline;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.nx-mail__subject {
|
|
31
|
+
flex: 1 1 16rem;
|
|
32
|
+
min-width: 0;
|
|
33
|
+
margin: 0;
|
|
34
|
+
font-size: var(--nx-text-lg);
|
|
35
|
+
font-weight: 600;
|
|
36
|
+
line-height: 1.35;
|
|
37
|
+
overflow-wrap: anywhere;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* The subject takes the focus when a window opens on the thread: a place to start reading, no control, so no ring. */
|
|
41
|
+
.nx-mail__subject:focus {
|
|
42
|
+
outline: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.nx-mail__time {
|
|
46
|
+
flex-shrink: 0;
|
|
47
|
+
color: var(--nx-text-muted);
|
|
48
|
+
font-size: var(--nx-text-xs);
|
|
49
|
+
font-variant-numeric: tabular-nums;
|
|
50
|
+
white-space: nowrap;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.nx-mail__actions {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
flex-shrink: 0;
|
|
56
|
+
gap: var(--nx-space-1);
|
|
57
|
+
align-self: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.nx-table__tag.nx-mail__archived {
|
|
61
|
+
flex-shrink: 0;
|
|
62
|
+
gap: 4px;
|
|
63
|
+
align-self: center;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.nx-mail__archived .nx-icon {
|
|
67
|
+
width: 12px;
|
|
68
|
+
height: 12px;
|
|
69
|
+
vertical-align: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* The people: the role's word in a column, the names beside it, wrapping under themselves on a phone. */
|
|
73
|
+
.nx-mail__people {
|
|
74
|
+
display: grid;
|
|
75
|
+
grid-template-columns: max-content minmax(0, 1fr);
|
|
76
|
+
gap: 2px var(--nx-space-2);
|
|
77
|
+
margin: 0;
|
|
78
|
+
font-size: var(--nx-text-sm);
|
|
79
|
+
line-height: 1.5;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.nx-mail__row {
|
|
83
|
+
display: contents;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.nx-mail__row > dt {
|
|
87
|
+
color: var(--nx-text-muted);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.nx-mail__row > dd {
|
|
91
|
+
min-width: 0;
|
|
92
|
+
margin: 0;
|
|
93
|
+
overflow-wrap: anywhere;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* The sender's name first and strong, as a letter's From. */
|
|
97
|
+
.nx-mail__row[data-role="from"] > dd {
|
|
98
|
+
font-weight: 600;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* A name moves to the next line whole, and breaks only when it is longer than a line. */
|
|
102
|
+
.nx-mail__name {
|
|
103
|
+
display: inline-block;
|
|
104
|
+
max-width: 100%;
|
|
105
|
+
margin-inline-end: 0.35em;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.nx-mail__name--inactive {
|
|
109
|
+
color: var(--nx-text-muted);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.nx-mail__you {
|
|
113
|
+
margin-inline-start: 4px;
|
|
114
|
+
color: var(--nx-text-muted);
|
|
115
|
+
font-size: var(--nx-text-xs);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.nx-mail__nobody {
|
|
119
|
+
color: var(--nx-text-muted);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* "+2": the rest of the names, opened in place. A small pill, one size whatever the count. */
|
|
123
|
+
.nx-mail__more {
|
|
124
|
+
display: inline-flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
height: 20px;
|
|
127
|
+
padding: 0 7px;
|
|
128
|
+
border: 1px solid var(--nx-border);
|
|
129
|
+
border-radius: var(--nx-radius-full);
|
|
130
|
+
background: none;
|
|
131
|
+
color: var(--nx-primary);
|
|
132
|
+
font: inherit;
|
|
133
|
+
font-size: var(--nx-text-xs);
|
|
134
|
+
font-weight: 600;
|
|
135
|
+
font-variant-numeric: tabular-nums;
|
|
136
|
+
vertical-align: 1px;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.nx-mail__more:hover {
|
|
141
|
+
border-color: var(--nx-border-strong);
|
|
142
|
+
background: var(--nx-surface-hover);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.nx-mail__more:focus-visible {
|
|
146
|
+
outline: none;
|
|
147
|
+
box-shadow: var(--nx-focus-ring);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* The record a thread is about, as its card: a band of the head under a line of its own, edge to edge, so it reads as
|
|
152
|
+
* part of the head and not as a box inside it.
|
|
153
|
+
*/
|
|
154
|
+
.nx-mail__head > .nx-domain-card {
|
|
155
|
+
margin: var(--nx-space-1) calc(-1 * var(--nx-space-3)) 0;
|
|
156
|
+
padding: var(--nx-space-2) var(--nx-space-3) 0;
|
|
157
|
+
border-top: 1px solid var(--nx-border);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* An inbox row's record, before its subject (`mailInboxColumns.subject`): held to part of the cell, its words in "…". */
|
|
161
|
+
.nx-table__tag.nx-mail__label {
|
|
162
|
+
display: inline-block;
|
|
163
|
+
max-width: 60%;
|
|
164
|
+
margin-inline-end: var(--nx-space-2);
|
|
165
|
+
overflow: hidden;
|
|
166
|
+
font-weight: 500;
|
|
167
|
+
text-overflow: ellipsis;
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* Bones where the subject and the names go while the head loads, on the line they hold. */
|
|
172
|
+
.nx-table__bone.nx-mail__bone {
|
|
173
|
+
height: 0.9em;
|
|
174
|
+
vertical-align: -0.1em;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* A thread the reader may not open: one sentence where the thread would be. */
|
|
178
|
+
.nx-mail__refused {
|
|
179
|
+
display: flex;
|
|
180
|
+
flex: 1 1 auto;
|
|
181
|
+
align-items: center;
|
|
182
|
+
justify-content: center;
|
|
183
|
+
padding: var(--nx-space-6) var(--nx-space-4);
|
|
184
|
+
color: var(--nx-text-muted);
|
|
185
|
+
text-align: center;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.nx-mail__refused p {
|
|
189
|
+
margin: 0;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@layer nexus.components {
|
|
194
|
+
/*
|
|
195
|
+
* The bell (`MessageBell`): one of a top bar's ghost buttons with its count in the badge over its corner, so it never
|
|
196
|
+
* grows; a bar that runs short of room squeezes its other parts first. Its menu is wide enough for a subject line.
|
|
197
|
+
*/
|
|
198
|
+
.nx-btn.nx-message-bell {
|
|
199
|
+
flex-shrink: 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.nx-menu.nx-message-bell__menu {
|
|
203
|
+
min-width: min(300px, calc(100% - 16px));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@layer nexus.components {
|
|
208
|
+
/*
|
|
209
|
+
* The mail client (`MailClient`): a bar, then three panes - the rail, the list, the reading pane - that fill what holds
|
|
210
|
+
* the client and scroll each by itself, so the page never scrolls. Panes are divided by lines, never boxed. The list and
|
|
211
|
+
* the reading pane sit side by side (`data-split="columns"`) or one over the other (`rows`, and always under 1000px of
|
|
212
|
+
* the client's own width); under 700px one pane shows at a time (`data-pane`), with a way back.
|
|
213
|
+
*/
|
|
214
|
+
.nx-mailbox {
|
|
215
|
+
container: nx-mailbox / inline-size;
|
|
216
|
+
display: flex;
|
|
217
|
+
flex-direction: column;
|
|
218
|
+
height: 100%;
|
|
219
|
+
min-height: 0;
|
|
220
|
+
overflow: hidden;
|
|
221
|
+
background: var(--nx-surface);
|
|
222
|
+
color: var(--nx-text);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.nx-mailbox__bar {
|
|
226
|
+
display: flex;
|
|
227
|
+
flex-shrink: 0;
|
|
228
|
+
gap: var(--nx-space-2);
|
|
229
|
+
align-items: center;
|
|
230
|
+
min-height: calc(var(--nx-control-sm) + 2 * var(--nx-space-2));
|
|
231
|
+
padding: 0 var(--nx-space-3);
|
|
232
|
+
border-bottom: 1px solid var(--nx-border);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* The heading: the title and, when a page gives one, its sentence beside it, clipped, as an admin page's heading is -
|
|
237
|
+
* together as wide as the rail, so the search starts over the list. A page whose own heading names the client draws
|
|
238
|
+
* none (`title={false}`), and the search starts the bar.
|
|
239
|
+
*/
|
|
240
|
+
.nx-mailbox__heading-text {
|
|
241
|
+
display: flex;
|
|
242
|
+
flex-shrink: 0;
|
|
243
|
+
gap: var(--nx-space-2);
|
|
244
|
+
align-items: baseline;
|
|
245
|
+
width: calc(14rem - var(--nx-space-3) - var(--nx-space-2));
|
|
246
|
+
min-width: 0;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* The sentence takes only the room the title leaves: the title is clipped only when it is longer than the rail itself. */
|
|
250
|
+
.nx-mailbox__lead {
|
|
251
|
+
flex: 1 1 0;
|
|
252
|
+
min-width: 0;
|
|
253
|
+
margin: 0;
|
|
254
|
+
overflow: hidden;
|
|
255
|
+
color: var(--nx-text-muted);
|
|
256
|
+
font-size: var(--nx-text-sm);
|
|
257
|
+
white-space: nowrap;
|
|
258
|
+
text-overflow: ellipsis;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.nx-mailbox__title {
|
|
262
|
+
flex: 0 1 auto;
|
|
263
|
+
min-width: 0;
|
|
264
|
+
margin: 0;
|
|
265
|
+
overflow: hidden;
|
|
266
|
+
font-size: var(--nx-text-lg);
|
|
267
|
+
font-weight: 600;
|
|
268
|
+
white-space: nowrap;
|
|
269
|
+
text-overflow: ellipsis;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.nx-mailbox__search {
|
|
273
|
+
flex: 0 1 32rem;
|
|
274
|
+
min-width: 0;
|
|
275
|
+
margin-inline-end: auto;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.nx-mailbox__main {
|
|
279
|
+
display: grid;
|
|
280
|
+
flex: 1 1 auto;
|
|
281
|
+
grid-template-areas: "rail list reader";
|
|
282
|
+
grid-template-rows: minmax(0, 1fr);
|
|
283
|
+
grid-template-columns: 14rem minmax(18rem, 2fr) minmax(0, 3fr);
|
|
284
|
+
min-height: 0;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Until the reader's split is known (in the browser), the panes are laid out but not shown: nothing seen moves. */
|
|
288
|
+
.nx-mailbox:not([data-ready]) .nx-mailbox__main {
|
|
289
|
+
visibility: hidden;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.nx-mailbox[data-split="rows"] .nx-mailbox__main {
|
|
293
|
+
grid-template-areas: "rail list" "rail reader";
|
|
294
|
+
grid-template-rows: minmax(0, 2fr) minmax(0, 3fr);
|
|
295
|
+
grid-template-columns: 14rem minmax(0, 1fr);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.nx-mailbox__rail,
|
|
299
|
+
.nx-mailbox__list,
|
|
300
|
+
.nx-mailbox__reader {
|
|
301
|
+
display: flex;
|
|
302
|
+
flex-direction: column;
|
|
303
|
+
min-width: 0;
|
|
304
|
+
min-height: 0;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/*
|
|
308
|
+
* The rail: Compose, then the folders and the types, scrolling on its own when a company has many kinds.
|
|
309
|
+
*
|
|
310
|
+
* Every pane that scrolls is positioned (`position: relative`), here and below, so what a row lays out of the flow - a
|
|
311
|
+
* visually hidden ", unread" (`nx-visually-hidden` is `position: absolute`) - scrolls with its pane. Without it that
|
|
312
|
+
* text is placed against the page at its row's place down the list, and a long list made the page taller than the
|
|
313
|
+
* window (found by MAIL-client-pages, 2026-11-10). check-contract.mjs holds every scroller of the client to it.
|
|
314
|
+
*/
|
|
315
|
+
.nx-mailbox__rail {
|
|
316
|
+
position: relative;
|
|
317
|
+
grid-area: rail;
|
|
318
|
+
gap: var(--nx-space-1);
|
|
319
|
+
padding: var(--nx-space-3) var(--nx-space-2);
|
|
320
|
+
overflow-y: auto;
|
|
321
|
+
border-inline-end: 1px solid var(--nx-border);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.nx-mailbox__rail > .nx-btn {
|
|
325
|
+
flex-shrink: 0;
|
|
326
|
+
margin-bottom: var(--nx-space-2);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.nx-mailbox__folders {
|
|
330
|
+
display: flex;
|
|
331
|
+
flex-direction: column;
|
|
332
|
+
gap: 1px;
|
|
333
|
+
margin: 0;
|
|
334
|
+
padding: 0;
|
|
335
|
+
list-style: none;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.nx-mailbox__heading {
|
|
339
|
+
margin: var(--nx-space-3) 0 var(--nx-space-1);
|
|
340
|
+
padding: 0 var(--nx-space-2);
|
|
341
|
+
color: var(--nx-text-muted);
|
|
342
|
+
font-size: var(--nx-text-xs);
|
|
343
|
+
font-weight: 600;
|
|
344
|
+
letter-spacing: 0.04em;
|
|
345
|
+
text-transform: uppercase;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.nx-mailbox__folder {
|
|
349
|
+
display: flex;
|
|
350
|
+
gap: var(--nx-space-2);
|
|
351
|
+
align-items: center;
|
|
352
|
+
width: 100%;
|
|
353
|
+
height: var(--nx-row);
|
|
354
|
+
padding: 0 var(--nx-space-2);
|
|
355
|
+
border: 0;
|
|
356
|
+
border-radius: var(--nx-radius);
|
|
357
|
+
background: none;
|
|
358
|
+
color: var(--nx-text);
|
|
359
|
+
font: inherit;
|
|
360
|
+
font-size: var(--nx-text-sm);
|
|
361
|
+
text-align: start;
|
|
362
|
+
cursor: pointer;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.nx-mailbox__folder:hover {
|
|
366
|
+
background: var(--nx-surface-hover);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.nx-mailbox__folder:focus-visible {
|
|
370
|
+
outline: none;
|
|
371
|
+
box-shadow: var(--nx-focus-ring);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* Where the list is: the accent's tint and a strong name, the way a chat list marks the open conversation. */
|
|
375
|
+
.nx-mailbox__folder[aria-current] {
|
|
376
|
+
background: var(--nx-primary-soft);
|
|
377
|
+
font-weight: 600;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.nx-mailbox__folder-icon {
|
|
381
|
+
display: grid;
|
|
382
|
+
flex-shrink: 0;
|
|
383
|
+
place-items: center;
|
|
384
|
+
width: 18px;
|
|
385
|
+
color: var(--nx-text-muted);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.nx-mailbox__folder[aria-current] .nx-mailbox__folder-icon {
|
|
389
|
+
color: var(--nx-primary);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.nx-mailbox__folder-icon .nx-icon {
|
|
393
|
+
width: 16px;
|
|
394
|
+
height: 16px;
|
|
395
|
+
vertical-align: 0;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
.nx-mailbox__folder-name {
|
|
399
|
+
flex: 1 1 auto;
|
|
400
|
+
min-width: 0;
|
|
401
|
+
overflow: hidden;
|
|
402
|
+
white-space: nowrap;
|
|
403
|
+
text-overflow: ellipsis;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.nx-mailbox__count {
|
|
407
|
+
flex-shrink: 0;
|
|
408
|
+
font-size: var(--nx-text-xs);
|
|
409
|
+
font-variant-numeric: tabular-nums;
|
|
410
|
+
font-weight: 700;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* The list: its tools on one line over the rows, which scroll. */
|
|
414
|
+
.nx-mailbox__list {
|
|
415
|
+
grid-area: list;
|
|
416
|
+
container: nx-mailbox-list / inline-size;
|
|
417
|
+
border-inline-end: 1px solid var(--nx-border);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.nx-mailbox[data-split="rows"] .nx-mailbox__list {
|
|
421
|
+
border-inline-end: 0;
|
|
422
|
+
border-bottom: 1px solid var(--nx-border);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.nx-mailbox__tools {
|
|
426
|
+
display: flex;
|
|
427
|
+
flex-shrink: 0;
|
|
428
|
+
gap: var(--nx-space-2);
|
|
429
|
+
align-items: center;
|
|
430
|
+
min-height: calc(var(--nx-control-sm) + 2 * var(--nx-space-1));
|
|
431
|
+
padding: 0 var(--nx-space-2) 0 var(--nx-space-3);
|
|
432
|
+
border-bottom: 1px solid var(--nx-border);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.nx-mailbox__tools > :last-child {
|
|
436
|
+
margin-inline-start: auto;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.nx-mailbox__where,
|
|
440
|
+
.nx-mailbox__picked {
|
|
441
|
+
min-width: 0;
|
|
442
|
+
overflow: hidden;
|
|
443
|
+
color: var(--nx-text-muted);
|
|
444
|
+
font-size: var(--nx-text-sm);
|
|
445
|
+
white-space: nowrap;
|
|
446
|
+
text-overflow: ellipsis;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.nx-mailbox__picked {
|
|
450
|
+
color: var(--nx-text);
|
|
451
|
+
font-weight: 600;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.nx-mailbox__notice {
|
|
455
|
+
flex-shrink: 0;
|
|
456
|
+
padding: var(--nx-space-2) var(--nx-space-3) 0;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.nx-mailbox__rows {
|
|
460
|
+
position: relative;
|
|
461
|
+
flex: 1 1 auto;
|
|
462
|
+
min-height: 0;
|
|
463
|
+
margin: 0;
|
|
464
|
+
padding: 0;
|
|
465
|
+
overflow-y: auto;
|
|
466
|
+
list-style: none;
|
|
467
|
+
overscroll-behavior: contain;
|
|
468
|
+
scrollbar-gutter: stable;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/*
|
|
472
|
+
* A row: its box, its star, and the rest one button that opens it. Two lines in a narrow list (sender and time over
|
|
473
|
+
* subject and type), one line in a wide one. Every part keeps its place whatever the row holds, so nothing moves as
|
|
474
|
+
* the list reads its counts again.
|
|
475
|
+
*/
|
|
476
|
+
.nx-mailbox__row {
|
|
477
|
+
--nx-avatar-size: 32px;
|
|
478
|
+
|
|
479
|
+
display: flex;
|
|
480
|
+
align-items: center;
|
|
481
|
+
padding-inline-start: var(--nx-space-3);
|
|
482
|
+
border-bottom: 1px solid var(--nx-border);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
.nx-mailbox__row:hover {
|
|
486
|
+
background: var(--nx-surface-hover);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
.nx-mailbox__row[data-current] {
|
|
490
|
+
background: var(--nx-primary-soft);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.nx-mailbox__check {
|
|
494
|
+
display: inline-flex;
|
|
495
|
+
flex-shrink: 0;
|
|
496
|
+
align-items: center;
|
|
497
|
+
justify-content: center;
|
|
498
|
+
min-width: 20px;
|
|
499
|
+
min-height: 28px;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.nx-mailbox__check .nx-choice__control {
|
|
503
|
+
margin: 0;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.nx-mailbox__star {
|
|
507
|
+
display: grid;
|
|
508
|
+
flex-shrink: 0;
|
|
509
|
+
place-items: center;
|
|
510
|
+
width: 28px;
|
|
511
|
+
height: 28px;
|
|
512
|
+
margin-inline-start: 2px;
|
|
513
|
+
padding: 0;
|
|
514
|
+
border: 0;
|
|
515
|
+
border-radius: var(--nx-radius);
|
|
516
|
+
background: none;
|
|
517
|
+
color: var(--nx-text-muted);
|
|
518
|
+
cursor: pointer;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.nx-mailbox__star:hover {
|
|
522
|
+
color: var(--nx-text);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
.nx-mailbox__star:focus-visible {
|
|
526
|
+
outline: none;
|
|
527
|
+
box-shadow: var(--nx-focus-ring);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.nx-mailbox__star[aria-pressed="true"] {
|
|
531
|
+
color: var(--nx-warning);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.nx-mailbox__star .nx-icon {
|
|
535
|
+
width: 16px;
|
|
536
|
+
height: 16px;
|
|
537
|
+
vertical-align: 0;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.nx-mailbox__open {
|
|
541
|
+
display: grid;
|
|
542
|
+
flex: 1 1 auto;
|
|
543
|
+
grid-template-areas: "avatar from time" "avatar text chip";
|
|
544
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
545
|
+
gap: 2px var(--nx-space-2);
|
|
546
|
+
align-items: center;
|
|
547
|
+
min-width: 0;
|
|
548
|
+
padding: var(--nx-space-2) var(--nx-space-3) var(--nx-space-2) var(--nx-space-2);
|
|
549
|
+
border: 0;
|
|
550
|
+
background: none;
|
|
551
|
+
color: var(--nx-text);
|
|
552
|
+
font: inherit;
|
|
553
|
+
font-size: var(--nx-text-sm);
|
|
554
|
+
text-align: start;
|
|
555
|
+
cursor: pointer;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/* The row reaches the list's edges, where an outer ring would be cut off, so the ring is drawn inside. */
|
|
559
|
+
.nx-mailbox__open:focus-visible {
|
|
560
|
+
outline: none;
|
|
561
|
+
box-shadow: inset 0 0 0 2px var(--nx-primary);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
.nx-mailbox__open > .nx-avatar {
|
|
565
|
+
grid-area: avatar;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.nx-mailbox__from {
|
|
569
|
+
grid-area: from;
|
|
570
|
+
min-width: 0;
|
|
571
|
+
overflow: hidden;
|
|
572
|
+
white-space: nowrap;
|
|
573
|
+
text-overflow: ellipsis;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.nx-mailbox__lines {
|
|
577
|
+
margin-inline-start: 6px;
|
|
578
|
+
color: var(--nx-text-muted);
|
|
579
|
+
font-size: var(--nx-text-xs);
|
|
580
|
+
font-variant-numeric: tabular-nums;
|
|
581
|
+
font-weight: 400;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.nx-mailbox__text {
|
|
585
|
+
grid-area: text;
|
|
586
|
+
min-width: 0;
|
|
587
|
+
overflow: hidden;
|
|
588
|
+
white-space: nowrap;
|
|
589
|
+
text-overflow: ellipsis;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
.nx-mailbox__preview {
|
|
593
|
+
color: var(--nx-text-muted);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.nx-table__tag.nx-mailbox__chip {
|
|
597
|
+
flex-shrink: 0;
|
|
598
|
+
align-self: center;
|
|
599
|
+
max-width: 9rem;
|
|
600
|
+
overflow: hidden;
|
|
601
|
+
white-space: nowrap;
|
|
602
|
+
text-overflow: ellipsis;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
.nx-mailbox__open > .nx-mailbox__chip {
|
|
606
|
+
grid-area: chip;
|
|
607
|
+
justify-self: end;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/* A type's tag carries its kind's tone: mail the accent, chat the info tone, a record's kind the success tone. */
|
|
611
|
+
.nx-mailbox__chip[data-kind="mail"] {
|
|
612
|
+
--nx-tag-tone: var(--nx-primary);
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.nx-mailbox__chip[data-kind="chat"] {
|
|
616
|
+
--nx-tag-tone: var(--nx-info);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
.nx-mailbox__chip[data-kind="domain"] {
|
|
620
|
+
--nx-tag-tone: var(--nx-success);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
.nx-mailbox__time {
|
|
624
|
+
grid-area: time;
|
|
625
|
+
justify-self: end;
|
|
626
|
+
color: var(--nx-text-muted);
|
|
627
|
+
font-size: var(--nx-text-xs);
|
|
628
|
+
font-variant-numeric: tabular-nums;
|
|
629
|
+
white-space: nowrap;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/* On a tinted row (under the pointer, or open) the muted words move toward the text colour, so they keep 4.5:1. */
|
|
633
|
+
.nx-mailbox__row:is(:hover, [data-current]) :is(.nx-mailbox__preview, .nx-mailbox__time, .nx-mailbox__lines) {
|
|
634
|
+
color: color-mix(in oklab, var(--nx-text-muted), var(--nx-text) 35%);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/* Unread: the sender, the subject and the time strong, as a letter not yet opened. */
|
|
638
|
+
.nx-mailbox__row[data-unread] :is(.nx-mailbox__from, .nx-mailbox__subject, .nx-mailbox__time) {
|
|
639
|
+
color: var(--nx-text);
|
|
640
|
+
font-weight: 700;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
.nx-mailbox__row--bones .nx-mailbox__check {
|
|
644
|
+
width: 20px;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.nx-avatar.nx-mailbox__bone-avatar {
|
|
648
|
+
background: color-mix(in oklab, var(--nx-text) 9%, transparent);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* A wide list reads each row on one line: avatar, sender, subject - preview, type, time. */
|
|
652
|
+
@container nx-mailbox-list (min-width: 46rem) {
|
|
653
|
+
.nx-mailbox__open {
|
|
654
|
+
grid-template-areas: "avatar from text chip time";
|
|
655
|
+
grid-template-columns: auto 12rem minmax(0, 1fr) auto 5rem;
|
|
656
|
+
gap: var(--nx-space-3);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.nx-mailbox__row {
|
|
660
|
+
--nx-avatar-size: 28px;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.nx-mailbox__message {
|
|
665
|
+
display: flex;
|
|
666
|
+
flex-direction: column;
|
|
667
|
+
gap: var(--nx-space-2);
|
|
668
|
+
align-items: center;
|
|
669
|
+
padding: var(--nx-space-6) var(--nx-space-4);
|
|
670
|
+
color: var(--nx-text-muted);
|
|
671
|
+
text-align: center;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.nx-mailbox__message > .nx-icon {
|
|
675
|
+
width: 32px;
|
|
676
|
+
height: 32px;
|
|
677
|
+
stroke-width: 1.5;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.nx-mailbox__message p {
|
|
681
|
+
margin: 0;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.nx-mailbox__message--pane {
|
|
685
|
+
flex: 1 1 auto;
|
|
686
|
+
justify-content: center;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
.nx-mailbox__more {
|
|
690
|
+
display: flex;
|
|
691
|
+
justify-content: center;
|
|
692
|
+
padding: var(--nx-space-2);
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/* The reading pane: its conversation scrolls, its buttons stay at its foot. */
|
|
696
|
+
.nx-mailbox__reader {
|
|
697
|
+
grid-area: reader;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.nx-mailbox__phone-only {
|
|
701
|
+
display: none;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/* Narrower: the list over the reading pane, whatever the choice, and the choice is not offered. */
|
|
705
|
+
@container nx-mailbox (max-width: 999px) {
|
|
706
|
+
.nx-mailbox .nx-mailbox__main {
|
|
707
|
+
grid-template-areas: "rail list" "rail reader";
|
|
708
|
+
grid-template-rows: minmax(0, 2fr) minmax(0, 3fr);
|
|
709
|
+
grid-template-columns: 13rem minmax(0, 1fr);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.nx-mailbox .nx-mailbox__list {
|
|
713
|
+
border-inline-end: 0;
|
|
714
|
+
border-bottom: 1px solid var(--nx-border);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
.nx-btn.nx-mailbox__split {
|
|
718
|
+
display: none;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
.nx-mailbox__heading-text {
|
|
722
|
+
flex: 0 1 auto;
|
|
723
|
+
width: auto;
|
|
724
|
+
max-width: 50%;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/* A phone: one pane at a time, the one `data-pane` names, with its way back. */
|
|
729
|
+
@container nx-mailbox (max-width: 699px) {
|
|
730
|
+
.nx-mailbox .nx-mailbox__main {
|
|
731
|
+
grid-template-areas: "pane";
|
|
732
|
+
grid-template-rows: minmax(0, 1fr);
|
|
733
|
+
grid-template-columns: minmax(0, 1fr);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
.nx-mailbox .nx-mailbox__rail,
|
|
737
|
+
.nx-mailbox .nx-mailbox__list,
|
|
738
|
+
.nx-mailbox .nx-mailbox__reader {
|
|
739
|
+
grid-area: pane;
|
|
740
|
+
border: 0;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.nx-mailbox:not([data-pane="rail"]) .nx-mailbox__rail,
|
|
744
|
+
.nx-mailbox:not([data-pane="list"]) .nx-mailbox__list,
|
|
745
|
+
.nx-mailbox:not([data-pane="reader"]) .nx-mailbox__reader {
|
|
746
|
+
display: none;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
.nx-mailbox__tools.nx-mailbox__phone-only {
|
|
750
|
+
display: flex;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
.nx-btn.nx-mailbox__phone-only {
|
|
754
|
+
display: inline-flex;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.nx-mailbox__tools.nx-mailbox__phone-only > :last-child {
|
|
758
|
+
margin-inline-start: 0;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.nx-mailbox__heading-text {
|
|
762
|
+
display: none;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.nx-mailbox__search {
|
|
766
|
+
flex: 1 1 auto;
|
|
767
|
+
margin-inline-end: 0;
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
/*
|
|
772
|
+
* The reading pane (`MailReader`): the head, the record's card, the mails - the newest open, the earlier folded to a
|
|
773
|
+
* line - and Discuss and Reply at the foot. The head and the mails are bands divided by lines; only the mails scroll.
|
|
774
|
+
*/
|
|
775
|
+
.nx-mail-reader {
|
|
776
|
+
display: flex;
|
|
777
|
+
flex: 1 1 auto;
|
|
778
|
+
flex-direction: column;
|
|
779
|
+
min-height: 0;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
.nx-mail-reader__head {
|
|
783
|
+
display: flex;
|
|
784
|
+
flex-shrink: 0;
|
|
785
|
+
flex-direction: column;
|
|
786
|
+
gap: var(--nx-space-2);
|
|
787
|
+
padding: var(--nx-space-3) var(--nx-space-4);
|
|
788
|
+
border-bottom: 1px solid var(--nx-border);
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.nx-mail-reader__people {
|
|
792
|
+
display: flex;
|
|
793
|
+
gap: var(--nx-space-2);
|
|
794
|
+
align-items: flex-start;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.nx-mail-reader__line {
|
|
798
|
+
flex: 1 1 auto;
|
|
799
|
+
min-width: 0;
|
|
800
|
+
margin: 0;
|
|
801
|
+
font-size: var(--nx-text-sm);
|
|
802
|
+
line-height: 28px;
|
|
803
|
+
overflow-wrap: anywhere;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
.nx-mail-reader__from {
|
|
807
|
+
font-weight: 600;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
.nx-icon.nx-mail-reader__arrow {
|
|
811
|
+
width: 14px;
|
|
812
|
+
height: 14px;
|
|
813
|
+
margin: 0 6px;
|
|
814
|
+
color: var(--nx-text-muted);
|
|
815
|
+
vertical-align: -2px;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.nx-mail-reader__role {
|
|
819
|
+
color: var(--nx-text-muted);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
.nx-mail-reader__role .nx-mail__name {
|
|
823
|
+
color: var(--nx-text);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
.nx-mail-reader__dot {
|
|
827
|
+
margin: 0 6px;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.nx-mail-reader__since {
|
|
831
|
+
display: block;
|
|
832
|
+
color: var(--nx-text-muted);
|
|
833
|
+
line-height: 1.4;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.nx-mail-reader__domain {
|
|
837
|
+
position: relative;
|
|
838
|
+
flex-shrink: 0;
|
|
839
|
+
max-height: 45%;
|
|
840
|
+
padding: var(--nx-space-2) var(--nx-space-4);
|
|
841
|
+
overflow-y: auto;
|
|
842
|
+
border-bottom: 1px solid var(--nx-border);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.nx-mail-reader__body {
|
|
846
|
+
position: relative;
|
|
847
|
+
display: flex;
|
|
848
|
+
flex: 1 1 auto;
|
|
849
|
+
flex-direction: column;
|
|
850
|
+
gap: var(--nx-space-2);
|
|
851
|
+
min-height: 0;
|
|
852
|
+
padding: var(--nx-space-2) var(--nx-space-4) var(--nx-space-4);
|
|
853
|
+
overflow-y: auto;
|
|
854
|
+
overscroll-behavior: contain;
|
|
855
|
+
scrollbar-gutter: stable;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
.nx-mail-reader__mails {
|
|
859
|
+
display: flex;
|
|
860
|
+
flex-direction: column;
|
|
861
|
+
margin: 0;
|
|
862
|
+
padding: 0;
|
|
863
|
+
list-style: none;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
.nx-mail-reader__mail,
|
|
867
|
+
.nx-mail-reader__note {
|
|
868
|
+
border-bottom: 1px solid var(--nx-border);
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.nx-mail-reader__mail:last-child {
|
|
872
|
+
border-bottom: 0;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.nx-mail-reader__note {
|
|
876
|
+
padding: var(--nx-space-2) 0;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
.nx-mail-reader__mail-head {
|
|
880
|
+
display: flex;
|
|
881
|
+
gap: var(--nx-space-2);
|
|
882
|
+
align-items: baseline;
|
|
883
|
+
width: 100%;
|
|
884
|
+
min-width: 0;
|
|
885
|
+
padding: var(--nx-space-2) 0;
|
|
886
|
+
border: 0;
|
|
887
|
+
background: none;
|
|
888
|
+
color: var(--nx-text);
|
|
889
|
+
font: inherit;
|
|
890
|
+
font-size: var(--nx-text-sm);
|
|
891
|
+
text-align: start;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
button.nx-mail-reader__mail-head {
|
|
895
|
+
cursor: pointer;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
button.nx-mail-reader__mail-head:hover .nx-mail-reader__author {
|
|
899
|
+
text-decoration: underline;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
button.nx-mail-reader__mail-head:focus-visible {
|
|
903
|
+
outline: none;
|
|
904
|
+
box-shadow: var(--nx-focus-ring);
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
.nx-mail-reader__mail-head > .nx-mail__time {
|
|
908
|
+
margin-inline-start: auto;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
.nx-icon.nx-mail-reader__fold {
|
|
912
|
+
flex-shrink: 0;
|
|
913
|
+
width: 14px;
|
|
914
|
+
height: 14px;
|
|
915
|
+
color: var(--nx-text-muted);
|
|
916
|
+
vertical-align: -2px;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
.nx-mail-reader__author {
|
|
920
|
+
flex-shrink: 0;
|
|
921
|
+
font-weight: 600;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
.nx-mail-reader__preview {
|
|
925
|
+
flex: 1 1 auto;
|
|
926
|
+
min-width: 0;
|
|
927
|
+
overflow: hidden;
|
|
928
|
+
color: var(--nx-text-muted);
|
|
929
|
+
white-space: nowrap;
|
|
930
|
+
text-overflow: ellipsis;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
.nx-mail-reader__text {
|
|
934
|
+
padding-bottom: var(--nx-space-3);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
.nx-mail-reader__older {
|
|
938
|
+
align-self: center;
|
|
939
|
+
padding: 2px var(--nx-space-3);
|
|
940
|
+
border: 1px solid var(--nx-border);
|
|
941
|
+
border-radius: var(--nx-radius-full);
|
|
942
|
+
background: none;
|
|
943
|
+
color: var(--nx-primary);
|
|
944
|
+
font: inherit;
|
|
945
|
+
font-size: var(--nx-text-xs);
|
|
946
|
+
font-weight: 600;
|
|
947
|
+
cursor: pointer;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.nx-mail-reader__older:hover {
|
|
951
|
+
background: var(--nx-surface-hover);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.nx-mail-reader__older:focus-visible {
|
|
955
|
+
outline: none;
|
|
956
|
+
box-shadow: var(--nx-focus-ring);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.nx-mail-reader__empty,
|
|
960
|
+
.nx-mail-reader__count {
|
|
961
|
+
margin: var(--nx-space-2) 0 0;
|
|
962
|
+
color: var(--nx-text-muted);
|
|
963
|
+
font-size: var(--nx-text-sm);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.nx-mail-reader__bones {
|
|
967
|
+
display: flex;
|
|
968
|
+
flex-direction: column;
|
|
969
|
+
gap: var(--nx-space-3);
|
|
970
|
+
padding: var(--nx-space-3) 0;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
.nx-mail-reader__foot {
|
|
974
|
+
display: flex;
|
|
975
|
+
flex-shrink: 0;
|
|
976
|
+
flex-wrap: wrap;
|
|
977
|
+
gap: var(--nx-space-2);
|
|
978
|
+
padding: var(--nx-space-2) var(--nx-space-4);
|
|
979
|
+
border-top: 1px solid var(--nx-border);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
/* A chat's popup: the chat panel filling the window's body. */
|
|
983
|
+
.nx-chat-panel.nx-chat-popup {
|
|
984
|
+
--nx-chat-height: 100%;
|
|
985
|
+
|
|
986
|
+
min-height: 0;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/*
|
|
990
|
+
* The compose window (`MailComposeWindow`): the people and the subject on top, the Markdown body filling what the
|
|
991
|
+
* window leaves, and Discard and Send on its foot.
|
|
992
|
+
*/
|
|
993
|
+
.nx-mail-compose {
|
|
994
|
+
display: flex;
|
|
995
|
+
flex-direction: column;
|
|
996
|
+
height: 100%;
|
|
997
|
+
min-height: 0;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
.nx-mail-compose__fields {
|
|
1001
|
+
display: flex;
|
|
1002
|
+
flex-shrink: 0;
|
|
1003
|
+
flex-direction: column;
|
|
1004
|
+
gap: var(--nx-space-2);
|
|
1005
|
+
padding: var(--nx-space-3) var(--nx-space-4) 0;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
.nx-mail-compose__line {
|
|
1009
|
+
display: flex;
|
|
1010
|
+
gap: var(--nx-space-2);
|
|
1011
|
+
align-items: flex-end;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
.nx-mail-compose__line > .nx-field {
|
|
1015
|
+
flex: 1 1 0;
|
|
1016
|
+
min-width: 0;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
.nx-btn.nx-mail-compose__copies {
|
|
1020
|
+
flex-shrink: 0;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
.nx-mail-compose__to {
|
|
1024
|
+
margin: 0;
|
|
1025
|
+
font-size: var(--nx-text-sm);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.nx-mail-compose__label {
|
|
1029
|
+
margin-inline-end: var(--nx-space-2);
|
|
1030
|
+
color: var(--nx-text-muted);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
.nx-mail-compose__body {
|
|
1034
|
+
flex: 1 1 auto;
|
|
1035
|
+
min-height: 0;
|
|
1036
|
+
padding: var(--nx-space-3) var(--nx-space-4) 0;
|
|
1037
|
+
overflow: hidden;
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
.nx-mail-compose > .nx-chat-failure {
|
|
1041
|
+
margin: var(--nx-space-2) var(--nx-space-4) 0;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
.nx-mail-compose__foot {
|
|
1045
|
+
display: flex;
|
|
1046
|
+
flex-shrink: 0;
|
|
1047
|
+
gap: var(--nx-space-2);
|
|
1048
|
+
align-items: center;
|
|
1049
|
+
padding: var(--nx-space-2) var(--nx-space-4);
|
|
1050
|
+
border-top: 1px solid var(--nx-border);
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
.nx-mail-compose__saved {
|
|
1054
|
+
flex: 1 1 auto;
|
|
1055
|
+
min-width: 0;
|
|
1056
|
+
overflow: hidden;
|
|
1057
|
+
color: var(--nx-text-muted);
|
|
1058
|
+
font-size: var(--nx-text-xs);
|
|
1059
|
+
white-space: nowrap;
|
|
1060
|
+
text-overflow: ellipsis;
|
|
1061
|
+
}
|
|
1062
|
+
}
|