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
package/dist/Shared.Index.js
CHANGED
|
@@ -20,12 +20,15 @@ export * from "./Helpers/ChatStore.js";
|
|
|
20
20
|
export * from "./Helpers/ChatSummaries.js";
|
|
21
21
|
export * from "./Helpers/ClassHelpers.js";
|
|
22
22
|
export * from "./Helpers/CodeHelpers.js";
|
|
23
|
+
export { setAuditActorNames } from "./Helpers/AuditEntries.js";
|
|
23
24
|
export * from "./Helpers/CrudBackend.js";
|
|
24
25
|
export * from "./Helpers/CrudColumns.js";
|
|
25
26
|
export * from "./Helpers/CrudDetailsTabs.js";
|
|
26
27
|
export * from "./Helpers/CrudHelpers.js";
|
|
28
|
+
export * from "./Helpers/DashboardHelpers.js";
|
|
27
29
|
export * from "./Helpers/DateHelpers.js";
|
|
28
30
|
export * from "./Helpers/DateTimeHelpers.js";
|
|
31
|
+
export * from "./Helpers/DomainCards.js";
|
|
29
32
|
export * from "./Helpers/DropdownHelpers.js";
|
|
30
33
|
export * from "./Helpers/ExcelBackend.js";
|
|
31
34
|
export * from "./Helpers/ExcelHelpers.js";
|
|
@@ -43,9 +46,14 @@ export * from "./Helpers/CrudScopes.js";
|
|
|
43
46
|
export * from "./Helpers/CrudRowForms.js";
|
|
44
47
|
export * from "./Helpers/MarkdownEditing.js";
|
|
45
48
|
export * from "./Helpers/MarkdownHelpers.js";
|
|
49
|
+
export * from "./Helpers/MailClientHelpers.js";
|
|
50
|
+
export * from "./Helpers/MessageBackend.js";
|
|
46
51
|
export * from "./Helpers/MessageBuilder.js";
|
|
52
|
+
export * from "./Helpers/MessageHelpers.js";
|
|
53
|
+
export * from "./Helpers/MessageUnread.js";
|
|
47
54
|
export * from "./Helpers/NepaliCalendar.js";
|
|
48
55
|
export * from "./Helpers/NumberHelpers.js";
|
|
56
|
+
export * from "./Helpers/PagedPicker.js";
|
|
49
57
|
export * from "./Helpers/Permissions.js";
|
|
50
58
|
export * from "./Helpers/QrCode.js";
|
|
51
59
|
export * from "./Helpers/RecordCards.js";
|
|
@@ -58,17 +66,21 @@ export * from "./Helpers/TableJoins.js";
|
|
|
58
66
|
export * from "./Helpers/TableStore.js";
|
|
59
67
|
export * from "./Helpers/ThemeHelpers.js";
|
|
60
68
|
export * from "./Helpers/TimeHelpers.js";
|
|
69
|
+
export * from "./Helpers/ToolbarFit.js";
|
|
61
70
|
export * from "./Helpers/TreeStore.js";
|
|
62
71
|
export * from "./Helpers/ValidationHelpers.js";
|
|
63
72
|
// Interfaces
|
|
64
73
|
export * from "./Interfaces/ApiInterfaces.js";
|
|
65
74
|
export * from "./Interfaces/ChatInterfaces.js";
|
|
66
75
|
export * from "./Interfaces/CrudInterfaces.js";
|
|
76
|
+
export * from "./Interfaces/DashboardInterfaces.js";
|
|
67
77
|
export * from "./Interfaces/DateInterfaces.js";
|
|
78
|
+
export * from "./Interfaces/DomainInterfaces.js";
|
|
68
79
|
export * from "./Interfaces/ExcelInterfaces.js";
|
|
69
80
|
export * from "./Interfaces/FileInterfaces.js";
|
|
70
81
|
export * from "./Interfaces/FormInterfaces.js";
|
|
71
82
|
export * from "./Interfaces/InputInterfaces.js";
|
|
83
|
+
export * from "./Interfaces/MailInterfaces.js";
|
|
72
84
|
export * from "./Interfaces/MessageInterfaces.js";
|
|
73
85
|
export * from "./Interfaces/PreferenceInterfaces.js";
|
|
74
86
|
export * from "./Interfaces/RecordInterfaces.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexus-shared",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "The Nexus component library for React and Next.js: params-driven inputs and forms, a data table with a CRUD on top, popups and toasts, an API layer with permissions, Markdown and rich text editors, and 7 themes in light and dark.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"test:crud-tabs": "node scripts/test-crud-details-tabs.mts",
|
|
55
55
|
"test:crud-profile": "node scripts/test-crud-profile-fields.mts",
|
|
56
56
|
"test:codes": "node scripts/test-code-helpers.mts",
|
|
57
|
+
"test:dashboard": "node scripts/test-dashboard.mts",
|
|
57
58
|
"test:dates": "node scripts/test-date-helpers.mts",
|
|
58
59
|
"test:datetimes": "node scripts/test-datetime-helpers.mts",
|
|
59
60
|
"test:drag": "node scripts/test-drag-helpers.mts",
|
|
@@ -62,6 +63,10 @@
|
|
|
62
63
|
"test:dropdown": "node scripts/test-dropdown-helpers.mts",
|
|
63
64
|
"test:forms": "node scripts/test-form-store.mts",
|
|
64
65
|
"test:form-confirm": "node scripts/test-form-confirm.mts",
|
|
66
|
+
"test:domain-card": "node scripts/test-domain-card.mts",
|
|
67
|
+
"test:mail": "node scripts/test-mail.mts",
|
|
68
|
+
"test:mail-client": "node scripts/test-mail-client.mts",
|
|
69
|
+
"test:message-bell": "node scripts/test-message-bell.mts",
|
|
65
70
|
"test:markdown": "node scripts/test-markdown.mts",
|
|
66
71
|
"test:numbers": "node scripts/test-number-helpers.mts",
|
|
67
72
|
"test:popups": "node scripts/test-popup-rules.mts",
|
|
@@ -70,6 +75,7 @@
|
|
|
70
75
|
"test:rows": "node scripts/test-rows-store.mts",
|
|
71
76
|
"test:table": "node scripts/test-table.mts",
|
|
72
77
|
"test:times": "node scripts/test-time-helpers.mts",
|
|
78
|
+
"test:toolbar-fit": "node scripts/test-toolbar-fit.mts",
|
|
73
79
|
"test:tree": "node scripts/test-tree-store.mts",
|
|
74
80
|
"test:types": "tsc -p scripts/type-checks/tsconfig.json"
|
|
75
81
|
},
|
|
@@ -174,6 +174,35 @@
|
|
|
174
174
|
background: var(--nx-danger-solid);
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
/*
|
|
178
|
+
* A count over the corner (`badge`; the chat icon's unread count too): laid over the box, never beside it, so the
|
|
179
|
+
* button keeps its size and a bar or a column of them does not move as the counts arrive.
|
|
180
|
+
*/
|
|
181
|
+
.nx-btn:has(> .nx-btn__badge) {
|
|
182
|
+
position: relative;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.nx-btn__badge,
|
|
186
|
+
.nx-chat-btn__badge {
|
|
187
|
+
position: absolute;
|
|
188
|
+
top: -5px;
|
|
189
|
+
right: -5px;
|
|
190
|
+
display: grid;
|
|
191
|
+
place-items: center;
|
|
192
|
+
min-width: 16px;
|
|
193
|
+
height: 16px;
|
|
194
|
+
padding: 0 4px;
|
|
195
|
+
border: 1px solid var(--nx-surface);
|
|
196
|
+
border-radius: var(--nx-radius-full);
|
|
197
|
+
background: var(--nx-danger-solid);
|
|
198
|
+
color: var(--nx-danger-text);
|
|
199
|
+
font-size: 10px;
|
|
200
|
+
font-weight: 700;
|
|
201
|
+
font-variant-numeric: tabular-nums;
|
|
202
|
+
line-height: 1;
|
|
203
|
+
pointer-events: none;
|
|
204
|
+
}
|
|
205
|
+
|
|
177
206
|
.nx-btn__dot[data-tone="primary"] {
|
|
178
207
|
background: var(--nx-primary-solid);
|
|
179
208
|
}
|
|
@@ -87,26 +87,7 @@
|
|
|
87
87
|
color: var(--nx-primary-text);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
/* The number of unread messages
|
|
91
|
-
.nx-chat-btn__badge {
|
|
92
|
-
position: absolute;
|
|
93
|
-
top: -5px;
|
|
94
|
-
right: -5px;
|
|
95
|
-
display: grid;
|
|
96
|
-
place-items: center;
|
|
97
|
-
min-width: 16px;
|
|
98
|
-
height: 16px;
|
|
99
|
-
padding: 0 4px;
|
|
100
|
-
border: 1px solid var(--nx-surface);
|
|
101
|
-
border-radius: var(--nx-radius-full);
|
|
102
|
-
background: var(--nx-danger-solid);
|
|
103
|
-
color: var(--nx-danger-text);
|
|
104
|
-
font-size: 10px;
|
|
105
|
-
font-weight: 700;
|
|
106
|
-
font-variant-numeric: tabular-nums;
|
|
107
|
-
line-height: 1;
|
|
108
|
-
pointer-events: none;
|
|
109
|
-
}
|
|
90
|
+
/* The number of unread messages over the corner: the badge `Button` draws too (Nexus.Button.css). */
|
|
110
91
|
|
|
111
92
|
/* The panel */
|
|
112
93
|
|
|
@@ -210,8 +191,15 @@
|
|
|
210
191
|
border-top: 1px solid var(--nx-border);
|
|
211
192
|
}
|
|
212
193
|
|
|
213
|
-
/*
|
|
194
|
+
/*
|
|
195
|
+
* The people, in a column beside the thread: a dividing line, not a panel inside a panel.
|
|
196
|
+
*
|
|
197
|
+
* Every scroller of the chat is positioned (`position: relative`; this one `absolute` in a narrow panel, below), so what
|
|
198
|
+
* lies out of the flow inside it - a visually hidden word - scrolls with it instead of being placed against the page
|
|
199
|
+
* and making it taller (card C-mail-client-fix). check-contract.mjs holds the chat's and the mail client's scrollers to it.
|
|
200
|
+
*/
|
|
214
201
|
.nx-chat-panel__aside {
|
|
202
|
+
position: relative;
|
|
215
203
|
display: flex;
|
|
216
204
|
flex: 0 0 220px;
|
|
217
205
|
flex-direction: column;
|
|
@@ -286,6 +274,7 @@
|
|
|
286
274
|
}
|
|
287
275
|
|
|
288
276
|
.nx-chat-thread__list {
|
|
277
|
+
position: relative;
|
|
289
278
|
display: flex;
|
|
290
279
|
flex: 1 1 auto;
|
|
291
280
|
flex-direction: column;
|
|
@@ -301,6 +290,19 @@
|
|
|
301
290
|
box-shadow: inset var(--nx-focus-ring);
|
|
302
291
|
}
|
|
303
292
|
|
|
293
|
+
/* A lead (a mail thread's head) opens the scroll edge to edge, and scrolls with the lines under it. */
|
|
294
|
+
.nx-chat-thread__lead {
|
|
295
|
+
flex-shrink: 0;
|
|
296
|
+
margin: calc(-1 * var(--nx-space-3)) calc(-1 * var(--nx-space-3)) 0;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Under a lead the lines are a log of their own, spaced as the list spaces them. */
|
|
300
|
+
.nx-chat-thread__log {
|
|
301
|
+
display: flex;
|
|
302
|
+
flex-direction: column;
|
|
303
|
+
gap: var(--nx-space-2);
|
|
304
|
+
}
|
|
305
|
+
|
|
304
306
|
.nx-chat-thread__day {
|
|
305
307
|
display: flex;
|
|
306
308
|
flex-direction: column;
|
|
@@ -785,6 +787,69 @@
|
|
|
785
787
|
text-align: center;
|
|
786
788
|
}
|
|
787
789
|
|
|
790
|
+
/*
|
|
791
|
+
* A notification: an event line across the thread, not a bubble on a side. The bell and the words line up with the
|
|
792
|
+
* avatars and bubbles beside them; nothing is boxed, so it reads as quieter than what people wrote.
|
|
793
|
+
*/
|
|
794
|
+
.nx-chat-event {
|
|
795
|
+
display: grid;
|
|
796
|
+
grid-template-columns: var(--nx-avatar-size, 28px) minmax(0, 1fr);
|
|
797
|
+
gap: var(--nx-space-2);
|
|
798
|
+
align-items: start;
|
|
799
|
+
align-self: stretch;
|
|
800
|
+
color: var(--nx-text-muted);
|
|
801
|
+
font-size: var(--nx-text-sm);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
.nx-chat-event__icon {
|
|
805
|
+
justify-self: center;
|
|
806
|
+
width: 15px;
|
|
807
|
+
height: 15px;
|
|
808
|
+
margin-top: 2px;
|
|
809
|
+
color: var(--nx-primary);
|
|
810
|
+
vertical-align: 0;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.nx-chat-event__text {
|
|
814
|
+
display: flex;
|
|
815
|
+
flex-direction: column;
|
|
816
|
+
gap: 1px;
|
|
817
|
+
min-width: 0;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.nx-chat-event__meta {
|
|
821
|
+
display: flex;
|
|
822
|
+
flex-wrap: wrap;
|
|
823
|
+
gap: 0 var(--nx-space-2);
|
|
824
|
+
align-items: baseline;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
.nx-chat-event__author {
|
|
828
|
+
color: var(--nx-text);
|
|
829
|
+
font-weight: 600;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.nx-chat-event__meta time {
|
|
833
|
+
font-size: var(--nx-text-xs);
|
|
834
|
+
font-variant-numeric: tabular-nums;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.nx-chat-event__body {
|
|
838
|
+
overflow-wrap: anywhere;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
.nx-chat-event__body > :first-child {
|
|
842
|
+
margin-top: 0;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.nx-chat-event__body > :last-child {
|
|
846
|
+
margin-bottom: 0;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.nx-chat-event__body > * + * {
|
|
850
|
+
margin-top: var(--nx-space-1);
|
|
851
|
+
}
|
|
852
|
+
|
|
788
853
|
/* The people */
|
|
789
854
|
|
|
790
855
|
.nx-chat-people {
|
|
@@ -900,6 +965,10 @@
|
|
|
900
965
|
font-size: var(--nx-text-sm);
|
|
901
966
|
}
|
|
902
967
|
|
|
968
|
+
.nx-chat-failure--flat {
|
|
969
|
+
border-color: transparent;
|
|
970
|
+
}
|
|
971
|
+
|
|
903
972
|
.nx-chat-failure button {
|
|
904
973
|
display: inline-flex;
|
|
905
974
|
gap: 3px;
|
|
@@ -943,6 +1012,25 @@
|
|
|
943
1012
|
text-align: center;
|
|
944
1013
|
}
|
|
945
1014
|
|
|
1015
|
+
/* What the writer should know before sending (`notice`): a quiet line over the writing area, not a box. */
|
|
1016
|
+
.nx-chat-composer__notice {
|
|
1017
|
+
display: flex;
|
|
1018
|
+
gap: 6px;
|
|
1019
|
+
align-items: flex-start;
|
|
1020
|
+
margin: 0;
|
|
1021
|
+
color: var(--nx-text-muted);
|
|
1022
|
+
font-size: var(--nx-text-sm);
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
.nx-chat-composer__notice .nx-icon {
|
|
1026
|
+
flex-shrink: 0;
|
|
1027
|
+
width: 15px;
|
|
1028
|
+
height: 15px;
|
|
1029
|
+
margin-top: 2px;
|
|
1030
|
+
color: var(--nx-info);
|
|
1031
|
+
vertical-align: 0;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
946
1034
|
/* The editor is the whole writing area, so the row under it carries only the hint and the buttons. */
|
|
947
1035
|
.nx-chat-composer__row {
|
|
948
1036
|
display: flex;
|
|
@@ -1119,6 +1207,7 @@
|
|
|
1119
1207
|
*/
|
|
1120
1208
|
|
|
1121
1209
|
.nx-chat-list {
|
|
1210
|
+
position: relative;
|
|
1122
1211
|
display: flex;
|
|
1123
1212
|
flex: 1 1 auto;
|
|
1124
1213
|
flex-direction: column;
|
|
@@ -1222,8 +1311,9 @@
|
|
|
1222
1311
|
text-overflow: ellipsis;
|
|
1223
1312
|
}
|
|
1224
1313
|
|
|
1314
|
+
/* Inline, so it keeps its own width in a table cell (an inbox's Unread column) as in the list's row. */
|
|
1225
1315
|
.nx-chat-list__badge {
|
|
1226
|
-
display: grid;
|
|
1316
|
+
display: inline-grid;
|
|
1227
1317
|
flex-shrink: 0;
|
|
1228
1318
|
place-items: center;
|
|
1229
1319
|
min-width: 18px;
|
|
@@ -1248,6 +1338,7 @@
|
|
|
1248
1338
|
/* New chat */
|
|
1249
1339
|
|
|
1250
1340
|
.nx-chat-new {
|
|
1341
|
+
position: relative;
|
|
1251
1342
|
display: flex;
|
|
1252
1343
|
flex: 1 1 auto;
|
|
1253
1344
|
flex-direction: column;
|
|
@@ -1370,6 +1461,7 @@
|
|
|
1370
1461
|
* list under it would fall outside. The highlighted row is the one Enter puts in.
|
|
1371
1462
|
*/
|
|
1372
1463
|
.nx-chat-mentions {
|
|
1464
|
+
position: relative;
|
|
1373
1465
|
display: flex;
|
|
1374
1466
|
flex-direction: column;
|
|
1375
1467
|
gap: 1px;
|
|
@@ -41,72 +41,160 @@
|
|
|
41
41
|
gap: var(--nx-space-2);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
/*
|
|
44
|
+
/*
|
|
45
|
+
* Details (the 2026-06-20 look): each field a label and its value in a box - a hairline and the raised surface - two
|
|
46
|
+
* pairs to a line where the details are wide (46rem), one where they are not; under 20rem the label goes over its
|
|
47
|
+
* value. The details are their own size container, so a popup, a workspace's tab, a column beside a panel and a
|
|
48
|
+
* question's box each get the look their width allows. Every label has one width (a share of the details' width), so
|
|
49
|
+
* the values of both columns, and of a field across the line, start on one edge.
|
|
50
|
+
*/
|
|
45
51
|
.nx-crud-details {
|
|
52
|
+
container: nx-crud-details / inline-size;
|
|
46
53
|
display: flex;
|
|
47
54
|
flex-direction: column;
|
|
48
55
|
gap: var(--nx-space-3);
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
.nx-crud-details__list {
|
|
59
|
+
--nx-crud-details-label: clamp(6rem, 30cqi, 11rem);
|
|
60
|
+
|
|
52
61
|
display: grid;
|
|
53
|
-
grid-template-columns:
|
|
54
|
-
gap: var(--nx-space-
|
|
62
|
+
grid-template-columns: minmax(0, 1fr);
|
|
63
|
+
gap: var(--nx-space-2) var(--nx-space-6);
|
|
55
64
|
margin: 0;
|
|
65
|
+
font-size: var(--nx-text-md);
|
|
66
|
+
line-height: 1.5;
|
|
56
67
|
}
|
|
57
68
|
|
|
69
|
+
/* The label beside its value, on the line of the value's first line however many lines the value takes. */
|
|
58
70
|
.nx-crud-details__item {
|
|
59
|
-
display:
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
display: grid;
|
|
72
|
+
grid-template-columns: var(--nx-crud-details-label) minmax(0, 1fr);
|
|
73
|
+
align-items: start;
|
|
74
|
+
gap: var(--nx-space-1) var(--nx-space-3);
|
|
62
75
|
min-width: 0;
|
|
63
76
|
}
|
|
64
77
|
|
|
65
|
-
.
|
|
78
|
+
/* A long text (`wrap`, Markdown) and a list of rows (`table`) take the whole line. */
|
|
79
|
+
.nx-crud-details__item--wide,
|
|
80
|
+
.nx-crud-details__item--table {
|
|
66
81
|
grid-column: 1 / -1;
|
|
67
82
|
}
|
|
68
83
|
|
|
84
|
+
.nx-crud-details__label {
|
|
85
|
+
/* The value's box: its border and its padding, so the two first lines share a baseline. */
|
|
86
|
+
padding-block: 5px;
|
|
87
|
+
color: var(--nx-text-muted);
|
|
88
|
+
overflow-wrap: break-word;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.nx-crud-details__value {
|
|
92
|
+
/*
|
|
93
|
+
* Positioned, so what a value draws out of the flow (a tick's words for screen readers) stays in its box and inside
|
|
94
|
+
* the box that scrolls it, never making the popup itself scroll.
|
|
95
|
+
*/
|
|
96
|
+
position: relative;
|
|
97
|
+
/* A value still to come keeps its box, so the full record lands without moving anything. */
|
|
98
|
+
min-height: calc(1lh + 10px);
|
|
99
|
+
margin: 0;
|
|
100
|
+
padding: 4px var(--nx-space-3);
|
|
101
|
+
border: 1px solid var(--nx-border);
|
|
102
|
+
border-radius: var(--nx-radius-sm);
|
|
103
|
+
background: var(--nx-surface-2);
|
|
104
|
+
overflow-wrap: anywhere;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* A list of rows: its label over its table, which is the box. */
|
|
108
|
+
.nx-crud-details__item--table {
|
|
109
|
+
grid-template-columns: minmax(0, 1fr);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.nx-crud-details__item--table > .nx-crud-details__label {
|
|
113
|
+
padding-block: 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.nx-crud-details__table {
|
|
117
|
+
min-width: 0;
|
|
118
|
+
margin: 0;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* The table's own frame: across the line, its columns scrolling sideways inside it when they are wider (a phone). */
|
|
122
|
+
.nx-crud-details__rows {
|
|
123
|
+
max-width: 100%;
|
|
124
|
+
overflow-x: auto;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.nx-crud-details__rows table {
|
|
128
|
+
width: 100%;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* The row's number: as narrow as its figures. */
|
|
132
|
+
.nx-crud-details__rows :is(th, td):first-child {
|
|
133
|
+
width: 1%;
|
|
134
|
+
font-variant-numeric: tabular-nums;
|
|
135
|
+
white-space: nowrap;
|
|
136
|
+
}
|
|
137
|
+
|
|
69
138
|
/*
|
|
70
|
-
* Details in sections (`column.group`): each run of fields under its heading
|
|
71
|
-
*
|
|
139
|
+
* Details in sections (`column.group`): each run of fields under its numbered heading ("01. Contact"), the heading
|
|
140
|
+
* nearer its fields than the section before it.
|
|
72
141
|
*/
|
|
73
142
|
.nx-crud-details__section {
|
|
74
143
|
display: flex;
|
|
75
144
|
flex-direction: column;
|
|
76
|
-
gap: var(--nx-space-
|
|
145
|
+
gap: var(--nx-space-3);
|
|
77
146
|
min-width: 0;
|
|
78
147
|
}
|
|
79
148
|
|
|
80
149
|
.nx-crud-details__section + .nx-crud-details__section {
|
|
81
|
-
margin-top: var(--nx-space-
|
|
150
|
+
margin-top: var(--nx-space-4);
|
|
82
151
|
}
|
|
83
152
|
|
|
84
153
|
.nx-crud-details__heading {
|
|
85
154
|
margin: 0;
|
|
86
|
-
color: var(--nx-text
|
|
87
|
-
font-size: var(--nx-text-
|
|
155
|
+
color: var(--nx-text);
|
|
156
|
+
font-size: var(--nx-text-lg);
|
|
88
157
|
font-weight: 600;
|
|
89
|
-
line-height: 1.
|
|
90
|
-
|
|
91
|
-
text-transform: uppercase;
|
|
158
|
+
line-height: 1.35;
|
|
159
|
+
font-variant-numeric: tabular-nums;
|
|
92
160
|
}
|
|
93
161
|
|
|
94
|
-
.
|
|
162
|
+
/* A section's heading with its own Edit (`details.sections`): the button at the end of the heading's line. */
|
|
163
|
+
.nx-crud-details__head {
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-wrap: wrap;
|
|
166
|
+
align-items: center;
|
|
167
|
+
justify-content: space-between;
|
|
168
|
+
gap: var(--nx-space-1) var(--nx-space-3);
|
|
169
|
+
min-width: 0;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* A field only the full record has, when that record could not be loaded; a list with no rows. */
|
|
173
|
+
.nx-crud-details__missing {
|
|
95
174
|
color: var(--nx-text-muted);
|
|
96
|
-
font-size: var(--nx-text-sm);
|
|
97
175
|
}
|
|
98
176
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
177
|
+
@container nx-crud-details (min-width: 46rem) {
|
|
178
|
+
.nx-crud-details__list {
|
|
179
|
+
--nx-crud-details-label: clamp(7rem, 15cqi, 11rem);
|
|
180
|
+
|
|
181
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* The fields sit in from their heading. */
|
|
185
|
+
.nx-crud-details__section > .nx-crud-details__list {
|
|
186
|
+
padding-inline-start: var(--nx-space-5);
|
|
187
|
+
}
|
|
105
188
|
}
|
|
106
189
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
190
|
+
@container nx-crud-details (max-width: 19.98rem) {
|
|
191
|
+
.nx-crud-details__item {
|
|
192
|
+
grid-template-columns: minmax(0, 1fr);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.nx-crud-details__label {
|
|
196
|
+
padding-block: 0;
|
|
197
|
+
}
|
|
110
198
|
}
|
|
111
199
|
|
|
112
200
|
/*
|
|
@@ -296,12 +384,15 @@
|
|
|
296
384
|
.nx-crud-workspace__panel {
|
|
297
385
|
--nx-crud-panel-pad-x: var(--nx-space-5);
|
|
298
386
|
|
|
387
|
+
/* Positioned: what a tab draws out of the flow scrolls and clips with the tab, never past the popup. */
|
|
388
|
+
position: relative;
|
|
299
389
|
min-width: 0;
|
|
300
390
|
min-height: 0;
|
|
301
391
|
padding: var(--nx-space-4) var(--nx-crud-panel-pad-x) var(--nx-space-5);
|
|
302
392
|
overflow: auto;
|
|
303
393
|
overscroll-behavior: contain;
|
|
304
|
-
|
|
394
|
+
/* Below: the 3px ring and 2px more, as the panel's top can sit on a half pixel and its box on another fraction. */
|
|
395
|
+
scroll-padding: calc(var(--nx-text-xs) * 0.6 + 2px) 4px 5px;
|
|
305
396
|
}
|
|
306
397
|
|
|
307
398
|
/*
|