nexus-shared 3.1.0 → 4.0.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 (234) hide show
  1. package/CHANGELOG.md +2268 -446
  2. package/LICENSE +21 -21
  3. package/README.md +1705 -1084
  4. package/dist/Client.Index.d.ts +17 -0
  5. package/dist/Client.Index.js +17 -0
  6. package/dist/Components/Documents/DocumentFrame.d.ts +50 -0
  7. package/dist/Components/Documents/DocumentFrame.js +83 -0
  8. package/dist/Components/Documents/Menu.d.ts +4 -0
  9. package/dist/Components/Documents/Menu.js +40 -24
  10. package/dist/Components/Documents/PrintDocument.d.ts +95 -0
  11. package/dist/Components/Documents/PrintDocument.js +62 -0
  12. package/dist/Components/Documents/Tabs.d.ts +59 -0
  13. package/dist/Components/Documents/Tabs.js +70 -0
  14. package/dist/Components/Forms/ApiForm.js +19 -2
  15. package/dist/Components/Forms/Crud.d.ts +2 -2
  16. package/dist/Components/Forms/Crud.js +871 -377
  17. package/dist/Components/Forms/CrudActions.d.ts +136 -0
  18. package/dist/Components/Forms/CrudActions.js +184 -0
  19. package/dist/Components/Forms/CrudHistory.d.ts +66 -0
  20. package/dist/Components/Forms/CrudHistory.js +140 -0
  21. package/dist/Components/Forms/CrudNarrowPicker.d.ts +31 -0
  22. package/dist/Components/Forms/CrudNarrowPicker.js +180 -0
  23. package/dist/Components/Forms/CrudParts.d.ts +30 -2
  24. package/dist/Components/Forms/CrudParts.js +56 -5
  25. package/dist/Components/Forms/CrudRowForms.d.ts +26 -0
  26. package/dist/Components/Forms/CrudRowForms.js +114 -0
  27. package/dist/Components/Forms/CrudScopes.d.ts +28 -0
  28. package/dist/Components/Forms/CrudScopes.js +76 -0
  29. package/dist/Components/Forms/CrudTree.d.ts +90 -0
  30. package/dist/Components/Forms/CrudTree.js +363 -0
  31. package/dist/Components/Forms/CrudWorkspace.d.ts +63 -0
  32. package/dist/Components/Forms/CrudWorkspace.js +169 -0
  33. package/dist/Components/Forms/ExcelImport.js +3 -3
  34. package/dist/Components/Forms/Form.d.ts +4 -4
  35. package/dist/Components/Forms/Form.js +125 -16
  36. package/dist/Components/Forms/FormLeaveGuard.d.ts +44 -0
  37. package/dist/Components/Forms/FormLeaveGuard.js +65 -0
  38. package/dist/Components/Forms/RecordFlows.d.ts +50 -0
  39. package/dist/Components/Forms/RecordFlows.js +282 -0
  40. package/dist/Components/Forms/SubmitForm.d.ts +37 -2
  41. package/dist/Components/Forms/SubmitForm.js +195 -10
  42. package/dist/Components/Inputs/CheckBox.js +1 -1
  43. package/dist/Components/Inputs/ChoiceField.d.ts +21 -1
  44. package/dist/Components/Inputs/ChoiceField.js +28 -2
  45. package/dist/Components/Inputs/CodeBox.d.ts +69 -0
  46. package/dist/Components/Inputs/CodeBox.js +316 -0
  47. package/dist/Components/Inputs/DatePicker.js +4 -1
  48. package/dist/Components/Inputs/DateRangePicker.js +4 -1
  49. package/dist/Components/Inputs/DateTimePicker.js +4 -1
  50. package/dist/Components/Inputs/Dropdown.d.ts +13 -0
  51. package/dist/Components/Inputs/Dropdown.js +8 -5
  52. package/dist/Components/Inputs/DropdownParts.d.ts +3 -1
  53. package/dist/Components/Inputs/DropdownParts.js +16 -4
  54. package/dist/Components/Inputs/Field.d.ts +7 -1
  55. package/dist/Components/Inputs/Field.js +2 -2
  56. package/dist/Components/Inputs/GroupForm.d.ts +6 -6
  57. package/dist/Components/Inputs/GroupForm.js +10 -11
  58. package/dist/Components/Inputs/InputRenderer.d.ts +9 -6
  59. package/dist/Components/Inputs/InputRenderer.js +39 -31
  60. package/dist/Components/Inputs/NumberBox.js +4 -2
  61. package/dist/Components/Inputs/PictureInput.d.ts +41 -0
  62. package/dist/Components/Inputs/PictureInput.js +70 -0
  63. package/dist/Components/Inputs/RadioGroup.d.ts +16 -3
  64. package/dist/Components/Inputs/RadioGroup.js +8 -3
  65. package/dist/Components/Inputs/RowsInput.d.ts +1 -1
  66. package/dist/Components/Inputs/RowsInput.js +18 -3
  67. package/dist/Components/Inputs/TabularForm.d.ts +5 -5
  68. package/dist/Components/Inputs/TabularForm.js +29 -29
  69. package/dist/Components/Inputs/TextArea.d.ts +6 -0
  70. package/dist/Components/Inputs/TextArea.js +14 -2
  71. package/dist/Components/Inputs/TextBox.js +4 -1
  72. package/dist/Components/Inputs/TextBoxTypes.d.ts +6 -0
  73. package/dist/Components/Inputs/TextBoxTypes.js +17 -0
  74. package/dist/Components/Inputs/TimePicker.js +4 -1
  75. package/dist/Components/Inputs/TreeView.d.ts +107 -6
  76. package/dist/Components/Inputs/TreeView.js +513 -30
  77. package/dist/Components/Layouts/MessageBox.d.ts +15 -2
  78. package/dist/Components/Layouts/MessageBox.js +56 -7
  79. package/dist/Components/Layouts/Popup.d.ts +13 -6
  80. package/dist/Components/Layouts/Popup.js +37 -9
  81. package/dist/Components/Layouts/PopupDock.d.ts +3 -1
  82. package/dist/Components/Layouts/PopupDock.js +2 -1
  83. package/dist/Components/Layouts/PopupHost.js +5 -4
  84. package/dist/Components/Layouts/ThemePicker.d.ts +3 -2
  85. package/dist/Components/Layouts/ThemePicker.js +16 -4
  86. package/dist/Components/Viewers/DataTable.js +205 -61
  87. package/dist/Components/Viewers/DataTableFilters.d.ts +1 -1
  88. package/dist/Components/Viewers/DataTableFilters.js +17 -2
  89. package/dist/Components/Viewers/DataTableParts.d.ts +46 -12
  90. package/dist/Components/Viewers/DataTableParts.js +62 -21
  91. package/dist/Components/Viewers/OwnerFiles.d.ts +175 -0
  92. package/dist/Components/Viewers/OwnerFiles.js +589 -0
  93. package/dist/Components/Viewers/QrCodeImage.d.ts +22 -0
  94. package/dist/Components/Viewers/QrCodeImage.js +15 -0
  95. package/dist/Components/Viewers/RecordCards.d.ts +16 -0
  96. package/dist/Components/Viewers/RecordCards.js +509 -0
  97. package/dist/Helpers/ApiModules.d.ts +3 -34
  98. package/dist/Helpers/ApiModules.js +3 -3
  99. package/dist/Helpers/ApiRoutes.d.ts +68 -26
  100. package/dist/Helpers/ApiRoutes.js +31 -27
  101. package/dist/Helpers/ArrayHelpers.d.ts +0 -0
  102. package/dist/Helpers/ArrayHelpers.js +2 -0
  103. package/dist/Helpers/BusyHooks.d.ts +6 -0
  104. package/dist/Helpers/BusyHooks.js +39 -0
  105. package/dist/Helpers/CodeHelpers.d.ts +97 -0
  106. package/dist/Helpers/CodeHelpers.js +332 -0
  107. package/dist/Helpers/CrudBackend.d.ts +114 -6
  108. package/dist/Helpers/CrudBackend.js +214 -11
  109. package/dist/Helpers/CrudColumns.d.ts +98 -0
  110. package/dist/Helpers/CrudColumns.js +160 -0
  111. package/dist/Helpers/CrudDetailsTabs.d.ts +58 -0
  112. package/dist/Helpers/CrudDetailsTabs.js +126 -0
  113. package/dist/Helpers/CrudHelpers.d.ts +130 -6
  114. package/dist/Helpers/CrudHelpers.js +304 -12
  115. package/dist/Helpers/CrudNarrowPick.d.ts +83 -0
  116. package/dist/Helpers/CrudNarrowPick.js +157 -0
  117. package/dist/Helpers/CrudRowForms.d.ts +15 -0
  118. package/dist/Helpers/CrudRowForms.js +43 -0
  119. package/dist/Helpers/CrudScopes.d.ts +32 -0
  120. package/dist/Helpers/CrudScopes.js +79 -0
  121. package/dist/Helpers/DropdownHelpers.d.ts +3 -1
  122. package/dist/Helpers/DropdownHelpers.js +6 -2
  123. package/dist/Helpers/ExcelHelpers.d.ts +1 -1
  124. package/dist/Helpers/ExcelHelpers.js +12 -11
  125. package/dist/Helpers/FileAdapter.d.ts +78 -0
  126. package/dist/Helpers/FileAdapter.js +102 -0
  127. package/dist/Helpers/FilePrimaries.d.ts +48 -0
  128. package/dist/Helpers/FilePrimaries.js +138 -0
  129. package/dist/Helpers/FormConfirm.d.ts +32 -0
  130. package/dist/Helpers/FormConfirm.js +40 -0
  131. package/dist/Helpers/FormStore.d.ts +90 -5
  132. package/dist/Helpers/FormStore.js +318 -22
  133. package/dist/Helpers/InputConditions.d.ts +50 -0
  134. package/dist/Helpers/InputConditions.js +168 -0
  135. package/dist/Helpers/InputMemory.d.ts +106 -0
  136. package/dist/Helpers/InputMemory.js +385 -0
  137. package/dist/Helpers/InputNarrowing.d.ts +18 -0
  138. package/dist/Helpers/InputNarrowing.js +67 -0
  139. package/dist/Helpers/InputParamsHelpers.d.ts +44 -1
  140. package/dist/Helpers/InputParamsHelpers.js +162 -71
  141. package/dist/Helpers/MessageBuilder.js +2 -0
  142. package/dist/Helpers/NexusDriveAdapter.d.ts +55 -0
  143. package/dist/Helpers/NexusDriveAdapter.js +207 -0
  144. package/dist/Helpers/NexusHelpers.d.ts +0 -0
  145. package/dist/Helpers/NexusHelpers.js +1 -0
  146. package/dist/Helpers/NumberHelpers.d.ts +95 -0
  147. package/dist/Helpers/NumberHelpers.js +126 -0
  148. package/dist/Helpers/Permissions.js +2 -1
  149. package/dist/Helpers/QrCode.d.ts +26 -0
  150. package/dist/Helpers/QrCode.js +463 -0
  151. package/dist/Helpers/RecordCards.d.ts +205 -0
  152. package/dist/Helpers/RecordCards.js +378 -0
  153. package/dist/Helpers/RequestCache.d.ts +47 -0
  154. package/dist/Helpers/RequestCache.js +132 -0
  155. package/dist/Helpers/RowsStore.d.ts +37 -2
  156. package/dist/Helpers/RowsStore.js +128 -10
  157. package/dist/Helpers/ServerPreview.d.ts +69 -0
  158. package/dist/Helpers/ServerPreview.js +99 -0
  159. package/dist/Helpers/TableColumns.js +4 -3
  160. package/dist/Helpers/TableExport.d.ts +7 -1
  161. package/dist/Helpers/TableExport.js +21 -15
  162. package/dist/Helpers/TableFilters.d.ts +1 -1
  163. package/dist/Helpers/TableFilters.js +24 -23
  164. package/dist/Helpers/TableHelpers.d.ts +24 -3
  165. package/dist/Helpers/TableHelpers.js +58 -12
  166. package/dist/Helpers/TableJoins.d.ts +83 -0
  167. package/dist/Helpers/TableJoins.js +284 -0
  168. package/dist/Helpers/TableStore.d.ts +26 -1
  169. package/dist/Helpers/TableStore.js +73 -7
  170. package/dist/Helpers/TreeStore.d.ts +306 -11
  171. package/dist/Helpers/TreeStore.js +1048 -90
  172. package/dist/Helpers/UserPreferences.d.ts +8 -0
  173. package/dist/Helpers/UserPreferences.js +17 -0
  174. package/dist/Interfaces/CrudInterfaces.d.ts +512 -14
  175. package/dist/Interfaces/FileInterfaces.d.ts +162 -0
  176. package/dist/Interfaces/FileInterfaces.js +4 -0
  177. package/dist/Interfaces/FormInterfaces.d.ts +393 -29
  178. package/dist/Interfaces/FormInterfaces.js +79 -1
  179. package/dist/Interfaces/InputInterfaces.d.ts +39 -3
  180. package/dist/Interfaces/MessageInterfaces.d.ts +1 -1
  181. package/dist/Interfaces/PreferenceInterfaces.d.ts +8 -0
  182. package/dist/Interfaces/PreferenceInterfaces.js +2 -5
  183. package/dist/Interfaces/RecordInterfaces.d.ts +367 -0
  184. package/dist/Interfaces/RecordInterfaces.js +1 -0
  185. package/dist/Interfaces/TableInterfaces.d.ts +160 -5
  186. package/dist/Services/ApiProxy.d.ts +36 -1
  187. package/dist/Services/ApiProxy.js +182 -52
  188. package/dist/Services/ApiProxyRules.d.ts +203 -0
  189. package/dist/Services/ApiProxyRules.js +426 -0
  190. package/dist/Services/ExcelApi.js +5 -0
  191. package/dist/Services/FileApi.d.ts +13 -0
  192. package/dist/Services/FileApi.js +29 -0
  193. package/dist/Services/ImageEditorLoader.d.ts +14 -0
  194. package/dist/Services/ImageEditorLoader.js +51 -0
  195. package/dist/Services/JoinSources.d.ts +80 -0
  196. package/dist/Services/JoinSources.js +150 -0
  197. package/dist/Services/ModuleImport.d.ts +7 -0
  198. package/dist/Services/ModuleImport.js +22 -0
  199. package/dist/Services/ServerApi.d.ts +13 -2
  200. package/dist/Services/ServerApi.js +8 -3
  201. package/dist/Shared.Index.d.ts +20 -0
  202. package/dist/Shared.Index.js +20 -0
  203. package/package.json +92 -85
  204. package/src/Styles/Nexus.Avatar.css +80 -79
  205. package/src/Styles/Nexus.Base.css +117 -117
  206. package/src/Styles/Nexus.Button.css +186 -180
  207. package/src/Styles/Nexus.Calendar.css +273 -273
  208. package/src/Styles/Nexus.Chat.css +1443 -1443
  209. package/src/Styles/Nexus.Choice.css +359 -343
  210. package/src/Styles/Nexus.Crud.css +542 -168
  211. package/src/Styles/Nexus.DateTime.css +81 -81
  212. package/src/Styles/Nexus.Dropdown.css +733 -725
  213. package/src/Styles/Nexus.Editor.css +295 -295
  214. package/src/Styles/Nexus.Excel.css +389 -389
  215. package/src/Styles/Nexus.Files.css +410 -0
  216. package/src/Styles/Nexus.Form.css +282 -279
  217. package/src/Styles/Nexus.Index.css +41 -37
  218. package/src/Styles/Nexus.Input.css +238 -4
  219. package/src/Styles/Nexus.Markdown.css +237 -237
  220. package/src/Styles/Nexus.Menu.css +246 -237
  221. package/src/Styles/Nexus.Popup.css +800 -724
  222. package/src/Styles/Nexus.Print.css +288 -0
  223. package/src/Styles/Nexus.QrCode.css +12 -0
  224. package/src/Styles/Nexus.Record.css +430 -0
  225. package/src/Styles/Nexus.Rows.css +637 -637
  226. package/src/Styles/Nexus.Slider.css +276 -276
  227. package/src/Styles/Nexus.Tab.Buttons.css +497 -432
  228. package/src/Styles/Nexus.Table.css +98 -35
  229. package/src/Styles/Nexus.Theme.Picker.css +59 -3
  230. package/src/Styles/Nexus.Themes.css +200 -194
  231. package/src/Styles/Nexus.Time.css +144 -144
  232. package/src/Styles/Nexus.Toast.css +263 -263
  233. package/src/Styles/Nexus.Tokens.css +94 -89
  234. package/src/Styles/Nexus.Tree.css +530 -431
