@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,69 +1,50 @@
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.ColorModeDropdown = exports.colorModePreference = exports.colorMode = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
5
  const peers_sdk_1 = require("@peers-app/peers-sdk");
8
- const react_1 = __importDefault(require("react"));
9
6
  const hooks_1 = require("../../hooks");
10
- exports.colorMode = (0, peers_sdk_1.deviceVar)('colorMode', {
11
- defaultValue: 'dark',
7
+ exports.colorMode = (0, peers_sdk_1.deviceVar)("colorMode", {
8
+ defaultValue: "dark",
12
9
  });
13
- exports.colorModePreference = (0, peers_sdk_1.deviceVar)('colorModePreference', {
14
- defaultValue: 'dark',
10
+ exports.colorModePreference = (0, peers_sdk_1.deviceVar)("colorModePreference", {
11
+ defaultValue: "dark",
15
12
  });
16
13
  function applyColorMode(modePreference) {
17
14
  if (!modePreference) {
18
- modePreference = (0, exports.colorModePreference)() || 'dark';
15
+ modePreference = (0, exports.colorModePreference)() || "dark";
19
16
  }
20
17
  else {
21
18
  (0, exports.colorModePreference)(modePreference);
22
19
  }
23
20
  let mode = (0, exports.colorMode)();
24
- if (modePreference === 'auto') {
25
- const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
26
- mode = isDarkMode ? 'dark' : 'light';
21
+ if (modePreference === "auto") {
22
+ const isDarkMode = window.matchMedia?.("(prefers-color-scheme: dark)").matches;
23
+ mode = isDarkMode ? "dark" : "light";
27
24
  }
28
25
  else {
29
26
  mode = modePreference;
30
27
  }
31
- document.documentElement.setAttribute('data-bs-theme', mode);
32
- if (mode === 'light') {
33
- document.documentElement.style.backgroundColor = '';
34
- document.body.style.backgroundColor = 'initial';
28
+ document.documentElement.setAttribute("data-bs-theme", mode);
29
+ if (mode === "light") {
30
+ document.documentElement.style.backgroundColor = "";
31
+ document.body.style.backgroundColor = "initial";
35
32
  }
36
33
  else {
37
- document.documentElement.style.backgroundColor = 'rgb(33, 37, 41)';
38
- document.body.style.backgroundColor = 'rgb(33, 37, 41)';
34
+ document.documentElement.style.backgroundColor = "rgb(33, 37, 41)";
35
+ document.body.style.backgroundColor = "rgb(33, 37, 41)";
39
36
  }
40
37
  const themeMeta = document.querySelector('meta[name="theme-color"]');
41
38
  if (themeMeta) {
42
- themeMeta.setAttribute('content', mode === 'light' ? '#ffffff' : '#212529');
39
+ themeMeta.setAttribute("content", mode === "light" ? "#ffffff" : "#212529");
43
40
  }
44
41
  (0, exports.colorMode)(mode);
45
42
  exports.colorMode.notifySubscribers();
46
43
  return mode;
47
44
  }
48
- exports.colorModePreference.subscribe(newValue => applyColorMode(newValue));
45
+ exports.colorModePreference.subscribe((newValue) => applyColorMode(newValue));
49
46
  const ColorModeDropdown = () => {
50
47
  const [modePreference] = (0, hooks_1.useObservable)(exports.colorModePreference);
51
- return (react_1.default.createElement("div", { className: "dropdown" },
52
- react_1.default.createElement("button", { className: "btn btn-secondary dropdown-toggle", type: "button", id: "colorModeDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false" },
53
- "Color Mode: ",
54
- (0, peers_sdk_1.camelCaseToSpaces)(modePreference)),
55
- react_1.default.createElement("ul", { className: "dropdown-menu", "aria-labelledby": "colorModeDropdown" },
56
- react_1.default.createElement("li", null,
57
- react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('auto') },
58
- "Auto ",
59
- modePreference === 'auto' && '✓')),
60
- react_1.default.createElement("li", null,
61
- react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('light') },
62
- "Light ",
63
- modePreference === 'light' && '✓')),
64
- react_1.default.createElement("li", null,
65
- react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('dark') },
66
- "Dark ",
67
- modePreference === 'dark' && '✓')))));
48
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "dropdown", children: [(0, jsx_runtime_1.jsxs)("button", { className: "btn btn-secondary dropdown-toggle", type: "button", id: "colorModeDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false", children: ["Color Mode: ", (0, peers_sdk_1.camelCaseToSpaces)(modePreference)] }), (0, jsx_runtime_1.jsxs)("ul", { className: "dropdown-menu", "aria-labelledby": "colorModeDropdown", children: [(0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("auto"), children: ["Auto ", modePreference === "auto" && "✓"] }) }), (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("light"), children: ["Light ", modePreference === "light" && "✓"] }) }), (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("dark"), children: ["Dark ", modePreference === "dark" && "✓"] }) })] })] }));
68
49
  };
