@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,46 +1,58 @@
1
- import { getMe, getUserContext, Groups, ICursorIterable, IGroup, newid, newKeys, observable, peersCorePackageId, rpcServerCalls, setUserTrustLevel, TrustLevel, Users } from "@peers-app/peers-sdk";
2
- import React, { useEffect, useState } from 'react';
3
- import { Input } from '../../components/input';
4
- import { LazyList } from '../../components/lazy-list';
5
- import { LoadingIndicator } from '../../components/loading-indicator';
6
- import { MarkdownWithMentions } from '../../components/markdown-with-mentions';
7
- import { isDesktop, mainContentPath } from '../../globals';
8
- import { useObservable, usePromise } from '../../hooks';
9
- import { registerInternalPeersUI } from '../../ui-router/ui-loader';
1
+ import {
2
+ Groups,
3
+ getMe,
4
+ getUserContext,
5
+ type ICursorIterable,
6
+ type IGroup,
7
+ newid,
8
+ newKeys,
9
+ observable,
10
+ peersCorePackageId,
11
+ rpcServerCalls,
12
+ setUserTrustLevel,
13
+ TrustLevel,
14
+ Users,
15
+ } from "@peers-app/peers-sdk";
16
+ import type React from "react";
17
+ import { useCallback, useEffect, useState } from "react";
18
+ import { Input } from "../../components/input";
19
+ import { LazyList } from "../../components/lazy-list";
20
+ import { LoadingIndicator } from "../../components/loading-indicator";
21
+ import { MarkdownWithMentions } from "../../components/markdown-with-mentions";
22
+ import { isDesktop, mainContentPath } from "../../globals";
23
+ import { useObservable, usePromise } from "../../hooks";
24
+ import { registerInternalPeersUI } from "../../ui-router/ui-loader";
10
25
 
