nexus-shared 3.2.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.
Files changed (271) hide show
  1. package/CHANGELOG.md +2359 -0
  2. package/README.md +1911 -1123
  3. package/dist/Client.Index.d.ts +27 -0
  4. package/dist/Client.Index.js +27 -0
  5. package/dist/Components/Chats/ChatComposer.d.ts +7 -1
  6. package/dist/Components/Chats/ChatComposer.js +9 -6
  7. package/dist/Components/Chats/ChatParts.d.ts +15 -2
  8. package/dist/Components/Chats/ChatParts.js +15 -4
  9. package/dist/Components/Chats/ChatPopup.d.ts +46 -0
  10. package/dist/Components/Chats/ChatPopup.js +34 -0
  11. package/dist/Components/Chats/ChatThread.d.ts +9 -1
  12. package/dist/Components/Chats/ChatThread.js +54 -6
  13. package/dist/Components/Dashboards/DashboardBoard.d.ts +62 -0
  14. package/dist/Components/Dashboards/DashboardBoard.js +594 -0
  15. package/dist/Components/Dashboards/DashboardWidgets.d.ts +155 -0
  16. package/dist/Components/Dashboards/DashboardWidgets.js +159 -0
  17. package/dist/Components/Dashboards/WidgetFrame.d.ts +51 -0
  18. package/dist/Components/Dashboards/WidgetFrame.js +45 -0
  19. package/dist/Components/Documents/Button.d.ts +6 -1
  20. package/dist/Components/Documents/Button.js +2 -2
  21. package/dist/Components/Documents/DocumentFrame.d.ts +50 -0
  22. package/dist/Components/Documents/DocumentFrame.js +83 -0
  23. package/dist/Components/Documents/Menu.d.ts +4 -0
  24. package/dist/Components/Documents/Menu.js +40 -24
  25. package/dist/Components/Documents/PrintDocument.d.ts +95 -0
  26. package/dist/Components/Documents/PrintDocument.js +62 -0
  27. package/dist/Components/Documents/TabButtons.d.ts +6 -0
  28. package/dist/Components/Documents/TabButtons.js +5 -4
  29. package/dist/Components/Documents/Tabs.d.ts +59 -0
  30. package/dist/Components/Documents/Tabs.js +70 -0
  31. package/dist/Components/Domains/DomainCard.d.ts +98 -0
  32. package/dist/Components/Domains/DomainCard.js +182 -0
  33. package/dist/Components/Forms/ApiForm.js +24 -3
  34. package/dist/Components/Forms/Crud.d.ts +2 -2
  35. package/dist/Components/Forms/Crud.js +628 -247
  36. package/dist/Components/Forms/CrudActions.d.ts +137 -0
  37. package/dist/Components/Forms/CrudActions.js +214 -0
  38. package/dist/Components/Forms/CrudHistory.d.ts +6 -1
  39. package/dist/Components/Forms/CrudHistory.js +14 -6
  40. package/dist/Components/Forms/CrudNarrowPicker.d.ts +31 -0
  41. package/dist/Components/Forms/CrudNarrowPicker.js +180 -0
  42. package/dist/Components/Forms/CrudParts.d.ts +37 -2
  43. package/dist/Components/Forms/CrudParts.js +123 -7
  44. package/dist/Components/Forms/CrudRowForms.d.ts +26 -0
  45. package/dist/Components/Forms/CrudRowForms.js +174 -0
  46. package/dist/Components/Forms/CrudScopes.d.ts +28 -0
  47. package/dist/Components/Forms/CrudScopes.js +76 -0
  48. package/dist/Components/Forms/CrudTree.d.ts +90 -0
  49. package/dist/Components/Forms/CrudTree.js +363 -0
  50. package/dist/Components/Forms/CrudWorkspace.d.ts +73 -0
  51. package/dist/Components/Forms/CrudWorkspace.js +177 -0
  52. package/dist/Components/Forms/ExcelImport.js +3 -3
  53. package/dist/Components/Forms/Form.d.ts +6 -5
  54. package/dist/Components/Forms/Form.js +134 -21
  55. package/dist/Components/Forms/FormLeaveGuard.d.ts +44 -0
  56. package/dist/Components/Forms/FormLeaveGuard.js +65 -0
  57. package/dist/Components/Forms/FormQuestion.d.ts +6 -0
  58. package/dist/Components/Forms/FormQuestion.js +28 -0
  59. package/dist/Components/Forms/RecordFlows.d.ts +50 -0
  60. package/dist/Components/Forms/RecordFlows.js +282 -0
  61. package/dist/Components/Forms/SubmitForm.d.ts +37 -2
  62. package/dist/Components/Forms/SubmitForm.js +182 -10
  63. package/dist/Components/Inputs/CheckBox.js +1 -1
  64. package/dist/Components/Inputs/ChoiceField.d.ts +21 -1
  65. package/dist/Components/Inputs/ChoiceField.js +28 -2
  66. package/dist/Components/Inputs/ComputedInput.d.ts +51 -0
  67. package/dist/Components/Inputs/ComputedInput.js +179 -0
  68. package/dist/Components/Inputs/Dropdown.d.ts +13 -0
  69. package/dist/Components/Inputs/Dropdown.js +8 -6
  70. package/dist/Components/Inputs/DropdownParts.d.ts +3 -1
  71. package/dist/Components/Inputs/DropdownParts.js +16 -4
  72. package/dist/Components/Inputs/Field.d.ts +7 -1
  73. package/dist/Components/Inputs/Field.js +2 -2
  74. package/dist/Components/Inputs/GroupForm.d.ts +6 -6
  75. package/dist/Components/Inputs/GroupForm.js +12 -12
  76. package/dist/Components/Inputs/InputRenderer.d.ts +13 -6
  77. package/dist/Components/Inputs/InputRenderer.js +37 -32
  78. package/dist/Components/Inputs/MarkdownEditor.d.ts +6 -0
  79. package/dist/Components/Inputs/MarkdownEditor.js +32 -6
  80. package/dist/Components/Inputs/PictureInput.d.ts +41 -0
  81. package/dist/Components/Inputs/PictureInput.js +75 -0
  82. package/dist/Components/Inputs/RadioGroup.d.ts +16 -3
  83. package/dist/Components/Inputs/RadioGroup.js +8 -3
  84. package/dist/Components/Inputs/RowsInput.d.ts +15 -2
  85. package/dist/Components/Inputs/RowsInput.js +96 -8
  86. package/dist/Components/Inputs/TabularForm.d.ts +5 -5
  87. package/dist/Components/Inputs/TabularForm.js +45 -32
  88. package/dist/Components/Inputs/TextArea.d.ts +6 -0
  89. package/dist/Components/Inputs/TextArea.js +11 -2
  90. package/dist/Components/Inputs/TextBoxTypes.d.ts +6 -0
  91. package/dist/Components/Inputs/TextBoxTypes.js +17 -0
  92. package/dist/Components/Inputs/TreeView.d.ts +76 -2
  93. package/dist/Components/Inputs/TreeView.js +227 -16
  94. package/dist/Components/Layouts/MessageBox.d.ts +15 -2
  95. package/dist/Components/Layouts/MessageBox.js +56 -7
  96. package/dist/Components/Layouts/Popup.d.ts +34 -7
  97. package/dist/Components/Layouts/Popup.js +143 -13
  98. package/dist/Components/Layouts/PopupDock.d.ts +3 -1
  99. package/dist/Components/Layouts/PopupDock.js +2 -1
  100. package/dist/Components/Layouts/PopupHost.js +5 -4
  101. package/dist/Components/Messages/MailClient.d.ts +50 -0
  102. package/dist/Components/Messages/MailClient.js +410 -0
  103. package/dist/Components/Messages/MailColumns.d.ts +21 -0
  104. package/dist/Components/Messages/MailColumns.js +92 -0
  105. package/dist/Components/Messages/MailCompose.d.ts +46 -0
  106. package/dist/Components/Messages/MailCompose.js +154 -0
  107. package/dist/Components/Messages/MailReader.d.ts +43 -0
  108. package/dist/Components/Messages/MailReader.js +207 -0
  109. package/dist/Components/Messages/MailThread.d.ts +71 -0
  110. package/dist/Components/Messages/MailThread.js +185 -0
  111. package/dist/Components/Messages/MessageBell.d.ts +41 -0
  112. package/dist/Components/Messages/MessageBell.js +76 -0
  113. package/dist/Components/Viewers/DataTable.js +153 -49
  114. package/dist/Components/Viewers/DataTableColumns.d.ts +2 -2
  115. package/dist/Components/Viewers/DataTableColumns.js +2 -1
  116. package/dist/Components/Viewers/DataTableFilters.d.ts +1 -1
  117. package/dist/Components/Viewers/DataTableFilters.js +17 -2
  118. package/dist/Components/Viewers/DataTableParts.d.ts +23 -5
  119. package/dist/Components/Viewers/DataTableParts.js +26 -14
  120. package/dist/Components/Viewers/OwnerFiles.d.ts +227 -0
  121. package/dist/Components/Viewers/OwnerFiles.js +700 -0
  122. package/dist/Components/Viewers/QrCodeImage.d.ts +22 -0
  123. package/dist/Components/Viewers/QrCodeImage.js +15 -0
  124. package/dist/Components/Viewers/RecordCards.d.ts +16 -0
  125. package/dist/Components/Viewers/RecordCards.js +509 -0
  126. package/dist/Helpers/ApiModules.js +4 -0
  127. package/dist/Helpers/AuditEntries.d.ts +50 -0
  128. package/dist/Helpers/AuditEntries.js +96 -0
  129. package/dist/Helpers/BusyHooks.d.ts +6 -0
  130. package/dist/Helpers/BusyHooks.js +39 -0
  131. package/dist/Helpers/ChatBackend.d.ts +8 -1
  132. package/dist/Helpers/ChatBackend.js +18 -0
  133. package/dist/Helpers/ChatHelpers.d.ts +2 -0
  134. package/dist/Helpers/ChatHelpers.js +4 -1
  135. package/dist/Helpers/CrudBackend.d.ts +20 -2
  136. package/dist/Helpers/CrudBackend.js +46 -2
  137. package/dist/Helpers/CrudColumns.d.ts +91 -6
  138. package/dist/Helpers/CrudColumns.js +148 -7
  139. package/dist/Helpers/CrudDetailsTabs.d.ts +58 -0
  140. package/dist/Helpers/CrudDetailsTabs.js +126 -0
  141. package/dist/Helpers/CrudHelpers.d.ts +116 -2
  142. package/dist/Helpers/CrudHelpers.js +256 -0
  143. package/dist/Helpers/CrudNarrowPick.d.ts +83 -0
  144. package/dist/Helpers/CrudNarrowPick.js +157 -0
  145. package/dist/Helpers/CrudPickerPlan.d.ts +58 -0
  146. package/dist/Helpers/CrudPickerPlan.js +46 -0
  147. package/dist/Helpers/CrudRowForms.d.ts +32 -0
  148. package/dist/Helpers/CrudRowForms.js +76 -0
  149. package/dist/Helpers/CrudScopes.d.ts +32 -0
  150. package/dist/Helpers/CrudScopes.js +79 -0
  151. package/dist/Helpers/DashboardHelpers.d.ts +115 -0
  152. package/dist/Helpers/DashboardHelpers.js +305 -0
  153. package/dist/Helpers/DomainCards.d.ts +140 -0
  154. package/dist/Helpers/DomainCards.js +370 -0
  155. package/dist/Helpers/DropdownHelpers.d.ts +3 -1
  156. package/dist/Helpers/DropdownHelpers.js +6 -2
  157. package/dist/Helpers/ExcelHelpers.d.ts +1 -1
  158. package/dist/Helpers/ExcelHelpers.js +12 -11
  159. package/dist/Helpers/FileAdapter.d.ts +158 -0
  160. package/dist/Helpers/FileAdapter.js +173 -0
  161. package/dist/Helpers/FilePrimaries.d.ts +48 -0
  162. package/dist/Helpers/FilePrimaries.js +138 -0
  163. package/dist/Helpers/FormConfirm.d.ts +32 -0
  164. package/dist/Helpers/FormConfirm.js +40 -0
  165. package/dist/Helpers/FormStore.d.ts +100 -5
  166. package/dist/Helpers/FormStore.js +368 -25
  167. package/dist/Helpers/InputConditions.d.ts +56 -0
  168. package/dist/Helpers/InputConditions.js +192 -0
  169. package/dist/Helpers/InputMemory.d.ts +106 -0
  170. package/dist/Helpers/InputMemory.js +395 -0
  171. package/dist/Helpers/InputNarrowing.d.ts +50 -0
  172. package/dist/Helpers/InputNarrowing.js +148 -0
  173. package/dist/Helpers/InputParamsHelpers.d.ts +44 -1
  174. package/dist/Helpers/InputParamsHelpers.js +157 -74
  175. package/dist/Helpers/MailClientHelpers.d.ts +96 -0
  176. package/dist/Helpers/MailClientHelpers.js +211 -0
  177. package/dist/Helpers/MessageBackend.d.ts +152 -0
  178. package/dist/Helpers/MessageBackend.js +329 -0
  179. package/dist/Helpers/MessageHelpers.d.ts +160 -0
  180. package/dist/Helpers/MessageHelpers.js +573 -0
  181. package/dist/Helpers/MessageUnread.d.ts +95 -0
  182. package/dist/Helpers/MessageUnread.js +245 -0
  183. package/dist/Helpers/NexusDriveAdapter.d.ts +71 -0
  184. package/dist/Helpers/NexusDriveAdapter.js +236 -0
  185. package/dist/Helpers/NumberHelpers.d.ts +156 -0
  186. package/dist/Helpers/NumberHelpers.js +242 -0
  187. package/dist/Helpers/PagedPicker.d.ts +42 -0
  188. package/dist/Helpers/PagedPicker.js +85 -0
  189. package/dist/Helpers/Permissions.js +2 -1
  190. package/dist/Helpers/QrCode.d.ts +26 -0
  191. package/dist/Helpers/QrCode.js +463 -0
  192. package/dist/Helpers/RecordCards.d.ts +205 -0
  193. package/dist/Helpers/RecordCards.js +378 -0
  194. package/dist/Helpers/RequestCache.d.ts +14 -2
  195. package/dist/Helpers/RequestCache.js +22 -3
  196. package/dist/Helpers/RowsStore.d.ts +61 -2
  197. package/dist/Helpers/RowsStore.js +203 -16
  198. package/dist/Helpers/ServerPreview.d.ts +69 -0
  199. package/dist/Helpers/ServerPreview.js +99 -0
  200. package/dist/Helpers/TableColumns.js +4 -3
  201. package/dist/Helpers/TableExport.d.ts +7 -1
  202. package/dist/Helpers/TableExport.js +9 -3
  203. package/dist/Helpers/TableFilters.d.ts +1 -1
  204. package/dist/Helpers/TableFilters.js +24 -23
  205. package/dist/Helpers/TableHelpers.d.ts +38 -4
  206. package/dist/Helpers/TableHelpers.js +78 -10
  207. package/dist/Helpers/TableJoins.d.ts +13 -0
  208. package/dist/Helpers/TableJoins.js +34 -0
  209. package/dist/Helpers/TableStore.d.ts +28 -4
  210. package/dist/Helpers/TableStore.js +73 -11
  211. package/dist/Helpers/ToolbarFit.d.ts +23 -0
  212. package/dist/Helpers/ToolbarFit.js +30 -0
  213. package/dist/Helpers/TreeStore.d.ts +156 -6
  214. package/dist/Helpers/TreeStore.js +547 -18
  215. package/dist/Interfaces/ApiInterfaces.d.ts +10 -1
  216. package/dist/Interfaces/ApiInterfaces.js +10 -1
  217. package/dist/Interfaces/ChatInterfaces.d.ts +22 -0
  218. package/dist/Interfaces/CrudInterfaces.d.ts +539 -6
  219. package/dist/Interfaces/DashboardInterfaces.d.ts +123 -0
  220. package/dist/Interfaces/DashboardInterfaces.js +1 -0
  221. package/dist/Interfaces/DomainInterfaces.d.ts +145 -0
  222. package/dist/Interfaces/DomainInterfaces.js +1 -0
  223. package/dist/Interfaces/FileInterfaces.d.ts +183 -0
  224. package/dist/Interfaces/FileInterfaces.js +6 -0
  225. package/dist/Interfaces/FormInterfaces.d.ts +460 -32
  226. package/dist/Interfaces/FormInterfaces.js +79 -1
  227. package/dist/Interfaces/InputInterfaces.d.ts +22 -3
  228. package/dist/Interfaces/MailInterfaces.d.ts +192 -0
  229. package/dist/Interfaces/MailInterfaces.js +1 -0
  230. package/dist/Interfaces/RecordInterfaces.d.ts +367 -0
  231. package/dist/Interfaces/RecordInterfaces.js +1 -0
  232. package/dist/Interfaces/TableInterfaces.d.ts +102 -3
  233. package/dist/Services/ExcelApi.js +5 -0
  234. package/dist/Services/FileApi.d.ts +13 -0
  235. package/dist/Services/FileApi.js +29 -0
  236. package/dist/Services/ImageEditorLoader.d.ts +14 -0
  237. package/dist/Services/ImageEditorLoader.js +51 -0
  238. package/dist/Services/JoinSources.d.ts +79 -6
  239. package/dist/Services/JoinSources.js +132 -21
  240. package/dist/Services/MessageApi.d.ts +18 -0
  241. package/dist/Services/MessageApi.js +64 -0
  242. package/dist/Services/ModuleImport.d.ts +7 -0
  243. package/dist/Services/ModuleImport.js +22 -0
  244. package/dist/Shared.Index.d.ts +28 -0
  245. package/dist/Shared.Index.js +28 -0
  246. package/package.json +13 -2
  247. package/src/Styles/Nexus.Avatar.css +6 -5
  248. package/src/Styles/Nexus.Button.css +39 -4
  249. package/src/Styles/Nexus.Chat.css +114 -22
  250. package/src/Styles/Nexus.Choice.css +16 -0
  251. package/src/Styles/Nexus.Crud.css +486 -21
  252. package/src/Styles/Nexus.Dashboard.css +763 -0
  253. package/src/Styles/Nexus.Domain.css +384 -0
  254. package/src/Styles/Nexus.Dropdown.css +8 -0
  255. package/src/Styles/Nexus.Editor.css +20 -0
  256. package/src/Styles/Nexus.Files.css +437 -0
  257. package/src/Styles/Nexus.Form.css +5 -2
  258. package/src/Styles/Nexus.Index.css +7 -0
  259. package/src/Styles/Nexus.Input.css +73 -0
  260. package/src/Styles/Nexus.Mail.css +1062 -0
  261. package/src/Styles/Nexus.Menu.css +10 -1
  262. package/src/Styles/Nexus.Popup.css +135 -1
  263. package/src/Styles/Nexus.Print.css +288 -0
  264. package/src/Styles/Nexus.QrCode.css +12 -0
  265. package/src/Styles/Nexus.Record.css +430 -0
  266. package/src/Styles/Nexus.Tab.Buttons.css +87 -22
  267. package/src/Styles/Nexus.Table.css +1458 -1387
  268. package/src/Styles/Nexus.Theme.Picker.css +1 -0
  269. package/src/Styles/Nexus.Themes.css +12 -6
  270. package/src/Styles/Nexus.Tokens.css +8 -3
  271. package/src/Styles/Nexus.Tree.css +41 -1