69
50
  exports.ColorModeDropdown = ColorModeDropdown;
@@ -1,2 +1,2 @@
1
- import React from 'react';
1
+ import type React from "react";
2
2
  export declare const SettingsPage: React.FC;
@@ -34,62 +34,51 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SettingsPage = void 0;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
37
38
  const peers_sdk_1 = require("@peers-app/peers-sdk");
38
- const react_1 = __importStar(require("react"));
39
+ const react_1 = require("react");
39
40
  const input_1 = require("../../components/input");
40
- const tooltip_1 = require("../../components/tooltip");
41
41
  const tabs_1 = require("../../components/tabs");
42
+ const tooltip_1 = require("../../components/tooltip");
42
43
  const globals = __importStar(require("../../globals"));
43
44
  const hooks_1 = require("../../hooks");
44
45
  const color_mode_dropdown_1 = require("./color-mode-dropdown");
45
46
  const voice_settings_1 = require("./voice-settings");
46
47
  const SettingsPage = () => {
47
- return (react_1.default.createElement("div", { className: 'container-fluid' },
48
- react_1.default.createElement(tabs_1.Tabs, { tabs: [
48
+ return ((0, jsx_runtime_1.jsx)("div", { className: "container-fluid", children: (0, jsx_runtime_1.jsx)(tabs_1.Tabs, { tabs: [
49
49
  {
50
- name: 'User',
51
- content: react_1.default.createElement(UserSettingsTab, null),
50
+ name: "User",
51
+ content: (0, jsx_runtime_1.jsx)(UserSettingsTab, {}),
52
52
  active: true,
53
53
  },
54
54
  {
55
- name: 'Appearance',
56
- content: react_1.default.createElement(AppearanceSettingsTab, null),
55
+ name: "Appearance",
56
+ content: (0, jsx_runtime_1.jsx)(AppearanceSettingsTab, {}),
57
57
  },
58
58
  {
59
- name: 'Voice',
60
- content: react_1.default.createElement(voice_settings_1.VoiceSettings, null),
59
+ name: "Voice",
60
+ content: (0, jsx_runtime_1.jsx)(voice_settings_1.VoiceSettings, {}),
61
61
  },
62
62
  {
63
- name: 'Advanced',
64
- content: react_1.default.createElement(AdvancedSettingsTab, null),
63
+ name: "Advanced",
64
+ content: (0, jsx_runtime_1.jsx)(AdvancedSettingsTab, {}),
65
65
  },
66
- ] })));
66
+ ] }) }));
67
67
  };
68
68
  exports.SettingsPage = SettingsPage;
69
69
  const UserSettingsTab = () => {
70
- return (react_1.default.createElement(react_1.default.Fragment, null,
71
- react_1.default.createElement(ProfileSection, null),
72
- react_1.default.createElement(LogoutSection, null)));
70
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ProfileSection, {}), (0, jsx_runtime_1.jsx)(LogoutSection, {})] }));
73
71
  };
74
72
  const AppearanceSettingsTab = () => {
75
- return (react_1.default.createElement(react_1.default.Fragment, null,
76
- react_1.default.createElement("h5", { className: "mb-3" }, "Appearance"),
77
- react_1.default.createElement(color_mode_dropdown_1.ColorModeDropdown, null)));
73
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-3", children: "Appearance" }), (0, jsx_runtime_1.jsx)(color_mode_dropdown_1.ColorModeDropdown, {})] }));
78
74
  };
