@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
@@ -37,34 +37,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.ConsoleLogsList = void 0;
40
+ const jsx_runtime_1 = require("react/jsx-runtime");
40
41
  const peers_sdk_1 = require("@peers-app/peers-sdk");
41
42
  const lodash_1 = require("lodash");
42
43
  const react_1 = __importStar(require("react"));
43
44
  const react_infinite_scroll_component_1 = __importDefault(require("react-infinite-scroll-component"));
44
45
  const loading_indicator_1 = require("../../components/loading-indicator");
46
+ const globals_1 = require("../../globals");
45
47
  const hooks_1 = require("../../hooks");
46
48
  const ui_loader_1 = require("../../ui-router/ui-loader");
47
49
  const color_mode_dropdown_1 = require("../settings/color-mode-dropdown");
48
50
  const log_display_1 = require("./log-display");
49
51
  const log_filters_1 = require("./log-filters");
50
- const resizable_table_header_1 = require("./resizable-table-header");
51
- const globals_1 = require("../../globals");
52
52
  const mobile_log_card_1 = require("./mobile-log-card");
53
+ const resizable_table_header_1 = require("./resizable-table-header");
53
54
  const windowHeight = () => window.innerHeight;
54
55
  const DEFAULT_COLUMNS = [
55
- { key: 'timestamp', label: 'Timestamp', width: 150 },
56
- { key: 'level', label: 'Level', width: 80 },
57
- { key: 'process', label: 'Process', width: 100 },
58
- { key: 'source', label: 'Source', width: 120 },
59
- { key: 'message', label: 'Message', width: 600 },
56
+ { key: "timestamp", label: "Timestamp", width: 150 },
57
+ { key: "level", label: "Level", width: 80 },
58
+ { key: "process", label: "Process", width: 100 },
59
+ { key: "source", label: "Source", width: 120 },
60
+ { key: "message", label: "Message", width: 600 },
60
61
  ];