package/package.json CHANGED
@@ -1,85 +1,92 @@
1
- {
2
- "name": "nexus-shared",
3
- "version": "3.1.0",
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
- "keywords": [
6
- "react",
7
- "nextjs",
8
- "components",
9
- "ui",
10
- "forms",
11
- "datatable",
12
- "crud",
13
- "inputs",
14
- "design-system",
15
- "typescript",
16
- "nepali-calendar",
17
- "nexus"
18
- ],
19
- "license": "MIT",
20
- "author": "Bijay Adhikari",
21
- "type": "module",
22
- "sideEffects": [
23
- "*.css"
24
- ],
25
- "exports": {
26
- ".": {
27
- "types": "./dist/Shared.Index.d.ts",
28
- "default": "./dist/Shared.Index.js"
29
- },
30
- "./client": {
31
- "types": "./dist/Client.Index.d.ts",
32
- "default": "./dist/Client.Index.js"
33
- },
34
- "./server": {
35
- "types": "./dist/Server.Index.d.ts",
36
- "default": "./dist/Server.Index.js"
37
- },
38
- "./styles.css": "./src/Styles/Nexus.Index.css",
39
- "./package.json": "./package.json"
40
- },
41
- "files": [
42
- "dist",
43
- "src/Styles",
44
- "CHANGELOG.md"
45
- ],
46
- "scripts": {
47
- "build": "tsc -p tsconfig.build.json",
48
- "typecheck": "tsc -p tsconfig.json",
49
- "test": "node scripts/test-all.mjs",
50
- "check:themes": "node scripts/check-themes.mjs",
51
- "test:api": "node scripts/test-api.mts",
52
- "test:chat": "node scripts/test-chat.mts",
53
- "test:dates": "node scripts/test-date-helpers.mts",
54
- "test:datetimes": "node scripts/test-datetime-helpers.mts",
55
- "test:drag": "node scripts/test-drag-helpers.mts",
56
- "test:excel": "node scripts/test-excel.mts",
57
- "test:dropdown": "node scripts/test-dropdown-helpers.mts",
58
- "test:forms": "node scripts/test-form-store.mts",
59
- "test:markdown": "node scripts/test-markdown.mts",
60
- "test:numbers": "node scripts/test-number-helpers.mts",
61
- "test:popups": "node scripts/test-popup-rules.mts",
62
- "test:richtext": "node scripts/test-richtext.mts",
63
- "test:rows": "node scripts/test-rows-store.mts",
64
- "test:table": "node scripts/test-table.mts",
65
- "test:times": "node scripts/test-time-helpers.mts",
66
- "test:tree": "node scripts/test-tree-store.mts",
67
- "test:types": "tsc -p scripts/type-checks/tsconfig.json"
68
- },
69
- "dependencies": {
70
- "nexus-icons": "^1.1.0"
71
- },
72
- "peerDependencies": {
73
- "react": ">=19",
74
- "react-dom": ">=19"
75
- },
76
- "devDependencies": {
77
- "@types/react": "19.3.0"
78
- },
79
- "engines": {
80
- "node": ">=20.9"
81
- },
82
- "publishConfig": {
83
- "access": "public"
84
- }
85
- }
1
+ {
2
+ "name": "nexus-shared",
3
+ "version": "4.0.0",
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
+ "keywords": [
6
+ "react",
7
+ "nextjs",
8
+ "components",
9
+ "ui",
10
+ "forms",
11
+ "datatable",
12
+ "crud",
13
+ "inputs",
14
+ "design-system",
15
+ "typescript",
16
+ "nepali-calendar",
17
+ "nexus"
18
+ ],
19
+ "license": "MIT",
20
+ "author": "Bijay Adhikari",
21
+ "type": "module",
22
+ "sideEffects": [
23
+ "*.css"
24
+ ],
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/Shared.Index.d.ts",
28
+ "default": "./dist/Shared.Index.js"
29
+ },
30
+ "./client": {
31
+ "types": "./dist/Client.Index.d.ts",
32
+ "default": "./dist/Client.Index.js"
33
+ },
34
+ "./server": {
35
+ "types": "./dist/Server.Index.d.ts",
36
+ "default": "./dist/Server.Index.js"
37
+ },
38
+ "./styles.css": "./src/Styles/Nexus.Index.css",
39
+ "./package.json": "./package.json"
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "src/Styles",
44
+ "CHANGELOG.md"
45
+ ],
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.build.json && tsc -p tsconfig.build.module-import.json",
48
+ "typecheck": "tsc -p tsconfig.json",
49
+ "test": "node scripts/test-all.mjs",
50
+ "check:themes": "node scripts/check-themes.mjs",
51
+ "test:api": "node scripts/test-api.mts",
52
+ "test:proxy": "node scripts/test-api-proxy.mts",
53
+ "test:chat": "node scripts/test-chat.mts",
54
+ "test:crud-tabs": "node scripts/test-crud-details-tabs.mts",
55
+ "test:crud-profile": "node scripts/test-crud-profile-fields.mts",
56
+ "test:codes": "node scripts/test-code-helpers.mts",
57
+ "test:dates": "node scripts/test-date-helpers.mts",
58
+ "test:datetimes": "node scripts/test-datetime-helpers.mts",
59
+ "test:drag": "node scripts/test-drag-helpers.mts",
60
+ "test:excel": "node scripts/test-excel.mts",
61
+ "test:files": "node scripts/test-files.mts",
62
+ "test:dropdown": "node scripts/test-dropdown-helpers.mts",
63
+ "test:forms": "node scripts/test-form-store.mts",
64
+ "test:form-confirm": "node scripts/test-form-confirm.mts",
65
+ "test:markdown": "node scripts/test-markdown.mts",
66
+ "test:numbers": "node scripts/test-number-helpers.mts",
67
+ "test:popups": "node scripts/test-popup-rules.mts",
68
+ "test:qr": "node scripts/test-qr-code.mts",
69
+ "test:richtext": "node scripts/test-richtext.mts",
70
+ "test:rows": "node scripts/test-rows-store.mts",
71
+ "test:table": "node scripts/test-table.mts",
72
+ "test:times": "node scripts/test-time-helpers.mts",
73
+ "test:tree": "node scripts/test-tree-store.mts",
74
+ "test:types": "tsc -p scripts/type-checks/tsconfig.json"
75
+ },
76
+ "dependencies": {
77
+ "nexus-icons": "^1.2.0"
78
+ },
79
+ "peerDependencies": {
80
+ "react": ">=19",
81
+ "react-dom": ">=19"
82
+ },
83
+ "devDependencies": {
84
+ "@types/react": "19.3.0"
85
+ },
86
+ "engines": {
87
+ "node": ">=20.9"
88
+ },
89
+ "publishConfig": {
90
+ "access": "public"
91
+ }
92
+ }
@@ -1,79 +1,80 @@
1
- /*
2
- * A person's avatar, wherever one is drawn: the chat, a dropdown's avatar column, the admin bar.
3
- */
4
- @layer nexus.components {
5
- .nx-avatar {
6
- position: relative;
7
- display: inline-grid;
8
- flex-shrink: 0;
9
- place-items: center;
10
- width: var(--nx-avatar-size, 28px);
11
- height: var(--nx-avatar-size, 28px);
12
- padding: 0;
13
- overflow: hidden;
14
- border: 0;
15
- border-radius: 50%;
16
- background: color-mix(in oklab, var(--nx-text) 10%, var(--nx-surface));
17
- color: var(--nx-text);
18
- font: inherit;
19
- font-size: max(8px, calc(var(--nx-avatar-size, 28px) * 0.4));
20
- font-weight: 600;
21
- line-height: 1;
22
- }
23
-
24
- .nx-avatar--sm {
25
- --nx-avatar-size: 22px;
26
- }
27
-
28
- .nx-avatar--lg {
29
- --nx-avatar-size: 44px;
30
- }
31
-
32
- .nx-avatar[data-tone="primary"] {
33
- background: var(--nx-primary-soft);
34
- }
35
-
36
- .nx-avatar[data-tone="info"] {
37
- background: var(--nx-info-soft);
38
- }
39
-
40
- .nx-avatar[data-tone="success"] {
41
- background: var(--nx-success-soft);
42
- }
43
-
44
- .nx-avatar[data-tone="warning"] {
45
- background: var(--nx-warning-soft);
46
- }
47
-
48
- .nx-avatar img {
49
- position: absolute;
50
- inset: 0;
51
- width: 100%;
52
- height: 100%;
53
- object-fit: cover;
54
- }
55
-
56
- /* A picture that can be changed: hovering or focusing it lays a camera over it. Opacity alone, no animation. */
57
- button.nx-avatar {
58
- cursor: pointer;
59
- }
60
-
61
- button.nx-avatar:focus-visible {
62
- outline: none;
63
- box-shadow: var(--nx-focus-ring);
64
- }
65
-
66
- .nx-avatar__veil {
67
- position: absolute;
68
- inset: 0;
69
- display: grid;
70
- place-items: center;
71
- background: rgb(16 24 40 / 0.55);
72
- color: #fff;
73
- opacity: 0;
74
- }
75
-
76
- button.nx-avatar:is(:hover, :focus-visible) .nx-avatar__veil {
77
- opacity: 1;
78
- }
79
- }
1
+ /*
2
+ * A person's avatar, wherever one is drawn: the chat, a dropdown's avatar column, the admin bar. Its tones also back an
3
+ * owner's initials in a picture with none (`.nx-picture--initials`, Nexus.Files.css), so a name has one tone everywhere.
4
+ */
5
+ @layer nexus.components {
6
+ .nx-avatar {
7
+ position: relative;
8
+ display: inline-grid;
9
+ flex-shrink: 0;
10
+ place-items: center;
11
+ width: var(--nx-avatar-size, 28px);
12
+ height: var(--nx-avatar-size, 28px);
13
+ padding: 0;
14
+ overflow: hidden;
15
+ border: 0;
16
+ border-radius: 50%;
17
+ background: color-mix(in oklab, var(--nx-text) 10%, var(--nx-surface));
18
+ color: var(--nx-text);
19
+ font: inherit;
20
+ font-size: max(8px, calc(var(--nx-avatar-size, 28px) * 0.4));
21
+ font-weight: 600;
22
+ line-height: 1;
23
+ }
24
+
25
+ .nx-avatar--sm {
26
+ --nx-avatar-size: 22px;
27
+ }
28
+
29
+ .nx-avatar--lg {
30
+ --nx-avatar-size: 44px;
31
+ }
32
+
33
+ :is(.nx-avatar, .nx-picture)[data-tone="primary"] {
34
+ background: var(--nx-primary-soft);
35
+ }
36
+
37
+ :is(.nx-avatar, .nx-picture)[data-tone="info"] {
38
+ background: var(--nx-info-soft);
39
+ }
40
+
41
+ :is(.nx-avatar, .nx-picture)[data-tone="success"] {
42
+ background: var(--nx-success-soft);
43
+ }
44
+
45
+ :is(.nx-avatar, .nx-picture)[data-tone="warning"] {
46
+ background: var(--nx-warning-soft);
47
+ }
48
+
49
+ .nx-avatar img {
50
+ position: absolute;
51
+ inset: 0;
52
+ width: 100%;
53
+ height: 100%;
54
+ object-fit: cover;
55
+ }
56
+
57
+ /* A picture that can be changed: hovering or focusing it lays a camera over it. Opacity alone, no animation. */
58
+ button.nx-avatar {
59
+ cursor: pointer;
60
+ }
61
+
62
+ button.nx-avatar:focus-visible {
63
+ outline: none;
64
+ box-shadow: var(--nx-focus-ring);
65
+ }
66
+
67
+ .nx-avatar__veil {
68
+ position: absolute;
69
+ inset: 0;
70
+ display: grid;
71
+ place-items: center;
72
+ background: rgb(16 24 40 / 0.55);
73
+ color: #fff;
74
+ opacity: 0;
75
+ }
76
+
77
+ button.nx-avatar:is(:hover, :focus-visible) .nx-avatar__veil {
78
+ opacity: 1;
79
+ }
80
+ }
@@ -1,117 +1,117 @@
1
- /* Page defaults and small shared utilities. */
2
- @layer nexus.base {
3
- *,
4
- *::before,
5
- *::after {
6
- box-sizing: border-box;
7
- }
8
-
9
- body {
10
- margin: 0;
11
- background: var(--nx-bg);
12
- color: var(--nx-text);
13
- font: var(--nx-text-md) / var(--nx-leading) var(--nx-font);
14
- -webkit-font-smoothing: antialiased;
15
- text-rendering: optimizeLegibility;
16
- }
17
-
18
- button,
19
- input,
20
- select,
21
- textarea {
22
- font: inherit;
23
- color: inherit;
24
- }
25
-
26
- /* Nepali text takes a font that has Devanagari glyphs, digits included. */
27
- :lang(ne) {
28
- font-family: var(--nx-font-devanagari);
29
- }
30
-
31
- :focus-visible {
32
- outline: 2px solid var(--nx-primary);
33
- outline-offset: 2px;
34
- }
35
-
36
- /*
37
- * One scroll bar for every scroller, the design lab's: thin and quiet, a thumb of the text colour at 22% on no
38
- * track. On Windows, Chrome and Edge draw it 10px wide with small arrows and darken the thumb under the pointer
39
- * themselves, and Firefox's thin bar is 8px; Safari, which has no `scrollbar-color` yet, draws its own thin bar.
40
- * `scrollbar-width` is not inherited, so it is set on every element, and a gutter kept with `scrollbar-gutter` is as
41
- * wide as the bar it waits for. There is no `::-webkit-scrollbar` here because Chrome, Edge and Safari ignore it on an
42
- * element that sets `scrollbar-width`. A component that needs another look sets the two properties on its own
43
- * scroller. With forced colours the browser puts the system's colours back.
44
- */
45
- * {
46
- scrollbar-width: thin;
47
- scrollbar-color: color-mix(in oklab, var(--nx-text) 22%, transparent) transparent;
48
- }
49
-
50
- /* Hidden on screen but still read by screen readers and reachable with the keyboard. */
51
- .nx-visually-hidden {
52
- position: absolute;
53
- width: 1px;
54
- height: 1px;
55
- margin: -1px;
56
- padding: 0;
57
- overflow: hidden;
58
- clip-path: inset(50%);
59
- white-space: nowrap;
60
- border: 0;
61
- }
62
-
63
- /* Icons sit on the text baseline and never shrink inside flex rows. */
64
- .nx-icon {
65
- flex-shrink: 0;
66
- vertical-align: -0.125em;
67
- }
68
-
69
- .nx-spin {
70
- animation: nx-spin 0.8s linear infinite;
71
- }
72
-
73
- @keyframes nx-spin {
74
- to {
75
- transform: rotate(360deg);
76
- }
77
- }
78
-
79
- /* A spinner says something is still happening, so with animations off it turns slowly rather than stopping. */
80
- [data-nx-motion="reduce"] .nx-spin {
81
- animation-duration: 2.4s;
82
- }
83
-
84
- /*
85
- * The scale grid, a development tool from the theme panel: a ruled sheet over the whole window, so an edge one pixel
86
- * out is seen rather than argued about. `px` rules every 4px with a solid line every 48px; `cm` rules millimetres
87
- * with the centimetre solid. Lines start on the window's edge, so every reading counts from there. It takes no
88
- * clicks and moves nothing; popups and menus sit in the top layer, above it. ThemeScript sets it in a development
89
- * build only. The lines mix the text colour, so they read on all seven themes in both modes.
90
- */
91
- [data-nx-grid] body::after {
92
- --nx-grid-minor: color-mix(in oklab, var(--nx-text) 14%, transparent);
93
- --nx-grid-major: color-mix(in oklab, var(--nx-text) 34%, transparent);
94
-
95
- position: fixed;
96
- inset: 0;
97
- z-index: 2147483000;
98
- pointer-events: none;
99
- content: "";
100
- }
101
-
102
- [data-nx-grid="px"] body::after {
103
- background-image:
104
- repeating-linear-gradient(to right, var(--nx-grid-major) 0 1px, transparent 1px 48px),
105
- repeating-linear-gradient(to bottom, var(--nx-grid-major) 0 1px, transparent 1px 48px),
106
- repeating-linear-gradient(to right, var(--nx-grid-minor) 0 1px, transparent 1px 4px),
107
- repeating-linear-gradient(to bottom, var(--nx-grid-minor) 0 1px, transparent 1px 4px);
108
- }
109
-
110
- [data-nx-grid="cm"] body::after {
111
- background-image:
112
- repeating-linear-gradient(to right, var(--nx-grid-major) 0 1px, transparent 1px 1cm),
113
- repeating-linear-gradient(to bottom, var(--nx-grid-major) 0 1px, transparent 1px 1cm),
114
- repeating-linear-gradient(to right, var(--nx-grid-minor) 0 1px, transparent 1px 1mm),
115
- repeating-linear-gradient(to bottom, var(--nx-grid-minor) 0 1px, transparent 1px 1mm);
116
- }
117
- }
1
+ /* Page defaults and small shared utilities. */
2
+ @layer nexus.base {
3
+ *,
4
+ *::before,
5
+ *::after {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ body {
10
+ margin: 0;
11
+ background: var(--nx-bg);
12
+ color: var(--nx-text);
13
+ font: var(--nx-text-md) / var(--nx-leading) var(--nx-font);
14
+ -webkit-font-smoothing: antialiased;
15
+ text-rendering: optimizeLegibility;
16
+ }
17
+
18
+ button,
19
+ input,
20
+ select,
21
+ textarea {
22
+ font: inherit;
23
+ color: inherit;
24
+ }
25
+
26
+ /* Nepali text takes a font that has Devanagari glyphs, digits included. */
27
+ :lang(ne) {
28
+ font-family: var(--nx-font-devanagari);
29
+ }
30
+
31
+ :focus-visible {
32
+ outline: 2px solid var(--nx-primary);
33
+ outline-offset: 2px;
34
+ }
35
+
36
+ /*
37
+ * One scroll bar for every scroller, the design lab's: thin and quiet, a thumb of the text colour at 22% on no
38
+ * track. On Windows, Chrome and Edge draw it 10px wide with small arrows and darken the thumb under the pointer
39
+ * themselves, and Firefox's thin bar is 8px; Safari, which has no `scrollbar-color` yet, draws its own thin bar.
40
+ * `scrollbar-width` is not inherited, so it is set on every element, and a gutter kept with `scrollbar-gutter` is as
41
+ * wide as the bar it waits for. There is no `::-webkit-scrollbar` here because Chrome, Edge and Safari ignore it on an
42
+ * element that sets `scrollbar-width`. A component that needs another look sets the two properties on its own
43
+ * scroller. With forced colours the browser puts the system's colours back.
44
+ */
45
+ * {
46
+ scrollbar-width: thin;
47
+ scrollbar-color: color-mix(in oklab, var(--nx-text) 22%, transparent) transparent;
48
+ }
49
+
50
+ /* Hidden on screen but still read by screen readers and reachable with the keyboard. */
51
+ .nx-visually-hidden {
52
+ position: absolute;
53
+ width: 1px;
54
+ height: 1px;
55
+ margin: -1px;
56
+ padding: 0;
57
+ overflow: hidden;
58
+ clip-path: inset(50%);
59
+ white-space: nowrap;
60
+ border: 0;
61
+ }
62
+
63
+ /* Icons sit on the text baseline and never shrink inside flex rows. */
64
+ .nx-icon {
65
+ flex-shrink: 0;
66
+ vertical-align: -0.125em;
67
+ }
68
+
69
+ .nx-spin {
70
+ animation: nx-spin 0.8s linear infinite;
71
+ }
72
+
73
+ @keyframes nx-spin {
74
+ to {
75
+ transform: rotate(360deg);
76
+ }
77
+ }
78
+
79
+ /* A spinner says something is still happening, so with animations off it turns slowly rather than stopping. */
80
+ [data-nx-motion="reduce"] .nx-spin {
81
+ animation-duration: 2.4s;
82
+ }
83
+
84
+ /*
85
+ * The scale grid, a development tool from the theme panel: a ruled sheet over the whole window, so an edge one pixel
86
+ * out is seen rather than argued about. `px` rules every 4px with a solid line every 48px; `cm` rules millimetres
87
+ * with the centimetre solid. Lines start on the window's edge, so every reading counts from there. It takes no
88
+ * clicks and moves nothing; popups and menus sit in the top layer, above it. ThemeScript sets it in a development
89
+ * build only. The lines mix the text colour, so they read on all seven themes in both modes.
90
+ */
91
+ [data-nx-grid] body::after {
92
+ --nx-grid-minor: color-mix(in oklab, var(--nx-text) 14%, transparent);
93
+ --nx-grid-major: color-mix(in oklab, var(--nx-text) 34%, transparent);
94
+
95
+ position: fixed;
96
+ inset: 0;
97
+ z-index: 2147483000;
98
+ pointer-events: none;
99
+ content: "";
100
+ }
101
+
102
+ [data-nx-grid="px"] body::after {
103
+ background-image:
104
+ repeating-linear-gradient(to right, var(--nx-grid-major) 0 1px, transparent 1px 48px),
105
+ repeating-linear-gradient(to bottom, var(--nx-grid-major) 0 1px, transparent 1px 48px),
106
+ repeating-linear-gradient(to right, var(--nx-grid-minor) 0 1px, transparent 1px 4px),
107
+ repeating-linear-gradient(to bottom, var(--nx-grid-minor) 0 1px, transparent 1px 4px);
108
+ }
109
+
110
+ [data-nx-grid="cm"] body::after {
111
+ background-image:
112
+ repeating-linear-gradient(to right, var(--nx-grid-major) 0 1px, transparent 1px 1cm),
113
+ repeating-linear-gradient(to bottom, var(--nx-grid-major) 0 1px, transparent 1px 1cm),
114
+ repeating-linear-gradient(to right, var(--nx-grid-minor) 0 1px, transparent 1px 1mm),
115
+ repeating-linear-gradient(to bottom, var(--nx-grid-minor) 0 1px, transparent 1px 1mm);
116
+ }
117
+ }