79
75
  const AdvancedSettingsTab = () => {
80
- return (react_1.default.createElement(react_1.default.Fragment, null,
81
- react_1.default.createElement("h5", { className: "mb-3" }, "Advanced Settings"),
82
- react_1.default.createElement(PackagesRootDirectory, null),
83
- react_1.default.createElement(ReloadPackagesOnPageRefresh, null),
84
- react_1.default.createElement(AutoUpdatePeersCore, null),
85
- react_1.default.createElement(ResetDeviceSyncInfos, null),
86
- react_1.default.createElement(DeleteLocalDatabase, null),
87
- react_1.default.createElement(ImportOldPeersData, null)));
76
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-3", children: "Advanced Settings" }), (0, jsx_runtime_1.jsx)(PackagesRootDirectory, {}), (0, jsx_runtime_1.jsx)(ReloadPackagesOnPageRefresh, {}), (0, jsx_runtime_1.jsx)(AutoUpdatePeersCore, {}), (0, jsx_runtime_1.jsx)(ResetDeviceSyncInfos, {}), (0, jsx_runtime_1.jsx)(DeleteLocalDatabase, {}), (0, jsx_runtime_1.jsx)(ImportOldPeersData, {}), (0, jsx_runtime_1.jsx)(ResetChangeTracking, {})] }));
88
77
  };
89
78
  const ProfileSection = () => {
90
79
  const [deviceId] = (0, hooks_1.useObservable)(peers_sdk_1.thisDeviceId);
91
- const deviceName = (0, hooks_1.useObservableState)('');
92
- const savedDeviceName = (0, hooks_1.useObservableState)('');
80
+ const deviceName = (0, hooks_1.useObservableState)("");
81
+ const savedDeviceName = (0, hooks_1.useObservableState)("");
93
82
  const me = (0, hooks_1.usePromise)(async () => {
94
83
  const userContext = await (0, peers_sdk_1.getUserContext)();
95
84
  return (0, peers_sdk_1.Users)(userContext.userDataContext).initDoc(globals.me);
@@ -102,15 +91,15 @@ const ProfileSection = () => {
102
91
  try {
103
92
  const userContext = await (0, peers_sdk_1.getUserContext)();
104
93
  const device = await (0, peers_sdk_1.Devices)(userContext.userDataContext).get(deviceId);
105
- deviceName(device?.name || '');
106
- savedDeviceName(device?.name || '');
94
+ deviceName(device?.name || "");
95
+ savedDeviceName(device?.name || "");
107
96
  }
108
97
  catch (err) {
109
- console.error('Error loading device name:', err);
98
+ console.error("Error loading device name:", err);
110
99
  }
111
100
  };
112
101
  loadDevice();
113
- }, [deviceId]);
102
+ }, [deviceId, deviceName, savedDeviceName]);
114
103
  const handleSave = async () => {
115
104
  try {
116
105
  // Save user profile
@@ -123,7 +112,7 @@ const ProfileSection = () => {
123
112
  if (deviceId && deviceName() !== savedDeviceName()) {
124
113
  const userContext = await (0, peers_sdk_1.getUserContext)();
125
114
  const devicesTable = (0, peers_sdk_1.Devices)(userContext.userDataContext);
126
- const device = await devicesTable.get(deviceId) || {
115
+ const device = (await devicesTable.get(deviceId)) || {
127
116
  deviceId,
128
117
  userId: userContext.userId,
129
118
  firstSeen: new Date(),
@@ -136,8 +125,8 @@ const ProfileSection = () => {
136
125
  }
137
126
  }
138
127
  catch (err) {
139
- console.error('Error saving profile:', err);
140
- alert('Failed to save: ' + err.message);
128
+ console.error("Error saving profile:", err);
129
+ alert(`Failed to save: ${err.message}`);
141
130
  }
142
131
  };
143
132
  // Subscribe to changes
@@ -147,104 +136,81 @@ const ProfileSection = () => {
147
136
  return null;
148
137
  }
149
138
  const hasChanges = !!me.q() || deviceName() !== savedDeviceName();
150
- return (react_1.default.createElement(react_1.default.Fragment, null,
151
- react_1.default.createElement("div", { className: "d-flex align-items-center mb-3" },
152
- react_1.default.createElement("h5", { className: "mb-0 me-auto" }, "Settings"),
153
- react_1.default.createElement("button", { className: "btn btn-primary btn-sm", onClick: handleSave, disabled: !hasChanges }, "Save")),
154
- react_1.default.createElement("div", { className: "mb-3" },
155
- react_1.default.createElement("small", { className: "form-label" }, "Display Name:"),
156
- react_1.default.createElement(input_1.Input, { value: me.qs.name, className: "form-control", placeholder: "Enter your name" })),
157
- react_1.default.createElement("div", { className: "mb-3" },
158
- react_1.default.createElement("small", { className: "form-label" },
159
- "Device Name:",
160
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Give this device a friendly name to identify it in your network." })),
161
- react_1.default.createElement(input_1.Input, { value: deviceName, className: "form-control", placeholder: "e.g., My Laptop" })),
162
- react_1.default.createElement("div", { className: "mb-3" },
163
- react_1.default.createElement("small", { className: "form-label" },
164
- "User ID:",
165
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." })),
166
- react_1.default.createElement(input_1.Input, { value: me.userId, className: "form-control", disabled: true })),
167
- react_1.default.createElement("div", { className: "row" },
168
- react_1.default.createElement("div", { className: "col-md-6 mb-3" },
169
- react_1.default.createElement("small", { className: "form-label" },
170
- "Public Key:",
171
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This is your public key that other users will use to verify your signatures." })),
172
- react_1.default.createElement(input_1.Input, { value: me.publicKey, className: "form-control form-control-sm", disabled: true })),
173
- react_1.default.createElement("div", { className: "col-md-6 mb-3" },
174
- react_1.default.createElement("small", { className: "form-label" },
175
- "Public Box Key:",
176
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This is the public key that other users can use to encrypt data so that only you can open it." })),
177
- react_1.default.createElement(input_1.Input, { value: me.publicBoxKey, className: "form-control form-control-sm", disabled: true }))),
178
- react_1.default.createElement("div", { className: "mb-3" },
179
- react_1.default.createElement("small", { className: "form-label" },
180
- "Device ID:",
181
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies this device on Peers networks." })),
182
- react_1.default.createElement(input_1.Input, { value: deviceId || '', className: "form-control form-control-sm", disabled: true }))));
139
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center mb-3", children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-0 me-auto", children: "Settings" }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary btn-sm", onClick: handleSave, disabled: !hasChanges, children: "Save" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("small", { className: "form-label", children: "Display Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.qs.name, className: "form-control", placeholder: "Enter your name" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Device Name:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Give this device a friendly name to identify it in your network." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: deviceName, className: "form-control", placeholder: "e.g., My Laptop" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["User ID:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.userId, className: "form-control", disabled: true })] }), (0, jsx_runtime_1.jsxs)("div", { className: "row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "col-md-6 mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Public Key:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This is your public key that other users will use to verify your signatures." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.publicKey, className: "form-control form-control-sm", disabled: true })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-md-6 mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Public Box Key:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This is the public key that other users can use to encrypt data so that only you can open it." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.publicBoxKey, className: "form-control form-control-sm", disabled: true })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Device ID:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies this device on Peers networks." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: deviceId || "", className: "form-control form-control-sm", disabled: true })] })] }));
183
140
  };
184
141
  const PackagesRootDirectory = () => {
185
- return (react_1.default.createElement("div", { className: 'mt-3' },
186
- react_1.default.createElement("small", null,
187
- "Packages Directory:",
188
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })),
189
- react_1.default.createElement(input_1.Input, { value: peers_sdk_1.packagesRootDir, className: 'form-control' })));
142
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-3", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Packages Directory:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: peers_sdk_1.packagesRootDir, className: "form-control" })] }));
190
143
  };
