@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,37 +1,52 @@
1
- import React, { useState, useEffect, useRef } from 'react';
2
- import { LoadingIndicator } from '../../components/loading-indicator';
3
- import { registerInternalPeersUI } from '../../ui-router/ui-loader';
4
- import { isDesktop } from '../../globals';
5
- import { groupDeviceVar, newid } from '@peers-app/peers-sdk';
6
- import { useObservable } from '../../hooks';
1
+ import { groupDeviceVar, newid } from "@peers-app/peers-sdk";
2
+ import type React from "react";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { LoadingIndicator } from "../../components/loading-indicator";
5
+ import { isDesktop } from "../../globals";
6
+ import { useObservable } from "../../hooks";
7
+ import { registerInternalPeersUI } from "../../ui-router/ui-loader";
7
8
 
8
9
  interface ISqlQueryResult {
9
10
  columns: string[];
10
- rows: any[][];
11
+ rows: unknown[][];
11
12
  rowCount: number;
12
13
  isWriteOperation?: boolean;
13
14
  changesCount?: number;
14
15
  }
15
16
 
17
+ type DataExplorerQueryApi = {
18
+ executeQuery: (query: string, writeEnabled: boolean) => Promise<ISqlQueryResult>;
19
+ };
20
+
21
+ type WindowWithDataExplorerQuery = Window & {
22
+ electronAPI?: { dataExplorer?: DataExplorerQueryApi };
23
+ };
24
+
25
+ function getDataExplorerQueryApi(): DataExplorerQueryApi | undefined {
26
+ return (window as WindowWithDataExplorerQuery).electronAPI?.dataExplorer;
27
+ }
28
+
16
29
  interface IQueryTab {
17
30
  id: string;
18
31
  name: string;
19
32
  query: string;
20
33
  }
21
34
 
22
- const defaultQuery = 'SELECT * FROM sqlite_master WHERE type=\'table\' LIMIT 10';
35
+ const defaultQuery = "SELECT * FROM sqlite_master WHERE type='table' LIMIT 10";
23
36
 
24
37
  // Persistent vars at module level