11
26
  export function GroupList() {
12
27
  const userContext = usePromise(getUserContext);
13
- const [searchTextObs] = useState(() => observable(''));
28
+ const [searchTextObs] = useState(() => observable(""));
14
29
  const [searchText] = useObservable(searchTextObs);
15
30
  const [cursorObs] = useState(() => observable<ICursorIterable<IGroup> | undefined>());
16
-
31
+
17
32
  // All hooks must be called before any conditional returns
18
33
  const groupsTable = userContext ? Groups(userContext.userDataContext) : null;
19
34
 
20
- async function newCursor() {
35
+ const newCursor = useCallback(async () => {
21
36
  if (!groupsTable) return;
22
-
37
+
23
38
  const filter = {
24
- $or: [
25
- { name: { $matchWords: searchText } },
26
- { description: { $matchWords: searchText } },
27
- ],
28
- disabled: { $ne: true }
39
+ $or: [{ name: { $matchWords: searchText } }, { description: { $matchWords: searchText } }],
40
+ disabled: { $ne: true },
29
41
  };
30
- const cursor = await groupsTable.cursor(searchText ? filter : { disabled: { $ne: true } }, {
31
- sortBy: ['name'],
32
- ...(searchText ? {} : { textSearch: searchText })
42
+ const cursor = await groupsTable.cursor(searchText ? filter : { disabled: { $ne: true } }, {
43
+ sortBy: ["name"],
44
+ ...(searchText ? {} : { textSearch: searchText }),
33
45
  });
34
46
  cursorObs(cursor);
35
47
  return cursor;
36
- }
48
+ }, [groupsTable, searchText, cursorObs]);
37
49
 
38
50
  useEffect(() => {
39
51
  if (groupsTable) {
40
- newCursor();
52
+ void newCursor();
41
53
  }
42
- }, [searchText, groupsTable]);
43
-
54
+ }, [groupsTable, newCursor]);
55
+
44
56
  // Early return after all hooks
45
57
  if (!userContext) {
46
58
  return <LoadingIndicator />;
@@ -48,13 +60,14 @@ export function GroupList() {
48
60
 
49
61
  async function loadMore(existing: IGroup[]): Promise<IGroup[]> {
50
62
  if (!groupsTable) return [];
51
-
52
- let moreMatches: IGroup[] = [];
53
- let cursor = cursorObs() || await newCursor();
63
+
64
+ const moreMatches: IGroup[] = [];
65
+ const cursor = cursorObs() || (await newCursor());
54
66
  if (!cursor) return [];
55
-
67
+
56
68
  for await (const nextRecord of cursor) {
57
- if (existing.find(e => e.groupId === nextRecord.groupId)) continue;
69
+ if (existing.some((e) => e.groupId === nextRecord.groupId)) continue;
70
+ if (moreMatches.some((e) => e.groupId === nextRecord.groupId)) continue;
58
71
  moreMatches.push(nextRecord);
59
72
  if (searchText.length && moreMatches.length > 5) break;
60
73
  if (moreMatches.length >= 10) break;
@@ -69,7 +82,7 @@ export function GroupList() {
69
82
  if (evt.key !== "Enter") return;
70
83
  const name = searchText.trim();
71
84
  if (!name) return;
72
- searchTextObs('');
85
+ searchTextObs("");
73
86
  await newRecord(name);
74
87
  }
75
88
 
@@ -86,16 +99,17 @@ export function GroupList() {
86
99
  const groupDataContext = userContext.getDataContext(groupId);
87
100
 
88
101
  // Store groupKeys.secretKey securely for this group
89
- const persistentVarsTable = userContext.userDataContext.tableContainer.getTableByName('PersistentVars');
90
- const groupSecretKeyVarName = 'groupSecretKey_' + groupDataContext.dataContextId;
102
+ const persistentVarsTable =
103
+ userContext.userDataContext.tableContainer.getTableByName("PersistentVars");
104
+ const groupSecretKeyVarName = `groupSecretKey_${groupDataContext.dataContextId}`;
91
105
  await persistentVarsTable.save({
92
106
  persistentVarId: newid(),
93
107
  name: groupSecretKeyVarName,
94
- scope: 'groupUser',
108
+ scope: "groupUser",
95
109
  isSecret: true,
96
110
  value: { value: groupKeys.secretKey },
97
111
  });
98
-
112
+
99
113
  // add me to the group's users table
100
114
  const me = await getMe();
101
115
  await Users(groupDataContext).save(me);
@@ -107,52 +121,49 @@ export function GroupList() {
107
121
  const group = await Groups(userContext.userDataContext).signAndSave({
108
122
  groupId,
109
123
  name: groupName,
110
- description: '',
111
- iconClassName: 'bi-people-fill', // Default icon
124
+ description: "",
125
+ iconClassName: "bi-people-fill", // Default icon
112
126
  founderUserId: me.userId,
113
127
  disabled: false,
114
128
  publicKey: groupKeys.publicKey,
115
129
  publicBoxKey: groupKeys.publicBoxKey,
116
- signature: '', // will be set via signAndSave
130
+ signature: "", // will be set via signAndSave
117
131
  });
118
132
  await Groups(groupDataContext).signAndSave(group);
119
133
 
120
134
  // Auto-install peers-core for the new group
121
- await rpcServerCalls.addOrUpdatePackage(peersCorePackageId, { dataContextId: groupId }).catch((err: any) => {
122
- console.error('Error auto-installing peers-core for group:', err);
123
- });
135
+ await rpcServerCalls
136
+ .addOrUpdatePackage(peersCorePackageId, { dataContextId: groupId })
137
+ .catch((err: unknown) => {
138
+ console.error("Error auto-installing peers-core for group:", err);
139
+ });
124
140
 
125
141
  mainContentPath(`groups/${group.groupId}`);
126
142
  return group;
127
143
  }
128
144
 
129
145
  function renderItem(group: IGroup) {
130
- const groupIcon = group.iconClassName || 'bi-people-fill';
146
+ const groupIcon = group.iconClassName || "bi-people-fill";
131
147
  return (
132
- <div
133
- key={group.groupId}
134
- className='container-fluid pb-4'
135
- >
148
+ <div key={group.groupId} className="container-fluid pb-4">
136
149
  <i className={groupIcon}></i>&nbsp;
137
- <a href={`#groups/${group.groupId}`}>
138
- {group.name || '<unnamed-group>'}
139
- </a>
140
- <div style={{ paddingLeft: '20px' }}>
141
- <MarkdownWithMentions content={group.description || ''} />
150
+ <a href={`#groups/${group.groupId}`}>{group.name || "<unnamed-group>"}</a>
151
+ <div style={{ paddingLeft: "20px" }}>
152
+ <MarkdownWithMentions content={group.description || ""} />
142
153
  </div>
143
154
  </div>
144
155
  );
145
156
  }
146
157
 
147
158
  return (
148
- <div className='container-fluid'>
159
+ <div className="container-fluid">
149
160
  <div className="input-group mt-3 mb-3">
150
- <Input
151
- value={searchTextObs}
152
- className="form-control"
161
+ <Input
162
+ value={searchTextObs}
163
+ className="form-control"
153
164
  placeholder="Search or create group"
154
- autoFocus={isDesktop() ? true : false}
155
- onKeyUp={evt => searchSubmit(evt)}
165
+ autoFocus={!!isDesktop()}
166
+ onKeyUp={(evt) => searchSubmit(evt)}
156
167
  />
157
168
  <ImportGroupButton />
158
169
  </div>
@@ -161,7 +172,7 @@ export function GroupList() {
161
172
  <LazyList
162
173
  resetTrigger={searchText}
163
174
  loadMore={loadMore}
164
- scrollThreshold={0.6}
175
+ scrollThreshold={0.6}
165
176
  renderItems={(groups) => {
166
177
  return groups.map(renderItem);
167
178
  }}
@@ -184,7 +195,7 @@ export function GroupList() {
184
195
  const ImportGroupButton = () => {
185
196
  const [isImporting, setIsImporting] = useState(false);
186
197
  const [showImportDialog, setShowImportDialog] = useState(false);
187
- const [importText, setImportText] = useState('');
198
+ const [importText, setImportText] = useState("");
188
199
  const [importResult, setImportResult] = useState<{
189
200
  success: boolean;
190
201
  message: string;
@@ -195,34 +206,33 @@ const ImportGroupButton = () => {
195
206
  if (!importText.trim()) {
196
207
  setImportResult({
197
208
  success: false,
198
- message: 'Please paste the group share JSON data'
209
+ message: "Please paste the group share JSON data",
199
210
  });
200
211
  return;
201
212
  }
202
213
 
203
214
  setIsImporting(true);
204
215
  setImportResult(null);
205
-
216
+
206
217
  try {
207
218
  const groupId = await rpcServerCalls.importGroupShare(importText.trim());
208
219
  setImportResult({
209
220
  success: true,
210
221
  message: `Group imported successfully!`,
211
- groupId
222
+ groupId,
212
223
  });
213
- setImportText('');
214
-
224
+ setImportText("");
225
+
215
226
  // Navigate to the imported group after a brief delay
216
227
  setTimeout(() => {
217
228
  mainContentPath(`groups/${groupId}`);
218
229
  setShowImportDialog(false);
219
230
  setImportResult(null);
220
231
  }, 2000);
221
-
222
- } catch (error: any) {
232
+ } catch (error: unknown) {
223
233
  setImportResult({
224
234
  success: false,
225
- message: `Import failed: ${error.message}`
235
+ message: `Import failed: ${error instanceof Error ? error.message : String(error)}`,
226
236
  });
227
237
  } finally {
228
238
  setIsImporting(false);
@@ -231,31 +241,28 @@ const ImportGroupButton = () => {
231
241
 
232
242
  const handlePasteFromClipboard = async () => {
233
243
  try {
234
- if (navigator.clipboard && navigator.clipboard.readText) {
244
+ if (navigator.clipboard?.readText) {
235
245
  const clipboardText = await navigator.clipboard.readText();
236
246
  setImportText(clipboardText);
237
247
  }
238
- } catch (error) {
239
- console.log('Failed to read from clipboard - user can paste manually');
248
+ } catch (_error) {
249
+ console.log("Failed to read from clipboard - user can paste manually");
240
250
  }
241
251
  };
242
252
 
243
253
  return (
244
254
  <>
245
- <button
246
- className="btn btn-outline-secondary dropdown-toggle"
247
- type="button"
248
- data-bs-toggle="dropdown"
255
+ <button
256
+ className="btn btn-outline-secondary dropdown-toggle"
257
+ type="button"
258
+ data-bs-toggle="dropdown"
249
259
  aria-expanded="false"
250
260
  >
251
261
  <i className="bi-plus-lg"></i>
252
262
  </button>
253
263
  <ul className="dropdown-menu dropdown-menu-end">
254
264
  <li>
255
- <button
256
- className="dropdown-item"
257
- onClick={() => setShowImportDialog(true)}
258
- >
265
+ <button className="dropdown-item" onClick={() => setShowImportDialog(true)}>
259
266
  <i className="bi-download me-2"></i>
260
267
  Import Shared Group
261
268
  </button>
@@ -263,19 +270,21 @@ const ImportGroupButton = () => {
263
270
  </ul>
264
271
 
265
272
  {showImportDialog && (
266
- <div className="position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center"
267
- style={{ backgroundColor: 'rgba(0,0,0,0.5)', zIndex: 1050 }}>
268
- <div className="card" style={{ maxWidth: '600px', width: '90%' }}>
273
+ <div
274
+ className="position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center"
275
+ style={{ backgroundColor: "rgba(0,0,0,0.5)", zIndex: 1050 }}
276
+ >
277
+ <div className="card" style={{ maxWidth: "600px", width: "90%" }}>
269
278
  <div className="card-header d-flex justify-content-between align-items-center">
270
279
  <h6 className="mb-0">
271
280
  <i className="bi-download me-2"></i>
272
281
  Import Shared Group
273
282
  </h6>
274
- <button
275
- className="btn-close"
283
+ <button
284
+ className="btn-close"
276
285
  onClick={() => {
277
286
  setShowImportDialog(false);
278
- setImportText('');
287
+ setImportText("");
279
288
  setImportResult(null);
280
289
  }}
281
290
  aria-label="Close"
@@ -283,13 +292,14 @@ const ImportGroupButton = () => {
283
292
  </div>
284
293
  <div className="card-body">
285
294
  <p className="mb-3">
286
- Paste the group share JSON data below to import a shared group with its admin members.
295
+ Paste the group share JSON data below to import a shared group with its admin
296
+ members.
287
297
  </p>
288
-
298
+
289
299
  <div className="mb-3">
290
300
  <label className="form-label">Group Share JSON:</label>
291
301
  <div className="d-flex gap-2 mb-2">
292
- <button
302
+ <button
293
303
  className="btn btn-secondary btn-sm"
294
304
  onClick={handlePasteFromClipboard}
295
305
  title="Paste from clipboard"
@@ -304,13 +314,15 @@ const ImportGroupButton = () => {
304
314
  value={importText}
305
315
  onChange={(e) => setImportText(e.target.value)}
306
316
  placeholder="Paste the group share JSON here..."
307
- style={{ fontSize: '0.9em' }}
317
+ style={{ fontSize: "0.9em" }}
308
318
  />
309
319
  </div>
310
-
320
+
311
321
  {importResult && (
312
- <div className={`alert alert-${importResult.success ? 'success' : 'danger'} mb-3`}>
313
- <i className={`bi-${importResult.success ? 'check-circle' : 'exclamation-triangle'} me-2`}></i>
322
+ <div className={`alert alert-${importResult.success ? "success" : "danger"} mb-3`}>
323
+ <i
324
+ className={`bi-${importResult.success ? "check-circle" : "exclamation-triangle"} me-2`}
325
+ ></i>
314
326
  {importResult.message}
315
327
  {importResult.success && importResult.groupId && (
316
328
  <div className="mt-2">
@@ -319,27 +331,31 @@ const ImportGroupButton = () => {
319
331
  )}
320
332
  </div>
321
333
  )}
322
-
334
+
323
335
  <div className="text-end">
324
- <button
336
+ <button
325
337
  className="btn btn-secondary me-2"
326
338
  onClick={() => {
327
339
  setShowImportDialog(false);
328
- setImportText('');
340
+ setImportText("");
329
341
  setImportResult(null);
330
342
  }}
331
343
  disabled={isImporting}
332
344
  >
333
345
  Cancel
334
346
  </button>
335
- <button
347
+ <button
336
348
  className="btn btn-primary"
337
349
  onClick={handleImport}
338
350
  disabled={isImporting || !importText.trim()}
339
351
  >
340
352
  {isImporting ? (
341
353
  <>
342
- <span className="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span>
354
+ <span
355
+ className="spinner-border spinner-border-sm me-1"
356
+ role="status"
357
+ aria-hidden="true"
358
+ ></span>
343
359
  Importing...
344
360
  </>
345
361
  ) : (
@@ -359,13 +375,13 @@ const ImportGroupButton = () => {
359
375
  };
360
376
 
361
377
  registerInternalPeersUI({
362
- peersUIId: '00mf8qrs004w5u2wqk64d2yp6',
378
+ peersUIId: "00mf8qrs004w5u2wqk64d2yp6",
363
379
  component: GroupList,
364
380
  routes: [
365
381
  {
366
- isMatch: (props, context) => context.path === 'groups',
367
- uiCategory: 'screen',
368
- priority: 2
369
- }
370
- ]
371
- })
382
+ isMatch: (_props, context) => context.path === "groups",
383
+ uiCategory: "screen",
384
+ priority: 2,
385
+ },
386
+ ],
387
+ });