191
144
  const ReloadPackagesOnPageRefresh = () => {
192
145
  (0, hooks_1.useObservable)(peers_sdk_1.reloadPackagesOnPageRefresh);
193
- return (react_1.default.createElement("div", null,
194
- react_1.default.createElement("label", { htmlFor: "isPrimary", className: "form-label small mt-2 me-2" }, "Reload Packages on Page Load:"),
195
- react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.reloadPackagesOnPageRefresh)(), onChange: (e) => {
196
- const checked = e.target.checked;
197
- (0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
198
- } }),
199
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })));
146
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "isPrimary", className: "form-label small mt-2 me-2", children: "Reload Packages on Page Load:" }), (0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: (0, peers_sdk_1.reloadPackagesOnPageRefresh)(), onChange: (e) => {
147
+ const checked = e.target.checked;
148
+ (0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
149
+ } }), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })] }));
200
150
  };
201
151
  const AutoUpdatePeersCore = () => {
202
152
  (0, hooks_1.useObservable)(peers_sdk_1.autoUpdatePeersCore);
203
- return (react_1.default.createElement("div", null,
204
- react_1.default.createElement("label", { htmlFor: "autoUpdatePeersCore", className: "form-label small mt-2 me-2" }, "Auto-update peers-core on startup:"),
205
- react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.autoUpdatePeersCore)(), onChange: (e) => {
206
- const checked = e.target.checked;
207
- (0, peers_sdk_1.autoUpdatePeersCore)(checked);
208
- } }),
209
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.` })));
153
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "autoUpdatePeersCore", className: "form-label small mt-2 me-2", children: "Auto-update peers-core on startup:" }), (0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: (0, peers_sdk_1.autoUpdatePeersCore)(), onChange: (e) => {
154
+ const checked = e.target.checked;
155
+ (0, peers_sdk_1.autoUpdatePeersCore)(checked);
156
+ } }), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.` })] }));
210
157
  };