61
62
  const ConsoleLogsList = () => {
62
63
  const logs = (0, hooks_1.useObservableState)([]);
63
64
  const [allLogsLoaded, setAllLogsLoaded] = (0, react_1.useState)(false);
64
65
  const loadMoreId = (0, hooks_1.useObservableState)((0, peers_sdk_1.newid)(), true);
65
- const [levelFilter, setLevelFilter] = (0, react_1.useState)('all');
66
- const [processFilter, setProcessFilter] = (0, react_1.useState)('all');
67
- const searchText = (0, hooks_1.useObservableState)('');
66
+ const [levelFilter, setLevelFilter] = (0, react_1.useState)("all");
67
+ const [processFilter, setProcessFilter] = (0, react_1.useState)("all");
68
+ const searchText = (0, hooks_1.useObservableState)("");
69
+ /** Observable ref is stable — depend on this string in hooks so search changes refetch. */
70
+ const searchQuery = searchText();
68
71
  const [columns, setColumns] = (0, react_1.useState)(DEFAULT_COLUMNS);
69
72
  const [totalLogCount, setTotalLogCount] = (0, react_1.useState)(0);
70
73
  const [_colorMode] = (0, hooks_1.useObservable)(color_mode_dropdown_1.colorMode);
@@ -74,138 +77,151 @@ const ConsoleLogsList = () => {
74
77
  const isMobile = !(0, globals_1.isDesktop)();
75
78
  const batchSize = 50;
76
79
  // Track fixed column widths to trigger message column recalculation
77
- const fixedColumnsWidthKey = (0, react_1.useMemo)(() => {
80
+ const _fixedColumnsWidthKey = (0, react_1.useMemo)(() => {
78
81
  return columns
79
- .filter(col => col.key !== 'message')
80
- .map(col => `${col.key}:${col.width}`)
81
- .join(',');
82
+ .filter((col) => col.key !== "message")
83
+ .map((col) => `${col.key}:${col.width}`)
84
+ .join(",");
82
85
  }, [columns]);
83
- // Calculate message column width based on available space
86
+ // Calculate message column width based on available space.
87
+ // Do not depend on `columns` — updating the message column width changes `columns` and would re-enter this effect forever.
88
+ // Re-run when fixed (non-message) column widths change (`_fixedColumnsWidthKey`) or on window resize.
84
89
  (0, react_1.useEffect)(() => {
85
90
  const updateMessageColumnWidth = () => {
86
91
  if (!containerRef.current)
87
92
  return;
88
93
  const containerWidth = containerRef.current.offsetWidth;
89
- const fixedColumnsWidth = columns
90
- .filter(col => col.key !== 'message')
91
- .reduce((sum, col) => sum + col.width, 0);
92
- const messageWidth = Math.max(200, containerWidth - fixedColumnsWidth - 20); // 20px for scrollbar
93
- setColumns(prev => prev.map(col => col.key === 'message' ? { ...col, width: messageWidth } : col));
94
+ setColumns((prev) => {
95
+ const fixedColumnsWidth = prev
96
+ .filter((col) => col.key !== "message")
97
+ .reduce((sum, col) => sum + col.width, 0);
98
+ const messageWidth = Math.max(200, containerWidth - fixedColumnsWidth - 20); // 20px for scrollbar
99
+ return prev.map((col) => (col.key === "message" ? { ...col, width: messageWidth } : col));
100
+ });
94
101
  };
95
102
  updateMessageColumnWidth();
96
- window.addEventListener('resize', updateMessageColumnWidth);
103
+ window.addEventListener("resize", updateMessageColumnWidth);
97
104
  return () => {
98
- window.removeEventListener('resize', updateMessageColumnWidth);
105
+ window.removeEventListener("resize", updateMessageColumnWidth);
99
106
  };
100
- }, [fixedColumnsWidthKey]);
107
+ }, [_fixedColumnsWidthKey]);
101
108
  // Build filter from UI state
102
- const buildFilter = () => {
109
+ const buildFilter = (0, react_1.useCallback)(() => {
103
110
  const filter = {};
104
- if (levelFilter !== 'all') {
111
+ if (levelFilter !== "all") {
105
112
  filter.level = levelFilter;
106
113
  }
107
- if (processFilter !== 'all') {
114
+ if (processFilter !== "all") {
108
115
  filter.process = processFilter;
109
116
  }
110
- if (searchText()) {
111
- filter.message = { $matchWords: searchText() };
117
+ if (searchQuery.trim()) {
118
+ filter.message = { $matchWords: searchQuery };
112
119
  }
113
120
  return filter;
114
- };
121
+ }, [levelFilter, processFilter, searchQuery]);
115
122
  // Update total log count
116
- async function updateLogCount() {
123
+ const updateLogCount = (0, react_1.useCallback)(async () => {
117
124
  const table = await (0, peers_sdk_1.ConsoleLogs)();
118
125
  const filter = buildFilter();
119
- let count = await table.count(filter);
126
+ const count = await table.count(filter);
120
127
  setTotalLogCount(count);
121
- }
128
+ }, [buildFilter]);
122
129
  // Fetch logs using cursor-based pagination
123
- async function fetchLogs(lastLog) {
130
+ const fetchLogs = (0, react_1.useCallback)(async (lastLog) => {
124
131
  const table = await (0, peers_sdk_1.ConsoleLogs)();
125
- const filter = buildFilter();
126
- if (lastLog) {
127
- filter.logId = { $lt: lastLog.logId };
128
- }
129
- const results = await table.list(filter, { pageSize: batchSize, sortBy: ['-timestamp', '-logId'] });
130
- return results;
131
- }
132
+ const base = buildFilter();
133
+ const filter = lastLog
134
+ ? { ...base, logId: { $lt: lastLog.logId } }
135
+ : base;
136
+ return table.list(filter, {
137
+ pageSize: batchSize,
138
+ sortBy: ["-timestamp", "-logId"],
139
+ });
140
+ }, [buildFilter]);
141
+ const loadMoreLogsRef = (0, react_1.useRef)(async () => { });
132
142
  // Load older logs (prepend to list)
133
- async function loadMoreLogs(startLoadId) {
143
+ const loadMoreLogs = (0, react_1.useCallback)(async (startLoadId) => {
134
144
  if (startLoadId && startLoadId !== loadMoreId()) {
135
145
  return;
136
146
  }
137
- startLoadId ??= loadMoreId();
147
+ const sid = startLoadId ?? loadMoreId();
138
148
  const oldestLog = logs()[0];
139
149
  const fetchedLogs = await fetchLogs(oldestLog);
140
- if (loadMoreId() !== startLoadId) {
141
- loadMoreLogs(loadMoreId());
150
+ if (loadMoreId() !== sid) {
151
+ await loadMoreLogsRef.current(loadMoreId());
142
152
  return;
143
153
  }
144
154
  if (fetchedLogs.length === 0) {
145
155
  setAllLogsLoaded(true);
146
156
  }
147
- let _logs = (0, lodash_1.sortBy)([...logs(), ...fetchedLogs], 'timestamp');
148
- _logs = (0, lodash_1.uniqBy)(_logs, l => l.logId);
157
+ let _logs = (0, lodash_1.sortBy)([...logs(), ...fetchedLogs], "timestamp");
158
+ _logs = (0, lodash_1.uniqBy)(_logs, (l) => l.logId);
149
159
  logs(_logs);
150
- }
160
+ }, [fetchLogs, loadMoreId, logs]);
161
+ loadMoreLogsRef.current = loadMoreLogs;
162
+ const scrollToBottom = (0, react_1.useCallback)((behavior, delay = 100) => {
163
+ setTimeout(() => {
164
+ logsEndRef.current?.scrollIntoView({ behavior });
165
+ }, delay);
166
+ }, []);
167
+ const logCount = logs().length;
151
168
  // Initial load and ensure screen is filled
152
169
  const minHeightOfLog = 30;
153
170
  (0, react_1.useEffect)(() => {
154
- if (!allLogsLoaded && (!logs.length || logs.length * minHeightOfLog < windowHeight())) {
155
- loadMoreLogs();
171
+ if (!allLogsLoaded && (!logCount || logCount * minHeightOfLog < windowHeight())) {
172
+ void loadMoreLogs();
156
173
  }
157
- }, [logs, levelFilter, processFilter, searchText()]);
158
- // Reset when filters change
174
+ }, [allLogsLoaded, loadMoreLogs, logCount]);
175
+ // Reset when filters change (`logs` is a stable observable setter; effect is driven by filter fields and callbacks).
159
176
  (0, react_1.useEffect)(() => {
160
177
  loadMoreId((0, peers_sdk_1.newid)());
161
178
  logs([]);
162
- updateLogCount();
163
- if (allLogsLoaded) {
164
- setAllLogsLoaded(false);
165
- loadMoreLogs();
166
- }
167
- }, [levelFilter, processFilter, searchText()]);
168
- // Subscribe to new logs
179
+ void updateLogCount();
180
+ setAllLogsLoaded(false);
181
+ void loadMoreLogs();
182
+ }, [levelFilter, processFilter, searchQuery, loadMoreId, loadMoreLogs, updateLogCount]);
183
+ // Subscribe to new logs (`searchText` ref is stable; handler calls searchText() per event for current query).
169
184
  (0, react_1.useEffect)(() => {
170
- let sub = undefined;
171
- (0, peers_sdk_1.ConsoleLogs)().then(table => {
172
- sub = table.dataChanged.subscribe(evt => {
185
+ let sub;
186
+ (0, peers_sdk_1.ConsoleLogs)().then((table) => {
187
+ sub = table.dataChanged.subscribe((evt) => {
173
188
  // Update count whenever data changes
174
- updateLogCount();
189
+ void updateLogCount();
175
190
  const log = evt.dataObject;
176
191
  // Check if log matches current filters
177
- if (levelFilter !== 'all' && log.level !== levelFilter)
192
+ if (levelFilter !== "all" && log.level !== levelFilter)
178
193
  return;
179
- if (processFilter !== 'all' && log.process !== processFilter)
194
+ if (processFilter !== "all" && log.process !== processFilter)
180
195
  return;
181
196
  if (searchText()) {
182
197
  const logMessage = log.message.toLowerCase();
183
- const filterOut = searchText().toLowerCase().split(' ').some(word => !logMessage.includes(word));
198
+ const filterOut = searchText()
199
+ .toLowerCase()
200
+ .split(" ")
201
+ .some((word) => !logMessage.includes(word));
184
202
  if (filterOut)
185
203
  return;
186
204
  }
187
205
  // Don't add we're only showing a limited batch and this is older
188
- if (logs().length > batchSize && (0, lodash_1.min)(logs().map(l => l.timestamp)) > log.timestamp)
206
+ const timestamps = logs().map((l) => l.timestamp);
207
+ const oldestTs = (0, lodash_1.min)(timestamps);
208
+ if (logs().length > batchSize && oldestTs !== undefined && oldestTs > log.timestamp) {
189
209
  return;
190
- if (evt.op === 'insert') {
191
- let _logs = (0, lodash_1.sortBy)([...logs(), log], 'timestamp');
192
- _logs = (0, lodash_1.uniqBy)(_logs, l => l.logId);
210
+ }
211
+ if (evt.op === "insert") {
212
+ let _logs = (0, lodash_1.sortBy)([...logs(), log], "timestamp");
213
+ _logs = (0, lodash_1.uniqBy)(_logs, (l) => l.logId);
193
214
  logs(_logs);
194
- scrollToBottom('smooth');
215
+ scrollToBottom("smooth");
195
216
  }
196
217
  });
197
218
  });
198
219
  return () => {
199
220
  sub?.unsubscribe();
200
221
  };
201
- }, [levelFilter, processFilter]);
202
- function scrollToBottom(behavior, delay = 100) {
203
- setTimeout(() => {
204
- logsEndRef.current?.scrollIntoView({ behavior });
205
- }, delay);
206
- }
222
+ }, [levelFilter, processFilter, logs, scrollToBottom, searchText, updateLogCount]);
207
223
  async function handleClearLogs() {
208
- if (confirm('Are you sure you want to clear all console logs?')) {
224
+ if (confirm("Are you sure you want to clear all console logs?")) {
209
225
  try {
210
226
  const table = await (0, peers_sdk_1.ConsoleLogs)();
211
227
  await table.deleteOldLogs(Date.now());
@@ -213,70 +229,50 @@ const ConsoleLogsList = () => {
213
229
  setTotalLogCount(0);
214
230
  }
215
231
  catch (err) {
216
- console.error('Failed to clear logs:', err);
232
+ console.error("Failed to clear logs:", err);
217
233
  }
218
234
  }
219
235
  }
220
- const _logs = (0, lodash_1.uniqBy)(logs(), l => l.logId);
221
- return (react_1.default.createElement("div", { className: "container-fluid", style: { height: 'calc(100vh - 100px)', display: 'flex', flexDirection: 'column' } },
222
- react_1.default.createElement(log_filters_1.LogFilters, { levelFilter: levelFilter, setLevelFilter: setLevelFilter, processFilter: processFilter, setProcessFilter: setProcessFilter, searchText: searchText(), setSearchText: searchText }),
223
- react_1.default.createElement("div", { ref: containerRef, style: {
224
- flex: 1,
225
- display: 'flex',
226
- flexDirection: 'column',
227
- backgroundColor: _colorMode === 'dark' ? '#1a1a1a' : '#f8f9fa',
228
- borderRadius: '0.25rem',
229
- marginBottom: '50px',
230
- overflow: 'hidden',
231
- } },
232
- !isMobile && (react_1.default.createElement(resizable_table_header_1.ResizableTableHeader, { columns: columns, onColumnsChange: setColumns, colorMode: _colorMode })),
233
- react_1.default.createElement("div", { id: "scrollableLogsDiv", style: {
236
+ const _logs = (0, lodash_1.uniqBy)(logs(), (l) => l.logId);
237
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid", style: { height: "calc(100vh - 100px)", display: "flex", flexDirection: "column" }, children: [(0, jsx_runtime_1.jsx)(log_filters_1.LogFilters, { levelFilter: levelFilter, setLevelFilter: setLevelFilter, processFilter: processFilter, setProcessFilter: setProcessFilter, searchText: searchText(), setSearchText: searchText }), (0, jsx_runtime_1.jsxs)("div", { ref: containerRef, style: {
234
238
  flex: 1,
235
- overflow: 'auto',
236
- display: 'flex',
237
- flexDirection: 'column-reverse',
238
- } },
239
- react_1.default.createElement(react_infinite_scroll_component_1.default, { dataLength: _logs.length, next: loadMoreLogs, style: { display: 'flex', flexDirection: 'column-reverse', overflow: 'hidden' }, inverse: true, hasMore: !allLogsLoaded, loader: react_1.default.createElement(loading_indicator_1.LoadingIndicator, null), scrollableTarget: "scrollableLogsDiv", endMessage: react_1.default.createElement(react_1.Fragment, null,
240
- react_1.default.createElement("div", { className: "d-flex justify-content-center p-3" },
241
- react_1.default.createElement("div", { className: "text-muted" },
242
- react_1.default.createElement("i", null, "beginning of logs")))) },
243
- react_1.default.createElement("div", { ref: logsEndRef }),
244
- _logs.length === 0 && allLogsLoaded ? (react_1.default.createElement("div", { className: "text-center p-5 text-muted" },
245
- react_1.default.createElement("i", { className: "bi bi-inbox display-1" }),
246
- react_1.default.createElement("p", { className: "mt-2" }, "No logs found"))) : isMobile ? (
247
- /* Mobile: Card-based layout */
248
- react_1.default.createElement("div", null, _logs.map((log) => (react_1.default.createElement(mobile_log_card_1.MobileLogCard, { key: log.logId, log: log, colorMode: _colorMode }))))) : (
249
- /* Desktop: Table layout */
250
- react_1.default.createElement("table", { className: "table table-sm table-hover mb-0", style: { fontSize: '0.85rem', tableLayout: 'fixed', width: '100%' } },
251
- react_1.default.createElement("tbody", null, _logs.map((log) => (react_1.default.createElement(log_display_1.LogDisplay, { key: log.logId, log: log, columns: columns }))))))))),
252
- react_1.default.createElement("div", { style: {
253
- position: 'fixed',
254
- bottom: 0,
255
- left: 0,
256
- right: 0,
257
- padding: '0.5rem 1rem',
258
- backgroundColor: _colorMode === 'dark' ? '#2a2a2a' : '#ffffff',
259
- borderTop: '1px solid #dee2e6',
260
- zIndex: 1000,
261
- display: 'flex',
262
- justifyContent: 'space-between',
263
- alignItems: 'center',
264
- } },
265
- react_1.default.createElement("div", { className: "text-muted small" }, totalLogCount > 0 ? (react_1.default.createElement(react_1.default.Fragment, null,
266
- react_1.default.createElement("i", { className: "bi bi-list-ul me-1" }),
267
- totalLogCount,
268
- " log",
269
- totalLogCount !== 1 ? 's' : '')) : (react_1.default.createElement("span", null, "\u00A0"))),
270
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-danger", onClick: handleClearLogs },
271
- react_1.default.createElement("i", { className: "bi bi-trash me-1" }),
272
- "Clear All"))));
239
+ display: "flex",
240
+ flexDirection: "column",
241
+ backgroundColor: _colorMode === "dark" ? "#1a1a1a" : "#f8f9fa",
242
+ borderRadius: "0.25rem",
243
+ marginBottom: "50px",
244
+ overflow: "hidden",
245
+ }, children: [!isMobile && ((0, jsx_runtime_1.jsx)(resizable_table_header_1.ResizableTableHeader, { columns: columns, onColumnsChange: setColumns, colorMode: _colorMode })), (0, jsx_runtime_1.jsx)("div", { id: "scrollableLogsDiv", style: {
246
+ flex: 1,
247
+ overflow: "auto",
248
+ display: "flex",
249
+ flexDirection: "column-reverse",
250
+ }, children: (0, jsx_runtime_1.jsxs)(react_infinite_scroll_component_1.default, { dataLength: _logs.length, next: loadMoreLogs, style: { display: "flex", flexDirection: "column-reverse", overflow: "hidden" }, inverse: true, hasMore: !allLogsLoaded, loader: (0, jsx_runtime_1.jsx)(loading_indicator_1.LoadingIndicator, {}), scrollableTarget: "scrollableLogsDiv", endMessage: (0, jsx_runtime_1.jsx)("div", { className: "d-flex justify-content-center p-3", children: (0, jsx_runtime_1.jsx)("div", { className: "text-muted", children: (0, jsx_runtime_1.jsx)("i", { children: "beginning of logs" }) }) }), children: [(0, jsx_runtime_1.jsx)("div", { ref: logsEndRef }), _logs.length === 0 && allLogsLoaded ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-center p-5 text-muted", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-inbox display-1" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2", children: "No logs found" })] })) : isMobile ? (
251
+ /* Mobile: Card-based layout */
252
+ (0, jsx_runtime_1.jsx)("div", { children: _logs.map((log) => ((0, jsx_runtime_1.jsx)(mobile_log_card_1.MobileLogCard, { log: log, colorMode: _colorMode }, log.logId))) })) : (
253
+ /* Desktop: Table layout */
254
+ (0, jsx_runtime_1.jsx)("table", { className: "table table-sm table-hover mb-0", style: { fontSize: "0.85rem", tableLayout: "fixed", width: "100%" }, children: (0, jsx_runtime_1.jsx)("tbody", { children: _logs.map((log) => ((0, jsx_runtime_1.jsx)(log_display_1.LogDisplay, { log: log, columns: columns }, log.logId))) }) }))] }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
255
+ position: "fixed",
256
+ bottom: 0,
257
+ left: 0,
258
+ right: 0,
259
+ padding: "0.5rem 1rem",
260
+ backgroundColor: _colorMode === "dark" ? "#2a2a2a" : "#ffffff",
261
+ borderTop: "1px solid #dee2e6",
262
+ zIndex: 1000,
263
+ display: "flex",
264
+ justifyContent: "space-between",
265
+ alignItems: "center",
266
+ }, children: [(0, jsx_runtime_1.jsx)("div", { className: "text-muted small", children: totalLogCount > 0 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-list-ul me-1" }), totalLogCount, " log", totalLogCount !== 1 ? "s" : ""] })) : ((0, jsx_runtime_1.jsx)("span", { children: "\u00A0" })) }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-sm btn-outline-danger", onClick: handleClearLogs, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-trash me-1" }), "Clear All"] })] })] }));
273
267
  };
274
268
  exports.ConsoleLogsList = ConsoleLogsList;
275
269
  (0, ui_loader_1.registerInternalPeersUI)({
276
270
  component: exports.ConsoleLogsList,
277
- routes: [{
278
- isMatch: (_props, context) => context.path === 'console-logs',
279
- uiCategory: 'screen',
271
+ routes: [
272
+ {
273
+ isMatch: (_props, context) => context.path === "console-logs",
274
+ uiCategory: "screen",
280
275
  priority: 0,
281
- }]
276
+ },
277
+ ],
282
278
  });
@@ -1,5 +1,4 @@
1
- import { IConsoleLog } from "@peers-app/peers-sdk";
2
- import React from 'react';
1
+ import { type IConsoleLog } from "@peers-app/peers-sdk";
3
2
  interface Column {
4
3
  key: string;
5
4
  label: string;
@@ -9,5 +8,5 @@ interface LogDisplayProps {
9
8
  log: IConsoleLog;
10
9
  columns: Column[];
11
10
  }
12
- export declare const LogDisplay: ({ log, columns }: LogDisplayProps) => React.JSX.Element;
11
+ export declare const LogDisplay: ({ log, columns }: LogDisplayProps) => import("react/jsx-runtime").JSX.Element;
13
12
  export {};
@@ -4,68 +4,66 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LogDisplay = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
8
  const peers_sdk_1 = require("@peers-app/peers-sdk");
8
9
  const moment_1 = __importDefault(require("moment"));
9
- const react_1 = __importDefault(require("react"));
10
10
  const getLevelColor = (level) => {
11
11
  switch (level) {
12
- case 'error': return '#dc3545'; // Red - matches console error
13
- case 'warn': return '#ffc107'; // Yellow - matches console warn
14
- case 'info': return '#0dcaf0'; // Cyan - matches console info
15
- case 'log': return '#6c757d'; // Gray - default log color
16
- case 'debug': return '#6c757d'; // Gray - debug color
17
- default: return '#6c757d';
12
+ case "error":
13
+ return "#dc3545"; // Red - matches console error
14
+ case "warn":
15
+ return "#ffc107"; // Yellow - matches console warn
16
+ case "info":
17
+ return "#0dcaf0"; // Cyan - matches console info
18
+ case "log":
19
+ return "#6c757d"; // Gray - default log color
20
+ case "debug":
21
+ return "#6c757d"; // Gray - debug color
22
+ default:
23
+ return "#6c757d";
18
24
  }
19
25
  };
20
26
  const getProcessColor = (process) => {
21
27
  switch (process) {
22
- case 'ui':
23
- case 'renderer': return '#0dcaf0'; // Cyan - matches console logger
24
- case 'electron':
25
- case 'main': return '#d946ef'; // Magenta - matches console logger
26
- default: return '#6c757d'; // Gray for unknown
28
+ case "ui":
29
+ case "renderer":
30
+ return "#0dcaf0"; // Cyan - matches console logger
31
+ case "electron":
32
+ case "main":
33
+ return "#d946ef"; // Magenta - matches console logger
34
+ default:
35
+ return "#6c757d"; // Gray for unknown
27
36
  }
28
37
  };
29
38
  const getLevelIcon = (level) => {
30
39
  switch (level) {
31
- case 'error': return 'bi-x-circle-fill';
32
- case 'warn': return 'bi-exclamation-triangle-fill';
33
- case 'info': return 'bi-info-circle-fill';
34
- case 'debug': return 'bi-bug-fill';
35
- default: return 'bi-chat-square-text';
40
+ case "error":
41
+ return "bi-x-circle-fill";
42
+ case "warn":
43
+ return "bi-exclamation-triangle-fill";
44
+ case "info":
45
+ return "bi-info-circle-fill";
46
+ case "debug":
47
+ return "bi-bug-fill";
48
+ default:
49
+ return "bi-chat-square-text";
36
50
  }
37
51
  };
38
52
  const LogDisplay = ({ log, columns }) => {
39
53
  const getColumnWidth = (key) => {
40
- const column = columns.find(c => c.key === key);
41
- return column ? `${column.width}px` : 'auto';
54
+ const column = columns.find((c) => c.key === key);
55
+ return column ? `${column.width}px` : "auto";
42
56
  };
43
- if (typeof log.context === 'string') {
57
+ if (typeof log.context === "string") {
44
58
  try {
45
59
  log.context = (0, peers_sdk_1.fromJSONString)(log.context);
46
60
  }
47
- catch (err) { }
61
+ catch (_err) { }
48
62
  }
49
- return (react_1.default.createElement("tr", null,
50
- react_1.default.createElement("td", { className: "text-nowrap", style: { fontSize: '0.75rem', width: getColumnWidth('timestamp'), padding: '0.5rem' } }, (0, moment_1.default)(log.timestamp).format('MM/DD HH:mm:ss.SSS')),
51
- react_1.default.createElement("td", { style: { width: getColumnWidth('level'), padding: '0.5rem' } },
52
- react_1.default.createElement("span", { className: "badge text-white", style: { backgroundColor: getLevelColor(log.level) } },
53
- react_1.default.createElement("i", { className: `${getLevelIcon(log.level)} me-1` }),
54
- log.level)),
55
- react_1.default.createElement("td", { style: { width: getColumnWidth('process'), padding: '0.5rem' } },
56
- react_1.default.createElement("span", { className: "badge text-white", style: { backgroundColor: getProcessColor(log.process) } }, log.process)),
57
- react_1.default.createElement("td", { className: "text-truncate", style: { width: getColumnWidth('source'), padding: '0.5rem', maxWidth: getColumnWidth('source') }, title: log.source || '' }, log.source || '-'),
58
- react_1.default.createElement("td", { style: { width: getColumnWidth('message'), wordBreak: 'break-word', padding: '0.5rem' } },
59
- log.message,
60
- log.context && (react_1.default.createElement("details", { className: "mt-1" },
61
- react_1.default.createElement("summary", { className: "text-muted small", style: { cursor: 'pointer' } },
62
- react_1.default.createElement("i", { className: "bi bi-code-square me-1" }),
63
- "Context"),
64
- react_1.default.createElement("pre", { className: "small mt-1 p-2 bg-secondary bg-opacity-10 rounded", style: { fontSize: '0.7rem' } }, JSON.stringify((0, peers_sdk_1.toJSON)(log.context), null, 2)))),
65
- log.stackTrace && (react_1.default.createElement("details", { className: "mt-1" },
66
- react_1.default.createElement("summary", { className: "text-danger small", style: { cursor: 'pointer' } },
67
- react_1.default.createElement("i", { className: "bi bi-bug me-1" }),
68
- "Stack Trace"),
69
- react_1.default.createElement("pre", { className: "small mt-1 p-2 bg-danger bg-opacity-10 rounded text-danger", style: { fontSize: '0.7rem' } }, log.stackTrace))))));
63
+ return ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "text-nowrap", style: { fontSize: "0.75rem", width: getColumnWidth("timestamp"), padding: "0.5rem" }, children: (0, moment_1.default)(log.timestamp).format("MM/DD HH:mm:ss.SSS") }), (0, jsx_runtime_1.jsx)("td", { style: { width: getColumnWidth("level"), padding: "0.5rem" }, children: (0, jsx_runtime_1.jsxs)("span", { className: "badge text-white", style: { backgroundColor: getLevelColor(log.level) }, children: [(0, jsx_runtime_1.jsx)("i", { className: `${getLevelIcon(log.level)} me-1` }), log.level] }) }), (0, jsx_runtime_1.jsx)("td", { style: { width: getColumnWidth("process"), padding: "0.5rem" }, children: (0, jsx_runtime_1.jsx)("span", { className: "badge text-white", style: { backgroundColor: getProcessColor(log.process) }, children: log.process }) }), (0, jsx_runtime_1.jsx)("td", { className: "text-truncate", style: {
64
+ width: getColumnWidth("source"),
65
+ padding: "0.5rem",
66
+ maxWidth: getColumnWidth("source"),
67
+ }, title: log.source || "", children: log.source || "-" }), (0, jsx_runtime_1.jsxs)("td", { style: { width: getColumnWidth("message"), wordBreak: "break-word", padding: "0.5rem" }, children: [log.message, log.context && ((0, jsx_runtime_1.jsxs)("details", { className: "mt-1", children: [(0, jsx_runtime_1.jsxs)("summary", { className: "text-muted small", style: { cursor: "pointer" }, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-code-square me-1" }), "Context"] }), (0, jsx_runtime_1.jsx)("pre", { className: "small mt-1 p-2 bg-secondary bg-opacity-10 rounded", style: { fontSize: "0.7rem" }, children: JSON.stringify((0, peers_sdk_1.toJSON)(log.context), null, 2) })] })), log.stackTrace && ((0, jsx_runtime_1.jsxs)("details", { className: "mt-1", children: [(0, jsx_runtime_1.jsxs)("summary", { className: "text-danger small", style: { cursor: "pointer" }, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-bug me-1" }), "Stack Trace"] }), (0, jsx_runtime_1.jsx)("pre", { className: "small mt-1 p-2 bg-danger bg-opacity-10 rounded text-danger", style: { fontSize: "0.7rem" }, children: log.stackTrace })] }))] })] }));
70
68
  };
71
69
  exports.LogDisplay = LogDisplay;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  interface LogFiltersProps {
3
2
  levelFilter: string;
4
3
  setLevelFilter: (value: string) => void;
@@ -7,5 +6,5 @@ interface LogFiltersProps {
7
6
  searchText: string;
8
7
  setSearchText: (value: string) => void;
9
8
  }
10
- export declare const LogFilters: ({ levelFilter, setLevelFilter, processFilter, setProcessFilter, searchText, setSearchText, }: LogFiltersProps) => React.JSX.Element;
9
+ export declare const LogFilters: ({ levelFilter, setLevelFilter, processFilter, setProcessFilter, searchText, setSearchText, }: LogFiltersProps) => import("react/jsx-runtime").JSX.Element;
11
10
  export {};
@@ -1,30 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.LogFilters = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
5
  const LogFilters = ({ levelFilter, setLevelFilter, processFilter, setProcessFilter, searchText, setSearchText, }) => {
9
- return (react_1.default.createElement("div", { className: "mb-3", style: { position: 'sticky', top: 0, zIndex: 10, backgroundColor: 'inherit' } },
10
- react_1.default.createElement("div", { className: "row g-2" },
11
- react_1.default.createElement("div", { className: "col-md-3" },
12
- react_1.default.createElement("label", { className: "form-label small" }, "Level"),
13
- react_1.default.createElement("select", { className: "form-select form-select-sm", value: levelFilter, onChange: (e) => setLevelFilter(e.target.value) },
14
- react_1.default.createElement("option", { value: "all" }, "All Levels"),
15
- react_1.default.createElement("option", { value: "error" }, "Error"),
16
- react_1.default.createElement("option", { value: "warn" }, "Warning"),
17
- react_1.default.createElement("option", { value: "info" }, "Info"),
18
- react_1.default.createElement("option", { value: "log" }, "Log"),
19
- react_1.default.createElement("option", { value: "debug" }, "Debug"))),
20
- react_1.default.createElement("div", { className: "col-md-3" },
21
- react_1.default.createElement("label", { className: "form-label small" }, "Process"),
22
- react_1.default.createElement("select", { className: "form-select form-select-sm", value: processFilter, onChange: (e) => setProcessFilter(e.target.value) },
23
- react_1.default.createElement("option", { value: "all" }, "All Processes"),
24
- react_1.default.createElement("option", { value: "electron" }, "Electron"),
25
- react_1.default.createElement("option", { value: "ui" }, "UI"))),
26
- react_1.default.createElement("div", { className: "col-md-6" },
27
- react_1.default.createElement("label", { className: "form-label small" }, "Search"),
28
- react_1.default.createElement("input", { type: "text", className: "form-control form-control-sm", placeholder: "Search log messages...", value: searchText, onChange: (e) => setSearchText(e.target.value) })))));
6
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mb-3", style: { position: "sticky", top: 0, zIndex: 10, backgroundColor: "inherit" }, children: (0, jsx_runtime_1.jsxs)("div", { className: "row g-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "col-md-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small", children: "Level" }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: levelFilter, onChange: (e) => setLevelFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Levels" }), (0, jsx_runtime_1.jsx)("option", { value: "error", children: "Error" }), (0, jsx_runtime_1.jsx)("option", { value: "warn", children: "Warning" }), (0, jsx_runtime_1.jsx)("option", { value: "info", children: "Info" }), (0, jsx_runtime_1.jsx)("option", { value: "log", children: "Log" }), (0, jsx_runtime_1.jsx)("option", { value: "debug", children: "Debug" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-md-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small", children: "Process" }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select form-select-sm", value: processFilter, onChange: (e) => setProcessFilter(e.target.value), children: [(0, jsx_runtime_1.jsx)("option", { value: "all", children: "All Processes" }), (0, jsx_runtime_1.jsx)("option", { value: "electron", children: "Electron" }), (0, jsx_runtime_1.jsx)("option", { value: "ui", children: "UI" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-md-6", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small", children: "Search" }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: "form-control form-control-sm", placeholder: "Search log messages...", value: searchText, onChange: (e) => setSearchText(e.target.value) })] })] }) }));
29
7
  };
30
8
  exports.LogFilters = LogFilters;
@@ -1,8 +1,7 @@
1
- import { IConsoleLog } from "@peers-app/peers-sdk";
2
- import React from 'react';
1
+ import { type IConsoleLog } from "@peers-app/peers-sdk";
3
2
  interface MobileLogCardProps {
4
3
  log: IConsoleLog;
5
4
  colorMode: string;
6
5
  }
7
- export declare const MobileLogCard: ({ log, colorMode }: MobileLogCardProps) => React.JSX.Element;
6
+ export declare const MobileLogCard: ({ log, colorMode }: MobileLogCardProps) => import("react/jsx-runtime").JSX.Element;
8
7
  export {};