@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,63 +1,32 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.ConnectionTroubleshooter = ConnectionTroubleshooter;
37
- const react_1 = __importStar(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
5
  const peers_sdk_1 = require("@peers-app/peers-sdk");
6
+ const react_1 = require("react");
7
+ const network_viewer_ipc_1 = require("./network-viewer-ipc");
39
8
  const STATUS_ICON = {
40
- pass: react_1.default.createElement("i", { className: "bi bi-check-circle-fill text-success" }),
41
- fail: react_1.default.createElement("i", { className: "bi bi-x-circle-fill text-danger" }),
42
- warn: react_1.default.createElement("i", { className: "bi bi-exclamation-triangle-fill text-warning" }),
43
- skip: react_1.default.createElement("i", { className: "bi bi-dash-circle text-muted" }),
44
- running: (react_1.default.createElement("span", { className: "spinner-border spinner-border-sm text-primary", role: "status", "aria-hidden": "true" })),
9
+ pass: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-check-circle-fill text-success" }),
10
+ fail: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-x-circle-fill text-danger" }),
11
+ warn: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-exclamation-triangle-fill text-warning" }),
12
+ skip: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-dash-circle text-muted" }),
13
+ running: ((0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm text-primary", role: "status", "aria-hidden": "true" })),
45
14
  };
46
15
  const STATUS_BADGE_CLASS = {
47
- pass: 'bg-success',
48
- fail: 'bg-danger',
49
- warn: 'bg-warning text-dark',
50
- skip: 'bg-secondary',
51
- running: 'bg-primary',
16
+ pass: "bg-success",
17
+ fail: "bg-danger",
18
+ warn: "bg-warning text-dark",
19
+ skip: "bg-secondary",
20
+ running: "bg-primary",
52
21
  };
53
22
  const LAYER_ORDER = [
54
- 'Local System',
55
- 'Cloud Relay',
56
- 'Local Network',
57
- 'Protocol Support',
58
- 'WebRTC / TURN',
59
- 'Peer State',
60
- 'Active Connections',
23
+ "Local System",
24
+ "Cloud Relay",
25
+ "Local Network",
26
+ "Protocol Support",
27
+ "WebRTC / TURN",
28
+ "Peer State",
29
+ "Active Connections",
61
30
  ];
62
31
  function groupByLayer(checks) {
63
32
  const groups = {};
@@ -70,14 +39,14 @@ function groupByLayer(checks) {
70
39
  }
71
40
  function getSummary(checks) {
72
41
  return {
73
- issues: checks.filter(c => c.status === 'fail').length,
74
- warnings: checks.filter(c => c.status === 'warn').length,
75
- passes: checks.filter(c => c.status === 'pass').length,
76
- skips: checks.filter(c => c.status === 'skip').length,
42
+ issues: checks.filter((c) => c.status === "fail").length,
43
+ warnings: checks.filter((c) => c.status === "warn").length,
44
+ passes: checks.filter((c) => c.status === "pass").length,
45
+ skips: checks.filter((c) => c.status === "skip").length,
77
46
  };
78
47
  }
79
48
  function formatReportForAI(checks) {
80
- const lines = ['Connection Troubleshooter Report', '================================'];
49
+ const lines = ["Connection Troubleshooter Report", "================================"];
81
50
  const groups = groupByLayer(checks);
82
51
  for (const layer of LAYER_ORDER) {
83
52
  const layerChecks = groups[layer];
@@ -94,7 +63,7 @@ function formatReportForAI(checks) {
94
63
  }
95
64
  const { issues, warnings, skips } = getSummary(checks);
96
65
  lines.push(`\nSummary: ${issues} issue(s), ${warnings} warning(s), ${skips} skipped.`);
97
- return lines.join('\n');
66
+ return lines.join("\n");
98
67
  }
99
68
  function ConnectionTroubleshooter({ onBack }) {
100
69
  const [checks, setChecks] = (0, react_1.useState)([]);
@@ -102,20 +71,22 @@ function ConnectionTroubleshooter({ onBack }) {
102
71
  const [done, setDone] = (0, react_1.useState)(false);
103
72
  const [expanded, setExpanded] = (0, react_1.useState)(new Set());
104
73
  const hasRun = (0, react_1.useRef)(false);
105
- const runDiagnostics = async () => {
74
+ const runDiagnostics = (0, react_1.useCallback)(async () => {
106
75
  setRunning(true);
107
76
  setDone(false);
108
77
  setChecks([]);
109
78
  setExpanded(new Set());
110
- const api = window.electronAPI?.networkViewer;
79
+ const api = (0, network_viewer_ipc_1.getNetworkViewerApi)();
111
80
  if (!api) {
112
- setChecks([{
113
- id: 'no-api',
114
- label: 'Electron API unavailable',
115
- layer: 'Local System',
116
- status: 'fail',
117
- detail: 'The Electron network API is not available. This tool only works in the desktop app.',
118
- }]);
81
+ setChecks([
82
+ {
83
+ id: "no-api",
84
+ label: "Electron API unavailable",
85
+ layer: "Local System",
86
+ status: "fail",
87
+ detail: "The Electron network API is not available. This tool only works in the desktop app.",
88
+ },
89
+ ]);
119
90
  setRunning(false);
120
91
  setDone(true);
121
92
  return;
@@ -123,49 +94,50 @@ function ConnectionTroubleshooter({ onBack }) {
123
94
  try {
124
95
  // Stream results by running all checks on the backend and updating as they come in.
125
96
  // Show a placeholder "running" row immediately while the full batch executes.
126
- const placeholders = LAYER_ORDER.map(layer => ({
97
+ const placeholders = LAYER_ORDER.map((layer) => ({
127
98
  id: `placeholder-${layer}`,
128
99
  label: `Checking ${layer}…`,
129
100
  layer,
130
- status: 'running',
131
- detail: '',
101
+ status: "running",
102
+ detail: "",
132
103
  }));
133
104
  setChecks(placeholders);
134
- const results = await api.runDiagnostics();
105
+ const results = (await api.runDiagnostics());
135
106
  setChecks(results);
136
107
  // Auto-expand all failed/warned checks so they're visible immediately
137
108
  const toExpand = new Set();
138
109
  for (const r of results) {
139
- if ((r.status === 'fail' || r.status === 'warn') && r.suggestion) {
110
+ if ((r.status === "fail" || r.status === "warn") && r.suggestion) {
140
111
  toExpand.add(r.id);
141
112
  }
142
113
  }
143
114
  setExpanded(toExpand);
144
115
  }
145
116
  catch (err) {
146
- setChecks([{
147
- id: 'run-error',
148
- label: 'Diagnostics failed to run',
149
- layer: 'Local System',
150
- status: 'fail',
151
- detail: `Error: ${err?.message || 'Unknown error'}`,
152
- suggestion: 'Restart the application and try again.',
153
- }]);
117
+ setChecks([
118
+ {
119
+ id: "run-error",
120
+ label: "Diagnostics failed to run",
121
+ layer: "Local System",
122
+ status: "fail",
123
+ detail: `Error: ${err instanceof Error ? err.message : "Unknown error"}`,
124
+ suggestion: "Restart the application and try again.",
125
+ },
126
+ ]);
154
127
  }
155
128
  finally {
156
129
  setRunning(false);
157
130
  setDone(true);
158
131
  }
159
- };
132
+ }, []);
160
133
  (0, react_1.useEffect)(() => {
161
134
  if (!hasRun.current) {
162
135
  hasRun.current = true;
163
- runDiagnostics();
136
+ void runDiagnostics();
164
137
  }
165
- // eslint-disable-next-line react-hooks/exhaustive-deps
166
- }, []);
138
+ }, [runDiagnostics]);
167
139
  const toggleExpand = (id) => {
168
- setExpanded(prev => {
140
+ setExpanded((prev) => {
169
141
  const next = new Set(prev);
170
142
  if (next.has(id))
171
143
  next.delete(id);
@@ -175,124 +147,48 @@ function ConnectionTroubleshooter({ onBack }) {
175
147
  });
176
148
  };
177
149
  const handleAskAssistant = () => {
178
- const report = formatReportForAI(checks.filter(c => c.status !== 'running'));
150
+ const report = formatReportForAI(checks.filter((c) => c.status !== "running"));
179
151
  const message = `I ran the Peers connection troubleshooter and got the following results. Please help me understand what's wrong and how to fix it:\n\n${report}`;
180
- (0, peers_sdk_1.emit)({ name: 'chat:openWithMessage', data: { message } }).catch(() => {
152
+ (0, peers_sdk_1.emit)({ name: "chat:openWithMessage", data: { message } }).catch(() => {
181
153
  // Fallback: copy to clipboard
182
- navigator.clipboard.writeText(message).then(() => {
183
- alert('Diagnostic report copied to clipboard. Paste it into the AI assistant chat.');
184
- }).catch(() => {
185
- alert('Could not open AI assistant. Please open the chat manually and paste the diagnostic report.');
154
+ navigator.clipboard
155
+ .writeText(message)
156
+ .then(() => {
157
+ alert("Diagnostic report copied to clipboard. Paste it into the AI assistant chat.");
158
+ })
159
+ .catch(() => {
160
+ alert("Could not open AI assistant. Please open the chat manually and paste the diagnostic report.");
186
161
  });
187
162
  });
188
163
  };
189
- const groups = groupByLayer(checks.filter(c => !c.id.startsWith('placeholder-')));
190
- const placeholders = checks.filter(c => c.id.startsWith('placeholder-'));
164
+ const groups = groupByLayer(checks.filter((c) => !c.id.startsWith("placeholder-")));
165
+ const placeholders = checks.filter((c) => c.id.startsWith("placeholder-"));
191
166
  const summary = getSummary(checks);
192
- const completedCount = checks.filter(c => c.status !== 'running').length;
167
+ const completedCount = checks.filter((c) => c.status !== "running").length;
193
168
  const totalCount = checks.length;
194
169
  const progressPct = totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;
195
170
  const overallStatus = !done
196
- ? 'running'
171
+ ? "running"
197
172
  : summary.issues > 0
198
- ? 'fail'
173
+ ? "fail"
199
174
  : summary.warnings > 0
200
- ? 'warn'
201
- : 'pass';
202
- return (react_1.default.createElement("div", { className: "container-fluid p-4" },
203
- react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center mb-3" },
204
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-3" },
205
- react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary", onClick: onBack },
206
- react_1.default.createElement("i", { className: "bi bi-arrow-left me-1" }),
207
- "Back"),
208
- react_1.default.createElement("h4", { className: "mb-0" },
209
- react_1.default.createElement("i", { className: "bi bi-stethoscope me-2 text-primary" }),
210
- "Connection Troubleshooter")),
211
- react_1.default.createElement("button", { className: "btn btn-sm btn-primary", onClick: runDiagnostics, disabled: running }, running ? (react_1.default.createElement(react_1.default.Fragment, null,
212
- react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }),
213
- "Running\u2026")) : (react_1.default.createElement(react_1.default.Fragment, null,
214
- react_1.default.createElement("i", { className: "bi bi-arrow-clockwise me-1" }),
215
- "Re-run")))),
216
- running && (react_1.default.createElement("div", { className: "mb-4" },
217
- react_1.default.createElement("div", { className: "d-flex justify-content-between mb-1" },
218
- react_1.default.createElement("small", { className: "text-muted" }, "Running diagnostics\u2026"),
219
- react_1.default.createElement("small", { className: "text-muted" },
220
- completedCount,
221
- " / ",
222
- totalCount)),
223
- react_1.default.createElement("div", { className: "progress", style: { height: '6px' } },
224
- react_1.default.createElement("div", { className: "progress-bar progress-bar-striped progress-bar-animated", style: { width: `${progressPct}%` } })))),
225
- done && checks.length > 0 && (react_1.default.createElement("div", { className: `alert ${overallStatus === 'pass' ? 'alert-success' : overallStatus === 'warn' ? 'alert-warning' : 'alert-danger'} d-flex justify-content-between align-items-center mb-4` },
226
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-2" },
227
- overallStatus === 'pass' && react_1.default.createElement("i", { className: "bi bi-check-circle-fill fs-5" }),
228
- overallStatus === 'warn' && react_1.default.createElement("i", { className: "bi bi-exclamation-triangle-fill fs-5" }),
229
- overallStatus === 'fail' && react_1.default.createElement("i", { className: "bi bi-x-circle-fill fs-5" }),
230
- react_1.default.createElement("div", null,
231
- overallStatus === 'pass' && react_1.default.createElement("strong", null, "All checks passed."),
232
- overallStatus === 'warn' && react_1.default.createElement("strong", null,
233
- summary.warnings,
234
- " warning",
235
- summary.warnings > 1 ? 's' : '',
236
- " found."),
237
- overallStatus === 'fail' && react_1.default.createElement("strong", null,
238
- summary.issues,
239
- " issue",
240
- summary.issues > 1 ? 's' : '',
241
- " found",
242
- summary.warnings > 0 ? `, ${summary.warnings} warning${summary.warnings > 1 ? 's' : ''}` : '',
243
- "."),
244
- ' ',
245
- react_1.default.createElement("span", { className: "opacity-75" },
246
- summary.passes,
247
- " passed \u00B7 ",
248
- summary.issues,
249
- " failed \u00B7 ",
250
- summary.warnings,
251
- " warnings \u00B7 ",
252
- summary.skips,
253
- " skipped"))),
254
- react_1.default.createElement("button", { className: "btn btn-sm btn-dark d-flex align-items-center gap-1", onClick: handleAskAssistant },
255
- react_1.default.createElement("i", { className: "bi bi-chat-dots-fill" }),
256
- "Ask AI Assistant"))),
257
- running && placeholders.length > 0 && (react_1.default.createElement("div", { className: "card mb-3" },
258
- react_1.default.createElement("div", { className: "card-body p-2" }, placeholders.map(p => (react_1.default.createElement("div", { key: p.id, className: "d-flex align-items-center gap-2 p-2 border-bottom" },
259
- STATUS_ICON[p.status],
260
- react_1.default.createElement("span", { className: "text-muted small" }, p.label))))))),
261
- LAYER_ORDER.map(layer => {
262
- const layerChecks = groups[layer];
263
- if (!layerChecks || layerChecks.length === 0)
264
- return null;
265
- const layerStatus = layerChecks.some(c => c.status === 'fail')
266
- ? 'fail'
267
- : layerChecks.some(c => c.status === 'warn')
268
- ? 'warn'
269
- : layerChecks.some(c => c.status === 'running')
270
- ? 'running'
271
- : layerChecks.every(c => c.status === 'skip')
272
- ? 'skip'
273
- : 'pass';
274
- return (react_1.default.createElement("div", { className: "card mb-3", key: layer },
275
- react_1.default.createElement("div", { className: "card-header d-flex align-items-center justify-content-between py-2" },
276
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-2" },
277
- STATUS_ICON[layerStatus],
278
- react_1.default.createElement("strong", { className: "small" }, layer)),
279
- react_1.default.createElement("span", { className: `badge ${STATUS_BADGE_CLASS[layerStatus]}` }, layerStatus === 'running' ? 'running' : layerStatus)),
280
- react_1.default.createElement("div", { className: "list-group list-group-flush" }, layerChecks.map(check => (react_1.default.createElement("div", { key: check.id, className: "list-group-item p-0" },
281
- react_1.default.createElement("div", { className: `d-flex align-items-start gap-2 px-3 py-2 ${check.suggestion ? 'cursor-pointer' : ''}`, style: { cursor: check.suggestion ? 'pointer' : 'default' }, onClick: () => check.suggestion && toggleExpand(check.id), role: check.suggestion ? 'button' : undefined },
282
- react_1.default.createElement("div", { className: "pt-1 flex-shrink-0" }, STATUS_ICON[check.status]),
283
- react_1.default.createElement("div", { className: "flex-grow-1 min-width-0" },
284
- react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-start" },
285
- react_1.default.createElement("span", { className: "small fw-medium" }, check.label),
286
- check.suggestion && (react_1.default.createElement("i", { className: `bi bi-chevron-${expanded.has(check.id) ? 'up' : 'down'} text-muted ms-2 flex-shrink-0 small` }))),
287
- react_1.default.createElement("div", { className: "small text-muted mt-1" }, check.detail))),
288
- check.suggestion && expanded.has(check.id) && (react_1.default.createElement("div", { className: "px-3 pb-2 pt-0 ms-4" },
289
- react_1.default.createElement("div", { className: "alert alert-info py-2 px-3 mb-0 small d-flex gap-2" },
290
- react_1.default.createElement("i", { className: "bi bi-lightbulb-fill text-info flex-shrink-0 mt-1" }),
291
- react_1.default.createElement("span", null, check.suggestion))))))))));
292
- }),
293
- done && checks.length > 0 && (react_1.default.createElement("div", { className: "text-center py-3" },
294
- react_1.default.createElement("button", { className: "btn btn-outline-primary", onClick: handleAskAssistant },
295
- react_1.default.createElement("i", { className: "bi bi-chat-dots-fill me-2" }),
296
- "Ask AI Assistant for Help"),
297
- react_1.default.createElement("p", { className: "text-muted small mt-2 mb-0" }, "Sends the full diagnostic report to the AI assistant for guided troubleshooting.")))));
175
+ ? "warn"
176
+ : "pass";
177
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid p-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-center mb-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-3", children: [(0, jsx_runtime_1.jsxs)("button", { className: "btn btn-sm btn-outline-secondary", onClick: onBack, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-arrow-left me-1" }), "Back"] }), (0, jsx_runtime_1.jsxs)("h4", { className: "mb-0", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-stethoscope me-2 text-primary" }), "Connection Troubleshooter"] })] }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-primary", onClick: runDiagnostics, disabled: running, children: running ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }), "Running\u2026"] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-arrow-clockwise me-1" }), "Re-run"] })) })] }), running && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between mb-1", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Running diagnostics\u2026" }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", children: [completedCount, " / ", totalCount] })] }), (0, jsx_runtime_1.jsx)("div", { className: "progress", style: { height: "6px" }, children: (0, jsx_runtime_1.jsx)("div", { className: "progress-bar progress-bar-striped progress-bar-animated", style: { width: `${progressPct}%` } }) })] })), done && checks.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: `alert ${overallStatus === "pass" ? "alert-success" : overallStatus === "warn" ? "alert-warning" : "alert-danger"} d-flex justify-content-between align-items-center mb-4`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2", children: [overallStatus === "pass" && (0, jsx_runtime_1.jsx)("i", { className: "bi bi-check-circle-fill fs-5" }), overallStatus === "warn" && (0, jsx_runtime_1.jsx)("i", { className: "bi bi-exclamation-triangle-fill fs-5" }), overallStatus === "fail" && (0, jsx_runtime_1.jsx)("i", { className: "bi bi-x-circle-fill fs-5" }), (0, jsx_runtime_1.jsxs)("div", { children: [overallStatus === "pass" && (0, jsx_runtime_1.jsx)("strong", { children: "All checks passed." }), overallStatus === "warn" && ((0, jsx_runtime_1.jsxs)("strong", { children: [summary.warnings, " warning", summary.warnings > 1 ? "s" : "", " found."] })), overallStatus === "fail" && ((0, jsx_runtime_1.jsxs)("strong", { children: [summary.issues, " issue", summary.issues > 1 ? "s" : "", " found", summary.warnings > 0
178
+ ? `, ${summary.warnings} warning${summary.warnings > 1 ? "s" : ""}`
179
+ : "", "."] })), " ", (0, jsx_runtime_1.jsxs)("span", { className: "opacity-75", children: [summary.passes, " passed \u00B7 ", summary.issues, " failed \u00B7 ", summary.warnings, " warnings \u00B7", " ", summary.skips, " skipped"] })] })] }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-sm btn-dark d-flex align-items-center gap-1", onClick: handleAskAssistant, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-chat-dots-fill" }), "Ask AI Assistant"] })] })), running && placeholders.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "card mb-3", children: (0, jsx_runtime_1.jsx)("div", { className: "card-body p-2", children: placeholders.map((p) => ((0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2 p-2 border-bottom", children: [STATUS_ICON[p.status], (0, jsx_runtime_1.jsx)("span", { className: "text-muted small", children: p.label })] }, p.id))) }) })), LAYER_ORDER.map((layer) => {
180
+ const layerChecks = groups[layer];
181
+ if (!layerChecks || layerChecks.length === 0)
182
+ return null;
183
+ const layerStatus = layerChecks.some((c) => c.status === "fail")
184
+ ? "fail"
185
+ : layerChecks.some((c) => c.status === "warn")
186
+ ? "warn"
187
+ : layerChecks.some((c) => c.status === "running")
188
+ ? "running"
189
+ : layerChecks.every((c) => c.status === "skip")
190
+ ? "skip"
191
+ : "pass";
192
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "card mb-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "card-header d-flex align-items-center justify-content-between py-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2", children: [STATUS_ICON[layerStatus], (0, jsx_runtime_1.jsx)("strong", { className: "small", children: layer })] }), (0, jsx_runtime_1.jsx)("span", { className: `badge ${STATUS_BADGE_CLASS[layerStatus]}`, children: layerStatus === "running" ? "running" : layerStatus })] }), (0, jsx_runtime_1.jsx)("div", { className: "list-group list-group-flush", children: layerChecks.map((check) => ((0, jsx_runtime_1.jsxs)("div", { className: "list-group-item p-0", children: [(0, jsx_runtime_1.jsxs)("div", { className: `d-flex align-items-start gap-2 px-3 py-2 ${check.suggestion ? "cursor-pointer" : ""}`, style: { cursor: check.suggestion ? "pointer" : "default" }, onClick: () => check.suggestion && toggleExpand(check.id), role: check.suggestion ? "button" : undefined, children: [(0, jsx_runtime_1.jsx)("div", { className: "pt-1 flex-shrink-0", children: STATUS_ICON[check.status] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-grow-1 min-width-0", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-start", children: [(0, jsx_runtime_1.jsx)("span", { className: "small fw-medium", children: check.label }), check.suggestion && ((0, jsx_runtime_1.jsx)("i", { className: `bi bi-chevron-${expanded.has(check.id) ? "up" : "down"} text-muted ms-2 flex-shrink-0 small` }))] }), (0, jsx_runtime_1.jsx)("div", { className: "small text-muted mt-1", children: check.detail })] })] }), check.suggestion && expanded.has(check.id) && ((0, jsx_runtime_1.jsx)("div", { className: "px-3 pb-2 pt-0 ms-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "alert alert-info py-2 px-3 mb-0 small d-flex gap-2", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-lightbulb-fill text-info flex-shrink-0 mt-1" }), (0, jsx_runtime_1.jsx)("span", { children: check.suggestion })] }) }))] }, check.id))) })] }, layer));
193
+ }), done && checks.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "text-center py-3", children: [(0, jsx_runtime_1.jsxs)("button", { className: "btn btn-outline-primary", onClick: handleAskAssistant, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-chat-dots-fill me-2" }), "Ask AI Assistant for Help"] }), (0, jsx_runtime_1.jsx)("p", { className: "text-muted small mt-2 mb-0", children: "Sends the full diagnostic report to the AI assistant for guided troubleshooting." })] }))] }));
298
194
  }
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  interface ICpuUsageGraphProps {
3
2
  /**
4
3
  * Function to fetch current CPU usage percentage
@@ -17,5 +16,5 @@ interface ICpuUsageGraphProps {
17
16
  */
18
17
  minHeight?: number;
19
18
  }
20
- export declare function CpuUsageGraph({ fetchCpuUsage, durationMinutes, updateInterval, minHeight }: ICpuUsageGraphProps): React.JSX.Element;
19
+ export declare function CpuUsageGraph({ fetchCpuUsage, durationMinutes, updateInterval, minHeight, }: ICpuUsageGraphProps): import("react/jsx-runtime").JSX.Element;
21
20
  export {};
@@ -1,41 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.CpuUsageGraph = CpuUsageGraph;
37
- const react_1 = __importStar(require("react"));
38
- function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 5000, minHeight = 80 }) {
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 5000, minHeight = 80, }) {
39
7
  const [dataPoints, setDataPoints] = (0, react_1.useState)([]);
40
8
  const [currentCpu, setCurrentCpu] = (0, react_1.useState)(0);
41
9
  const [width, setWidth] = (0, react_1.useState)(400);
@@ -72,7 +40,7 @@ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 50
72
40
  setDataPoints((prev) => {
73
41
  const newPoint = {
74
42
  timestamp: Date.now(),
75
- value: cpuValue
43
+ value: cpuValue,
76
44
  };
77
45
  const updated = [...prev, newPoint];
78
46
  // Keep only last N data points
@@ -83,7 +51,7 @@ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 50
83
51
  });
84
52
  }
85
53
  catch (error) {
86
- console.error('Error fetching CPU usage:', error);
54
+ console.error("Error fetching CPU usage:", error);
87
55
  }
88
56
  };
89
57
  // Initial fetch
@@ -99,7 +67,7 @@ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 50
99
67
  // Calculate SVG path
100
68
  const getLinePath = () => {
101
69
  if (dataPoints.length < 2)
102
- return '';
70
+ return "";
103
71
  const paddingLeft = 25;
104
72
  const paddingRight = 10;
105
73
  const paddingTop = 10;
@@ -118,19 +86,21 @@ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 50
118
86
  return { x, y };
119
87
  });