211
158
  const ResetDeviceSyncInfos = () => {
212
- return (react_1.default.createElement("div", { className: 'mt-3' },
213
- react_1.default.createElement("button", { className: 'btn btn-secondary btn-sm ms-2', onClick: async () => {
159
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mt-3", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary btn-sm ms-2", onClick: async () => {
214
160
  try {
215
161
  await peers_sdk_1.rpcServerCalls.resetAllDeviceSyncInfo();
216
- alert('All device sync info has been reset. Syncing in progress...');
162
+ alert("All device sync info has been reset. Syncing in progress...");
217
163
  }
218
164
  catch (err) {
219
- console.error('Error while resetting all device sync info', err);
165
+ console.error("Error while resetting all device sync info", err);
220
166
  }
221
- } }, "Reset All Device Sync Info")));
167
+ }, children: "Reset All Device Sync Info" }) }));
222
168
  };
223
169
  const DeleteLocalDatabase = () => {
224
- return (react_1.default.createElement("div", { className: 'mt-3' },
225
- react_1.default.createElement("button", { className: 'btn btn-danger btn-sm ms-2', onClick: async () => {
226
- const confirmed = confirm('Are you sure you want to delete the local database for the current group? ' +
227
- 'This will remove all local data. You will need to restart the app and re-sync from other devices.');
170
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mt-3", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-danger btn-sm ms-2", onClick: async () => {
171
+ const confirmed = confirm("Are you sure you want to delete the local database for the current group? " +
172
+ "This will remove all local data. You will need to restart the app and re-sync from other devices.");
228
173
  if (!confirmed)
229
174
  return;
230
175
  try {
231
176
  await peers_sdk_1.rpcServerCalls.deleteLocalDatabase();
232
- alert('Local database has been deleted. Please restart the app.');
177
+ alert("Local database has been deleted. Please restart the app.");
233
178
  }
234
179
  catch (err) {
235
- console.error('Error while deleting local database', err);
236
- alert('Failed to delete local database: ' + err.message);
180
+ console.error("Error while deleting local database", err);
181
+ alert(`Failed to delete local database: ${err.message}`);
237
182
  }
238
- } }, "Delete Local Database")));
183
+ }, children: "Delete Local Database" }) }));
184
+ };
185
+ const ResetChangeTracking = () => {
186
+ const [busy, setBusy] = (0, react_1.useState)(false);
187
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 pt-3 border-top", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-2", children: "Change tracking" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted d-block mb-2", children: "Clears all change history for the current group and rebuilds it from your current database rows. Device sync cursors are cleared; a full resync with peers may follow. Use when debugging sync issues." }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-warning btn-sm", disabled: busy, onClick: async () => {
188
+ const confirmed = window.confirm("Reset Change Tracking will clear all change history and rebuild it from scratch. This may take a while. Continue?");
189
+ if (!confirmed)
190
+ return;
191
+ setBusy(true);
192
+ try {
193
+ await peers_sdk_1.rpcServerCalls.resetChangeTracking();
194
+ await peers_sdk_1.rpcServerCalls.flushDatabases();
195
+ alert("Change tracking reset successfully.");
196
+ }
197
+ catch (err) {
198
+ console.error("Error while resetting change tracking", err);
199
+ alert(`Failed to reset change tracking: ${err.message || String(err)}`);
200
+ }
201
+ finally {
202
+ setBusy(false);
203
+ }
204
+ }, children: busy ? "Resetting…" : "Reset Change Tracking" })] }));
239
205
  };
