@peers-app/peers-ui 0.14.0 → 0.15.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 (438) hide show
  1. package/.github/workflows/publish.yml +8 -5
  2. package/babel.config.js +4 -4
  3. package/biome.json +191 -0
  4. package/dist/command-palette/command-palette-ui.d.ts +1 -2
  5. package/dist/command-palette/command-palette-ui.js +175 -244
  6. package/dist/command-palette/command-palette.js +65 -64
  7. package/dist/components/chat-overlay.d.ts +2 -2
  8. package/dist/components/chat-overlay.js +160 -217
  9. package/dist/components/checkbox.d.ts +5 -4
  10. package/dist/components/checkbox.js +4 -7
  11. package/dist/components/group-switcher.d.ts +1 -2
  12. package/dist/components/group-switcher.js +119 -159
  13. package/dist/components/input-date.d.ts +3 -3
  14. package/dist/components/input-date.js +6 -6
  15. package/dist/components/input-number.d.ts +7 -6
  16. package/dist/components/input-number.js +25 -20
  17. package/dist/components/input.d.ts +5 -4
  18. package/dist/components/input.js +4 -7
  19. package/dist/components/inverse-lazy-list.d.ts +3 -3
  20. package/dist/components/inverse-lazy-list.js +13 -47
  21. package/dist/components/io-schema-values.d.ts +5 -6
  22. package/dist/components/io-schema-values.js +28 -65
  23. package/dist/components/io-schema.d.ts +4 -5
  24. package/dist/components/io-schema.js +42 -79
  25. package/dist/components/lazy-list.d.ts +3 -3
  26. package/dist/components/lazy-list.js +38 -58
  27. package/dist/components/list-screen.d.ts +3 -8
  28. package/dist/components/list-screen.js +28 -23
  29. package/dist/components/loading-indicator.d.ts +1 -2
  30. package/dist/components/loading-indicator.js +2 -6
  31. package/dist/components/markdown-editor/autolink-plugin.js +5 -8
  32. package/dist/components/markdown-editor/editor-inline.d.ts +2 -3
  33. package/dist/components/markdown-editor/editor-inline.js +2 -6
  34. package/dist/components/markdown-editor/editor.d.ts +6 -6
  35. package/dist/components/markdown-editor/editor.js +9 -19
  36. package/dist/components/markdown-editor/markdown-plugin.d.ts +1 -1
  37. package/dist/components/markdown-editor/markdown-plugin.js +20 -21
  38. package/dist/components/markdown-editor/mention-node.d.ts +2 -2
  39. package/dist/components/markdown-editor/mention-node.js +24 -24
  40. package/dist/components/markdown-editor/mentions-plugin.d.ts +2 -2
  41. package/dist/components/markdown-editor/mentions-plugin.js +61 -62
  42. package/dist/components/markdown-editor/theme.js +28 -28
  43. package/dist/components/markdown-editor/toolbar.d.ts +2 -3
  44. package/dist/components/markdown-editor/toolbar.js +32 -49
  45. package/dist/components/markdown-with-mentions.d.ts +1 -1
  46. package/dist/components/markdown-with-mentions.js +43 -43
  47. package/dist/components/message-logs/message-logs.d.ts +1 -2
  48. package/dist/components/message-logs/message-logs.js +91 -116
  49. package/dist/components/messages/avatar.d.ts +3 -4
  50. package/dist/components/messages/avatar.js +37 -46
  51. package/dist/components/messages/channel-message-list.d.ts +5 -6
  52. package/dist/components/messages/channel-message-list.js +34 -34
  53. package/dist/components/messages/channel-view.d.ts +1 -2
  54. package/dist/components/messages/channel-view.js +23 -57
  55. package/dist/components/messages/message-compose.d.ts +3 -4
  56. package/dist/components/messages/message-compose.js +27 -38
  57. package/dist/components/messages/message-display.d.ts +2 -3
  58. package/dist/components/messages/message-display.js +42 -95
  59. package/dist/components/messages/thread-message-list.d.ts +4 -5
  60. package/dist/components/messages/thread-message-list.js +29 -29
  61. package/dist/components/router.d.ts +1 -2
  62. package/dist/components/router.js +58 -66
  63. package/dist/components/save-button.d.ts +3 -3
  64. package/dist/components/save-button.js +23 -33
  65. package/dist/components/sortable-list.d.ts +11 -12
  66. package/dist/components/sortable-list.js +42 -22
  67. package/dist/components/tabs.d.ts +3 -3
  68. package/dist/components/tabs.js +16 -47
  69. package/dist/components/tooltip.d.ts +4 -4
  70. package/dist/components/tooltip.js +4 -9
  71. package/dist/components/trust-level-badge.d.ts +2 -3
  72. package/dist/components/trust-level-badge.js +16 -16
  73. package/dist/components/trust-level-dropdown.d.ts +3 -4
  74. package/dist/components/trust-level-dropdown.js +32 -55
  75. package/dist/components/typeahead.d.ts +3 -3
  76. package/dist/components/typeahead.js +48 -89
  77. package/dist/components/voice-indicator.d.ts +2 -2
  78. package/dist/components/voice-indicator.js +93 -106
  79. package/dist/components/voice-subscribe-events.d.ts +32 -0
  80. package/dist/components/voice-subscribe-events.js +2 -0
  81. package/dist/globals.d.ts +3 -5
  82. package/dist/globals.js +22 -33
  83. package/dist/hooks.d.ts +5 -5
  84. package/dist/hooks.js +22 -12
  85. package/dist/hooks.test.js +129 -145
  86. package/dist/index.d.ts +9 -8
  87. package/dist/index.js +13 -12
  88. package/dist/mention-configs.d.ts +2 -2
  89. package/dist/mention-configs.js +55 -42
  90. package/dist/screens/assistants/assistant-config.d.ts +2 -3
  91. package/dist/screens/assistants/assistant-config.js +9 -22
  92. package/dist/screens/assistants/assistant-details.d.ts +1 -2
  93. package/dist/screens/assistants/assistant-details.js +13 -28
  94. package/dist/screens/assistants/assistant-info.d.ts +2 -3
  95. package/dist/screens/assistants/assistant-info.js +3 -17
  96. package/dist/screens/assistants/assistant-list.d.ts +1 -2
  97. package/dist/screens/assistants/assistant-list.js +15 -56
  98. package/dist/screens/assistants/assistant-tools.d.ts +2 -3
  99. package/dist/screens/assistants/assistant-tools.js +10 -24
  100. package/dist/screens/console-logs/console-logs-list.d.ts +1 -2
  101. package/dist/screens/console-logs/console-logs-list.js +130 -134
  102. package/dist/screens/console-logs/log-display.d.ts +2 -3
  103. package/dist/screens/console-logs/log-display.js +40 -42
  104. package/dist/screens/console-logs/log-filters.d.ts +1 -2
  105. package/dist/screens/console-logs/log-filters.js +2 -24
  106. package/dist/screens/console-logs/mobile-log-card.d.ts +2 -3
  107. package/dist/screens/console-logs/mobile-log-card.js +64 -67
  108. package/dist/screens/console-logs/resizable-table-header.d.ts +1 -2
  109. package/dist/screens/console-logs/resizable-table-header.js +31 -67
  110. package/dist/screens/contacts/contact-details.d.ts +1 -2
  111. package/dist/screens/contacts/contact-details.js +16 -46
  112. package/dist/screens/contacts/contact-list.d.ts +1 -2
  113. package/dist/screens/contacts/contact-list.js +44 -103
  114. package/dist/screens/contacts/index.d.ts +4 -4
  115. package/dist/screens/contacts/index.js +1 -1
  116. package/dist/screens/contacts/user-connect.d.ts +1 -2
  117. package/dist/screens/contacts/user-connect.js +85 -186
  118. package/dist/screens/data-explorer/data-explorer.d.ts +1 -2
  119. package/dist/screens/data-explorer/data-explorer.js +61 -181
  120. package/dist/screens/data-explorer/index.d.ts +2 -2
  121. package/dist/screens/data-explorer/query-executor.d.ts +1 -2
  122. package/dist/screens/data-explorer/query-executor.js +56 -166
  123. package/dist/screens/groups/group-details.d.ts +1 -2
  124. package/dist/screens/groups/group-details.js +27 -122
  125. package/dist/screens/groups/group-invite-listener.d.ts +2 -3
  126. package/dist/screens/groups/group-invite-listener.js +8 -104
  127. package/dist/screens/groups/group-list.d.ts +1 -2
  128. package/dist/screens/groups/group-list.js +56 -133
  129. package/dist/screens/groups/group-members.d.ts +2 -3
  130. package/dist/screens/groups/group-members.js +62 -132
  131. package/dist/screens/groups/index.d.ts +4 -4
  132. package/dist/screens/groups/index.js +1 -1
  133. package/dist/screens/join-group/index.d.ts +2 -2
  134. package/dist/screens/join-group/join-group.d.ts +1 -2
  135. package/dist/screens/join-group/join-group.js +9 -109
  136. package/dist/screens/network-viewer/connection-troubleshooter.d.ts +2 -3
  137. package/dist/screens/network-viewer/connection-troubleshooter.js +89 -193
  138. package/dist/screens/network-viewer/cpu-usage-graph.d.ts +1 -2
  139. package/dist/screens/network-viewer/cpu-usage-graph.js +60 -99
  140. package/dist/screens/network-viewer/device-details-modal.d.ts +1 -2
  141. package/dist/screens/network-viewer/device-details-modal.js +25 -177
  142. package/dist/screens/network-viewer/group-details-modal.d.ts +1 -2
  143. package/dist/screens/network-viewer/group-details-modal.js +31 -142
  144. package/dist/screens/network-viewer/index.d.ts +4 -4
  145. package/dist/screens/network-viewer/index.js +3 -3
  146. package/dist/screens/network-viewer/network-viewer-ipc.d.ts +22 -0
  147. package/dist/screens/network-viewer/network-viewer-ipc.js +6 -0
  148. package/dist/screens/network-viewer/network-viewer.d.ts +1 -2
  149. package/dist/screens/network-viewer/network-viewer.js +91 -296
  150. package/dist/screens/network-viewer/usage-graph.d.ts +1 -2
  151. package/dist/screens/network-viewer/usage-graph.js +78 -110
  152. package/dist/screens/packages/package-details.d.ts +1 -2
  153. package/dist/screens/packages/package-details.js +35 -41
  154. package/dist/screens/packages/package-info.d.ts +2 -2
  155. package/dist/screens/packages/package-info.js +33 -86
  156. package/dist/screens/packages/package-list.d.ts +1 -2
  157. package/dist/screens/packages/package-list.js +42 -106
  158. package/dist/screens/packages/package-new-local.d.ts +1 -2
  159. package/dist/screens/packages/package-new-local.js +13 -19
  160. package/dist/screens/packages/package-versions.d.ts +2 -3
  161. package/dist/screens/packages/package-versions.js +29 -96
  162. package/dist/screens/peer-types/peer-type-details.d.ts +3 -4
  163. package/dist/screens/peer-types/peer-type-details.js +26 -78
  164. package/dist/screens/peer-types/peer-type-list.d.ts +1 -2
  165. package/dist/screens/peer-types/peer-type-list.js +13 -24
  166. package/dist/screens/search/global-search.d.ts +1 -2
  167. package/dist/screens/search/global-search.js +104 -182
  168. package/dist/screens/settings/color-mode-dropdown.d.ts +3 -4
  169. package/dist/screens/settings/color-mode-dropdown.js +18 -37
  170. package/dist/screens/settings/settings-page.d.ts +1 -1
  171. package/dist/screens/settings/settings-page.js +86 -213
  172. package/dist/screens/settings/voice-settings-agent.d.ts +1 -1
  173. package/dist/screens/settings/voice-settings-agent.js +7 -44
  174. package/dist/screens/settings/voice-settings-api-keys.d.ts +2 -2
  175. package/dist/screens/settings/voice-settings-api-keys.js +2 -29
  176. package/dist/screens/settings/voice-settings-output.d.ts +2 -2
  177. package/dist/screens/settings/voice-settings-output.js +2 -40
  178. package/dist/screens/settings/voice-settings-providers.d.ts +2 -2
  179. package/dist/screens/settings/voice-settings-providers.js +2 -19
  180. package/dist/screens/settings/voice-settings-types.d.ts +4 -4
  181. package/dist/screens/settings/voice-settings-types.js +31 -31
  182. package/dist/screens/settings/voice-settings-wake-word.d.ts +2 -2
  183. package/dist/screens/settings/voice-settings-wake-word.js +2 -33
  184. package/dist/screens/settings/voice-settings.d.ts +1 -1
  185. package/dist/screens/settings/voice-settings.js +35 -112
  186. package/dist/screens/setup-user.d.ts +1 -2
  187. package/dist/screens/setup-user.js +38 -116
  188. package/dist/screens/tools/tool-code.d.ts +2 -3
  189. package/dist/screens/tools/tool-code.js +9 -13
  190. package/dist/screens/tools/tool-details.d.ts +1 -2
  191. package/dist/screens/tools/tool-details.js +26 -39
  192. package/dist/screens/tools/tool-info.d.ts +2 -3
  193. package/dist/screens/tools/tool-info.js +9 -48
  194. package/dist/screens/tools/tool-list.d.ts +1 -2
  195. package/dist/screens/tools/tool-list.js +33 -65
  196. package/dist/screens/tools/tool-schema.d.ts +2 -3
  197. package/dist/screens/tools/tool-schema.js +2 -13
  198. package/dist/screens/tools/tool-test-details.d.ts +1 -2
  199. package/dist/screens/tools/tool-test-details.js +12 -28
  200. package/dist/screens/tools/tool-test-list.d.ts +1 -2
  201. package/dist/screens/tools/tool-test-list.js +17 -56
  202. package/dist/screens/variables/variable-details.d.ts +1 -2
  203. package/dist/screens/variables/variable-details.js +19 -86
  204. package/dist/screens/variables/variable-list.d.ts +1 -2
  205. package/dist/screens/variables/variable-list.js +16 -27
  206. package/dist/screens/welcome-modal.d.ts +1 -2
  207. package/dist/screens/welcome-modal.js +44 -111
  208. package/dist/screens/workflows/workflow-details.d.ts +1 -2
  209. package/dist/screens/workflows/workflow-details.js +17 -31
  210. package/dist/screens/workflows/workflow-info.d.ts +2 -3
  211. package/dist/screens/workflows/workflow-info.js +2 -9
  212. package/dist/screens/workflows/workflow-instructions.d.ts +2 -3
  213. package/dist/screens/workflows/workflow-instructions.js +23 -55
  214. package/dist/screens/workflows/workflow-list.d.ts +1 -2
  215. package/dist/screens/workflows/workflow-list.js +23 -62
  216. package/dist/setupTests.d.ts +1 -1
  217. package/dist/setupTests.js +10 -11
  218. package/dist/system-apps/assistants.app.d.ts +1 -1
  219. package/dist/system-apps/assistants.app.js +3 -3
  220. package/dist/system-apps/console-logs.app.d.ts +1 -1
  221. package/dist/system-apps/console-logs.app.js +3 -3
  222. package/dist/system-apps/contacts.app.d.ts +1 -1
  223. package/dist/system-apps/contacts.app.js +4 -4
  224. package/dist/system-apps/data-explorer.app.d.ts +1 -1
  225. package/dist/system-apps/data-explorer.app.js +4 -4
  226. package/dist/system-apps/groups.app.d.ts +1 -1
  227. package/dist/system-apps/groups.app.js +4 -4
  228. package/dist/system-apps/index.d.ts +17 -17
  229. package/dist/system-apps/index.js +52 -52
  230. package/dist/system-apps/join-group.app.d.ts +1 -1
  231. package/dist/system-apps/join-group.app.js +4 -4
  232. package/dist/system-apps/mobile-settings.app.d.ts +1 -1
  233. package/dist/system-apps/mobile-settings.app.js +3 -3
  234. package/dist/system-apps/network-viewer.app.d.ts +1 -1
  235. package/dist/system-apps/network-viewer.app.js +4 -4
  236. package/dist/system-apps/packages.app.d.ts +1 -1
  237. package/dist/system-apps/packages.app.js +3 -3
  238. package/dist/system-apps/search.app.d.ts +1 -1
  239. package/dist/system-apps/search.app.js +4 -4
  240. package/dist/system-apps/settings.app.d.ts +1 -1
  241. package/dist/system-apps/settings.app.js +3 -3
  242. package/dist/system-apps/threads.app.d.ts +1 -1
  243. package/dist/system-apps/threads.app.js +3 -3
  244. package/dist/system-apps/tools.app.d.ts +1 -1
  245. package/dist/system-apps/tools.app.js +3 -3
  246. package/dist/system-apps/types.app.d.ts +1 -1
  247. package/dist/system-apps/types.app.js +3 -3
  248. package/dist/system-apps/variables.app.d.ts +1 -1
  249. package/dist/system-apps/variables.app.js +3 -3
  250. package/dist/system-apps/workflows.app.d.ts +1 -1
  251. package/dist/system-apps/workflows.app.js +3 -3
  252. package/dist/tabs-layout/tabs-layout.d.ts +2 -3
  253. package/dist/tabs-layout/tabs-layout.js +215 -246
  254. package/dist/tabs-layout/tabs-state.d.ts +2 -2
  255. package/dist/tabs-layout/tabs-state.js +73 -61
  256. package/dist/ui-defaults/index.d.ts +2 -2
  257. package/dist/ui-defaults/list-screen.d.ts +2 -3
  258. package/dist/ui-defaults/list-screen.js +33 -37
  259. package/dist/ui-defaults/markdown-field.js +24 -56
  260. package/dist/ui-router/routes-loader.d.ts +1 -1
  261. package/dist/ui-router/routes-loader.js +17 -13
  262. package/dist/ui-router/ui-loader.d.ts +6 -6
  263. package/dist/ui-router/ui-loader.js +172 -268
  264. package/dist/utils.js +49 -39
  265. package/jest.config.js +16 -16
  266. package/package.json +16 -14
  267. package/src/command-palette/command-palette-ui.tsx +261 -237
  268. package/src/command-palette/command-palette.ts +81 -78
  269. package/src/components/chat-overlay.tsx +366 -261
  270. package/src/components/checkbox.tsx +15 -12
  271. package/src/components/group-switcher.tsx +150 -105
  272. package/src/components/input-date.tsx +17 -16
  273. package/src/components/input-number.tsx +47 -31
  274. package/src/components/input.tsx +15 -12
  275. package/src/components/inverse-lazy-list.tsx +14 -13
  276. package/src/components/io-schema-values.tsx +51 -69
  277. package/src/components/io-schema.tsx +94 -69
  278. package/src/components/lazy-list.tsx +51 -34
  279. package/src/components/list-screen.tsx +51 -35
  280. package/src/components/loading-indicator.tsx +2 -4
  281. package/src/components/markdown-editor/autolink-plugin.tsx +4 -11
  282. package/src/components/markdown-editor/editor-inline.tsx +3 -4
  283. package/src/components/markdown-editor/editor.tsx +53 -51
  284. package/src/components/markdown-editor/markdown-plugin.tsx +48 -40
  285. package/src/components/markdown-editor/mention-node.ts +39 -38
  286. package/src/components/markdown-editor/mentions-plugin.tsx +99 -101
  287. package/src/components/markdown-editor/theme.ts +28 -29
  288. package/src/components/markdown-editor/toolbar.tsx +53 -47
  289. package/src/components/markdown-with-mentions.tsx +56 -46
  290. package/src/components/message-logs/message-logs.tsx +225 -165
  291. package/src/components/messages/avatar.tsx +70 -52
  292. package/src/components/messages/channel-message-list.tsx +80 -68
  293. package/src/components/messages/channel-view.tsx +34 -33
  294. package/src/components/messages/message-compose.tsx +84 -67
  295. package/src/components/messages/message-display.tsx +103 -89
  296. package/src/components/messages/thread-message-list.tsx +53 -44
  297. package/src/components/router.tsx +42 -43
  298. package/src/components/save-button.tsx +43 -39
  299. package/src/components/sortable-list.tsx +77 -49
  300. package/src/components/tabs.tsx +31 -31
  301. package/src/components/tooltip.tsx +21 -28
  302. package/src/components/trust-level-badge.tsx +15 -11
  303. package/src/components/trust-level-dropdown.tsx +49 -19
  304. package/src/components/typeahead.tsx +57 -59
  305. package/src/components/voice-indicator.tsx +158 -141
  306. package/src/components/voice-subscribe-events.ts +20 -0
  307. package/src/globals.tsx +42 -40
  308. package/src/hooks.test.tsx +141 -134
  309. package/src/hooks.ts +80 -48
  310. package/src/index.tsx +17 -10
  311. package/src/mention-configs.ts +122 -68
  312. package/src/screens/assistants/assistant-config.tsx +28 -18
  313. package/src/screens/assistants/assistant-details.tsx +35 -36
  314. package/src/screens/assistants/assistant-info.tsx +16 -11
  315. package/src/screens/assistants/assistant-list.tsx +37 -34
  316. package/src/screens/assistants/assistant-tools.tsx +41 -20
  317. package/src/screens/console-logs/console-logs-list.tsx +173 -140
  318. package/src/screens/console-logs/log-display.tsx +65 -38
  319. package/src/screens/console-logs/log-filters.tsx +4 -3
  320. package/src/screens/console-logs/mobile-log-card.tsx +78 -71
  321. package/src/screens/console-logs/resizable-table-header.tsx +29 -21
  322. package/src/screens/contacts/contact-details.tsx +29 -30
  323. package/src/screens/contacts/contact-list.tsx +71 -60
  324. package/src/screens/contacts/index.ts +5 -5
  325. package/src/screens/contacts/user-connect.tsx +177 -171
  326. package/src/screens/data-explorer/data-explorer.tsx +134 -98
  327. package/src/screens/data-explorer/index.ts +2 -3
  328. package/src/screens/data-explorer/query-executor.tsx +90 -80
  329. package/src/screens/groups/group-details.tsx +120 -101
  330. package/src/screens/groups/group-invite-listener.tsx +34 -37
  331. package/src/screens/groups/group-list.tsx +119 -103
  332. package/src/screens/groups/group-members.tsx +225 -164
  333. package/src/screens/groups/index.ts +5 -6
  334. package/src/screens/join-group/index.ts +2 -2
  335. package/src/screens/join-group/join-group.tsx +41 -39
  336. package/src/screens/network-viewer/connection-troubleshooter.tsx +145 -104
  337. package/src/screens/network-viewer/cpu-usage-graph.tsx +39 -43
  338. package/src/screens/network-viewer/device-details-modal.tsx +46 -59
  339. package/src/screens/network-viewer/group-details-modal.tsx +68 -49
  340. package/src/screens/network-viewer/index.ts +4 -5
  341. package/src/screens/network-viewer/network-viewer-ipc.ts +23 -0
  342. package/src/screens/network-viewer/network-viewer.tsx +261 -236
  343. package/src/screens/network-viewer/usage-graph.tsx +57 -49
  344. package/src/screens/packages/package-details.tsx +43 -35
  345. package/src/screens/packages/package-info.tsx +107 -66
  346. package/src/screens/packages/package-list.tsx +175 -98
  347. package/src/screens/packages/package-new-local.tsx +28 -26
  348. package/src/screens/packages/package-versions.tsx +102 -77
  349. package/src/screens/peer-types/peer-type-details.tsx +60 -50
  350. package/src/screens/peer-types/peer-type-list.tsx +20 -30
  351. package/src/screens/search/global-search.tsx +153 -137
  352. package/src/screens/settings/color-mode-dropdown.tsx +52 -35
  353. package/src/screens/settings/settings-page.tsx +215 -141
  354. package/src/screens/settings/voice-settings-agent.tsx +13 -12
  355. package/src/screens/settings/voice-settings-api-keys.tsx +14 -12
  356. package/src/screens/settings/voice-settings-output.tsx +12 -11
  357. package/src/screens/settings/voice-settings-providers.tsx +7 -3
  358. package/src/screens/settings/voice-settings-types.ts +52 -49
  359. package/src/screens/settings/voice-settings-wake-word.tsx +25 -9
  360. package/src/screens/settings/voice-settings.tsx +66 -43
  361. package/src/screens/setup-user.tsx +88 -41
  362. package/src/screens/tools/tool-code.tsx +12 -17
  363. package/src/screens/tools/tool-details.tsx +28 -28
  364. package/src/screens/tools/tool-info.tsx +14 -19
  365. package/src/screens/tools/tool-list.tsx +58 -40
  366. package/src/screens/tools/tool-schema.tsx +16 -9
  367. package/src/screens/tools/tool-test-details.tsx +11 -22
  368. package/src/screens/tools/tool-test-list.tsx +29 -30
  369. package/src/screens/variables/variable-details.tsx +63 -51
  370. package/src/screens/variables/variable-list.tsx +29 -30
  371. package/src/screens/welcome-modal.tsx +68 -48
  372. package/src/screens/workflows/workflow-details.tsx +40 -30
  373. package/src/screens/workflows/workflow-info.tsx +4 -11
  374. package/src/screens/workflows/workflow-instructions.tsx +35 -28
  375. package/src/screens/workflows/workflow-list.tsx +50 -40
  376. package/src/setupTests.ts +14 -13
  377. package/src/system-apps/assistants.app.ts +5 -5
  378. package/src/system-apps/console-logs.app.ts +4 -4
  379. package/src/system-apps/contacts.app.ts +6 -6
  380. package/src/system-apps/data-explorer.app.ts +5 -5
  381. package/src/system-apps/groups.app.ts +6 -6
  382. package/src/system-apps/index.ts +49 -49
  383. package/src/system-apps/join-group.app.ts +5 -5
  384. package/src/system-apps/mobile-settings.app.ts +4 -5
  385. package/src/system-apps/network-viewer.app.ts +5 -5
  386. package/src/system-apps/packages.app.ts +5 -5
  387. package/src/system-apps/search.app.ts +6 -6
  388. package/src/system-apps/settings.app.ts +5 -5
  389. package/src/system-apps/threads.app.ts +5 -5
  390. package/src/system-apps/tools.app.ts +5 -5
  391. package/src/system-apps/types.app.ts +5 -5
  392. package/src/system-apps/variables.app.ts +5 -5
  393. package/src/system-apps/workflows.app.ts +5 -5
  394. package/src/tabs-layout/tabs-layout.tsx +345 -254
  395. package/src/tabs-layout/tabs-state.ts +100 -81
  396. package/src/ui-defaults/index.ts +2 -3
  397. package/src/ui-defaults/list-screen.tsx +45 -40
  398. package/src/ui-defaults/markdown-field.tsx +22 -26
  399. package/src/ui-router/routes-loader.ts +40 -24
  400. package/src/ui-router/ui-loader.tsx +312 -214
  401. package/src/utils.ts +68 -81
  402. package/tsconfig.json +5 -10
  403. package/dist/components/input-datetime.d.ts +0 -7
  404. package/dist/components/input-datetime.js +0 -35
  405. package/dist/components/lazy-sortable-list.d.ts +0 -29
  406. package/dist/components/lazy-sortable-list.js +0 -12
  407. package/dist/components/left-bar.d.ts +0 -5
  408. package/dist/components/left-bar.js +0 -207
  409. package/dist/components/main-content-container.d.ts +0 -2
  410. package/dist/components/main-content-container.js +0 -92
  411. package/dist/components/messages/thread-view.d.ts +0 -6
  412. package/dist/components/messages/thread-view.js +0 -174
  413. package/dist/components/off-canvas.d.ts +0 -13
  414. package/dist/components/off-canvas.js +0 -89
  415. package/dist/components/text-list-editor.tsx/text-list-editor.d.ts +0 -6
  416. package/dist/components/text-list-editor.tsx/text-list-editor.js +0 -13
  417. package/dist/components/top-bar.d.ts +0 -2
  418. package/dist/components/top-bar.js +0 -51
  419. package/dist/components/typeahead/mentions-plugin.d.ts +0 -7
  420. package/dist/components/typeahead/mentions-plugin.js +0 -203
  421. package/dist/components/typeahead/typeahead-editor.d.ts +0 -15
  422. package/dist/components/typeahead/typeahead-editor.js +0 -134
  423. package/dist/components/typeahead/typeahead.d.ts +0 -12
  424. package/dist/components/typeahead/typeahead.js +0 -94
  425. package/dist/screens/profile.d.ts +0 -2
  426. package/dist/screens/profile.js +0 -76
  427. package/src/components/input-datetime.tsx +0 -41
  428. package/src/components/lazy-sortable-list.tsx +0 -51
  429. package/src/components/left-bar.tsx +0 -322
  430. package/src/components/main-content-container.tsx +0 -79
  431. package/src/components/messages/thread-view.tsx +0 -214
  432. package/src/components/off-canvas.tsx +0 -83
  433. package/src/components/text-list-editor.tsx/text-list-editor.tsx +0 -13
  434. package/src/components/top-bar.tsx +0 -119
  435. package/src/components/typeahead/mentions-plugin.tsx +0 -265
  436. package/src/components/typeahead/typeahead-editor.tsx +0 -140
  437. package/src/components/typeahead/typeahead.tsx +0 -77
  438. package/src/screens/profile.tsx +0 -75