25
- const queryTabs = groupDeviceVar<IQueryTab[]>('dataExplorerQueryTabs', {
26
- defaultValue: [{
27
- id: newid(),
28
- name: 'Query 1',
29
- query: defaultQuery
30
- }]
38
+ const queryTabs = groupDeviceVar<IQueryTab[]>("dataExplorerQueryTabs", {
39
+ defaultValue: [
40
+ {
41
+ id: newid(),
42
+ name: "Query 1",
43
+ query: defaultQuery,
44
+ },
45
+ ],
31
46
  });
32
47
 
33
- const activeQueryTabId = groupDeviceVar<string>('dataExplorerActiveQueryTab', {
34
- defaultValue: ''
48
+ const activeQueryTabId = groupDeviceVar<string>("dataExplorerActiveQueryTab", {
49
+ defaultValue: "",
35
50
  });
36
51
 
37
52
  export function QueryExecutor() {
@@ -41,30 +56,30 @@ export function QueryExecutor() {
41
56
  const [errors, setErrors] = useState<{ [tabId: string]: string }>({});
42
57
  const [loading, setLoading] = useState<{ [tabId: string]: boolean }>({});
43
58
  const [writeEnabled, setWriteEnabled] = useState(false);
44
-
59
+
45
60
  // Local state for query input to avoid locking up on fast typing
46
- const [localQuery, setLocalQuery] = useState<string>('');
61
+ const [localQuery, setLocalQuery] = useState<string>("");
47
62
  const debounceTimeoutRef = useRef<NodeJS.Timeout>();
48
- const lastSavedQueryRef = useRef<string>('');
63
+ const lastSavedQueryRef = useRef<string>("");
49
64
 
50
65
  const tabs = queryTabs();
51
66
  const activeTabId = activeQueryTabId();
52
- const activeTab = tabs.find(t => t.id === activeTabId);
53
-
67
+ const activeTab = tabs.find((t) => t.id === activeTabId);
68
+
54
69
  // Sync local query with persisted query when tab changes
55
70
  useEffect(() => {
56
- const persistedQuery = activeTab?.query || '';
71
+ const persistedQuery = activeTab?.query || "";
57
72
  setLocalQuery(persistedQuery);
58
73
  lastSavedQueryRef.current = persistedQuery;
59
- }, [activeTabId, activeTab?.id]);
74
+ }, [activeTab?.query]);
60
75
 
61
76
  // Subscribe to tab changes
62
- useEffect(() => {
77
+ useEffect(() => {
63
78
  // Initialize activeTabId if not set
64
79
  if (!activeQueryTabId() && queryTabs().length > 0) {
65
80
  activeQueryTabId(queryTabs()[0].id);
66
81
  }
67
- }, [queryTabs()]);
82
+ }, []);
68
83
 
69
84
  const query = localQuery;
70
85
  const result = activeTab ? results[activeTab.id] : null;
@@ -75,23 +90,21 @@ export function QueryExecutor() {
75
90
  const updatePersistedQuery = (newQuery: string) => {
76
91
  if (!activeTab) return;
77
92
  if (newQuery === lastSavedQueryRef.current) return; // Skip if unchanged
78
-
93
+
79
94
  const currentTabs = queryTabs();
80
- queryTabs(currentTabs.map(t =>
81
- t.id === activeTab.id ? { ...t, query: newQuery } : t
82
- ));
95
+ queryTabs(currentTabs.map((t) => (t.id === activeTab.id ? { ...t, query: newQuery } : t)));
83
96
  lastSavedQueryRef.current = newQuery;
84
97
  };
85
98
 
86
99
  const setQuery = (newQuery: string) => {
87
100
  // Update local state immediately for responsive UI
88
101
  setLocalQuery(newQuery);
89
-
102
+
90
103
  // Clear existing debounce timeout
91
104
  if (debounceTimeoutRef.current) {
92
105
  clearTimeout(debounceTimeoutRef.current);
93
106
  }
94
-
107
+
95
108
  // Debounce the persisted update (300ms delay)
96
109
  debounceTimeoutRef.current = setTimeout(() => {
97
110
  updatePersistedQuery(newQuery);
@@ -118,7 +131,7 @@ export function QueryExecutor() {
118
131
 
119
132
  const setResult = (result: ISqlQueryResult | null) => {
120
133
  if (!activeTab) return;
121
- setResults(prev => {
134
+ setResults((prev) => {
122
135
  const newResults = { ...prev };
123
136
  if (result === null) {
124
137
  delete newResults[activeTab.id];
@@ -131,7 +144,7 @@ export function QueryExecutor() {
131
144
 
132
145
  const setError = (error: string | null) => {
133
146
  if (!activeTab) return;
134
- setErrors(prev => {
147
+ setErrors((prev) => {
135
148
  const newErrors = { ...prev };
136
149
  if (error === null) {
137
150
  delete newErrors[activeTab.id];
@@ -144,12 +157,12 @@ export function QueryExecutor() {
144
157
 
145
158
  const setLoadingState = (isLoading: boolean) => {
146
159
  if (!activeTab) return;
147
- setLoading(prev => ({ ...prev, [activeTab.id]: isLoading }));
160
+ setLoading((prev) => ({ ...prev, [activeTab.id]: isLoading }));
148
161
  };
149
162
 
150
163
  const executeQuery = async () => {
151
164
  if (!query.trim()) {
152
- setError('Please enter a query');
165
+ setError("Please enter a query");
153
166
  return;
154
167
  }
155
168
 
@@ -165,16 +178,16 @@ export function QueryExecutor() {
165
178
  setError(null);
166
179
  setResult(null);
167
180
 
168
- const api = (window as any).electronAPI?.dataExplorer;
181
+ const api = getDataExplorerQueryApi();
169
182
  if (!api) {
170
- setError('Data Explorer API not available');
183
+ setError("Data Explorer API not available");
171
184
  return;
172
185
  }
173
186
 
174
187
  const queryResult = await api.executeQuery(query, writeEnabled);
175
188
  setResult(queryResult);
176
- } catch (err: any) {
177
- setError(err.message || 'Query execution failed');
189
+ } catch (err: unknown) {
190
+ setError(err instanceof Error ? err.message : "Query execution failed");
178
191
  } finally {
179
192
  setLoadingState(false);
180
193
  }
@@ -185,7 +198,7 @@ export function QueryExecutor() {
185
198
  const newTab: IQueryTab = {
186
199
  id: newid(),
187
200
  name: `Query ${currentTabs.length + 1}`,
188
- query: defaultQuery
201
+ query: defaultQuery,
189
202
  };
190
203
  queryTabs([...currentTabs, newTab]);
191
204
  activeQueryTabId(newTab.id);
@@ -195,8 +208,8 @@ export function QueryExecutor() {
195
208
  const currentTabs = queryTabs();
196
209
  if (currentTabs.length === 1) return; // Don't close the last tab
197
210
 
198
- const tabIndex = currentTabs.findIndex(t => t.id === tabId);
199
- const newTabs = currentTabs.filter(t => t.id !== tabId);
211
+ const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
212
+ const newTabs = currentTabs.filter((t) => t.id !== tabId);
200
213
 
201
214
  queryTabs(newTabs);
202
215
 
@@ -207,28 +220,26 @@ export function QueryExecutor() {
207
220
  }
208
221
 
209
222
  // Clean up results and errors for closed tab
210
- setResults(prev => {
223
+ setResults((prev) => {
211
224
  const newResults = { ...prev };
212
225
  delete newResults[tabId];
213
226
  return newResults;
214
227
  });
215
- setErrors(prev => {
228
+ setErrors((prev) => {
216
229
  const newErrors = { ...prev };
217
230
  delete newErrors[tabId];
218
231
  return newErrors;
219
232
  });
220
233
  };
221
234
 
222
- const renameTab = (tabId: string, newName: string) => {
235
+ const _renameTab = (tabId: string, newName: string) => {
223
236
  const currentTabs = queryTabs();
224
- queryTabs(currentTabs.map(t =>
225
- t.id === tabId ? { ...t, name: newName } : t
226
- ));
237
+ queryTabs(currentTabs.map((t) => (t.id === tabId ? { ...t, name: newName } : t)));
227
238
  };
228
239
 
229
240
  const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
230
241
  // Execute on Cmd/Ctrl + Enter
231
- if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {
242
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
232
243
  e.preventDefault();
233
244
  executeQuery();
234
245
  }
@@ -268,13 +279,10 @@ export function QueryExecutor() {
268
279
  {tabs.map((tab) => (
269
280
  <li key={tab.id} className="nav-item">
270
281
  <div
271
- className={`nav-link ${tab.id === activeTabId ? 'active' : ''}`}
272
- style={{ cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '8px' }}
282
+ className={`nav-link ${tab.id === activeTabId ? "active" : ""}`}
283
+ style={{ cursor: "pointer", display: "flex", alignItems: "center", gap: "8px" }}
273
284
  >
274
- <span
275
- onClick={() => activeQueryTabId(tab.id)}
276
- style={{ flex: 1 }}
277
- >
285
+ <span onClick={() => activeQueryTabId(tab.id)} style={{ flex: 1 }}>
278
286
  {tab.name}
279
287
  </span>
280
288
  {tabs.length > 1 && (
@@ -285,11 +293,11 @@ export function QueryExecutor() {
285
293
  closeTab(tab.id);
286
294
  }}
287
295
  style={{
288
- border: 'none',
289
- background: 'none',
290
- fontSize: '1.2em',
296
+ border: "none",
297
+ background: "none",
298
+ fontSize: "1.2em",
291
299
  lineHeight: 1,
292
- opacity: 0.6
300
+ opacity: 0.6,
293
301
  }}
294
302
  title="Close tab"
295
303
  >
@@ -303,7 +311,7 @@ export function QueryExecutor() {
303
311
  <button
304
312
  className="nav-link"
305
313
  onClick={addNewTab}
306
- style={{ border: 'none', background: 'none' }}
314
+ style={{ border: "none", background: "none" }}
307
315
  title="New query tab"
308
316
  >
309
317
  <i className="bi bi-plus-lg"></i>
@@ -350,7 +358,11 @@ export function QueryExecutor() {
350
358
  >
351
359
  {isLoading ? (
352
360
  <>
353
- <span className="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
361
+ <span
362
+ className="spinner-border spinner-border-sm me-2"
363
+ role="status"
364
+ aria-hidden="true"
365
+ ></span>
354
366
  Executing...
355
367
  </>
356
368
  ) : (
@@ -387,19 +399,16 @@ export function QueryExecutor() {
387
399
  <div className="card-body">
388
400
  <div className="d-flex justify-content-between align-items-center mb-3">
389
401
  <h5 className="card-title mb-0">
390
- {result.isWriteOperation ? 'Write Result' : 'Query Results'}
402
+ {result.isWriteOperation ? "Write Result" : "Query Results"}
391
403
  {result.isWriteOperation ? (
392
404
  <span className="badge bg-success ms-2">
393
- {result.changesCount} row{result.changesCount !== 1 ? 's' : ''} affected
405
+ {result.changesCount} row{result.changesCount !== 1 ? "s" : ""} affected
394
406
  </span>
395
407
  ) : (
396
408
  <span className="badge bg-primary ms-2">{result.rowCount} rows</span>
397
409
  )}
398
410
  </h5>
399
- <button
400
- className="btn btn-sm btn-outline-secondary"
401
- onClick={() => setResult(null)}
402
- >
411
+ <button className="btn btn-sm btn-outline-secondary" onClick={() => setResult(null)}>
403
412
  <i className="bi bi-x"></i> Clear
404
413
  </button>
405
414
  </div>
@@ -407,7 +416,8 @@ export function QueryExecutor() {
407
416
  {result.isWriteOperation ? (
408
417
  <div className="alert alert-success mb-0">
409
418
  <i className="bi bi-check-circle-fill me-2"></i>
410
- Query executed successfully. {result.changesCount} row{result.changesCount !== 1 ? 's' : ''} affected.
419
+ Query executed successfully. {result.changesCount} row
420
+ {result.changesCount !== 1 ? "s" : ""} affected.
411
421
  </div>
412
422
  ) : result.rowCount === 0 ? (
413
423
  <div className="alert alert-info mb-0">
@@ -432,8 +442,8 @@ export function QueryExecutor() {
432
442
  <td key={cellIdx} className="font-monospace small">
433
443
  {cell === null ? (
434
444
  <span className="text-muted fst-italic">null</span>
435
- ) : typeof cell === 'object' ? (
436
- <pre className="mb-0" style={{ fontSize: '0.7rem' }}>
445
+ ) : typeof cell === "object" ? (
446
+ <pre className="mb-0" style={{ fontSize: "0.7rem" }}>
437
447
  {JSON.stringify(cell, null, 2)}
438
448
  </pre>
439
449
  ) : (
@@ -460,7 +470,7 @@ export function QueryExecutor() {
460
470
  <li className="mb-2">
461
471
  <button
462
472
  className="btn btn-sm btn-outline-secondary font-monospace"
463
- onClick={() => setQuery('SELECT * FROM sqlite_master WHERE type=\'table\'')}
473
+ onClick={() => setQuery("SELECT * FROM sqlite_master WHERE type='table'")}
464
474
  >
465
475
  List all tables
466
476
  </button>
@@ -468,7 +478,7 @@ export function QueryExecutor() {
468
478
  <li className="mb-2">
469
479
  <button
470
480
  className="btn btn-sm btn-outline-secondary font-monospace"
471
- onClick={() => setQuery('PRAGMA table_info(Users)')}
481
+ onClick={() => setQuery("PRAGMA table_info(Users)")}
472
482
  >
473
483
  Show Users table schema
474
484
  </button>
@@ -476,7 +486,7 @@ export function QueryExecutor() {
476
486
  <li className="mb-2">
477
487
  <button
478
488
  className="btn btn-sm btn-outline-secondary font-monospace"
479
- onClick={() => setQuery('SELECT name, sql FROM sqlite_master WHERE type=\'index\'')}
489
+ onClick={() => setQuery("SELECT name, sql FROM sqlite_master WHERE type='index'")}
480
490
  >
481
491
  List all indexes
482
492
  </button>
@@ -484,7 +494,7 @@ export function QueryExecutor() {
484
494
  <li className="mb-2">
485
495
  <button
486
496
  className="btn btn-sm btn-outline-secondary font-monospace"
487
- onClick={() => setQuery('PRAGMA database_list')}
497
+ onClick={() => setQuery("PRAGMA database_list")}
488
498
  >
489
499
  Show attached databases
490
500
  </button>
@@ -498,13 +508,13 @@ export function QueryExecutor() {
498
508
  }
499
509
 
500
510
  registerInternalPeersUI({
501
- peersUIId: 'data-explorer-query-ui',
511
+ peersUIId: "data-explorer-query-ui",
502
512
  component: QueryExecutor,
503
513
  routes: [
504
514
  {
505
- isMatch: (_props, context) => context.path === 'data-explorer/query',
506
- uiCategory: 'screen',
507
- priority: 2
508
- }
509
- ]
515
+ isMatch: (_props, context) => context.path === "data-explorer/query",
516
+ uiCategory: "screen",
517
+ priority: 2,
518
+ },
519
+ ],
510
520
  });