240
- const IMPORT_TOOL_ID = '00mh0wlipkdbeaw8imptsk001';
206
+ const IMPORT_TOOL_ID = "00mh0wlipkdbeaw8imptsk001";
241
207
  const ImportOldPeersData = () => {
242
208
  const fileInputRef = (0, react_1.useRef)(null);
243
- const [filePath, setFilePath] = (0, react_1.useState)('');
244
- const [fileName, setFileName] = (0, react_1.useState)('');
209
+ const [filePath, setFilePath] = (0, react_1.useState)("");
210
+ const [_fileName, setFileName] = (0, react_1.useState)("");
245
211
  const [loading, setLoading] = (0, react_1.useState)(false);
246
212
  const [result, setResult] = (0, react_1.useState)(null);
247
- const [error, setError] = (0, react_1.useState)('');
213
+ const [error, setError] = (0, react_1.useState)("");
248
214
  const handleFileSelect = (e) => {
249
215
  const file = e.target.files?.[0];
250
216
  if (!file)
@@ -257,17 +223,17 @@ const ImportOldPeersData = () => {
257
223
  }
258
224
  else {
259
225
  setFileName(file.name);
260
- setFilePath('');
261
- setError('File path not available. This feature requires the Electron desktop app.');
226
+ setFilePath("");
227
+ setError("File path not available. This feature requires the Electron desktop app.");
262
228
  }
263
229
  setResult(null);
264
- setError('');
230
+ setError("");
265
231
  };
266
232
  const handleDryRun = async () => {
267
233
  if (!filePath)
268
234
  return;
269
235
  setLoading(true);
270
- setError('');
236
+ setError("");
271
237
  setResult(null);
272
238
  try {
273
239
  const response = await peers_sdk_1.rpcServerCalls.runTool(IMPORT_TOOL_ID, {
@@ -278,127 +244,34 @@ const ImportOldPeersData = () => {
278
244
  setResult(response.result);
279
245
  }
280
246
  else {
281
- setError('Unexpected response from import tool');
247
+ setError("Unexpected response from import tool");
282
248
  }
283
249
  }
284
250
  catch (err) {
285
- setError(err.message || 'Failed to run dry run');
251
+ setError(err.message || "Failed to run dry run");
286
252
  }
287
253
  finally {
288
254
  setLoading(false);
289
255
  }
290
256
  };
291
- return (react_1.default.createElement("div", { className: "mt-4 pt-3 border-top" },
292
- react_1.default.createElement("h6", { className: "mb-2" }, "Import Old Peers Data"),
293
- react_1.default.createElement("small", { className: "text-muted d-block mb-2" }, "Import tasks and log entries from an old peers JSON export file."),
294
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-2 mb-2" },
295
- react_1.default.createElement("input", { ref: fileInputRef, type: "file", accept: ".json", className: "form-control form-control-sm", style: { maxWidth: 350 }, onChange: handleFileSelect }),
296
- react_1.default.createElement("button", { className: "btn btn-outline-primary btn-sm", onClick: handleDryRun, disabled: !filePath || loading }, loading ? 'Analyzing...' : 'Dry Run')),
297
- error && (react_1.default.createElement("div", { className: "alert alert-danger py-1 px-2 small mt-2" }, error)),
298
- result && react_1.default.createElement(DryRunResults, { result: result })));
257
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 pt-3 border-top", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-2", children: "Import Old Peers Data" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted d-block mb-2", children: "Import tasks and log entries from an old peers JSON export file." }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", accept: ".json", className: "form-control form-control-sm", style: { maxWidth: 350 }, onChange: handleFileSelect }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-outline-primary btn-sm", onClick: handleDryRun, disabled: !filePath || loading, children: loading ? "Analyzing..." : "Dry Run" })] }), error && (0, jsx_runtime_1.jsx)("div", { className: "alert alert-danger py-1 px-2 small mt-2", children: error }), result && (0, jsx_runtime_1.jsx)(DryRunResults, { result: result })] }));
299
258
  };