@@ -1,26 +1,26 @@
1
- import {
2
- formatConnectionCode,
3
- generateConnectionCode,
1
+ import {
2
+ Devices,
3
+ formatConnectionCode,
4
4
  generateConfirmationHash,
5
+ generateConnectionCode,
5
6
  getMe,
6
- getUserContext,
7
- IUser,
8
- IUserConnectInfo,
9
- setUserTrustLevel,
10
- TrustLevel,
11
- userConnectCodeOffer,
12
- userConnectCodeAnswer,
7
+ getUserContext,
8
+ type IUser,
9
+ type IUserConnectInfo,
10
+ setUserTrustLevel,
11
+ TrustLevel,
12
+ Users,
13
+ userConnectCodeAnswer,
14
+ userConnectCodeOffer,
13
15
  userConnectStatus,
14
- Users,
15
- Devices
16
16
  } from "@peers-app/peers-sdk";
17
- import React, { useState, useEffect, useCallback } from 'react';
18
- import { mainContentPath } from '../../globals';
19
- import { useObservable } from '../../hooks';
20
- import { registerInternalPeersUI } from '../../ui-router/ui-loader';
17
+ import { useCallback, useEffect, useState } from "react";
18
+ import { mainContentPath } from "../../globals";
19
+ import { useObservable } from "../../hooks";
20
+ import { registerInternalPeersUI } from "../../ui-router/ui-loader";
21
21
 
22
- type ConnectionMode = 'select' | 'initiate' | 'respond';
23
- type ConnectionStatus = 'idle' | 'waiting' | 'success' | 'error';
22
+ type ConnectionMode = "select" | "initiate" | "respond";
23
+ type ConnectionStatus = "idle" | "waiting" | "success" | "error";
24
24
 
25
25
  interface ConnectionResult {
26
26
  remoteUser: IUser;
@@ -28,17 +28,80 @@ interface ConnectionResult {
28
28
  }
29
29
 
30
30
  export function UserConnect() {
31
- const [mode, setMode] = useState<ConnectionMode>('select');
32
- const [status, setStatus] = useState<ConnectionStatus>('idle');
33
- const [connectionCode, setConnectionCode] = useState<string>('');
34
- const [inputCode, setInputCode] = useState<string>('');
31
+ const [mode, setMode] = useState<ConnectionMode>("select");
32
+ const [status, setStatus] = useState<ConnectionStatus>("idle");
33
+ const [connectionCode, setConnectionCode] = useState<string>("");
34
+ const [inputCode, setInputCode] = useState<string>("");
35
35
  const [result, setResult] = useState<ConnectionResult | null>(null);
36
- const [error, setError] = useState<string>('');
36
+ const [error, setError] = useState<string>("");
37
37
  const [copied, setCopied] = useState(false);
38
38
 
39
39
  // Subscribe to userConnectStatus from the device layer
40
40
  const [connectStatus] = useObservable(userConnectStatus);
41
41
 
42
+ const handleConnectStatusChange = useCallback(
43
+ async (connectStatusValue: string) => {
44
+ if (!connectStatusValue || status === "success") return;
45
+
46
+ if (connectStatusValue.startsWith("Error:")) {
47
+ // Error status
48
+ setError(connectStatusValue.replace("Error: ", ""));
49
+ setStatus("error");
50
+ } else if (connectStatusValue.length > 0) {
51
+ // Success - connectStatus is the remote userId
52
+ const remoteUserId = connectStatusValue;
53
+
54
+ try {
55
+ const userContext = await getUserContext();
56
+ const me = await getMe();
57
+ const remoteUser = await Users(userContext.userDataContext).get(remoteUserId);
58
+
59
+ if (!remoteUser) {
60
+ setError("Could not find connected user");
61
+ setStatus("error");
62
+ return;
63
+ }
64
+
65
+ const remoteDevice = await Devices(userContext.userDataContext).findOne({
66
+ userId: remoteUserId,
67
+ });
68
+ if (!remoteDevice) {
69
+ setError("Could not find connected device but connection was successful");
70
+ setStatus("error");
71
+ return;
72
+ }
73
+
74
+ // Build user connect info for confirmation hash
75
+ const myInfo: IUserConnectInfo = {
76
+ userId: me.userId,
77
+ publicKey: me.publicKey,
78
+ publicBoxKey: me.publicBoxKey,
79
+ deviceId: userContext.deviceId(),
80
+ };
81
+ const remoteInfo: IUserConnectInfo = {
82
+ userId: remoteUser.userId,
83
+ publicKey: remoteUser.publicKey,
84
+ publicBoxKey: remoteUser.publicBoxKey,
85
+ deviceId: remoteDevice.deviceId,
86
+ };
87
+
88
+ const confirmationHash = generateConfirmationHash(myInfo, remoteInfo);
89
+
90
+ setResult({ remoteUser, confirmationHash });
91
+ setStatus("success");
92
+
93
+ // Clear the codes
94
+ userConnectCodeOffer("");
95
+ userConnectCodeAnswer("");
96
+ } catch (err: unknown) {
97
+ setError(err instanceof Error ? err.message : String(err));
98
+ setStatus("error");
99
+ }
100
+ }
101
+ },
102
+ [status],
103
+ );
104
+
42
105
  // Also set up a direct subscription after loading is complete
43
106
  useEffect(() => {
44
107
  let disposed = false;
@@ -49,7 +112,7 @@ export function UserConnect() {
49
112
  subscription = userConnectStatus.subscribe(() => {
50
113
  // Force a re-render by checking the current value
51
114
  const currentStatus = userConnectStatus();
52
- if (currentStatus && typeof currentStatus === 'string') {
115
+ if (currentStatus && typeof currentStatus === "string") {
53
116
  handleConnectStatusChange(currentStatus);
54
117
  }
55
118
  });
@@ -59,70 +122,11 @@ export function UserConnect() {
59
122
  disposed = true;
60
123
  subscription?.dispose();
61
124
  };
62
- }, []);
63
-
64
- // Handle connect status changes
65
- const handleConnectStatusChange = useCallback(async (connectStatusValue: string) => {
66
- if (!connectStatusValue || status === 'success') return;
67
-
68
- if (connectStatusValue.startsWith('Error:')) {
69
- // Error status
70
- setError(connectStatusValue.replace('Error: ', ''));
71
- setStatus('error');
72
- } else if (connectStatusValue.length > 0) {
73
- // Success - connectStatus is the remote userId
74
- const remoteUserId = connectStatusValue;
75
-
76
- try {
77
- const userContext = await getUserContext();
78
- const me = await getMe();
79
- const remoteUser = await Users(userContext.userDataContext).get(remoteUserId);
80
-
81
- if (!remoteUser) {
82
- setError('Could not find connected user');
83
- setStatus('error');
84
- return;
85
- }
86
-
87
- const remoteDevice = await Devices(userContext.userDataContext).findOne({ userId: remoteUserId });
88
- if (!remoteDevice) {
89
- setError('Could not find connected device but connection was successful');
90
- setStatus('error');
91
- return;
92
- }
93
-
94
- // Build user connect info for confirmation hash
95
- const myInfo: IUserConnectInfo = {
96
- userId: me.userId,
97
- publicKey: me.publicKey,
98
- publicBoxKey: me.publicBoxKey,
99
- deviceId: userContext.deviceId(),
100
- };
101
- const remoteInfo: IUserConnectInfo = {
102
- userId: remoteUser.userId,
103
- publicKey: remoteUser.publicKey,
104
- publicBoxKey: remoteUser.publicBoxKey,
105
- deviceId: remoteDevice.deviceId,
106
- };
107
-
108
- const confirmationHash = generateConfirmationHash(myInfo, remoteInfo);
109
-
110
- setResult({ remoteUser, confirmationHash });
111
- setStatus('success');
112
-
113
- // Clear the codes
114
- userConnectCodeOffer('');
115
- userConnectCodeAnswer('');
116
- } catch (err: any) {
117
- setError(err.message || 'Failed to complete connection');
118
- setStatus('error');
119
- }
120
- }
121
- }, [status]);
125
+ }, [handleConnectStatusChange]);
122
126
 
123
127
  // React to userConnectStatus changes from useObservable
124
128
  useEffect(() => {
125
- if (connectStatus && typeof connectStatus === 'string') {
129
+ if (connectStatus && typeof connectStatus === "string") {
126
130
  handleConnectStatusChange(connectStatus);
127
131
  }
128
132
  }, [connectStatus, handleConnectStatusChange]);
@@ -130,18 +134,18 @@ export function UserConnect() {
130
134
  // Clean up on unmount
131
135
  useEffect(() => {
132
136
  return () => {
133
- if (mode === 'initiate' && status === 'waiting') {
134
- userConnectCodeOffer('');
135
- userConnectCodeAnswer('');
137
+ if (mode === "initiate" && status === "waiting") {
138
+ userConnectCodeOffer("");
139
+ userConnectCodeAnswer("");
136
140
  }
137
141
  };
138
142
  }, [mode, status]);
139
143
 
140
144
  const handleInitiate = useCallback(async () => {
141
- setMode('initiate');
142
- setStatus('waiting');
143
- setError('');
144
- userConnectStatus(''); // Clear any previous status
145
+ setMode("initiate");
146
+ setStatus("waiting");
147
+ setError("");
148
+ userConnectStatus(""); // Clear any previous status
145
149
 
146
150
  // Generate the connection code
147
151
  const code = generateConnectionCode();
@@ -151,37 +155,37 @@ export function UserConnect() {
151
155
  }, []);
152
156
 
153
157
  const handleRespond = useCallback(async () => {
154
- if (inputCode.replace(/[^0-9A-Za-z]/g, '').length !== 12) {
155
- setError('Please enter a valid 12-character connection code');
158
+ if (inputCode.replace(/[^0-9A-Za-z]/g, "").length !== 12) {
159
+ setError("Please enter a valid 12-character connection code");
156
160
  return;
157
161
  }
158
-
159
- setStatus('waiting');
160
- setError('');
161
- userConnectStatus(''); // Clear any previous status
162
+
163
+ setStatus("waiting");
164
+ setError("");
165
+ userConnectStatus(""); // Clear any previous status
162
166
  userConnectCodeAnswer(inputCode);
163
167
  }, [inputCode]);
164
168
 
165
169
  const handleCancel = useCallback(async () => {
166
- userConnectCodeOffer('');
167
- userConnectCodeAnswer('');
168
- userConnectStatus('');
169
- setMode('select');
170
- setStatus('idle');
171
- setConnectionCode('');
172
- setError('');
170
+ userConnectCodeOffer("");
171
+ userConnectCodeAnswer("");
172
+ userConnectStatus("");
173
+ setMode("select");
174
+ setStatus("idle");
175
+ setConnectionCode("");
176
+ setError("");
173
177
  }, []);
174
178
 
175
179
  const handleReset = useCallback(() => {
176
- userConnectCodeOffer('');
177
- userConnectCodeAnswer('');
178
- userConnectStatus('');
179
- setMode('select');
180
- setStatus('idle');
181
- setConnectionCode('');
182
- setInputCode('');
180
+ userConnectCodeOffer("");
181
+ userConnectCodeAnswer("");
182
+ userConnectStatus("");
183
+ setMode("select");
184
+ setStatus("idle");
185
+ setConnectionCode("");
186
+ setInputCode("");
183
187
  setResult(null);
184
- setError('');
188
+ setError("");
185
189
  setCopied(false);
186
190
  }, []);
187
191
 
@@ -190,14 +194,18 @@ export function UserConnect() {
190
194
 
191
195
  try {
192
196
  const userContext = await getUserContext();
193
-
197
+
194
198
  // Contact is already saved by the device layer, just set trust level
195
- await setUserTrustLevel(result.remoteUser.userId, TrustLevel.Trusted, userContext.userDataContext);
199
+ await setUserTrustLevel(
200
+ result.remoteUser.userId,
201
+ TrustLevel.Trusted,
202
+ userContext.userDataContext,
203
+ );
196
204
 
197
205
  // Navigate to contact details
198
206
  mainContentPath(`contacts/${result.remoteUser.userId}`);
199
- } catch (err: any) {
200
- setError(err.message || 'Failed to save contact');
207
+ } catch (err: unknown) {
208
+ setError(err instanceof Error ? err.message : String(err));
201
209
  }
202
210
  }, [result]);
203
211
 
@@ -208,13 +216,13 @@ export function UserConnect() {
208
216
  await navigator.clipboard.writeText(connectionCode);
209
217
  setCopied(true);
210
218
  setTimeout(() => setCopied(false), 2000);
211
- } catch (err) {
219
+ } catch (_err) {
212
220
  // Fallback for older browsers
213
- const textArea = document.createElement('textarea');
221
+ const textArea = document.createElement("textarea");
214
222
  textArea.value = connectionCode;
215
223
  document.body.appendChild(textArea);
216
224
  textArea.select();
217
- document.execCommand('copy');
225
+ document.execCommand("copy");
218
226
  document.body.removeChild(textArea);
219
227
  setCopied(true);
220
228
  setTimeout(() => setCopied(false), 2000);
@@ -224,15 +232,15 @@ export function UserConnect() {
224
232
  // Format input code as user types
225
233
  const handleCodeInput = (value: string) => {
226
234
  // Remove non-alphanumeric characters
227
- const cleaned = value.toUpperCase().replace(/[^0-9A-Z]/g, '');
228
-
235
+ const cleaned = value.toUpperCase().replace(/[^0-9A-Z]/g, "");
236
+
229
237
  // Format as XXXX-YYYY-ZZZZ
230
- let formatted = '';
238
+ let formatted = "";
231
239
  for (let i = 0; i < cleaned.length && i < 12; i++) {
232
- if (i === 4 || i === 8) formatted += '-';
240
+ if (i === 4 || i === 8) formatted += "-";
233
241
  formatted += cleaned[i];
234
242
  }
235
-
243
+
236
244
  setInputCode(formatted);
237
245
  };
238
246
 
@@ -243,7 +251,7 @@ export function UserConnect() {
243
251
  <i className="bi-person-plus-fill me-2" />
244
252
  Connect to New User
245
253
  </h4>
246
- {mode !== 'select' && (
254
+ {mode !== "select" && (
247
255
  <button className="btn btn-outline-secondary btn-sm" onClick={handleReset}>
248
256
  <i className="bi-arrow-left me-1" />
249
257
  Back
@@ -252,12 +260,12 @@ export function UserConnect() {
252
260
  </div>
253
261
 
254
262
  {/* Mode Selection */}
255
- {mode === 'select' && (
263
+ {mode === "select" && (
256
264
  <div className="row g-3">
257
265
  <div className="col-md-6">
258
- <div
259
- className="card h-100 border-primary"
260
- style={{ cursor: 'pointer' }}
266
+ <div
267
+ className="card h-100 border-primary"
268
+ style={{ cursor: "pointer" }}
261
269
  onClick={handleInitiate}
262
270
  >
263
271
  <div className="card-body text-center p-4">
@@ -270,10 +278,10 @@ export function UserConnect() {
270
278
  </div>
271
279
  </div>
272
280
  <div className="col-md-6">
273
- <div
274
- className="card h-100 border-success"
275
- style={{ cursor: 'pointer' }}
276
- onClick={() => setMode('respond')}
281
+ <div
282
+ className="card h-100 border-success"
283
+ style={{ cursor: "pointer" }}
284
+ onClick={() => setMode("respond")}
277
285
  >
278
286
  <div className="card-body text-center p-4">
279
287
  <i className="bi-keyboard display-4 text-success mb-3" />
@@ -288,32 +296,30 @@ export function UserConnect() {
288
296
  )}
289
297
 
290
298
  {/* Initiate Mode - Show Generated Code */}
291
- {mode === 'initiate' && status === 'waiting' && (
299
+ {mode === "initiate" && status === "waiting" && (
292
300
  <div className="text-center">
293
301
  <div className="mb-4">
294
302
  <p className="text-muted">Share this code with the person you want to connect with:</p>
295
303
  </div>
296
-
297
- <div className="mb-4" style={{ maxWidth: '400px', margin: '0 auto' }}>
304
+
305
+ <div className="mb-4" style={{ maxWidth: "400px", margin: "0 auto" }}>
298
306
  <div className="input-group">
299
307
  <input
300
308
  type="text"
301
309
  className="form-control form-control-lg text-center font-monospace"
302
- value={connectionCode || 'XXXX-YYYY-ZZZZ'}
310
+ value={connectionCode || "XXXX-YYYY-ZZZZ"}
303
311
  readOnly
304
- style={{ letterSpacing: '0.15em', fontSize: '1.5rem' }}
312
+ style={{ letterSpacing: "0.15em", fontSize: "1.5rem" }}
305
313
  />
306
- <button
307
- className="btn btn-outline-primary"
314
+ <button
315
+ className="btn btn-outline-primary"
308
316
  onClick={handleCopyCode}
309
317
  title="Copy to clipboard"
310
318
  >
311
319
  <i className={copied ? "bi-check-lg" : "bi-clipboard"} />
312
320
  </button>
313
321
  </div>
314
- {copied && (
315
- <small className="text-success mt-1 d-block">Copied!</small>
316
- )}
322
+ {copied && <small className="text-success mt-1 d-block">Copied!</small>}
317
323
  </div>
318
324
 
319
325
  <div className="mb-4">
@@ -321,9 +327,7 @@ export function UserConnect() {
321
327
  <span className="text-muted">Waiting for connection...</span>
322
328
  </div>
323
329
 
324
- <p className="text-muted small">
325
- This code will expire in 10 minutes
326
- </p>
330
+ <p className="text-muted small">This code will expire in 10 minutes</p>
327
331
 
328
332
  <button className="btn btn-outline-secondary" onClick={handleCancel}>
329
333
  Cancel
@@ -332,13 +336,13 @@ export function UserConnect() {
332
336
  )}
333
337
 
334
338
  {/* Respond Mode - Enter Code */}
335
- {mode === 'respond' && status !== 'success' && (
339
+ {mode === "respond" && status !== "success" && (
336
340
  <div className="text-center">
337
341
  <div className="mb-4">
338
342
  <p className="text-muted">Enter the connection code shared with you:</p>
339
343
  </div>
340
344
 
341
- <div className="mb-4" style={{ maxWidth: '400px', margin: '0 auto' }}>
345
+ <div className="mb-4" style={{ maxWidth: "400px", margin: "0 auto" }}>
342
346
  <input
343
347
  type="text"
344
348
  className="form-control form-control-lg text-center font-monospace"
@@ -346,23 +350,25 @@ export function UserConnect() {
346
350
  value={inputCode}
347
351
  onChange={(e) => handleCodeInput(e.target.value)}
348
352
  maxLength={14}
349
- style={{ letterSpacing: '0.15em', fontSize: '1.5rem' }}
350
- autoFocus
353
+ style={{ letterSpacing: "0.15em", fontSize: "1.5rem" }}
351
354
  />
352
355
  </div>
353
356
 
354
357
  {error && (
355
- <div className="alert alert-danger" style={{ maxWidth: '400px', margin: '0 auto 1rem' }}>
358
+ <div
359
+ className="alert alert-danger"
360
+ style={{ maxWidth: "400px", margin: "0 auto 1rem" }}
361
+ >
356
362
  {error}
357
363
  </div>
358
364
  )}
359
365
 
360
- <button
366
+ <button
361
367
  className="btn btn-primary btn-lg"
362
368
  onClick={handleRespond}
363
- disabled={status === 'waiting' || inputCode.replace(/[^0-9A-Z]/gi, '').length !== 12}
369
+ disabled={status === "waiting" || inputCode.replace(/[^0-9A-Z]/gi, "").length !== 12}
364
370
  >
365
- {status === 'waiting' ? (
371
+ {status === "waiting" ? (
366
372
  <>
367
373
  <span className="spinner-border spinner-border-sm me-2" role="status" />
368
374
  Connecting...
@@ -378,27 +384,27 @@ export function UserConnect() {
378
384
  )}
379
385
 
380
386
  {/* Success State */}
381
- {status === 'success' && result && (
387
+ {status === "success" && result && (
382
388
  <div className="text-center">
383
389
  <div className="mb-4">
384
390
  <i className="bi-check-circle-fill text-success display-3" />
385
391
  </div>
386
-
392
+
387
393
  <h5 className="mb-4">Connection Successful!</h5>
388
394
 
389
- <div className="card mb-4" style={{ maxWidth: '400px', margin: '0 auto' }}>
395
+ <div className="card mb-4" style={{ maxWidth: "400px", margin: "0 auto" }}>
390
396
  <div className="card-body">
391
397
  <p className="text-muted mb-2">Verify with the other person that you both see:</p>
392
- <h3 className="font-monospace text-primary mb-3" style={{ letterSpacing: '0.2em' }}>
398
+ <h3 className="font-monospace text-primary mb-3" style={{ letterSpacing: "0.2em" }}>
393
399
  {result.confirmationHash}
394
400
  </h3>
395
-
401
+
396
402
  <hr />
397
-
403
+
398
404
  <div className="text-start">
399
405
  <small className="text-muted">Name:</small>
400
406
  <p className="mb-2">{result.remoteUser.name}</p>
401
-
407
+
402
408
  <small className="text-muted">User ID:</small>
403
409
  <p className="font-monospace small mb-0">{result.remoteUser.userId}</p>
404
410
  </div>
@@ -418,15 +424,15 @@ export function UserConnect() {
418
424
  )}
419
425
 
420
426
  {/* Error State */}
421
- {status === 'error' && (
427
+ {status === "error" && (
422
428
  <div className="text-center">
423
429
  <div className="mb-4">
424
430
  <i className="bi-x-circle-fill text-danger display-3" />
425
431
  </div>
426
-
432
+
427
433
  <h5 className="mb-4">Connection Failed</h5>
428
434
 
429
- <div className="alert alert-danger" style={{ maxWidth: '400px', margin: '0 auto 1rem' }}>
435
+ <div className="alert alert-danger" style={{ maxWidth: "400px", margin: "0 auto 1rem" }}>
430
436
  {error}
431
437
  </div>
432
438
 
@@ -440,13 +446,13 @@ export function UserConnect() {
440
446
  }
441
447
 
442
448
  registerInternalPeersUI({
443
- peersUIId: '000user00connect0screen01',
449
+ peersUIId: "000user00connect0screen01",
444
450
  component: UserConnect,
445
451
  routes: [
446
452
  {
447
- isMatch: (props, context) => context.path === 'contacts/connect',
448
- uiCategory: 'screen',
449
- priority: 3
450
- }
451
- ]
453
+ isMatch: (_props, context) => context.path === "contacts/connect",
454
+ uiCategory: "screen",
455
+ priority: 3,
456
+ },
457
+ ],
452
458
  });