@peers-app/peers-ui 0.14.1 → 0.15.1

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 +198 -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 +83 -235
  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 +45 -45
  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 +185 -148
  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 +41 -43
  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,63 +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),
88
- react_1.default.createElement(ResetChangeTracking, 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, {})] }));
89
77
  };
90
78
  const ProfileSection = () => {
91
79
  const [deviceId] = (0, hooks_1.useObservable)(peers_sdk_1.thisDeviceId);
92
- const deviceName = (0, hooks_1.useObservableState)('');
93
- const savedDeviceName = (0, hooks_1.useObservableState)('');
80
+ const deviceName = (0, hooks_1.useObservableState)("");
81
+ const savedDeviceName = (0, hooks_1.useObservableState)("");
94
82
  const me = (0, hooks_1.usePromise)(async () => {
95
83
  const userContext = await (0, peers_sdk_1.getUserContext)();
96
84
  return (0, peers_sdk_1.Users)(userContext.userDataContext).initDoc(globals.me);
@@ -103,15 +91,15 @@ const ProfileSection = () => {
103
91
  try {
104
92
  const userContext = await (0, peers_sdk_1.getUserContext)();
105
93
  const device = await (0, peers_sdk_1.Devices)(userContext.userDataContext).get(deviceId);
106
- deviceName(device?.name || '');
107
- savedDeviceName(device?.name || '');
94
+ deviceName(device?.name || "");
95
+ savedDeviceName(device?.name || "");
108
96
  }
109
97
  catch (err) {
110
- console.error('Error loading device name:', err);
98
+ console.error("Error loading device name:", err);
111
99
  }
112
100
  };
113
101
  loadDevice();
114
- }, [deviceId]);
102
+ }, [deviceId, deviceName, savedDeviceName]);
115
103
  const handleSave = async () => {
116
104
  try {
117
105
  // Save user profile
@@ -124,7 +112,7 @@ const ProfileSection = () => {
124
112
  if (deviceId && deviceName() !== savedDeviceName()) {
125
113
  const userContext = await (0, peers_sdk_1.getUserContext)();
126
114
  const devicesTable = (0, peers_sdk_1.Devices)(userContext.userDataContext);
127
- const device = await devicesTable.get(deviceId) || {
115
+ const device = (await devicesTable.get(deviceId)) || {
128
116
  deviceId,
129
117
  userId: userContext.userId,
130
118
  firstSeen: new Date(),
@@ -137,8 +125,8 @@ const ProfileSection = () => {
137
125
  }
138
126
  }
139
127
  catch (err) {
140
- console.error('Error saving profile:', err);
141
- alert('Failed to save: ' + err.message);
128
+ console.error("Error saving profile:", err);
129
+ alert(`Failed to save: ${err.message}`);
142
130
  }
143
131
  };
144
132
  // Subscribe to changes
@@ -148,128 +136,81 @@ const ProfileSection = () => {
148
136
  return null;
149
137
  }
150
138
  const hasChanges = !!me.q() || deviceName() !== savedDeviceName();
151
- return (react_1.default.createElement(react_1.default.Fragment, null,
152
- react_1.default.createElement("div", { className: "d-flex align-items-center mb-3" },
153
- react_1.default.createElement("h5", { className: "mb-0 me-auto" }, "Settings"),
154
- react_1.default.createElement("button", { className: "btn btn-primary btn-sm", onClick: handleSave, disabled: !hasChanges }, "Save")),
155
- react_1.default.createElement("div", { className: "mb-3" },
156
- react_1.default.createElement("small", { className: "form-label" }, "Display Name:"),
157
- react_1.default.createElement(input_1.Input, { value: me.qs.name, className: "form-control", placeholder: "Enter your name" })),
158
- react_1.default.createElement("div", { className: "mb-3" },
159
- react_1.default.createElement("small", { className: "form-label" },
160
- "Device Name:",
161
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Give this device a friendly name to identify it in your network." })),
162
- react_1.default.createElement(input_1.Input, { value: deviceName, className: "form-control", placeholder: "e.g., My Laptop" })),
163
- react_1.default.createElement("div", { className: "mb-3" },
164
- react_1.default.createElement("small", { className: "form-label" },
165
- "User ID:",
166
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." })),
167
- react_1.default.createElement(input_1.Input, { value: me.userId, className: "form-control", disabled: true })),
168
- react_1.default.createElement("div", { className: "row" },
169
- react_1.default.createElement("div", { className: "col-md-6 mb-3" },
170
- react_1.default.createElement("small", { className: "form-label" },
171
- "Public Key:",
172
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This is your public key that other users will use to verify your signatures." })),
173
- react_1.default.createElement(input_1.Input, { value: me.publicKey, className: "form-control form-control-sm", disabled: true })),
174
- react_1.default.createElement("div", { className: "col-md-6 mb-3" },
175
- react_1.default.createElement("small", { className: "form-label" },
176
- "Public Box Key:",
177
- 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." })),
178
- react_1.default.createElement(input_1.Input, { value: me.publicBoxKey, className: "form-control form-control-sm", disabled: true }))),
179
- react_1.default.createElement("div", { className: "mb-3" },
180
- react_1.default.createElement("small", { className: "form-label" },
181
- "Device ID:",
182
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies this device on Peers networks." })),
183
- 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 })] })] }));
184
140
  };
185
141
  const PackagesRootDirectory = () => {
186
- return (react_1.default.createElement("div", { className: 'mt-3' },
187
- react_1.default.createElement("small", null,
188
- "Packages Directory:",
189
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })),
190
- 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" })] }));
191
143
  };
192
144
  const ReloadPackagesOnPageRefresh = () => {
193
145
  (0, hooks_1.useObservable)(peers_sdk_1.reloadPackagesOnPageRefresh);
194
- return (react_1.default.createElement("div", null,
195
- react_1.default.createElement("label", { htmlFor: "isPrimary", className: "form-label small mt-2 me-2" }, "Reload Packages on Page Load:"),
196
- react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.reloadPackagesOnPageRefresh)(), onChange: (e) => {
197
- const checked = e.target.checked;
198
- (0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
199
- } }),
200
- 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.` })] }));
201
150
  };
202
151
  const AutoUpdatePeersCore = () => {
203
152
  (0, hooks_1.useObservable)(peers_sdk_1.autoUpdatePeersCore);
204
- return (react_1.default.createElement("div", null,
205
- react_1.default.createElement("label", { htmlFor: "autoUpdatePeersCore", className: "form-label small mt-2 me-2" }, "Auto-update peers-core on startup:"),
206
- react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.autoUpdatePeersCore)(), onChange: (e) => {
207
- const checked = e.target.checked;
208
- (0, peers_sdk_1.autoUpdatePeersCore)(checked);
209
- } }),
210
- 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.` })] }));
211
157
  };