120
88
  // Create SVG path
121
- const pathData = points.map((point, idx) => {
89
+ const pathData = points
90
+ .map((point, idx) => {
122
91
  if (idx === 0) {
123
92
  return `M ${point.x} ${point.y}`;
124
93
  }
125
94
  return `L ${point.x} ${point.y}`;
126
- }).join(' ');
95
+ })
96
+ .join(" ");
127
97
  return pathData;
128
98
  };
129
99
  // Get gradient path for fill
130
100
  const getGradientPath = () => {
131
101
  const linePath = getLinePath();
132
102
  if (!linePath)
133
- return '';
103
+ return "";
134
104
  const paddingLeft = 25;
135
105
  const paddingRight = 10;
136
106
  const paddingBottom = 10;
@@ -139,62 +109,53 @@ function CpuUsageGraph({ fetchCpuUsage, durationMinutes = 5, updateInterval = 50
139
109
  };
140
110
  const linePath = getLinePath();
141
111
  const gradientPath = getGradientPath();
142
- return (react_1.default.createElement("div", { ref: containerRef, className: "cpu-usage-graph", style: { margin: 0, padding: 0, position: 'relative', width: '100%', height: '100%', minHeight: `${minHeight}px` } },
143
- react_1.default.createElement("svg", { width: width, height: height, style: {
144
- border: '1px solid rgba(128, 128, 128, 0.2)',
145
- borderRadius: '4px',
146
- backgroundColor: 'rgba(0, 0, 0, 0.02)',
147
- display: 'block'
148
- } },
149
- react_1.default.createElement("defs", null,
150
- react_1.default.createElement("linearGradient", { id: "cpuGradient", x1: "0%", y1: "0%", x2: "0%", y2: "100%" },
151
- react_1.default.createElement("stop", { offset: "0%", stopColor: "rgba(13, 110, 253, 0.3)" }),
152
- react_1.default.createElement("stop", { offset: "100%", stopColor: "rgba(13, 110, 253, 0.05)" }))),
153
- [0, 25, 50, 75, 100].map((value) => {
154
- const paddingLeft = 25;
155
- const paddingRight = 10;
156
- const paddingTop = 10;
157
- const paddingBottom = 10;
158
- const chartHeight = height - paddingTop - paddingBottom;
159
- const y = paddingTop + chartHeight - (value / 100) * chartHeight;
160
- return (react_1.default.createElement("g", { key: value },
161
- react_1.default.createElement("line", { x1: paddingLeft, y1: y, x2: width - paddingRight, y2: y, stroke: "rgba(128, 128, 128, 0.1)", strokeWidth: "1" }),
162
- react_1.default.createElement("text", { x: paddingLeft - 5, y: y + 4, fontSize: "10", fill: "rgba(128, 128, 128, 0.6)", textAnchor: "end" }, value)));
163
- }),
164
- gradientPath && (react_1.default.createElement("path", { d: gradientPath, fill: "url(#cpuGradient)" })),
165
- linePath && (react_1.default.createElement("path", { d: linePath, stroke: "#0d6efd", strokeWidth: "2", fill: "none", strokeLinecap: "round", strokeLinejoin: "round" })),
166
- dataPoints.map((point, idx) => {
167
- const paddingLeft = 25;
168
- const paddingRight = 10;
169
- const paddingTop = 10;
170
- const paddingBottom = 10;
171
- const chartWidth = width - paddingLeft - paddingRight;
172
- const chartHeight = height - paddingTop - paddingBottom;
173
- const now = Date.now();
174
- const timeRange = durationMinutes * 60 * 1000;
175
- const minTime = now - timeRange;
176
- const x = paddingLeft + ((point.timestamp - minTime) / timeRange) * chartWidth;
177
- const y = paddingTop + chartHeight - (point.value / 100) * chartHeight;
178
- // Only show the last point as a visible dot
179
- if (idx !== dataPoints.length - 1)
180
- return null;
181
- return (react_1.default.createElement("circle", { key: idx, cx: x, cy: y, r: "3", fill: "#0d6efd", stroke: "white", strokeWidth: "1.5" }));
182
- }),
183
- dataPoints.length === 0 && (react_1.default.createElement("text", { x: width / 2, y: height / 2, fontSize: "12", fill: "rgba(128, 128, 128, 0.6)", textAnchor: "middle" }, "Collecting data..."))),
184
- react_1.default.createElement("div", { style: {
185
- position: 'absolute',
186
- top: '50%',
187
- left: '50%',
188
- transform: 'translate(-50%, -50%)',
189
- fontSize: '2rem',
190
- fontWeight: 'bold',
191
- color: 'rgba(255, 255, 255, 0.7)',
192
- pointerEvents: 'none',
193
- userSelect: 'none',
194
- textAlign: 'center',
195
- lineHeight: '1.2'
196
- } },
197
- "CPU \u00A0",
198
- Math.round(currentCpu),
199
- "%")));
112
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: containerRef, className: "cpu-usage-graph", style: {
113
+ margin: 0,
114
+ padding: 0,
115
+ position: "relative",
116
+ width: "100%",
117
+ height: "100%",
118
+ minHeight: `${minHeight}px`,
119
+ }, children: [(0, jsx_runtime_1.jsxs)("svg", { width: width, height: height, style: {
120
+ border: "1px solid rgba(128, 128, 128, 0.2)",
121
+ borderRadius: "4px",
122
+ backgroundColor: "rgba(0, 0, 0, 0.02)",
123
+ display: "block",
124
+ }, children: [(0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: "cpuGradient", x1: "0%", y1: "0%", x2: "0%", y2: "100%", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "0%", stopColor: "rgba(13, 110, 253, 0.3)" }), (0, jsx_runtime_1.jsx)("stop", { offset: "100%", stopColor: "rgba(13, 110, 253, 0.05)" })] }) }), [0, 25, 50, 75, 100].map((value) => {
125
+ const paddingLeft = 25;
126
+ const paddingRight = 10;
127
+ const paddingTop = 10;
128
+ const paddingBottom = 10;
129
+ const chartHeight = height - paddingTop - paddingBottom;
130
+ const y = paddingTop + chartHeight - (value / 100) * chartHeight;
131
+ return ((0, jsx_runtime_1.jsxs)("g", { children: [(0, jsx_runtime_1.jsx)("line", { x1: paddingLeft, y1: y, x2: width - paddingRight, y2: y, stroke: "rgba(128, 128, 128, 0.1)", strokeWidth: "1" }), (0, jsx_runtime_1.jsx)("text", { x: paddingLeft - 5, y: y + 4, fontSize: "10", fill: "rgba(128, 128, 128, 0.6)", textAnchor: "end", children: value })] }, value));
132
+ }), gradientPath && (0, jsx_runtime_1.jsx)("path", { d: gradientPath, fill: "url(#cpuGradient)" }), linePath && ((0, jsx_runtime_1.jsx)("path", { d: linePath, stroke: "#0d6efd", strokeWidth: "2", fill: "none", strokeLinecap: "round", strokeLinejoin: "round" })), dataPoints.map((point, idx) => {
133
+ const paddingLeft = 25;
134
+ const paddingRight = 10;
135
+ const paddingTop = 10;
136
+ const paddingBottom = 10;
137
+ const chartWidth = width - paddingLeft - paddingRight;
138
+ const chartHeight = height - paddingTop - paddingBottom;
139
+ const now = Date.now();
140
+ const timeRange = durationMinutes * 60 * 1000;
141
+ const minTime = now - timeRange;
142
+ const x = paddingLeft + ((point.timestamp - minTime) / timeRange) * chartWidth;
143
+ const y = paddingTop + chartHeight - (point.value / 100) * chartHeight;
144
+ // Only show the last point as a visible dot
145
+ if (idx !== dataPoints.length - 1)
146
+ return null;
147
+ return ((0, jsx_runtime_1.jsx)("circle", { cx: x, cy: y, r: "3", fill: "#0d6efd", stroke: "white", strokeWidth: "1.5" }, idx));
148
+ }), dataPoints.length === 0 && ((0, jsx_runtime_1.jsx)("text", { x: width / 2, y: height / 2, fontSize: "12", fill: "rgba(128, 128, 128, 0.6)", textAnchor: "middle", children: "Collecting data..." }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
149
+ position: "absolute",
150
+ top: "50%",
151
+ left: "50%",
152
+ transform: "translate(-50%, -50%)",
153
+ fontSize: "2rem",
154
+ fontWeight: "bold",
155
+ color: "rgba(255, 255, 255, 0.7)",
156
+ pointerEvents: "none",
157
+ userSelect: "none",
158
+ textAlign: "center",
159
+ lineHeight: "1.2",
160
+ }, children: ["CPU \u00A0", Math.round(currentCpu), "%"] })] }));
200
161
  }