nexus-shared 1.1.21 → 3.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 (376) hide show
  1. package/CHANGELOG.md +262 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1000 -0
  4. package/dist/Client.Index.d.ts +55 -0
  5. package/dist/Client.Index.js +60 -0
  6. package/dist/Components/Chats/Chat.d.ts +28 -0
  7. package/dist/Components/Chats/Chat.js +19 -0
  8. package/dist/Components/Chats/ChatButton.d.ts +26 -0
  9. package/dist/Components/Chats/ChatButton.js +41 -0
  10. package/dist/Components/Chats/ChatComposer.d.ts +41 -0
  11. package/dist/Components/Chats/ChatComposer.js +177 -0
  12. package/dist/Components/Chats/ChatConversations.d.ts +35 -0
  13. package/dist/Components/Chats/ChatConversations.js +38 -0
  14. package/dist/Components/Chats/ChatPanel.d.ts +66 -0
  15. package/dist/Components/Chats/ChatPanel.js +94 -0
  16. package/dist/Components/Chats/ChatParts.d.ts +87 -0
  17. package/dist/Components/Chats/ChatParts.js +100 -0
  18. package/dist/Components/Chats/ChatThread.d.ts +22 -0
  19. package/dist/Components/Chats/ChatThread.js +96 -0
  20. package/dist/Components/Documents/Button.d.ts +29 -0
  21. package/dist/Components/Documents/Button.js +11 -0
  22. package/dist/Components/Documents/Menu.d.ts +102 -0
  23. package/dist/Components/Documents/Menu.js +242 -0
  24. package/dist/Components/Documents/SplitButton.d.ts +64 -0
  25. package/dist/Components/Documents/SplitButton.js +129 -0
  26. package/dist/Components/Documents/TabButtons.d.ts +80 -0
  27. package/dist/Components/Documents/TabButtons.js +38 -0
  28. package/dist/Components/Forms/ApiForm.d.ts +23 -0
  29. package/dist/Components/Forms/ApiForm.js +100 -0
  30. package/dist/Components/Forms/Crud.d.ts +17 -0
  31. package/dist/Components/Forms/Crud.js +708 -0
  32. package/dist/Components/Forms/CrudParts.d.ts +15 -0
  33. package/dist/Components/Forms/CrudParts.js +36 -0
  34. package/dist/Components/Forms/ExcelImport.d.ts +42 -0
  35. package/dist/Components/Forms/ExcelImport.js +190 -0
  36. package/dist/Components/Forms/Form.d.ts +52 -0
  37. package/dist/Components/Forms/Form.js +323 -0
  38. package/dist/Components/Forms/SubmitForm.d.ts +65 -0
  39. package/dist/Components/Forms/SubmitForm.js +198 -0
  40. package/dist/Components/Inputs/Calendar.d.ts +69 -0
  41. package/dist/Components/Inputs/Calendar.js +258 -0
  42. package/dist/Components/Inputs/CheckBox.d.ts +53 -0
  43. package/dist/Components/Inputs/CheckBox.js +87 -0
  44. package/dist/Components/Inputs/CheckBoxGroup.d.ts +20 -0
  45. package/dist/Components/Inputs/CheckBoxGroup.js +80 -0
  46. package/dist/Components/Inputs/ChoiceField.d.ts +122 -0
  47. package/dist/Components/Inputs/ChoiceField.js +169 -0
  48. package/dist/Components/Inputs/DatePicker.d.ts +54 -0
  49. package/dist/Components/Inputs/DatePicker.js +246 -0
  50. package/dist/Components/Inputs/DateRangePicker.d.ts +62 -0
  51. package/dist/Components/Inputs/DateRangePicker.js +283 -0
  52. package/dist/Components/Inputs/DateTimePicker.d.ts +75 -0
  53. package/dist/Components/Inputs/DateTimePicker.js +400 -0
  54. package/dist/Components/Inputs/Dropdown.d.ts +117 -0
  55. package/dist/Components/Inputs/Dropdown.js +839 -0
  56. package/dist/Components/Inputs/DropdownParts.d.ts +84 -0
  57. package/dist/Components/Inputs/DropdownParts.js +102 -0
  58. package/dist/Components/Inputs/EditorShell.d.ts +45 -0
  59. package/dist/Components/Inputs/EditorShell.js +214 -0
  60. package/dist/Components/Inputs/Field.d.ts +53 -0
  61. package/dist/Components/Inputs/Field.js +16 -0
  62. package/dist/Components/Inputs/GroupForm.d.ts +20 -0
  63. package/dist/Components/Inputs/GroupForm.js +172 -0
  64. package/dist/Components/Inputs/InputField.d.ts +59 -0
  65. package/dist/Components/Inputs/InputField.js +169 -0
  66. package/dist/Components/Inputs/InputRenderer.d.ts +37 -0
  67. package/dist/Components/Inputs/InputRenderer.js +99 -0
  68. package/dist/Components/Inputs/MarkdownEditor.d.ts +67 -0
  69. package/dist/Components/Inputs/MarkdownEditor.js +289 -0
  70. package/dist/Components/Inputs/NumberBox.d.ts +53 -0
  71. package/dist/Components/Inputs/NumberBox.js +228 -0
  72. package/dist/Components/Inputs/RadioGroup.d.ts +20 -0
  73. package/dist/Components/Inputs/RadioGroup.js +43 -0
  74. package/dist/Components/Inputs/ReadOnlyNotice.d.ts +36 -0
  75. package/dist/Components/Inputs/ReadOnlyNotice.js +117 -0
  76. package/dist/Components/Inputs/RichTextEditor.d.ts +103 -0
  77. package/dist/Components/Inputs/RichTextEditor.js +1170 -0
  78. package/dist/Components/Inputs/RichTextParts.d.ts +63 -0
  79. package/dist/Components/Inputs/RichTextParts.js +157 -0
  80. package/dist/Components/Inputs/RowsInput.d.ts +115 -0
  81. package/dist/Components/Inputs/RowsInput.js +308 -0
  82. package/dist/Components/Inputs/Slider.d.ts +87 -0
  83. package/dist/Components/Inputs/Slider.js +216 -0
  84. package/dist/Components/Inputs/TabularForm.d.ts +27 -0
  85. package/dist/Components/Inputs/TabularForm.js +348 -0
  86. package/dist/Components/Inputs/TextArea.d.ts +43 -0
  87. package/dist/Components/Inputs/TextArea.js +31 -0
  88. package/dist/Components/Inputs/TextBox.d.ts +52 -0
  89. package/dist/Components/Inputs/TextBox.js +58 -0
  90. package/dist/Components/Inputs/TextField.d.ts +31 -0
  91. package/dist/Components/Inputs/TextField.js +35 -0
  92. package/dist/Components/Inputs/TimePanel.d.ts +34 -0
  93. package/dist/Components/Inputs/TimePanel.js +288 -0
  94. package/dist/Components/Inputs/TimePicker.d.ts +54 -0
  95. package/dist/Components/Inputs/TimePicker.js +240 -0
  96. package/dist/Components/Inputs/TreeView.d.ts +160 -0
  97. package/dist/Components/Inputs/TreeView.js +947 -0
  98. package/dist/Components/Layouts/MessageBox.d.ts +71 -0
  99. package/dist/Components/Layouts/MessageBox.js +104 -0
  100. package/dist/Components/Layouts/Popup.d.ts +92 -0
  101. package/dist/Components/Layouts/Popup.js +376 -0
  102. package/dist/Components/Layouts/PopupContext.d.ts +2 -0
  103. package/dist/Components/Layouts/PopupContext.js +4 -0
  104. package/dist/Components/Layouts/PopupDock.d.ts +22 -0
  105. package/dist/Components/Layouts/PopupDock.js +121 -0
  106. package/dist/Components/Layouts/PopupHost.d.ts +56 -0
  107. package/dist/Components/Layouts/PopupHost.js +163 -0
  108. package/dist/Components/Layouts/PopupRules.d.ts +30 -0
  109. package/dist/Components/Layouts/PopupRules.js +63 -0
  110. package/dist/Components/Layouts/ThemePicker.d.ts +13 -0
  111. package/dist/Components/Layouts/ThemePicker.js +22 -0
  112. package/dist/Components/Layouts/ThemeScript.d.ts +14 -0
  113. package/dist/Components/Layouts/ThemeScript.js +13 -0
  114. package/dist/Components/Layouts/ThemeSwitcher.d.ts +13 -0
  115. package/dist/Components/Layouts/ThemeSwitcher.js +49 -0
  116. package/dist/Components/Layouts/Toaster.d.ts +76 -0
  117. package/dist/Components/Layouts/Toaster.js +172 -0
  118. package/dist/Components/Viewers/DataTable.d.ts +25 -0
  119. package/dist/Components/Viewers/DataTable.js +596 -0
  120. package/dist/Components/Viewers/DataTableColumns.d.ts +28 -0
  121. package/dist/Components/Viewers/DataTableColumns.js +243 -0
  122. package/dist/Components/Viewers/DataTableParts.d.ts +138 -0
  123. package/dist/Components/Viewers/DataTableParts.js +157 -0
  124. package/dist/Components/Viewers/MarkdownView.d.ts +26 -0
  125. package/dist/Components/Viewers/MarkdownView.js +79 -0
  126. package/dist/Components/Viewers/RichTextView.d.ts +18 -0
  127. package/dist/Components/Viewers/RichTextView.js +17 -0
  128. package/dist/Helpers/AnimationHelpers.d.ts +6 -0
  129. package/dist/Helpers/AnimationHelpers.js +35 -0
  130. package/dist/Helpers/ApiClient.d.ts +96 -0
  131. package/dist/Helpers/ApiClient.js +200 -0
  132. package/dist/Helpers/ApiFormHelpers.d.ts +49 -0
  133. package/dist/Helpers/ApiFormHelpers.js +120 -0
  134. package/dist/Helpers/ApiModules.d.ts +131 -0
  135. package/dist/Helpers/ApiModules.js +195 -0
  136. package/dist/Helpers/ApiResponses.d.ts +51 -0
  137. package/dist/Helpers/ApiResponses.js +250 -0
  138. package/dist/Helpers/ApiRoutes.d.ts +140 -0
  139. package/dist/Helpers/ApiRoutes.js +183 -0
  140. package/dist/Helpers/ApiToasts.d.ts +21 -0
  141. package/dist/Helpers/ApiToasts.js +22 -0
  142. package/dist/Helpers/ChatBackend.d.ts +134 -0
  143. package/dist/Helpers/ChatBackend.js +332 -0
  144. package/dist/Helpers/ChatHelpers.d.ts +189 -0
  145. package/dist/Helpers/ChatHelpers.js +486 -0
  146. package/dist/Helpers/ChatHooks.d.ts +81 -0
  147. package/dist/Helpers/ChatHooks.js +175 -0
  148. package/dist/Helpers/ChatStore.d.ts +132 -0
  149. package/dist/Helpers/ChatStore.js +394 -0
  150. package/dist/Helpers/ChatSummaries.d.ts +39 -0
  151. package/dist/Helpers/ChatSummaries.js +118 -0
  152. package/dist/Helpers/ClassHelpers.d.ts +3 -0
  153. package/dist/Helpers/ClassHelpers.js +4 -0
  154. package/dist/Helpers/CrudBackend.d.ts +98 -0
  155. package/dist/Helpers/CrudBackend.js +214 -0
  156. package/dist/Helpers/CrudHelpers.d.ts +111 -0
  157. package/dist/Helpers/CrudHelpers.js +267 -0
  158. package/dist/Helpers/DateHelpers.d.ts +88 -0
  159. package/dist/Helpers/DateHelpers.js +363 -0
  160. package/dist/Helpers/DatePreferences.d.ts +14 -0
  161. package/dist/Helpers/DatePreferences.js +94 -0
  162. package/dist/Helpers/DateTimeHelpers.d.ts +87 -0
  163. package/dist/Helpers/DateTimeHelpers.js +286 -0
  164. package/dist/Helpers/DragHelpers.d.ts +129 -0
  165. package/dist/Helpers/DragHelpers.js +281 -0
  166. package/dist/Helpers/DropdownHelpers.d.ts +56 -0
  167. package/dist/Helpers/DropdownHelpers.js +180 -0
  168. package/dist/Helpers/ExcelBackend.d.ts +106 -0
  169. package/dist/Helpers/ExcelBackend.js +290 -0
  170. package/dist/Helpers/ExcelHelpers.d.ts +98 -0
  171. package/dist/Helpers/ExcelHelpers.js +302 -0
  172. package/dist/Helpers/FormDrafts.d.ts +18 -0
  173. package/dist/Helpers/FormDrafts.js +76 -0
  174. package/dist/Helpers/FormStore.d.ts +233 -0
  175. package/dist/Helpers/FormStore.js +752 -0
  176. package/dist/Helpers/InputParamsHelpers.d.ts +79 -0
  177. package/dist/Helpers/InputParamsHelpers.js +388 -0
  178. package/dist/Helpers/MarkdownEditing.d.ts +27 -0
  179. package/dist/Helpers/MarkdownEditing.js +250 -0
  180. package/dist/Helpers/MarkdownHelpers.d.ts +82 -0
  181. package/dist/Helpers/MarkdownHelpers.js +775 -0
  182. package/dist/Helpers/MessageBuilder.d.ts +74 -0
  183. package/dist/Helpers/MessageBuilder.js +252 -0
  184. package/dist/Helpers/NepaliCalendar.d.ts +25 -0
  185. package/dist/Helpers/NepaliCalendar.js +107 -0
  186. package/dist/Helpers/NumberHelpers.d.ts +71 -0
  187. package/dist/Helpers/NumberHelpers.js +202 -0
  188. package/dist/Helpers/Permissions.d.ts +62 -0
  189. package/dist/Helpers/Permissions.js +133 -0
  190. package/dist/Helpers/PopoverHelpers.d.ts +68 -0
  191. package/dist/Helpers/PopoverHelpers.js +195 -0
  192. package/dist/Helpers/RichTextHelpers.d.ts +77 -0
  193. package/dist/Helpers/RichTextHelpers.js +1072 -0
  194. package/dist/Helpers/RowsStore.d.ts +166 -0
  195. package/dist/Helpers/RowsStore.js +606 -0
  196. package/dist/Helpers/TableColumns.d.ts +47 -0
  197. package/dist/Helpers/TableColumns.js +282 -0
  198. package/dist/Helpers/TableExport.d.ts +30 -0
  199. package/dist/Helpers/TableExport.js +97 -0
  200. package/dist/Helpers/TableHelpers.d.ts +110 -0
  201. package/dist/Helpers/TableHelpers.js +301 -0
  202. package/dist/Helpers/TableStore.d.ts +142 -0
  203. package/dist/Helpers/TableStore.js +530 -0
  204. package/dist/Helpers/ThemeHelpers.d.ts +15 -0
  205. package/dist/Helpers/ThemeHelpers.js +16 -0
  206. package/dist/Helpers/TimeHelpers.d.ts +73 -0
  207. package/dist/Helpers/TimeHelpers.js +253 -0
  208. package/dist/Helpers/TreeStore.d.ts +188 -0
  209. package/dist/Helpers/TreeStore.js +577 -0
  210. package/dist/Helpers/ValidationHelpers.d.ts +124 -0
  211. package/dist/Helpers/ValidationHelpers.js +301 -0
  212. package/dist/Interfaces/ApiInterfaces.d.ts +174 -0
  213. package/dist/Interfaces/ApiInterfaces.js +30 -0
  214. package/dist/Interfaces/ChatInterfaces.d.ts +240 -0
  215. package/{src/sso-client.tsx → dist/Interfaces/ChatInterfaces.js} +1 -1
  216. package/dist/Interfaces/CrudInterfaces.d.ts +232 -0
  217. package/dist/Interfaces/CrudInterfaces.js +1 -0
  218. package/dist/Interfaces/DateInterfaces.d.ts +154 -0
  219. package/dist/Interfaces/DateInterfaces.js +29 -0
  220. package/dist/Interfaces/ExcelInterfaces.d.ts +215 -0
  221. package/dist/Interfaces/ExcelInterfaces.js +45 -0
  222. package/dist/Interfaces/FormInterfaces.d.ts +402 -0
  223. package/dist/Interfaces/FormInterfaces.js +1 -0
  224. package/dist/Interfaces/InputInterfaces.d.ts +141 -0
  225. package/dist/Interfaces/InputInterfaces.js +1 -0
  226. package/dist/Interfaces/MessageInterfaces.d.ts +111 -0
  227. package/dist/Interfaces/MessageInterfaces.js +5 -0
  228. package/dist/Interfaces/TableInterfaces.d.ts +351 -0
  229. package/dist/Interfaces/TableInterfaces.js +1 -0
  230. package/dist/Interfaces/ThemeInterfaces.d.ts +17 -0
  231. package/dist/Interfaces/ThemeInterfaces.js +17 -0
  232. package/dist/Interfaces/TypeInterfaces.d.ts +4 -0
  233. package/dist/Interfaces/TypeInterfaces.js +1 -0
  234. package/dist/Server.Index.d.ts +2 -0
  235. package/dist/Server.Index.js +5 -0
  236. package/dist/Services/ApiProxy.d.ts +32 -0
  237. package/dist/Services/ApiProxy.js +111 -0
  238. package/dist/Services/BrowserApi.d.ts +95 -0
  239. package/dist/Services/BrowserApi.js +129 -0
  240. package/dist/Services/ChatApi.d.ts +37 -0
  241. package/dist/Services/ChatApi.js +98 -0
  242. package/dist/Services/ExcelApi.d.ts +46 -0
  243. package/dist/Services/ExcelApi.js +196 -0
  244. package/dist/Services/ServerApi.d.ts +54 -0
  245. package/dist/Services/ServerApi.js +78 -0
  246. package/dist/Services/ThemeService.d.ts +17 -0
  247. package/dist/Services/ThemeService.js +83 -0
  248. package/dist/Shared.Index.d.ts +51 -0
  249. package/dist/Shared.Index.js +55 -0
  250. package/package.json +85 -33
  251. package/src/Styles/Nexus.Base.css +70 -0
  252. package/src/Styles/Nexus.Button.css +153 -0
  253. package/src/Styles/Nexus.Calendar.css +275 -0
  254. package/src/Styles/Nexus.Chat.css +1489 -0
  255. package/src/Styles/Nexus.Choice.css +345 -0
  256. package/src/Styles/Nexus.Crud.css +161 -0
  257. package/src/Styles/Nexus.DateTime.css +81 -0
  258. package/src/Styles/Nexus.Dropdown.css +774 -0
  259. package/src/Styles/Nexus.Editor.css +297 -0
  260. package/src/Styles/Nexus.Excel.css +370 -0
  261. package/src/Styles/Nexus.Form.css +321 -0
  262. package/src/Styles/Nexus.Index.css +36 -0
  263. package/src/Styles/Nexus.Input.css +637 -0
  264. package/src/Styles/Nexus.Markdown.css +265 -0
  265. package/src/Styles/Nexus.Menu.css +259 -0
  266. package/src/Styles/Nexus.Popup.css +731 -0
  267. package/src/Styles/Nexus.RichText.css +463 -0
  268. package/src/Styles/Nexus.Rows.css +596 -0
  269. package/src/Styles/Nexus.Slider.css +278 -0
  270. package/src/Styles/Nexus.Tab.Buttons.css +419 -0
  271. package/src/Styles/Nexus.Table.css +1296 -0
  272. package/src/Styles/Nexus.Theme.Picker.css +232 -0
  273. package/src/Styles/Nexus.Themes.css +194 -0
  274. package/src/Styles/Nexus.Time.css +147 -0
  275. package/src/Styles/Nexus.Toast.css +265 -0
  276. package/src/Styles/Nexus.Tokens.css +72 -0
  277. package/src/Styles/Nexus.Tree.css +435 -0
  278. package/src/api-services/authentication-service.tsx +0 -23
  279. package/src/api-services/preference-service.tsx +0 -5
  280. package/src/api-services/system-service.tsx +0 -29
  281. package/src/client.ts +0 -31
  282. package/src/components/documents/button.tsx +0 -133
  283. package/src/components/documents/icon-box.tsx +0 -93
  284. package/src/components/documents/page-title.tsx +0 -7
  285. package/src/components/documents/tab-button.tsx +0 -172
  286. package/src/components/documents/tag.tsx +0 -30
  287. package/src/components/index.js +0 -0
  288. package/src/components/inputs/checkbox-input.tsx +0 -66
  289. package/src/components/inputs/input-box.tsx +0 -48
  290. package/src/components/inputs/input-element.tsx +0 -65
  291. package/src/components/inputs/input-form.tsx +0 -164
  292. package/src/components/inputs/input.tsx +0 -181
  293. package/src/components/inputs/number-input.tsx +0 -108
  294. package/src/components/inputs/radiobox-input.tsx +0 -53
  295. package/src/components/inputs/textarea-input.tsx +0 -47
  296. package/src/components/inputs/textbox-input.tsx +0 -45
  297. package/src/components/layouts/global-dialogbox.tsx +0 -431
  298. package/src/components/layouts/global-layout.tsx +0 -64
  299. package/src/components/layouts/layout-helpers.tsx +0 -20
  300. package/src/components/layouts/panels/user-panel.tsx +0 -112
  301. package/src/components/layouts/utility-menu.tsx +0 -49
  302. package/src/components/panels/theme-panel.tsx +0 -46
  303. package/src/helpers/bitwise-helpers.tsx +0 -11
  304. package/src/helpers/browser-helpers.tsx +0 -156
  305. package/src/helpers/datasource-helpers.tsx +0 -99
  306. package/src/helpers/element-helpers.tsx +0 -123
  307. package/src/helpers/input-helpers.tsx +0 -74
  308. package/src/helpers/string-helpers.tsx +0 -28
  309. package/src/helpers/utility-helpers.tsx +0 -45
  310. package/src/helpers/validation-helpers.tsx +0 -302
  311. package/src/index.ts +0 -26
  312. package/src/interface.ts +0 -19
  313. package/src/interfaces/auth-token-interfaces.tsx +0 -6
  314. package/src/interfaces/browser-interfaces.tsx +0 -36
  315. package/src/interfaces/button-interfaces.tsx +0 -63
  316. package/src/interfaces/datasource-interfaces.tsx +0 -22
  317. package/src/interfaces/datatable-interfaces.tsx +0 -25
  318. package/src/interfaces/dialogbox-interfaces.tsx +0 -5
  319. package/src/interfaces/exception-interfaces.tsx +0 -99
  320. package/src/interfaces/http-interfaces.tsx +0 -129
  321. package/src/interfaces/icon-interfaces.tsx +0 -129
  322. package/src/interfaces/input-interfaces.tsx +0 -410
  323. package/src/interfaces/layout-interfaces.tsx +0 -191
  324. package/src/interfaces/menu-interfaces.tsx +0 -53
  325. package/src/interfaces/message-interfaces.tsx +0 -32
  326. package/src/interfaces/permission-interfaces.tsx +0 -9
  327. package/src/interfaces/storage-interfaces.tsx +0 -5
  328. package/src/interfaces/system-interfaces.tsx +0 -22
  329. package/src/interfaces/theme-interfaces.tsx +0 -123
  330. package/src/interfaces/type-interfaces.tsx +0 -28
  331. package/src/interfaces/user-interfaces.tsx +0 -47
  332. package/src/nexus-client.tsx +0 -21
  333. package/src/nexus.environments.tsx +0 -66
  334. package/src/proxy-api/proxy-backend.tsx +0 -60
  335. package/src/proxy-api/proxy-constants.tsx +0 -28
  336. package/src/proxy-api/proxy-helpers.tsx +0 -91
  337. package/src/proxy-api-client.tsx +0 -1
  338. package/src/proxy-api-server.tsx +0 -2
  339. package/src/services/http-client-services.tsx +0 -75
  340. package/src/services/http-services.tsx +0 -158
  341. package/src/services/loader-service.tsx +0 -185
  342. package/src/services/localstorage-service.tsx +0 -119
  343. package/src/services/message-services.tsx +0 -383
  344. package/src/services/theme-service.tsx +0 -163
  345. package/src/services/user-services.tsx +0 -10
  346. package/src/sso-config/auth-token-validation.ts +0 -16
  347. package/src/sso-config/callback-route.tsx +0 -35
  348. package/src/sso-config/cookie-encryption.ts +0 -51
  349. package/src/sso-config/cookie-helpers.tsx +0 -102
  350. package/src/sso-config/forgot-password-route.tsx +0 -36
  351. package/src/sso-config/oauth-callback-state.ts +0 -61
  352. package/src/sso-config/pkce-helpers.ts +0 -9
  353. package/src/sso-config/provider-complete-route.tsx +0 -18
  354. package/src/sso-config/redirect-context-actions.tsx +0 -45
  355. package/src/sso-config/redirect-context-helpers.tsx +0 -159
  356. package/src/sso-config/redirect-context-persist.tsx +0 -18
  357. package/src/sso-config/redirect-context-route.tsx +0 -45
  358. package/src/sso-config/refresh-route.tsx +0 -23
  359. package/src/sso-config/sign-in-route.tsx +0 -74
  360. package/src/sso-config/sign-out-route.tsx +0 -57
  361. package/src/sso-config/sign-up-route.tsx +0 -57
  362. package/src/sso-config/sso-backend-flow.ts +0 -38
  363. package/src/sso-config/sso-complete-route.tsx +0 -50
  364. package/src/sso-config/sso-config.ts +0 -59
  365. package/src/sso-config/sso-interfaces.tsx +0 -99
  366. package/src/sso-config/sso-response-helpers.tsx +0 -20
  367. package/src/sso-server.tsx +0 -21
  368. package/src/styles/nexus.animation.css +0 -269
  369. package/src/styles/nexus.core.css +0 -119
  370. package/src/styles/nexus.dialog.css +0 -144
  371. package/src/styles/nexus.grid-view.css +0 -42
  372. package/src/styles/nexus.icon.css +0 -51
  373. package/src/styles/nexus.input.css +0 -207
  374. package/src/styles/nexus.loader.css +0 -11
  375. package/src/styles/nexus.logic.css +0 -47
  376. package/src/styles/nexus.utility.css +0 -347