@@ -0,0 +1,384 @@
1
+ @layer nexus.components {
2
+ /*
3
+ * A record's card (`DomainCard`, `DomainCardFrame`): its title line - the kind as a tag, the title, the code, the state
4
+ * - then its fields, figures, lines and link. A band of whatever holds it (a mail thread's head draws a line above it),
5
+ * never a bordered box of its own. Its placeholder is the same parts with a bone on each line, so the card holds its
6
+ * height when the record lands. A record named with no card (`DomainLine`) is its kind and its words on one line.
7
+ * Table.css loads after this sheet: a rule on a table tag or bone takes two classes.
8
+ */
9
+
10
+ /* A band: as wide as what holds it, also where a grid or a column lines its items up at the start. */
11
+ .nx-domain-card {
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: var(--nx-space-2);
15
+ align-self: stretch;
16
+ justify-self: stretch;
17
+ min-width: 0;
18
+ }
19
+
20
+ /*
21
+ * The head: the title takes the room; the marks, the state and the fold button sit at the end; the quiet line under.
22
+ * Its own width lays it out (the status beside the title, or under it when narrow), so it is the size container.
23
+ */
24
+ .nx-domain-card__head {
25
+ container: nx-domain-card / inline-size;
26
+ display: flex;
27
+ flex-wrap: wrap;
28
+ gap: var(--nx-space-1) var(--nx-space-2);
29
+ align-items: center;
30
+ }
31
+
32
+ /*
33
+ * The title takes the room the status leaves. The width of the card, never the length of its words, decides whether
34
+ * the status sits beside it, so the placeholder and the card it stands for lay out alike at every width.
35
+ */
36
+ .nx-domain-card__title {
37
+ flex: 1 1 0;
38
+ min-width: 0;
39
+ margin: 0;
40
+ font-size: var(--nx-text-md);
41
+ font-weight: 600;
42
+ line-height: 1.5;
43
+ overflow-wrap: anywhere;
44
+ }
45
+
46
+ @container nx-domain-card (max-width: 24rem) {
47
+ .nx-domain-card__title {
48
+ flex-basis: 100%;
49
+ }
50
+ }
51
+
52
+ .nx-table__tag.nx-domain-card__kind {
53
+ margin-inline-end: var(--nx-space-1);
54
+ vertical-align: 1px;
55
+ }
56
+
57
+ /*
58
+ * The quiet line under the title, one line at any width: the code, then the subtitle, cut with "..." when the link at
59
+ * its end needs the room (their whole words on hover), so the card is as tall on a phone as its placeholder.
60
+ */
61
+ .nx-domain-card__subtitle {
62
+ display: flex;
63
+ flex-basis: 100%;
64
+ gap: var(--nx-space-3);
65
+ align-items: baseline;
66
+ min-width: 0;
67
+ color: var(--nx-text-muted);
68
+ font-size: var(--nx-text-sm);
69
+ line-height: 1.5;
70
+ }
71
+
72
+ .nx-domain-card__subtitle > :first-child {
73
+ min-width: 0;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ white-space: nowrap;
77
+ }
78
+
79
+ .nx-domain-card__code {
80
+ font-variant-numeric: tabular-nums;
81
+ }
82
+
83
+ .nx-domain-card__status {
84
+ display: inline-flex;
85
+ flex-shrink: 0;
86
+ gap: var(--nx-space-2);
87
+ align-items: center;
88
+ margin-inline-start: auto;
89
+ }
90
+
91
+ .nx-table__tag.nx-domain-card__state {
92
+ flex-shrink: 0;
93
+ }
94
+
95
+ /* The fold button keeps the title line as tall as its text: a small control laid over the line's own height. */
96
+ .nx-btn.nx-domain-card__toggle {
97
+ margin-block: calc((var(--nx-text-md) * 1.5 - var(--nx-control-sm)) / 2);
98
+ }
99
+
100
+ /* A mark beside the state: read again just now, being read, not up to date. */
101
+ .nx-domain-card__meta {
102
+ display: inline-flex;
103
+ gap: 4px;
104
+ align-items: center;
105
+ color: var(--nx-text-muted);
106
+ font-size: var(--nx-text-xs);
107
+ font-variant-numeric: tabular-nums;
108
+ white-space: nowrap;
109
+ }
110
+
111
+ .nx-domain-card__meta .nx-icon {
112
+ width: 14px;
113
+ height: 14px;
114
+ }
115
+
116
+ .nx-domain-card__meta--failed {
117
+ color: var(--nx-danger);
118
+ }
119
+
120
+ .nx-domain-card__retry {
121
+ padding: 0;
122
+ border: 0;
123
+ border-radius: var(--nx-radius-sm);
124
+ background: none;
125
+ color: inherit;
126
+ font: inherit;
127
+ font-weight: 600;
128
+ text-decoration: underline;
129
+ cursor: pointer;
130
+ }
131
+
132
+ .nx-domain-card__retry:focus-visible {
133
+ outline: none;
134
+ box-shadow: var(--nx-focus-ring);
135
+ }
136
+
137
+ .nx-domain-card__body {
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: var(--nx-space-2);
141
+ min-width: 0;
142
+ }
143
+
144
+ /* Folded: the class's display would otherwise beat the browser's own [hidden]. */
145
+ /*
146
+ * The details - fields, lines, what a kind adds - fold under the figures, which always show: folded, a leave's card is
147
+ * its title, its code and its balance. Their display would otherwise beat the browser's own [hidden].
148
+ */
149
+ .nx-domain-card__details {
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: var(--nx-space-2);
153
+ min-width: 0;
154
+ }
155
+
156
+ .nx-domain-card__body[hidden],
157
+ .nx-domain-card__details[hidden] {
158
+ display: none;
159
+ }
160
+
161
+ /* Fields: a label over its value, as many to a row as fit. */
162
+ .nx-domain-card__fields {
163
+ display: grid;
164
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 9rem), 1fr));
165
+ gap: var(--nx-space-2) var(--nx-space-4);
166
+ margin: 0;
167
+ }
168
+
169
+ .nx-domain-card__field {
170
+ min-width: 0;
171
+ }
172
+
173
+ .nx-domain-card__field > dt,
174
+ .nx-domain-card__figure > dt {
175
+ color: var(--nx-text-muted);
176
+ font-size: var(--nx-text-xs);
177
+ line-height: 1.5;
178
+ }
179
+
180
+ .nx-domain-card__field > dd {
181
+ margin: 0;
182
+ font-size: var(--nx-text-sm);
183
+ line-height: 1.5;
184
+ overflow-wrap: anywhere;
185
+ }
186
+
187
+ .nx-domain-card__field[data-empty] > dd,
188
+ .nx-domain-card__note {
189
+ color: var(--nx-text-muted);
190
+ }
191
+
192
+ /*
193
+ * Figures: each a label over a large value, marked at its start by its tone (a second cue beside the words), on one
194
+ * track width so a row of them does not move as their values arrive; two to a row on a phone.
195
+ */
196
+ .nx-domain-card__figures {
197
+ display: grid;
198
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 7.5rem), 1fr));
199
+ gap: var(--nx-space-2) var(--nx-space-4);
200
+ margin: 0;
201
+ }
202
+
203
+ .nx-domain-card__figure {
204
+ --nx-figure-tone: var(--nx-border-strong);
205
+ min-width: 0;
206
+ padding-inline-start: var(--nx-space-2);
207
+ border-inline-start: 3px solid var(--nx-figure-tone);
208
+ }
209
+
210
+ .nx-domain-card__figure[data-tone="primary"] {
211
+ --nx-figure-tone: var(--nx-primary);
212
+ }
213
+
214
+ .nx-domain-card__figure[data-tone="info"] {
215
+ --nx-figure-tone: var(--nx-info);
216
+ }
217
+
218
+ .nx-domain-card__figure[data-tone="success"] {
219
+ --nx-figure-tone: var(--nx-success);
220
+ }
221
+
222
+ .nx-domain-card__figure[data-tone="warning"] {
223
+ --nx-figure-tone: var(--nx-warning);
224
+ }
225
+
226
+ .nx-domain-card__figure[data-tone="danger"] {
227
+ --nx-figure-tone: var(--nx-danger);
228
+ }
229
+
230
+ .nx-domain-card__figure > dd {
231
+ margin: 0;
232
+ white-space: nowrap;
233
+ }
234
+
235
+ .nx-domain-card__value {
236
+ font-size: var(--nx-text-xl);
237
+ font-weight: 600;
238
+ line-height: 1.3;
239
+ font-variant-numeric: tabular-nums;
240
+ }
241
+
242
+ .nx-domain-card__unit {
243
+ color: var(--nx-text-muted);
244
+ font-size: var(--nx-text-sm);
245
+ }
246
+
247
+ /*
248
+ * A hint keeps two lines, in the placeholder and the card alike, so a figure keeps one size whether its words take one
249
+ * line or wrap to two ("1.5 paid, 0.5 unpaid (1 day's pay)" in a narrow column).
250
+ */
251
+ .nx-domain-card__figure > dd.nx-domain-card__hint {
252
+ min-height: 3em;
253
+ color: var(--nx-text-muted);
254
+ font-size: var(--nx-text-xs);
255
+ line-height: 1.5;
256
+ white-space: normal;
257
+ }
258
+
259
+ /* Lines: a short table with no frame, lines between rows, numbers at the end. */
260
+ .nx-domain-card__lines {
261
+ width: 100%;
262
+ border-collapse: collapse;
263
+ font-size: var(--nx-text-sm);
264
+ font-variant-numeric: tabular-nums;
265
+ line-height: 1.5;
266
+ }
267
+
268
+ /* Every cell one line: the values are short, and the first column gives way for the rest. */
269
+ .nx-domain-card__lines th {
270
+ padding: 2px var(--nx-space-2);
271
+ white-space: nowrap;
272
+ border-bottom: 1px solid var(--nx-border);
273
+ color: var(--nx-text-muted);
274
+ font-size: var(--nx-text-xs);
275
+ font-weight: 500;
276
+ text-align: start;
277
+ }
278
+
279
+ .nx-domain-card__lines td {
280
+ padding: 3px var(--nx-space-2);
281
+ border-bottom: 1px solid color-mix(in oklab, var(--nx-border) 60%, transparent);
282
+ white-space: nowrap;
283
+ }
284
+
285
+ .nx-domain-card__lines :is(th, td):first-child {
286
+ padding-inline-start: 0;
287
+ }
288
+
289
+ .nx-domain-card__lines :is(th, td):last-child {
290
+ padding-inline-end: 0;
291
+ }
292
+
293
+ .nx-domain-card__lines :is(th, td)[data-align="end"] {
294
+ text-align: end;
295
+ }
296
+
297
+ /* The first column takes the room the others leave and keeps to one line, so a row is one line tall at any width. */
298
+ .nx-domain-card__lines td:first-child {
299
+ width: 100%;
300
+ max-width: 0;
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ }
304
+
305
+ .nx-domain-card__more {
306
+ margin: 0;
307
+ color: var(--nx-text-muted);
308
+ font-size: var(--nx-text-xs);
309
+ line-height: 1.5;
310
+ }
311
+
312
+ .nx-domain-card__link {
313
+ display: inline-flex;
314
+ gap: 4px;
315
+ align-items: center;
316
+ margin-inline-start: auto;
317
+ white-space: nowrap;
318
+ border-radius: var(--nx-radius-sm);
319
+ color: var(--nx-primary);
320
+ font-size: var(--nx-text-sm);
321
+ font-weight: 500;
322
+ line-height: 1.5;
323
+ text-decoration: none;
324
+ }
325
+
326
+ a.nx-domain-card__link:hover {
327
+ text-decoration: underline;
328
+ }
329
+
330
+ .nx-domain-card__link:focus-visible {
331
+ outline: none;
332
+ box-shadow: var(--nx-focus-ring);
333
+ }
334
+
335
+ .nx-domain-card__link .nx-icon {
336
+ width: 14px;
337
+ height: 14px;
338
+ }
339
+
340
+ /* A record the reader cannot open: one quiet sentence under its words, the lock as its second cue. */
341
+ .nx-domain-card__notice {
342
+ display: flex;
343
+ gap: 6px;
344
+ align-items: center;
345
+ margin: 0;
346
+ color: var(--nx-text-muted);
347
+ font-size: var(--nx-text-sm);
348
+ }
349
+
350
+ .nx-domain-card__notice .nx-icon {
351
+ flex-shrink: 0;
352
+ width: 14px;
353
+ height: 14px;
354
+ }
355
+
356
+ /* The placeholder: a bone on the line of the text it stands for, and a tag's size for the state. */
357
+ .nx-table__bone.nx-domain-card__bone {
358
+ display: inline-block;
359
+ max-width: 100%;
360
+ height: 0.9em;
361
+ vertical-align: -0.1em;
362
+ }
363
+
364
+ .nx-table__tag.nx-domain-card__bone-tag {
365
+ width: 6.5rem;
366
+ height: calc(var(--nx-text-xs) * 1.6 + 2px);
367
+ background: color-mix(in oklab, var(--nx-text) 9%, transparent);
368
+ }
369
+
370
+ /* A record with no card: its kind as a tag, then its words. */
371
+ .nx-domain-line {
372
+ display: flex;
373
+ flex-wrap: wrap;
374
+ gap: var(--nx-space-1) var(--nx-space-2);
375
+ align-items: center;
376
+ margin: 0;
377
+ font-size: var(--nx-text-sm);
378
+ }
379
+
380
+ .nx-domain-line__label {
381
+ min-width: 0;
382
+ overflow-wrap: anywhere;
383
+ }
384
+ }
@@ -385,7 +385,10 @@
385
385
  user-select: none;