300
259
  const DryRunResults = ({ result }) => {
301
260
  const sm = result.statusMapping;
302
261
  const um = result.userMapping;
303
- return (react_1.default.createElement("div", { className: "mt-2" },
304
- react_1.default.createElement("div", { className: "alert alert-info py-2 px-3 small" },
305
- react_1.default.createElement("strong", null, "Summary:"),
306
- " ",
307
- result.totalTasks.toLocaleString(),
308
- " tasks and ",
309
- result.totalLogEntries.toLocaleString(),
310
- " log entries across ",
311
- result.groups.length,
312
- " groups (",
313
- result.totalRecords.toLocaleString(),
314
- " total records in file)"),
315
- result.warnings.length > 0 && (react_1.default.createElement("div", { className: "alert alert-warning py-2 px-3 small" },
316
- react_1.default.createElement("strong", null, "Warnings:"),
317
- react_1.default.createElement("ul", { className: "mb-0 ps-3" }, result.warnings.map((w, i) => react_1.default.createElement("li", { key: i }, w))))),
318
- react_1.default.createElement("details", { className: "mb-2" },
319
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "Status Mapping"),
320
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
321
- react_1.default.createElement("thead", null,
322
- react_1.default.createElement("tr", null,
323
- react_1.default.createElement("th", null, "Mapping"),
324
- react_1.default.createElement("th", { className: "text-end" }, "Count"))),
325
- react_1.default.createElement("tbody", null,
326
- react_1.default.createElement("tr", null,
327
- react_1.default.createElement("td", null, "In-Progress \u2192 Done"),
328
- react_1.default.createElement("td", { className: "text-end" }, sm.inProgressToDone.toLocaleString())),
329
- react_1.default.createElement("tr", null,
330
- react_1.default.createElement("td", null, "In-Progress \u2192 In-Progress"),
331
- react_1.default.createElement("td", { className: "text-end" }, sm.inProgressKeep.toLocaleString())),
332
- react_1.default.createElement("tr", null,
333
- react_1.default.createElement("td", null, "Queued \u2192 Done"),
334
- react_1.default.createElement("td", { className: "text-end" }, sm.queuedToDone.toLocaleString())),
335
- react_1.default.createElement("tr", null,
336
- react_1.default.createElement("td", null, "Queued \u2192 Queued"),
337
- react_1.default.createElement("td", { className: "text-end" }, sm.queuedKeep.toLocaleString())),
338
- react_1.default.createElement("tr", null,
339
- react_1.default.createElement("td", null, "Backlog \u2192 Done"),
340
- react_1.default.createElement("td", { className: "text-end" }, sm.backlogToDone.toLocaleString())),
341
- react_1.default.createElement("tr", null,
342
- react_1.default.createElement("td", null, "Backlog \u2192 Backlog"),
343
- react_1.default.createElement("td", { className: "text-end" }, sm.backlogKeep.toLocaleString())),
344
- react_1.default.createElement("tr", null,
345
- react_1.default.createElement("td", null, "No status \u2192 Done"),
346
- react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToDone.toLocaleString())),
347
- react_1.default.createElement("tr", null,
348
- react_1.default.createElement("td", null, "No status \u2192 Backlog"),
349
- react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToBacklog.toLocaleString()))))),
350
- react_1.default.createElement("details", { className: "mb-2" },
351
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "User Mapping"),
352
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
353
- react_1.default.createElement("thead", null,
354
- react_1.default.createElement("tr", null,
355
- react_1.default.createElement("th", null, "User"),
356
- react_1.default.createElement("th", { className: "text-end" }, "Tasks"))),
357
- react_1.default.createElement("tbody", null,
358
- react_1.default.createElement("tr", null,
359
- react_1.default.createElement("td", null, "Mark"),
360
- react_1.default.createElement("td", { className: "text-end" }, um.mark.toLocaleString())),
361
- react_1.default.createElement("tr", null,
362
- react_1.default.createElement("td", null, "Blair"),
363
- react_1.default.createElement("td", { className: "text-end" }, um.blair.toLocaleString())),
364
- react_1.default.createElement("tr", null,
365
- react_1.default.createElement("td", null, "Other \u2192 Mark"),
366
- react_1.default.createElement("td", { className: "text-end" }, um.other.toLocaleString()))))),
367
- react_1.default.createElement("details", { open: true, className: "mb-2" },
368
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } },
369
- "Groups (",
370
- result.groups.length,
371
- ")"),
372
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
373
- react_1.default.createElement("thead", null,
374
- react_1.default.createElement("tr", null,
375
- react_1.default.createElement("th", null, "Group"),
376
- react_1.default.createElement("th", null, "Route"),
377
- react_1.default.createElement("th", { className: "text-end" }, "Tasks"),
378
- react_1.default.createElement("th", { className: "text-end" }, "Active"),
379
- react_1.default.createElement("th", { className: "text-end" }, "Done"),
380
- react_1.default.createElement("th", { className: "text-end" }, "Logs"))),
381
- react_1.default.createElement("tbody", null, result.groups.map(g => (react_1.default.createElement("tr", { key: g.groupId },
382
- react_1.default.createElement("td", null, g.groupName),
383
- react_1.default.createElement("td", null,
384
- react_1.default.createElement("span", { className: `badge bg-${g.context === 'home' ? 'success' : 'secondary'}` }, g.context)),
385
- react_1.default.createElement("td", { className: "text-end" }, g.taskCount.toLocaleString()),
386
- react_1.default.createElement("td", { className: "text-end" }, g.activeCount.toLocaleString()),
387
- react_1.default.createElement("td", { className: "text-end" }, g.doneCount.toLocaleString()),
388
- react_1.default.createElement("td", { className: "text-end" }, g.logEntryCount.toLocaleString())))))))));
262
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "alert alert-info py-2 px-3 small", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Summary:" }), " ", result.totalTasks.toLocaleString(), " tasks and", " ", result.totalLogEntries.toLocaleString(), " log entries across ", result.groups.length, " groups (", result.totalRecords.toLocaleString(), " total records in file)"] }), result.warnings.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-warning py-2 px-3 small", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Warnings:" }), (0, jsx_runtime_1.jsx)("ul", { className: "mb-0 ps-3", children: result.warnings.map((w, i) => ((0, jsx_runtime_1.jsx)("li", { children: w }, i))) })] })), (0, jsx_runtime_1.jsxs)("details", { className: "mb-2", children: [(0, jsx_runtime_1.jsx)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: "Status Mapping" }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Mapping" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Count" })] }) }), (0, jsx_runtime_1.jsxs)("tbody", { children: [(0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "In-Progress \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.inProgressToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "In-Progress \u2192 In-Progress" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.inProgressKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Queued \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.queuedToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Queued \u2192 Queued" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.queuedKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Backlog \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.backlogToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Backlog \u2192 Backlog" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.backlogKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "No status \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.noStatusToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "No status \u2192 Backlog" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.noStatusToBacklog.toLocaleString() })] })] })] })] }), (0, jsx_runtime_1.jsxs)("details", { className: "mb-2", children: [(0, jsx_runtime_1.jsx)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: "User Mapping" }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "User" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Tasks" })] }) }), (0, jsx_runtime_1.jsxs)("tbody", { children: [(0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Mark" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.mark.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Blair" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.blair.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Other \u2192 Mark" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.other.toLocaleString() })] })] })] })] }), (0, jsx_runtime_1.jsxs)("details", { open: true, className: "mb-2", children: [(0, jsx_runtime_1.jsxs)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: ["Groups (", result.groups.length, ")"] }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Group" }), (0, jsx_runtime_1.jsx)("th", { children: "Route" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Tasks" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Active" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Done" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Logs" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: result.groups.map((g) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: g.groupName }), (0, jsx_runtime_1.jsx)("td", { children: (0, jsx_runtime_1.jsx)("span", { className: `badge bg-${g.context === "home" ? "success" : "secondary"}`, children: g.context }) }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.taskCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.activeCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.doneCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.logEntryCount.toLocaleString() })] }, g.groupId))) })] })] })] }));
389
263
  };