212
158
  const ResetDeviceSyncInfos = () => {
213
- return (react_1.default.createElement("div", { className: 'mt-3' },
214
- 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 () => {
215
160
  try {
216
161
  await peers_sdk_1.rpcServerCalls.resetAllDeviceSyncInfo();
217
- alert('All device sync info has been reset. Syncing in progress...');
162
+ alert("All device sync info has been reset. Syncing in progress...");
218
163
  }
219
164
  catch (err) {
220
- console.error('Error while resetting all device sync info', err);
165
+ console.error("Error while resetting all device sync info", err);
221
166
  }
222
- } }, "Reset All Device Sync Info")));
167
+ }, children: "Reset All Device Sync Info" }) }));
223
168
  };
224
169
  const DeleteLocalDatabase = () => {
225
- return (react_1.default.createElement("div", { className: 'mt-3' },
226
- react_1.default.createElement("button", { className: 'btn btn-danger btn-sm ms-2', onClick: async () => {
227
- const confirmed = confirm('Are you sure you want to delete the local database for the current group? ' +
228
- '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.");
229
173
  if (!confirmed)
230
174
  return;
231
175
  try {
232
176
  await peers_sdk_1.rpcServerCalls.deleteLocalDatabase();
233
- alert('Local database has been deleted. Please restart the app.');
177
+ alert("Local database has been deleted. Please restart the app.");
234
178
  }
235
179
  catch (err) {
236
- console.error('Error while deleting local database', err);
237
- 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}`);
238
182
  }
239
- } }, "Delete Local Database")));
183
+ }, children: "Delete Local Database" }) }));
240
184
  };
241
185
  const ResetChangeTracking = () => {
242
186
  const [busy, setBusy] = (0, react_1.useState)(false);
243
- return (react_1.default.createElement("div", { className: "mt-4 pt-3 border-top" },
244
- react_1.default.createElement("h6", { className: "mb-2" }, "Change tracking"),
245
- react_1.default.createElement("small", { className: "text-muted d-block mb-2" }, "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."),
246
- react_1.default.createElement("button", { className: "btn btn-warning btn-sm", disabled: busy, onClick: async () => {
247
- const confirmed = window.confirm('Reset Change Tracking will clear all change history and rebuild it from scratch. This may take a while. Continue?');
248
- if (!confirmed)
249
- return;
250
- setBusy(true);
251
- try {
252
- await peers_sdk_1.rpcServerCalls.resetChangeTracking();
253
- await peers_sdk_1.rpcServerCalls.flushDatabases();
254
- alert('Change tracking reset successfully.');
255
- }
256
- catch (err) {
257
- console.error('Error while resetting change tracking', err);
258
- alert('Failed to reset change tracking: ' + (err.message || String(err)));
259
- }
260
- finally {
261
- setBusy(false);
262
- }
263
- } }, busy ? 'Resetting…' : 'Reset Change Tracking')));
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" })] }));
264
205
  };
265
- const IMPORT_TOOL_ID = '00mh0wlipkdbeaw8imptsk001';
206
+ const IMPORT_TOOL_ID = "00mh0wlipkdbeaw8imptsk001";
266
207
  const ImportOldPeersData = () => {
267
208
  const fileInputRef = (0, react_1.useRef)(null);
268
- const [filePath, setFilePath] = (0, react_1.useState)('');
269
- const [fileName, setFileName] = (0, react_1.useState)('');
209
+ const [filePath, setFilePath] = (0, react_1.useState)("");
210
+ const [_fileName, setFileName] = (0, react_1.useState)("");
270
211
  const [loading, setLoading] = (0, react_1.useState)(false);
271
212
  const [result, setResult] = (0, react_1.useState)(null);
272
- const [error, setError] = (0, react_1.useState)('');
213
+ const [error, setError] = (0, react_1.useState)("");
273
214
  const handleFileSelect = (e) => {
274
215
  const file = e.target.files?.[0];
275
216
  if (!file)
@@ -282,17 +223,17 @@ const ImportOldPeersData = () => {
282
223
  }
283
224
  else {
284
225
  setFileName(file.name);
285
- setFilePath('');
286
- 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.");
287
228
  }
288
229
  setResult(null);
289
- setError('');
230
+ setError("");
290
231
  };
291
232
  const handleDryRun = async () => {
292
233
  if (!filePath)
293
234
  return;
294
235
  setLoading(true);
295
- setError('');
236
+ setError("");
296
237
  setResult(null);
297
238
  try {
298
239
  const response = await peers_sdk_1.rpcServerCalls.runTool(IMPORT_TOOL_ID, {
@@ -303,127 +244,34 @@ const ImportOldPeersData = () => {
303
244
  setResult(response.result);
304
245
  }
305
246
  else {
306
- setError('Unexpected response from import tool');
247
+ setError("Unexpected response from import tool");
307
248
  }
308
249
  }
309
250
  catch (err) {
310
- setError(err.message || 'Failed to run dry run');
251
+ setError(err.message || "Failed to run dry run");
311
252
  }
312
253
  finally {
313
254
  setLoading(false);
314
255
  }
315
256
  };
316
- return (react_1.default.createElement("div", { className: "mt-4 pt-3 border-top" },
317
- react_1.default.createElement("h6", { className: "mb-2" }, "Import Old Peers Data"),
318
- react_1.default.createElement("small", { className: "text-muted d-block mb-2" }, "Import tasks and log entries from an old peers JSON export file."),
319
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-2 mb-2" },
320
- react_1.default.createElement("input", { ref: fileInputRef, type: "file", accept: ".json", className: "form-control form-control-sm", style: { maxWidth: 350 }, onChange: handleFileSelect }),
321
- react_1.default.createElement("button", { className: "btn btn-outline-primary btn-sm", onClick: handleDryRun, disabled: !filePath || loading }, loading ? 'Analyzing...' : 'Dry Run')),
322
- error && (react_1.default.createElement("div", { className: "alert alert-danger py-1 px-2 small mt-2" }, error)),
323
- 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 })] }));
324
258
  };
325
259
  const DryRunResults = ({ result }) => {
326
260
  const sm = result.statusMapping;
327
261
  const um = result.userMapping;
328
- return (react_1.default.createElement("div", { className: "mt-2" },
329
- react_1.default.createElement("div", { className: "alert alert-info py-2 px-3 small" },
330
- react_1.default.createElement("strong", null, "Summary:"),
331
- " ",
332
- result.totalTasks.toLocaleString(),
333
- " tasks and ",
334
- result.totalLogEntries.toLocaleString(),
335
- " log entries across ",
336
- result.groups.length,
337
- " groups (",
338
- result.totalRecords.toLocaleString(),
339
- " total records in file)"),
340
- result.warnings.length > 0 && (react_1.default.createElement("div", { className: "alert alert-warning py-2 px-3 small" },
341
- react_1.default.createElement("strong", null, "Warnings:"),
342
- react_1.default.createElement("ul", { className: "mb-0 ps-3" }, result.warnings.map((w, i) => react_1.default.createElement("li", { key: i }, w))))),
343
- react_1.default.createElement("details", { className: "mb-2" },
344
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "Status Mapping"),
345
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
346
- react_1.default.createElement("thead", null,
347
- react_1.default.createElement("tr", null,
348
- react_1.default.createElement("th", null, "Mapping"),
349
- react_1.default.createElement("th", { className: "text-end" }, "Count"))),
350
- react_1.default.createElement("tbody", null,
351
- react_1.default.createElement("tr", null,
352
- react_1.default.createElement("td", null, "In-Progress \u2192 Done"),
353
- react_1.default.createElement("td", { className: "text-end" }, sm.inProgressToDone.toLocaleString())),
354
- react_1.default.createElement("tr", null,
355
- react_1.default.createElement("td", null, "In-Progress \u2192 In-Progress"),
356
- react_1.default.createElement("td", { className: "text-end" }, sm.inProgressKeep.toLocaleString())),
357
- react_1.default.createElement("tr", null,
358
- react_1.default.createElement("td", null, "Queued \u2192 Done"),
359
- react_1.default.createElement("td", { className: "text-end" }, sm.queuedToDone.toLocaleString())),
360
- react_1.default.createElement("tr", null,
361
- react_1.default.createElement("td", null, "Queued \u2192 Queued"),
362
- react_1.default.createElement("td", { className: "text-end" }, sm.queuedKeep.toLocaleString())),
363
- react_1.default.createElement("tr", null,
364
- react_1.default.createElement("td", null, "Backlog \u2192 Done"),
365
- react_1.default.createElement("td", { className: "text-end" }, sm.backlogToDone.toLocaleString())),
366
- react_1.default.createElement("tr", null,
367
- react_1.default.createElement("td", null, "Backlog \u2192 Backlog"),
368
- react_1.default.createElement("td", { className: "text-end" }, sm.backlogKeep.toLocaleString())),
369
- react_1.default.createElement("tr", null,
370
- react_1.default.createElement("td", null, "No status \u2192 Done"),
371
- react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToDone.toLocaleString())),
372
- react_1.default.createElement("tr", null,
373
- react_1.default.createElement("td", null, "No status \u2192 Backlog"),
374
- react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToBacklog.toLocaleString()))))),
375
- react_1.default.createElement("details", { className: "mb-2" },
376
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "User Mapping"),
377
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
378
- react_1.default.createElement("thead", null,
379
- react_1.default.createElement("tr", null,
380
- react_1.default.createElement("th", null, "User"),
381
- react_1.default.createElement("th", { className: "text-end" }, "Tasks"))),
382
- react_1.default.createElement("tbody", null,
383
- react_1.default.createElement("tr", null,
384
- react_1.default.createElement("td", null, "Mark"),
385
- react_1.default.createElement("td", { className: "text-end" }, um.mark.toLocaleString())),
386
- react_1.default.createElement("tr", null,
387
- react_1.default.createElement("td", null, "Blair"),
388
- react_1.default.createElement("td", { className: "text-end" }, um.blair.toLocaleString())),
389
- react_1.default.createElement("tr", null,
390
- react_1.default.createElement("td", null, "Other \u2192 Mark"),
391
- react_1.default.createElement("td", { className: "text-end" }, um.other.toLocaleString()))))),
392
- react_1.default.createElement("details", { open: true, className: "mb-2" },
393
- react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } },
394
- "Groups (",
395
- result.groups.length,
396
- ")"),
397
- react_1.default.createElement("table", { className: "table table-sm small mt-1" },
398
- react_1.default.createElement("thead", null,
399
- react_1.default.createElement("tr", null,
400
- react_1.default.createElement("th", null, "Group"),
401
- react_1.default.createElement("th", null, "Route"),
402
- react_1.default.createElement("th", { className: "text-end" }, "Tasks"),
403
- react_1.default.createElement("th", { className: "text-end" }, "Active"),
404
- react_1.default.createElement("th", { className: "text-end" }, "Done"),
405
- react_1.default.createElement("th", { className: "text-end" }, "Logs"))),
406
- react_1.default.createElement("tbody", null, result.groups.map(g => (react_1.default.createElement("tr", { key: g.groupId },
407
- react_1.default.createElement("td", null, g.groupName),
408
- react_1.default.createElement("td", null,
409
- react_1.default.createElement("span", { className: `badge bg-${g.context === 'home' ? 'success' : 'secondary'}` }, g.context)),
410
- react_1.default.createElement("td", { className: "text-end" }, g.taskCount.toLocaleString()),
411
- react_1.default.createElement("td", { className: "text-end" }, g.activeCount.toLocaleString()),
412
- react_1.default.createElement("td", { className: "text-end" }, g.doneCount.toLocaleString()),
413
- 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))) })] })] })] }));
414
263
  };
415
- const showLogoutInSettings = typeof window !== 'undefined'
416
- && !window.electronAPI
417
- && !window.ReactNativeWebView;
264
+ const showLogoutInSettings = typeof window !== "undefined" &&
265
+ !window.electronAPI &&
266
+ !window.ReactNativeWebView;
418
267
  const LogoutSection = () => {
419
268
  if (!showLogoutInSettings)
420
269
  return null;
421
- return (react_1.default.createElement("div", { className: "mt-4 pt-3 border-top" },
422
- react_1.default.createElement("button", { className: "btn btn-outline-danger btn-sm", onClick: async () => {
423
- const confirmed = confirm('Are you sure you want to logout? This will clear your credentials from this browser. ' +
424
- '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.");
425
273
  if (!confirmed)
426
274
  return;
427
275
  await peers_sdk_1.rpcServerCalls.logout();
428
- } }, "Logout")));
276
+ }, children: "Logout" }) }));
429
277
  };
@@ -1,2 +1,2 @@
1
- import React from 'react';
1
+ import type React from "react";
2
2
  export declare const VoiceSettingsAgent: React.FC;