@@ -0,0 +1,1489 @@
1
+ @layer nexus.components {
2
+ /*
3
+ * The chat: the trigger icon, the conversation, and the composer.
4
+ *
5
+ * The trigger has three looks and one size. Quiet is a subtle outline; a conversation with messages takes the accent
6
+ * on its soft tint; unread takes the solid accent with the count in a badge over the corner. The badge is laid over
7
+ * the box, never beside it, so a column of these in a table does not move as the counts arrive.
8
+ *
9
+ * Everything is drawn from the theme tokens, so all seven themes in light and dark follow without a line of their own.
10
+ */
11
+
12
+ /* The trigger */
13
+
14
+ .nx-chat-btn {
15
+ position: relative;
16
+ display: inline-grid;
17
+ flex-shrink: 0;
18
+ place-items: center;
19
+ width: var(--nx-control-md);
20
+ height: var(--nx-control-md);
21
+ padding: 0;
22
+ border: 1px solid transparent;
23
+ border-radius: var(--nx-radius);
24
+ background: none;
25
+ color: var(--nx-text-subtle);
26
+ font: inherit;
27
+ cursor: pointer;
28
+ transition:
29
+ background-color var(--nx-duration) linear,
30
+ color var(--nx-duration) linear,
31
+ border-color var(--nx-duration) linear;
32
+ }
33
+
34
+ .nx-chat-btn--sm {
35
+ width: var(--nx-control-sm);
36
+ height: var(--nx-control-sm);
37
+ }
38
+
39
+ .nx-chat-btn .nx-icon {
40
+ width: 18px;
41
+ height: 18px;
42
+ vertical-align: 0;
43
+ }
44
+
45
+ .nx-chat-btn--sm .nx-icon {
46
+ width: 16px;
47
+ height: 16px;
48
+ }
49
+
50
+ .nx-chat-btn:hover:not(:disabled) {
51
+ background: var(--nx-surface-hover);
52
+ color: var(--nx-text);
53
+ }
54
+
55
+ .nx-chat-btn:focus-visible {
56
+ outline: none;
57
+ box-shadow: var(--nx-focus-ring);
58
+ }
59
+
60
+ .nx-chat-btn:disabled {
61
+ cursor: not-allowed;
62
+ opacity: 0.55;
63
+ }
64
+
65
+ /* Has messages: the accent on its soft tint. */
66
+ .nx-chat-btn[data-chat="active"] {
67
+ border-color: color-mix(in oklab, var(--nx-primary) 28%, transparent);
68
+ background: var(--nx-primary-soft);
69
+ color: var(--nx-primary);
70
+ }
71
+
72
+ .nx-chat-btn[data-chat="active"]:hover:not(:disabled) {
73
+ border-color: var(--nx-primary);
74
+ background: color-mix(in oklab, var(--nx-primary) 22%, var(--nx-surface));
75
+ color: var(--nx-primary);
76
+ }
77
+
78
+ /* Unread: the strongest step, so one glance down a list finds it. */
79
+ .nx-chat-btn[data-chat="unread"] {
80
+ border-color: var(--nx-primary-solid);
81
+ background: var(--nx-primary-solid);
82
+ color: var(--nx-primary-text);
83
+ }
84
+
85
+ .nx-chat-btn[data-chat="unread"]:hover:not(:disabled) {
86
+ background: var(--nx-primary-hover);
87
+ color: var(--nx-primary-text);
88
+ }
89
+
90
+ /* The number of unread messages, over the corner of the box so the box keeps its size. */
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
+ }
110
+
111
+ /* The panel */
112
+
113
+ .nx-chat-panel {
114
+ --nx-chat-height: min(60vh, 520px);
115
+ --nx-chat-avatar: 28px;
116
+
117
+ container-type: inline-size;
118
+ display: flex;
119
+ flex-direction: column;
120
+ height: var(--nx-chat-height);
121
+ min-height: 240px;
122
+ overflow: hidden;
123
+ background: var(--nx-surface);
124
+ color: var(--nx-text);
125
+ font-size: var(--nx-text-md);
126
+ }
127
+
128
+ /* A low bar, as a window has: the name at the start, the buttons flush in the corner. */
129
+ .nx-chat-panel__bar {
130
+ display: flex;
131
+ flex-shrink: 0;
132
+ align-items: center;
133
+ gap: var(--nx-space-2);
134
+ min-height: 36px;
135
+ padding: 0 var(--nx-space-2) 0 var(--nx-space-3);
136
+ border-bottom: 1px solid var(--nx-border);
137
+ background: var(--nx-surface-2);
138
+ }
139
+
140
+ .nx-chat-panel__heading {
141
+ display: flex;
142
+ flex: 1 1 auto;
143
+ gap: var(--nx-space-2);
144
+ align-items: baseline;
145
+ min-width: 0;
146
+ }
147
+
148
+ .nx-chat-panel__title {
149
+ overflow: hidden;
150
+ font-weight: 600;
151
+ white-space: nowrap;
152
+ text-overflow: ellipsis;
153
+ }
154
+
155
+ .nx-chat-panel__description {
156
+ overflow: hidden;
157
+ color: var(--nx-text-muted);
158
+ font-size: var(--nx-text-sm);
159
+ white-space: nowrap;
160
+ text-overflow: ellipsis;
161
+ }
162
+
163
+ .nx-chat-panel__people {
164
+ display: inline-flex;
165
+ flex-shrink: 0;
166
+ gap: 4px;
167
+ align-items: center;
168
+ height: 26px;
169
+ margin: 0;
170
+ padding: 0 6px;
171
+ border: 1px solid transparent;
172
+ border-radius: var(--nx-radius-sm);
173
+ background: none;
174
+ color: var(--nx-text-muted);
175
+ font: inherit;
176
+ font-size: var(--nx-text-sm);
177
+ font-variant-numeric: tabular-nums;
178
+ cursor: pointer;
179
+ }
180
+
181
+ .nx-chat-panel__people:hover,
182
+ .nx-chat-panel__people.is-open {
183
+ background: var(--nx-surface-hover);
184
+ color: var(--nx-text);
185
+ }
186
+
187
+ .nx-chat-panel__people:focus-visible {
188
+ outline: none;
189
+ box-shadow: var(--nx-focus-ring);
190
+ }
191
+
192
+ .nx-chat-panel__people .nx-icon {
193
+ width: 16px;
194
+ height: 16px;
195
+ vertical-align: 0;
196
+ }
197
+
198
+ .nx-chat-panel__body {
199
+ display: flex;
200
+ flex: 1 1 auto;
201
+ min-height: 0;
202
+ }
203
+
204
+ .nx-chat-panel__footer {
205
+ display: flex;
206
+ flex-shrink: 0;
207
+ gap: var(--nx-space-2);
208
+ justify-content: flex-end;
209
+ padding: var(--nx-space-2) var(--nx-space-3);
210
+ border-top: 1px solid var(--nx-border);
211
+ }
212
+
213
+ /* The people, in a column beside the thread: a dividing line, not a panel inside a panel. */
214
+ .nx-chat-panel__aside {
215
+ display: flex;
216
+ flex: 0 0 220px;
217
+ flex-direction: column;
218
+ min-width: 0;
219
+ overflow-y: auto;
220
+ border-left: 1px solid var(--nx-border);
221
+ }
222
+
223
+ .nx-chat-aside__bar {
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: space-between;
227
+ padding: var(--nx-space-2) var(--nx-space-2) var(--nx-space-2) var(--nx-space-3);
228
+ color: var(--nx-text-muted);
229
+ font-size: var(--nx-text-sm);
230
+ font-weight: 600;
231
+ }
232
+
233
+ .nx-chat-aside__bar button {
234
+ display: grid;
235
+ place-items: center;
236
+ width: 22px;
237
+ height: 22px;
238
+ padding: 0;
239
+ border: 0;
240
+ border-radius: var(--nx-radius-sm);
241
+ background: none;
242
+ color: var(--nx-text-subtle);
243
+ cursor: pointer;
244
+ }
245
+
246
+ .nx-chat-aside__bar button:hover {
247
+ background: var(--nx-surface-hover);
248
+ color: var(--nx-text);
249
+ }
250
+
251
+ .nx-chat-aside__bar button:focus-visible {
252
+ outline: none;
253
+ box-shadow: var(--nx-focus-ring);
254
+ }
255
+
256
+ .nx-chat-aside__bar .nx-icon {
257
+ width: 14px;
258
+ height: 14px;
259
+ vertical-align: 0;
260
+ }
261
+
262
+ .nx-chat-aside__empty {
263
+ margin: 0;
264
+ padding: 0 var(--nx-space-3) var(--nx-space-3);
265
+ color: var(--nx-text-muted);
266
+ font-size: var(--nx-text-sm);
267
+ }
268
+
269
+ .nx-chat-aside__add {
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: var(--nx-space-2);
273
+ margin-top: auto;
274
+ padding: var(--nx-space-3);
275
+ border-top: 1px solid var(--nx-border);
276
+ }
277
+
278
+ /* The thread */
279
+
280
+ .nx-chat-thread {
281
+ position: relative;
282
+ display: flex;
283
+ flex: 1 1 auto;
284
+ flex-direction: column;
285
+ min-width: 0;
286
+ }
287
+
288
+ .nx-chat-thread__list {
289
+ display: flex;
290
+ flex: 1 1 auto;
291
+ flex-direction: column;
292
+ gap: var(--nx-space-2);
293
+ padding: var(--nx-space-3);
294
+ overflow-y: auto;
295
+ overscroll-behavior: contain;
296
+ scrollbar-gutter: stable;
297
+ }
298
+
299
+ .nx-chat-thread__list:focus-visible {
300
+ outline: none;
301
+ box-shadow: inset var(--nx-focus-ring);
302
+ }
303
+
304
+ .nx-chat-thread__day {
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: var(--nx-space-2);
308
+ }
309
+
310
+ .nx-chat-thread__older {
311
+ display: flex;
312
+ justify-content: center;
313
+ }
314
+
315
+ /* Down to the newest, with how many arrived while the reader was elsewhere. */
316
+ .nx-chat-thread__jump {
317
+ position: absolute;
318
+ right: var(--nx-space-3);
319
+ bottom: var(--nx-space-3);
320
+ display: grid;
321
+ place-items: center;
322
+ width: 32px;
323
+ height: 32px;
324
+ padding: 0;
325
+ border: 1px solid var(--nx-border);
326
+ border-radius: var(--nx-radius-full);
327
+ background: var(--nx-surface);
328
+ color: var(--nx-text);
329
+ cursor: pointer;
330
+ box-shadow: var(--nx-shadow-sm);
331
+ }
332
+
333
+ .nx-chat-thread__jump:hover {
334
+ border-color: var(--nx-border-strong);
335
+ background: var(--nx-surface-hover);
336
+ }
337
+
338
+ .nx-chat-thread__jump:focus-visible {
339
+ outline: none;
340
+ box-shadow: var(--nx-focus-ring);
341
+ }
342
+
343
+ .nx-chat-thread__jump .nx-icon {
344
+ width: 16px;
345
+ height: 16px;
346
+ vertical-align: 0;
347
+ }
348
+
349
+ .nx-chat-thread__jump-count {
350
+ position: absolute;
351
+ top: -5px;
352
+ right: -5px;
353
+ display: grid;
354
+ place-items: center;
355
+ min-width: 16px;
356
+ height: 16px;
357
+ padding: 0 4px;
358
+ border: 1px solid var(--nx-surface);
359
+ border-radius: var(--nx-radius-full);
360
+ background: var(--nx-danger-solid);
361
+ color: var(--nx-danger-text);
362
+ font-size: 10px;
363
+ font-weight: 700;
364
+ line-height: 1;
365
+ }
366
+
367
+ /* The lines that break a thread up */
368
+
369
+ .nx-chat-day,
370
+ .nx-chat-unread-line {
371
+ display: flex;
372
+ gap: var(--nx-space-2);
373
+ align-items: center;
374
+ font-size: var(--nx-text-xs);
375
+ text-transform: none;
376
+ }
377
+
378
+ .nx-chat-day::before,
379
+ .nx-chat-day::after,
380
+ .nx-chat-unread-line::before,
381
+ .nx-chat-unread-line::after {
382
+ flex: 1 1 auto;
383
+ height: 1px;
384
+ background: var(--nx-border);
385
+ content: "";
386
+ }
387
+
388
+ .nx-chat-day > span {
389
+ color: var(--nx-text-muted);
390
+ font-weight: 600;
391
+ white-space: nowrap;
392
+ }
393
+
394
+ .nx-chat-unread-line::before,
395
+ .nx-chat-unread-line::after {
396
+ background: color-mix(in oklab, var(--nx-primary) 45%, transparent);
397
+ }
398
+
399
+ .nx-chat-unread-line {
400
+ margin: var(--nx-space-1) 0;
401
+ }
402
+
403
+ .nx-chat-unread-line > span {
404
+ padding: 2px 8px;
405
+ border-radius: var(--nx-radius-full);
406
+ background: var(--nx-primary-soft);
407
+ color: var(--nx-primary);
408
+ font-weight: 600;
409
+ white-space: nowrap;
410
+ }
411
+
412
+ /* A run of messages by one author */
413
+
414
+ .nx-chat-run {
415
+ display: flex;
416
+ gap: var(--nx-space-2);
417
+ align-items: flex-end;
418
+ }
419
+
420
+ .nx-chat-run--mine {
421
+ justify-content: flex-end;
422
+ }
423
+
424
+ .nx-chat-run--system {
425
+ flex-direction: column;
426
+ gap: var(--nx-space-1);
427
+ }
428
+
429
+ .nx-chat-run__avatar {
430
+ flex-shrink: 0;
431
+ }
432
+
433
+ .nx-chat-run__messages {
434
+ display: flex;
435
+ flex-direction: column;
436
+ gap: 2px;
437
+ min-width: 0;
438
+ max-width: min(82%, 46ch);
439
+ }
440
+
441
+ .nx-chat-run--mine .nx-chat-run__messages {
442
+ align-items: flex-end;
443
+ }
444
+
445
+ /* One message */
446
+
447
+ .nx-chat-msg {
448
+ display: flex;
449
+ flex-direction: column;
450
+ gap: 2px;
451
+ min-width: 0;
452
+ max-width: 100%;
453
+ }
454
+
455
+ .nx-chat-msg__bubble {
456
+ position: relative;
457
+ min-width: 0;
458
+ padding: 6px var(--nx-space-3) 6px;
459
+ border: 1px solid var(--nx-border);
460
+ border-radius: var(--nx-radius-lg);
461
+ line-height: 1.45;
462
+ }
463
+
464
+ .nx-chat-msg--theirs .nx-chat-msg__bubble {
465
+ background: var(--nx-surface-2);
466
+ }
467
+
468
+ .nx-chat-msg--mine .nx-chat-msg__bubble {
469
+ border-color: color-mix(in oklab, var(--nx-primary) 24%, transparent);
470
+ background: var(--nx-primary-soft);
471
+ }
472
+
473
+ /* A run reads as one block: only its outer corners are fully round. */
474
+ .nx-chat-msg--theirs:not(.nx-chat-msg--first) .nx-chat-msg__bubble {
475
+ border-top-left-radius: var(--nx-radius-sm);
476
+ }
477
+
478
+ .nx-chat-msg--theirs:not(.nx-chat-msg--last) .nx-chat-msg__bubble {
479
+ border-bottom-left-radius: var(--nx-radius-sm);
480
+ }
481
+
482
+ .nx-chat-msg--mine:not(.nx-chat-msg--first) .nx-chat-msg__bubble {
483
+ border-top-right-radius: var(--nx-radius-sm);
484
+ }
485
+
486
+ .nx-chat-msg--mine:not(.nx-chat-msg--last) .nx-chat-msg__bubble {
487
+ border-bottom-right-radius: var(--nx-radius-sm);
488
+ }
489
+
490
+ .nx-chat-msg--failed .nx-chat-msg__bubble {
491
+ border-color: color-mix(in oklab, var(--nx-danger) 45%, transparent);
492
+ background: var(--nx-danger-soft);
493
+ }
494
+
495
+ .nx-chat-msg__author {
496
+ display: block;
497
+ color: var(--nx-primary);
498
+ font-size: var(--nx-text-sm);
499
+ font-weight: 600;
500
+ }
501
+
502
+ /*
503
+ * A message is Markdown. Inside a bubble it keeps the bubble's rhythm rather than a document's: nothing above the
504
+ * first block or below the last, a tighter gap between blocks, headings that do not tower over a line of text, and
505
+ * code and tables that scroll inside the bubble instead of widening it.
506
+ */
507
+ .nx-chat-msg__body {
508
+ overflow-wrap: anywhere;
509
+ }
510
+
511
+ .nx-chat-msg__body > :first-child {
512
+ margin-top: 0;
513
+ }
514
+
515
+ .nx-chat-msg__body > :last-child {
516
+ margin-bottom: 0;
517
+ }
518
+
519
+ .nx-chat-msg__body > * + * {
520
+ margin-top: var(--nx-space-2);
521
+ }
522
+
523
+ .nx-chat-msg__body :is(h1, h2, h3, h4, h5, h6) {
524
+ font-size: var(--nx-text-lg);
525
+ }
526
+
527
+ .nx-chat-msg__body :is(ul, ol) {
528
+ padding-left: var(--nx-space-5);
529
+ }
530
+
531
+ .nx-chat-msg__body :is(pre, table) {
532
+ max-width: 100%;
533
+ overflow-x: auto;
534
+ }
535
+
536
+ .nx-chat-msg__meta {
537
+ display: flex;
538
+ gap: 4px;
539
+ align-items: center;
540
+ justify-content: flex-end;
541
+ color: var(--nx-text-muted);
542
+ font-size: var(--nx-text-xs);
543
+ font-variant-numeric: tabular-nums;
544
+ }
545
+
546
+ .nx-chat-msg__edited {
547
+ font-style: italic;
548
+ }
549
+
550
+ /* Sending, sent, delivered, read — one mark, one size, in the place the time sits. */
551
+ .nx-chat-mark {
552
+ display: inline-grid;
553
+ flex-shrink: 0;
554
+ place-items: center;
555
+ width: 14px;
556
+ height: 14px;
557
+ color: var(--nx-text-subtle);
558
+ }
559
+
560
+ .nx-chat-mark .nx-icon {
561
+ width: 14px;
562
+ height: 14px;
563
+ vertical-align: 0;
564
+ }
565
+
566
+ /* Read: the accent, so a glance down your own messages finds what has landed. */
567
+ .nx-chat-mark--seen {
568
+ color: var(--nx-primary);
569
+ }
570
+
571
+ .nx-chat-mark--failed {
572
+ color: var(--nx-danger);
573
+ }
574
+
575
+ /*
576
+ * The actions of a message: over its top corner, and shown only on hover or keyboard focus. They are laid over the
577
+ * bubble rather than taking a place in it, so nothing in the thread moves as the pointer travels down it.
578
+ */
579
+ .nx-chat-msg__actions {
580
+ position: absolute;
581
+ top: -12px;
582
+ display: none;
583
+ gap: 2px;
584
+ padding: 2px;
585
+ border: 1px solid var(--nx-border);
586
+ border-radius: var(--nx-radius);
587
+ background: var(--nx-surface);
588
+ box-shadow: var(--nx-shadow-sm);
589
+ }
590
+
591
+ .nx-chat-msg--theirs .nx-chat-msg__actions {
592
+ right: var(--nx-space-2);
593
+ }
594
+
595
+ .nx-chat-msg--mine .nx-chat-msg__actions {
596
+ left: var(--nx-space-2);
597
+ }
598
+
599
+ .nx-chat-msg:hover .nx-chat-msg__actions,
600
+ .nx-chat-msg:focus-within .nx-chat-msg__actions {
601
+ display: flex;
602
+ }
603
+
604
+ .nx-chat-msg__action {
605
+ display: grid;
606
+ place-items: center;
607
+ width: 22px;
608
+ height: 22px;
609
+ padding: 0;
610
+ border: 0;
611
+ border-radius: var(--nx-radius-sm);
612
+ background: none;
613
+ color: var(--nx-text-muted);
614
+ cursor: pointer;
615
+ }
616
+
617
+ .nx-chat-msg__action:hover {
618
+ background: var(--nx-surface-hover);
619
+ color: var(--nx-text);
620
+ }
621
+
622
+ .nx-chat-msg__action--danger:hover {
623
+ background: var(--nx-danger-soft);
624
+ color: var(--nx-danger);
625
+ }
626
+
627
+ .nx-chat-msg__action:focus-visible {
628
+ outline: none;
629
+ box-shadow: var(--nx-focus-ring);
630
+ }
631
+
632
+ .nx-chat-msg__action .nx-icon {
633
+ width: 14px;
634
+ height: 14px;
635
+ vertical-align: 0;
636
+ }
637
+
638
+ /* A message that did not arrive: it stays, with why and what can be done. */
639
+ .nx-chat-msg__failure {
640
+ display: flex;
641
+ flex-wrap: wrap;
642
+ gap: 6px;
643
+ align-items: center;
644
+ color: var(--nx-danger);
645
+ font-size: var(--nx-text-xs);
646
+ }
647
+
648
+ .nx-chat-msg__failure .nx-icon {
649
+ width: 14px;
650
+ height: 14px;
651
+ vertical-align: 0;
652
+ }
653
+
654
+ .nx-chat-msg__failure button {
655
+ display: inline-flex;
656
+ gap: 3px;
657
+ align-items: center;
658
+ padding: 0;
659
+ border: 0;
660
+ background: none;
661
+ color: var(--nx-danger);
662
+ font: inherit;
663
+ font-weight: 600;
664
+ text-decoration: underline;
665
+ cursor: pointer;
666
+ }
667
+
668
+ .nx-chat-msg__failure button:focus-visible {
669
+ outline: none;
670
+ box-shadow: var(--nx-focus-ring);
671
+ }
672
+
673
+ /* A quoted message, in the bubble that answers it and in the composer */
674
+
675
+ .nx-chat-quote {
676
+ display: flex;
677
+ flex-direction: column;
678
+ gap: 1px;
679
+ width: 100%;
680
+ margin: 2px 0 4px;
681
+ padding: 2px 0 2px var(--nx-space-2);
682
+ border: 0;
683
+ border-left: 2px solid color-mix(in oklab, var(--nx-primary) 60%, transparent);
684
+ background: none;
685
+ color: var(--nx-text-muted);
686
+ font: inherit;
687
+ font-size: var(--nx-text-sm);
688
+ text-align: start;
689
+ cursor: pointer;
690
+ }
691
+
692
+ .nx-chat-quote--gone {
693
+ border-left-color: var(--nx-border-strong);
694
+ font-style: italic;
695
+ cursor: default;
696
+ }
697
+
698
+ .nx-chat-quote:focus-visible {
699
+ outline: none;
700
+ box-shadow: var(--nx-focus-ring);
701
+ }
702
+
703
+ .nx-chat-quote__author {
704
+ color: var(--nx-primary);
705
+ font-weight: 600;
706
+ }
707
+
708
+ .nx-chat-quote__body {
709
+ display: block;
710
+ overflow: hidden;
711
+ white-space: nowrap;
712
+ text-overflow: ellipsis;
713
+ }
714
+
715
+ /* Files on a message */
716
+
717
+ .nx-chat-files {
718
+ display: flex;
719
+ flex-direction: column;
720
+ gap: 2px;
721
+ margin: 4px 0 2px;
722
+ padding: 0;
723
+ list-style: none;
724
+ }
725
+
726
+ .nx-chat-file > a,
727
+ .nx-chat-file > span {
728
+ display: inline-flex;
729
+ gap: 6px;
730
+ align-items: center;
731
+ max-width: 100%;
732
+ padding: 3px 6px;
733
+ border: 1px solid color-mix(in oklab, var(--nx-text) 18%, transparent);
734
+ border-radius: var(--nx-radius-sm);
735
+ background: none;
736
+ color: var(--nx-text);
737
+ font-size: var(--nx-text-sm);
738
+ text-decoration: none;
739
+ }
740
+
741
+ .nx-chat-file > a:hover {
742
+ border-color: var(--nx-primary);
743
+ background: color-mix(in oklab, var(--nx-primary) 10%, transparent);
744
+ color: var(--nx-primary);
745
+ }
746
+
747
+ .nx-chat-file > a:focus-visible {
748
+ outline: none;
749
+ box-shadow: var(--nx-focus-ring);
750
+ }
751
+
752
+ .nx-chat-file .nx-icon {
753
+ width: 14px;
754
+ height: 14px;
755
+ flex-shrink: 0;
756
+ vertical-align: 0;
757
+ }
758
+
759
+ .nx-chat-file__name {
760
+ overflow: hidden;
761
+ white-space: nowrap;
762
+ text-overflow: ellipsis;
763
+ }
764
+
765
+ .nx-chat-file__size {
766
+ flex-shrink: 0;
767
+ color: var(--nx-text-muted);
768
+ font-variant-numeric: tabular-nums;
769
+ }
770
+
771
+ /* A note the system wrote */
772
+
773
+ .nx-chat-note {
774
+ display: flex;
775
+ gap: 6px;
776
+ align-items: baseline;
777
+ align-self: center;
778
+ justify-content: center;
779
+ max-width: 90%;
780
+ padding: 2px 10px;
781
+ border-radius: var(--nx-radius-full);
782
+ background: var(--nx-surface-2);
783
+ color: var(--nx-text-muted);
784
+ font-size: var(--nx-text-xs);
785
+ text-align: center;
786
+ }
787
+
788
+ /* The people */
789
+
790
+ .nx-chat-avatar {
791
+ position: relative;
792
+ display: inline-grid;
793
+ flex-shrink: 0;
794
+ place-items: center;
795
+ width: var(--nx-chat-avatar, 28px);
796
+ height: var(--nx-chat-avatar, 28px);
797
+ overflow: hidden;
798
+ border-radius: 50%;
799
+ background: color-mix(in oklab, var(--nx-text) 10%, var(--nx-surface));
800
+ color: var(--nx-text);
801
+ font-size: max(9px, calc(var(--nx-chat-avatar, 28px) * 0.4));
802
+ font-weight: 600;
803
+ line-height: 1;
804
+ }
805
+
806
+ .nx-chat-avatar--sm {
807
+ --nx-chat-avatar: 22px;
808
+ }
809
+
810
+ .nx-chat-avatar[data-tone="primary"] {
811
+ background: var(--nx-primary-soft);
812
+ }
813
+
814
+ .nx-chat-avatar[data-tone="info"] {
815
+ background: var(--nx-info-soft);
816
+ }
817
+
818
+ .nx-chat-avatar[data-tone="success"] {
819
+ background: var(--nx-success-soft);
820
+ }
821
+
822
+ .nx-chat-avatar[data-tone="warning"] {
823
+ background: var(--nx-warning-soft);
824
+ }
825
+
826
+ .nx-chat-avatar img {
827
+ position: absolute;
828
+ inset: 0;
829
+ width: 100%;
830
+ height: 100%;
831
+ object-fit: cover;
832
+ }
833
+
834
+ .nx-chat-people {
835
+ display: flex;
836
+ flex-direction: column;
837
+ gap: 2px;
838
+ margin: 0;
839
+ padding: 0 var(--nx-space-2) var(--nx-space-2);
840
+ list-style: none;
841
+ }
842
+
843
+ .nx-chat-person {
844
+ display: flex;
845
+ gap: var(--nx-space-2);
846
+ align-items: center;
847
+ padding: 4px var(--nx-space-2);
848
+ border-radius: var(--nx-radius-sm);
849
+ }
850
+
851
+ .nx-chat-person--inactive {
852
+ opacity: 0.6;
853
+ }
854
+
855
+ .nx-chat-person__text {
856
+ display: flex;
857
+ flex-direction: column;
858
+ min-width: 0;
859
+ }
860
+
861
+ .nx-chat-person__name {
862
+ display: flex;
863
+ gap: 4px;
864
+ align-items: baseline;
865
+ overflow: hidden;
866
+ font-size: var(--nx-text-sm);
867
+ font-weight: 500;
868
+ white-space: nowrap;
869
+ text-overflow: ellipsis;
870
+ }
871
+
872
+ .nx-chat-person__you {
873
+ color: var(--nx-text-subtle);
874
+ font-size: var(--nx-text-xs);
875
+ font-weight: 400;
876
+ }
877
+
878
+ .nx-chat-person__role {
879
+ overflow: hidden;
880
+ color: var(--nx-text-muted);
881
+ font-size: var(--nx-text-xs);
882
+ white-space: nowrap;
883
+ text-overflow: ellipsis;
884
+ }
885
+
886
+ /* Empty, loading, and failed */
887
+
888
+ .nx-chat-empty {
889
+ display: flex;
890
+ flex: 1 1 auto;
891
+ flex-direction: column;
892
+ gap: 4px;
893
+ align-items: center;
894
+ justify-content: center;
895
+ padding: var(--nx-space-6) var(--nx-space-4);
896
+ color: var(--nx-text-muted);
897
+ text-align: center;
898
+ }
899
+
900
+ .nx-chat-empty p {
901
+ margin: 0;
902
+ }
903
+
904
+ .nx-chat-empty__hint {
905
+ display: inline-flex;
906
+ gap: 6px;
907
+ align-items: center;
908
+ color: var(--nx-text-subtle);
909
+ font-size: var(--nx-text-sm);
910
+ }
911
+
912
+ .nx-chat-empty .nx-icon {
913
+ width: 15px;
914
+ height: 15px;
915
+ vertical-align: 0;
916
+ }
917
+
918
+ .nx-chat-loading {
919
+ display: flex;
920
+ gap: 6px;
921
+ align-items: center;
922
+ align-self: center;
923
+ color: var(--nx-text-muted);
924
+ font-size: var(--nx-text-sm);
925
+ }
926
+
927
+ .nx-chat-loading .nx-icon,
928
+ .nx-chat-failure .nx-icon {
929
+ width: 15px;
930
+ height: 15px;
931
+ vertical-align: 0;
932
+ }
933
+
934
+ .nx-chat-failure {
935
+ display: flex;
936
+ flex-wrap: wrap;
937
+ gap: 6px;
938
+ align-items: center;
939
+ padding: var(--nx-space-2) var(--nx-space-3);
940
+ border: 1px solid color-mix(in oklab, var(--nx-danger) 35%, transparent);
941
+ border-radius: var(--nx-radius);
942
+ background: var(--nx-danger-soft);
943
+ color: var(--nx-danger);
944
+ font-size: var(--nx-text-sm);
945
+ }
946
+
947
+ .nx-chat-failure button {
948
+ display: inline-flex;
949
+ gap: 3px;
950
+ align-items: center;
951
+ padding: 0;
952
+ border: 0;
953
+ background: none;
954
+ color: var(--nx-danger);
955
+ font: inherit;
956
+ font-weight: 600;
957
+ text-decoration: underline;
958
+ cursor: pointer;
959
+ }
960
+
961
+ .nx-chat-failure button:focus-visible {
962
+ outline: none;
963
+ box-shadow: var(--nx-focus-ring);
964
+ }
965
+
966
+ /* The composer */
967
+
968
+ .nx-chat-composer {
969
+ display: flex;
970
+ flex-shrink: 0;
971
+ flex-direction: column;
972
+ gap: var(--nx-space-2);
973
+ padding: var(--nx-space-2) var(--nx-space-3);
974
+ border-top: 1px solid var(--nx-border);
975
+ background: var(--nx-surface);
976
+ }
977
+
978
+ .nx-chat-composer--readonly p {
979
+ display: flex;
980
+ gap: 6px;
981
+ align-items: center;
982
+ justify-content: center;
983
+ margin: 0;
984
+ padding: var(--nx-space-1) 0;
985
+ color: var(--nx-text-muted);
986
+ font-size: var(--nx-text-sm);
987
+ text-align: center;
988
+ }
989
+
990
+ /* The editor is the whole writing area, so the row under it carries only the hint and the buttons. */
991
+ .nx-chat-composer__row {
992
+ display: flex;
993
+ gap: var(--nx-space-2);
994
+ align-items: center;
995
+ }
996
+
997
+ .nx-chat-composer__hint {
998
+ flex: 1 1 auto;
999
+ min-width: 0;
1000
+ overflow: hidden;
1001
+ color: var(--nx-text-subtle);
1002
+ font-size: var(--nx-text-xs);
1003
+ white-space: nowrap;
1004
+ text-overflow: ellipsis;
1005
+ }
1006
+
1007
+ .nx-chat-composer__attach,
1008
+ .nx-chat-composer__send {
1009
+ display: inline-grid;
1010
+ flex-shrink: 0;
1011
+ grid-auto-flow: column;
1012
+ gap: 6px;
1013
+ place-items: center;
1014
+ width: 30px;
1015
+ height: 30px;
1016
+ padding: 0;
1017
+ border: 0;
1018
+ border-radius: var(--nx-radius);
1019
+ background: none;
1020
+ color: var(--nx-text-muted);
1021
+ font: inherit;
1022
+ cursor: pointer;
1023
+ }
1024
+
1025
+ .nx-chat-composer__attach:hover {
1026
+ background: var(--nx-surface-hover);
1027
+ color: var(--nx-text);
1028
+ }
1029
+
1030
+ .nx-chat-composer__send {
1031
+ width: auto;
1032
+ padding: 0 10px;
1033
+ background: var(--nx-primary-solid);
1034
+ color: var(--nx-primary-text);
1035
+ font-size: var(--nx-text-sm);
1036
+ font-weight: 600;
1037
+ }
1038
+
1039
+ .nx-chat-composer__send:hover:not(:disabled) {
1040
+ background: var(--nx-primary-hover);
1041
+ }
1042
+
1043
+ .nx-chat-composer__send:disabled {
1044
+ background: var(--nx-surface-hover);
1045
+ color: var(--nx-text-subtle);
1046
+ cursor: not-allowed;
1047
+ }
1048
+
1049
+ .nx-chat-composer__attach:focus-visible,
1050
+ .nx-chat-composer__send:focus-visible {
1051
+ outline: none;
1052
+ box-shadow: var(--nx-focus-ring);
1053
+ }
1054
+
1055
+ .nx-chat-composer__attach .nx-icon,
1056
+ .nx-chat-composer__send .nx-icon {
1057
+ width: 16px;
1058
+ height: 16px;
1059
+ vertical-align: 0;
1060
+ }
1061
+
1062
+ .nx-chat-composer__reply {
1063
+ display: flex;
1064
+ gap: var(--nx-space-2);
1065
+ align-items: center;
1066
+ padding: var(--nx-space-1) var(--nx-space-2);
1067
+ border-left: 2px solid var(--nx-primary);
1068
+ border-radius: 0 var(--nx-radius-sm) var(--nx-radius-sm) 0;
1069
+ background: var(--nx-surface-2);
1070
+ font-size: var(--nx-text-sm);
1071
+ }
1072
+
1073
+ .nx-chat-composer__reply-text {
1074
+ display: flex;
1075
+ flex: 1 1 auto;
1076
+ gap: 6px;
1077
+ min-width: 0;
1078
+ color: var(--nx-text-muted);
1079
+ }
1080
+
1081
+ .nx-chat-composer__reply-text > span:last-child {
1082
+ overflow: hidden;
1083
+ white-space: nowrap;
1084
+ text-overflow: ellipsis;
1085
+ }
1086
+
1087
+ .nx-chat-composer__reply-author {
1088
+ flex-shrink: 0;
1089
+ color: var(--nx-primary);
1090
+ font-weight: 600;
1091
+ }
1092
+
1093
+ .nx-chat-composer__reply button,
1094
+ .nx-chat-composer__files button {
1095
+ display: grid;
1096
+ flex-shrink: 0;
1097
+ place-items: center;
1098
+ width: 20px;
1099
+ height: 20px;
1100
+ padding: 0;
1101
+ border: 0;
1102
+ border-radius: var(--nx-radius-sm);
1103
+ background: none;
1104
+ color: var(--nx-text-subtle);
1105
+ cursor: pointer;
1106
+ }
1107
+
1108
+ .nx-chat-composer__reply button:hover,
1109
+ .nx-chat-composer__files button:hover {
1110
+ background: var(--nx-surface-hover);
1111
+ color: var(--nx-text);
1112
+ }
1113
+
1114
+ .nx-chat-composer__reply button:focus-visible,
1115
+ .nx-chat-composer__files button:focus-visible {
1116
+ outline: none;
1117
+ box-shadow: var(--nx-focus-ring);
1118
+ }
1119
+
1120
+ .nx-chat-composer__reply .nx-icon,
1121
+ .nx-chat-composer__files .nx-icon {
1122
+ width: 13px;
1123
+ height: 13px;
1124
+ vertical-align: 0;
1125
+ }
1126
+
1127
+ .nx-chat-composer__files {
1128
+ display: flex;
1129
+ flex-wrap: wrap;
1130
+ gap: var(--nx-space-1);
1131
+ margin: 0;
1132
+ padding: 0;
1133
+ list-style: none;
1134
+ }
1135
+
1136
+ .nx-chat-composer__files li {
1137
+ display: inline-flex;
1138
+ gap: 6px;
1139
+ align-items: center;
1140
+ max-width: 100%;
1141
+ padding: 2px 4px 2px 8px;
1142
+ border: 1px solid var(--nx-border);
1143
+ border-radius: var(--nx-radius-full);
1144
+ background: var(--nx-surface-2);
1145
+ font-size: var(--nx-text-xs);
1146
+ }
1147
+
1148
+ .nx-chat-composer__file-name {
1149
+ overflow: hidden;
1150
+ white-space: nowrap;
1151
+ text-overflow: ellipsis;
1152
+ }
1153
+
1154
+ .nx-chat-composer__file-size {
1155
+ color: var(--nx-text-muted);
1156
+ font-variant-numeric: tabular-nums;
1157
+ }
1158
+
1159
+
1160
+ /*
1161
+ * The conversation list and the New chat form: the panel's other two views. They sit where the thread sits, with
1162
+ * the same bar above them, so the panel never grows a second frame inside itself.
1163
+ */
1164
+
1165
+ .nx-chat-list {
1166
+ display: flex;
1167
+ flex: 1 1 auto;
1168
+ flex-direction: column;
1169
+ min-width: 0;
1170
+ padding: var(--nx-space-2);
1171
+ overflow-y: auto;
1172
+ }
1173
+
1174
+ .nx-chat-list__items {
1175
+ display: flex;
1176
+ flex: 1 1 auto;
1177
+ flex-direction: column;
1178
+ gap: 2px;
1179
+ margin: 0;
1180
+ padding: 0;
1181
+ list-style: none;
1182
+ }
1183
+
1184
+ .nx-chat-list__item {
1185
+ display: flex;
1186
+ gap: var(--nx-space-2);
1187
+ align-items: center;
1188
+ width: 100%;
1189
+ padding: var(--nx-space-2);
1190
+ border: 1px solid transparent;
1191
+ border-radius: var(--nx-radius);
1192
+ background: none;
1193
+ color: var(--nx-text);
1194
+ font: inherit;
1195
+ text-align: start;
1196
+ cursor: pointer;
1197
+ }
1198
+
1199
+ .nx-chat-list__item:hover {
1200
+ background: var(--nx-surface-hover);
1201
+ }
1202
+
1203
+ .nx-chat-list__item:focus-visible {
1204
+ outline: none;
1205
+ box-shadow: var(--nx-focus-ring);
1206
+ }
1207
+
1208
+ /* The one open now: the accent tint, so the list says where you are without a word for it. */
1209
+ .nx-chat-list__item.is-current {
1210
+ border-color: color-mix(in oklab, var(--nx-primary) 28%, transparent);
1211
+ background: var(--nx-primary-soft);
1212
+ }
1213
+
1214
+ .nx-chat-list__group {
1215
+ display: grid;
1216
+ flex-shrink: 0;
1217
+ place-items: center;
1218
+ width: var(--nx-chat-avatar, 28px);
1219
+ height: var(--nx-chat-avatar, 28px);
1220
+ border-radius: 50%;
1221
+ background: var(--nx-surface-2);
1222
+ color: var(--nx-text-muted);
1223
+ }
1224
+
1225
+ .nx-chat-list__group .nx-icon {
1226
+ width: 15px;
1227
+ height: 15px;
1228
+ vertical-align: 0;
1229
+ }
1230
+
1231
+ .nx-chat-list__text {
1232
+ display: flex;
1233
+ flex: 1 1 auto;
1234
+ flex-direction: column;
1235
+ gap: 1px;
1236
+ min-width: 0;
1237
+ }
1238
+
1239
+ .nx-chat-list__line {
1240
+ display: flex;
1241
+ gap: var(--nx-space-2);
1242
+ align-items: baseline;
1243
+ justify-content: space-between;
1244
+ min-width: 0;
1245
+ }
1246
+
1247
+ .nx-chat-list__name {
1248
+ overflow: hidden;
1249
+ font-weight: 600;
1250
+ white-space: nowrap;
1251
+ text-overflow: ellipsis;
1252
+ }
1253
+
1254
+ .nx-chat-list__when {
1255
+ flex-shrink: 0;
1256
+ color: var(--nx-text-subtle);
1257
+ font-size: var(--nx-text-xs);
1258
+ white-space: nowrap;
1259
+ }
1260
+
1261
+ .nx-chat-list__last {
1262
+ overflow: hidden;
1263
+ color: var(--nx-text-muted);
1264
+ font-size: var(--nx-text-sm);
1265
+ white-space: nowrap;
1266
+ text-overflow: ellipsis;
1267
+ }
1268
+
1269
+ .nx-chat-list__badge {
1270
+ display: grid;
1271
+ flex-shrink: 0;
1272
+ place-items: center;
1273
+ min-width: 18px;
1274
+ height: 18px;
1275
+ padding: 0 5px;
1276
+ border-radius: var(--nx-radius-full);
1277
+ background: var(--nx-danger-solid);
1278
+ color: var(--nx-danger-text);
1279
+ font-size: 11px;
1280
+ font-weight: 700;
1281
+ font-variant-numeric: tabular-nums;
1282
+ line-height: 1;
1283
+ }
1284
+
1285
+ .nx-chat-list__new {
1286
+ flex-shrink: 0;
1287
+ padding-top: var(--nx-space-2);
1288
+ margin-top: var(--nx-space-2);
1289
+ border-top: 1px solid var(--nx-border);
1290
+ }
1291
+
1292
+ /* New chat */
1293
+
1294
+ .nx-chat-new {
1295
+ display: flex;
1296
+ flex: 1 1 auto;
1297
+ flex-direction: column;
1298
+ min-width: 0;
1299
+ padding: var(--nx-space-3);
1300
+ overflow-y: auto;
1301
+ }
1302
+
1303
+ .nx-chat-new__fields {
1304
+ display: flex;
1305
+ flex: 1 1 auto;
1306
+ flex-direction: column;
1307
+ gap: var(--nx-space-3);
1308
+ }
1309
+
1310
+ .nx-chat-new__kind {
1311
+ display: flex;
1312
+ gap: 6px;
1313
+ align-items: center;
1314
+ margin: 0;
1315
+ color: var(--nx-text-muted);
1316
+ font-size: var(--nx-text-sm);
1317
+ }
1318
+
1319
+ .nx-chat-new__kind .nx-icon {
1320
+ width: 15px;
1321
+ height: 15px;
1322
+ flex-shrink: 0;
1323
+ vertical-align: 0;
1324
+ }
1325
+
1326
+ .nx-chat-new__actions {
1327
+ display: flex;
1328
+ flex-shrink: 0;
1329
+ gap: var(--nx-space-2);
1330
+ justify-content: flex-end;
1331
+ padding-top: var(--nx-space-3);
1332
+ }
1333
+
1334
+ .nx-chat-new__note {
1335
+ margin: var(--nx-space-1) 0 0;
1336
+ color: var(--nx-text-subtle);
1337
+ font-size: var(--nx-text-xs);
1338
+ text-align: end;
1339
+ }
1340
+
1341
+ /* The bar's switch between conversations */
1342
+
1343
+ .nx-chat-panel__switch {
1344
+ display: inline-flex;
1345
+ gap: 4px;
1346
+ align-items: center;
1347
+ min-width: 0;
1348
+ margin: 0;
1349
+ padding: 2px 6px;
1350
+ border: 0;
1351
+ border-radius: var(--nx-radius-sm);
1352
+ background: none;
1353
+ color: inherit;
1354
+ font: inherit;
1355
+ cursor: pointer;
1356
+ }
1357
+
1358
+ .nx-chat-panel__switch:hover {
1359
+ background: var(--nx-surface-hover);
1360
+ }
1361
+
1362
+ .nx-chat-panel__switch:focus-visible {
1363
+ outline: none;
1364
+ box-shadow: var(--nx-focus-ring);
1365
+ }
1366
+
1367
+ .nx-chat-panel__switch .nx-icon {
1368
+ width: 14px;
1369
+ height: 14px;
1370
+ flex-shrink: 0;
1371
+ vertical-align: 0;
1372
+ }
1373
+
1374
+ .nx-chat-panel__of {
1375
+ flex-shrink: 0;
1376
+ color: var(--nx-text-subtle);
1377
+ font-size: var(--nx-text-xs);
1378
+ font-weight: 400;
1379
+ }
1380
+
1381
+ .nx-chat-panel__back {
1382
+ display: grid;
1383
+ flex-shrink: 0;
1384
+ place-items: center;
1385
+ width: 24px;
1386
+ height: 24px;
1387
+ margin-left: calc(var(--nx-space-2) * -1);
1388
+ padding: 0;
1389
+ border: 0;
1390
+ border-radius: var(--nx-radius-sm);
1391
+ background: none;
1392
+ color: var(--nx-text-muted);
1393
+ cursor: pointer;
1394
+ }
1395
+
1396
+ .nx-chat-panel__back:hover {
1397
+ background: var(--nx-surface-hover);
1398
+ color: var(--nx-text);
1399
+ }
1400
+
1401
+ .nx-chat-panel__back:focus-visible {
1402
+ outline: none;
1403
+ box-shadow: var(--nx-focus-ring);
1404
+ }
1405
+
1406
+ .nx-chat-panel__back .nx-icon {
1407
+ width: 15px;
1408
+ height: 15px;
1409
+ vertical-align: 0;
1410
+ }
1411
+
1412
+ /*
1413
+ * The people an `@` offers. It opens above the composer, because the composer is at the bottom of the panel and a
1414
+ * list under it would fall outside. The highlighted row is the one Enter puts in.
1415
+ */
1416
+ .nx-chat-mentions {
1417
+ display: flex;
1418
+ flex-direction: column;
1419
+ gap: 1px;
1420
+ max-height: 200px;
1421
+ margin: 0;
1422
+ padding: var(--nx-space-1);
1423
+ overflow-y: auto;
1424
+ border: 1px solid var(--nx-border);
1425
+ border-radius: var(--nx-radius);
1426
+ background: var(--nx-surface);
1427
+ list-style: none;
1428
+ box-shadow: var(--nx-shadow-sm);
1429
+ }
1430
+
1431
+ .nx-chat-mentions__item {
1432
+ display: flex;
1433
+ gap: var(--nx-space-2);
1434
+ align-items: center;
1435
+ width: 100%;
1436
+ padding: 4px var(--nx-space-2);
1437
+ border: 0;
1438
+ border-radius: var(--nx-radius-sm);
1439
+ background: none;
1440
+ color: var(--nx-text);
1441
+ font: inherit;
1442
+ font-size: var(--nx-text-sm);
1443
+ text-align: start;
1444
+ cursor: pointer;
1445
+ }
1446
+
1447
+ .nx-chat-mentions__item.is-at {
1448
+ background: var(--nx-primary-soft);
1449
+ color: var(--nx-primary);
1450
+ }
1451
+
1452
+ .nx-chat-mentions__name {
1453
+ overflow: hidden;
1454
+ font-weight: 500;
1455
+ white-space: nowrap;
1456
+ text-overflow: ellipsis;
1457
+ }
1458
+
1459
+ .nx-chat-mentions__role {
1460
+ margin-left: auto;
1461
+ overflow: hidden;
1462
+ color: var(--nx-text-muted);
1463
+ font-size: var(--nx-text-xs);
1464
+ white-space: nowrap;
1465
+ }
1466
+
1467
+ /*
1468
+ * A narrow panel: the people cover the thread rather than squeezing it. Measured, not guessed — at 520px the column
1469
+ * would leave the thread under 300px, which is narrower than the bubbles want.
1470
+ */
1471
+ @container (max-width: 520px) {
1472
+ .nx-chat-panel__body {
1473
+ position: relative;
1474
+ }
1475
+
1476
+ .nx-chat-panel__aside {
1477
+ position: absolute;
1478
+ inset: 0;
1479
+ flex-basis: auto;
1480
+ background: var(--nx-surface);
1481
+ }
1482
+ }
1483
+
1484
+ @media (prefers-reduced-motion: reduce) {
1485
+ .nx-chat-btn {
1486
+ transition: none;
1487
+ }
1488
+ }
1489
+ }