386
386
  }
387
387
 
388
+ /* The list's gutters, not the row's own 8px gap: a subgrid with a gap of its own sets its cells a pixel past each side
389
+ of their headings, so a figure at the end of its column ended a pixel past its heading. */
388
390
  .nx-dropdown-list--columns > .nx-dropdown-option {
391
+ column-gap: normal;
389
392
  padding-inline: 0;
390
393
  }
391
394
 
@@ -550,6 +553,11 @@
550
553
  letter-spacing: 0.03em;
551
554
  }
552
555
 
556
+ /* A price beside a name: figures in even digits, so a column of them lines up at the end. */
557
+ .nx-dropdown-cell--money {
558
+ font-variant-numeric: tabular-nums;
559
+ }
560
+
553
561
  .nx-dropdown-cell--media {
554
562
  display: grid;
555
563
  place-items: center;
@@ -49,6 +49,26 @@
49
49
  margin-left: auto;
50
50
  }
51
51
 
52
+ /*
53
+ * One row (`toolbarOverflow="menu"`): at any width the buttons take the room the views and the end leave them, never a
54
+ * row of their own, and those that do not fit are in the "More formatting" menu at their end. Two classes, so the
55
+ * narrow rule below that gives the buttons a row of their own does not reach them.
56
+ */
57
+ .nx-editor__bar--one-row {
58
+ flex-wrap: nowrap;
59
+ }
60
+
61
+ .nx-editor__bar--one-row > .nx-editor__tools {
62
+ flex: 1 1 0;
63
+ flex-wrap: nowrap;
64
+ order: 0;
65
+ overflow: hidden;
66
+ }
67
+
68
+ .nx-editor__bar--one-row > .nx-editor__end {
69
+ order: 0;
70
+ }
71
+
52
72
  .nx-editor__tool {
53
73
  display: grid;
54
74
  place-items: center;