390
- const showLogoutInSettings = typeof window !== 'undefined'
391
- && !window.electronAPI
392
- && !window.ReactNativeWebView;
264
+ const showLogoutInSettings = typeof window !== "undefined" &&
265
+ !window.electronAPI &&
266
+ !window.ReactNativeWebView;
393
267
  const LogoutSection = () => {
394
268
  if (!showLogoutInSettings)
395
269
  return null;
396
- return (react_1.default.createElement("div", { className: "mt-4 pt-3 border-top" },
397
- react_1.default.createElement("button", { className: "btn btn-outline-danger btn-sm", onClick: async () => {
398
- const confirmed = confirm('Are you sure you want to logout? This will clear your credentials from this browser. ' +
399
- 'Make sure you have your User ID and Secret Key saved securely, or you will lose access to your account.');
270
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mt-4 pt-3 border-top", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-outline-danger btn-sm", onClick: async () => {
271
+ const confirmed = confirm("Are you sure you want to logout? This will clear your credentials from this browser. " +
272
+ "Make sure you have your User ID and Secret Key saved securely, or you will lose access to your account.");
400
273
  if (!confirmed)
401
274
  return;
402
275
  await peers_sdk_1.rpcServerCalls.logout();
403
- } }, "Logout")));
276
+ }, children: "Logout" }) }));
404
277
  };
@@ -1,2 +1,2 @@
1
- import React from 'react';
1
+ import type React from "react";
2
2
  export declare const VoiceSettingsAgent: React.FC;