@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,46 +1,16 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.VoiceSettingsAgent = void 0;
37
- const react_1 = __importStar(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
5
  const peers_sdk_1 = require("@peers-app/peers-sdk");
39
- const VOICE_HUB_AGENT_ASSISTANT_ID = '00mh0wlipkdbeaw8vhagent01';
6
+ const react_1 = require("react");
7
+ const VOICE_HUB_AGENT_ASSISTANT_ID = "00mh0wlipkdbeaw8vhagent01";
40
8
  // Must match the pvar names in peers-core/src/data/voice-agent-config.ts and
41
9
  // peers-electron/src/server/voice/voice-agent-config.ts — pvar instances are
42
10
  // singletons keyed by name+scope so all three share the same underlying value.
43
- const voiceAgentAssistantIdPvar = (0, peers_sdk_1.userVar)('voice:agentAssistantId', { defaultValue: VOICE_HUB_AGENT_ASSISTANT_ID });
11
+ const voiceAgentAssistantIdPvar = (0, peers_sdk_1.userVar)("voice:agentAssistantId", {
12
+ defaultValue: VOICE_HUB_AGENT_ASSISTANT_ID,
13
+ });
44
14
  const VoiceSettingsAgent = () => {
45
15
  const [assistants, setAssistants] = (0, react_1.useState)([]);
46
16
  const [selectedId, setSelectedId] = (0, react_1.useState)(VOICE_HUB_AGENT_ASSISTANT_ID);
@@ -64,13 +34,6 @@ const VoiceSettingsAgent = () => {
64
34
  setSaved(true);
65
35
  setTimeout(() => setSaved(false), 2000);
66
36
  }, [selectedId]);
67
- return (react_1.default.createElement("div", null,
68
- react_1.default.createElement("h6", null, "Voice Agent"),
69
- react_1.default.createElement("p", { className: "text-muted small mb-2" }, "When you give a voice command that requires action (e.g. \"add milk to the shopping list\"), it is dispatched to this assistant as a background task."),
70
- react_1.default.createElement("div", { className: "d-flex align-items-center gap-2" },
71
- react_1.default.createElement("select", { className: "form-select form-select-sm", value: selectedId, onChange: e => setSelectedId(e.target.value), disabled: saving }, assistants.map(a => (react_1.default.createElement("option", { key: a.assistantId, value: a.assistantId },
72
- a.name,
73
- a.assistantId === VOICE_HUB_AGENT_ASSISTANT_ID ? ' (default)' : '')))),
74
- react_1.default.createElement("button", { className: "btn btn-sm btn-primary", onClick: handleSave, disabled: saving, style: { whiteSpace: 'nowrap' } }, saving ? 'Saving…' : saved ? 'Saved!' : 'Save'))));
37
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h6", { children: "Voice Agent" }), (0, jsx_runtime_1.jsx)("p", { className: "text-muted small mb-2", children: "When you give a voice command that requires action (e.g. \"add milk to the shopping list\"), it is dispatched to this assistant as a background task." }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2", children: [(0, jsx_runtime_1.jsx)("select", { className: "form-select form-select-sm", value: selectedId, onChange: (e) => setSelectedId(e.target.value), disabled: saving, children: assistants.map((a) => ((0, jsx_runtime_1.jsxs)("option", { value: a.assistantId, children: [a.name, a.assistantId === VOICE_HUB_AGENT_ASSISTANT_ID ? " (default)" : ""] }, a.assistantId))) }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-primary", onClick: handleSave, disabled: saving, style: { whiteSpace: "nowrap" }, children: saving ? "Saving…" : saved ? "Saved!" : "Save" })] })] }));
75
38
  };
76
39
  exports.VoiceSettingsAgent = VoiceSettingsAgent;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { VoiceSettings, PicovoiceKeyError } from './voice-settings-types';
1
+ import type React from "react";
2
+ import { type PicovoiceKeyError, type VoiceSettings } from "./voice-settings-types";
3
3
  interface ApiKeysProps {
4
4
  settings: VoiceSettings;
5
5
  picovoiceKey: string;
@@ -1,35 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.VoiceSettingsApiKeys = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
5
  const tooltip_1 = require("../../components/tooltip");
9
6
  const voice_settings_types_1 = require("./voice-settings-types");
10
- const VoiceSettingsApiKeys = ({ settings, picovoiceKey, openaiKey, keyError, onPicovoiceKeyChange, onOpenaiKeyChange, onDismissKeyError, }) => (react_1.default.createElement(react_1.default.Fragment, null,
11
- react_1.default.createElement("div", { className: "mb-4" },
12
- react_1.default.createElement("label", { className: "form-label" },
13
- "Picovoice Access Key",
14
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Required for wake word detection. Get a free key at [console.picovoice.ai](https://console.picovoice.ai)" }),
15
- settings.picovoiceAccessKeySet && (react_1.default.createElement("span", { className: "badge bg-success ms-2" }, "Set"))),
16
- react_1.default.createElement("input", { type: "password", className: "form-control", value: picovoiceKey, onChange: (e) => onPicovoiceKeyChange(e.target.value), placeholder: settings.picovoiceAccessKeySet ? '••••••••••••••••' : 'Enter your Picovoice access key' }),
17
- react_1.default.createElement("small", { className: "text-muted" },
18
- react_1.default.createElement("a", { href: "https://console.picovoice.ai", target: "_blank", rel: "noopener noreferrer" }, "Get a free access key"),
19
- settings.picovoiceAccessKeySet && ' (leave blank to keep existing key)')),
20
- keyError && (react_1.default.createElement("div", { className: "alert alert-warning alert-dismissible mb-4", role: "alert" },
21
- react_1.default.createElement("div", { className: "d-flex align-items-start gap-2" },
22
- react_1.default.createElement("i", { className: "bi bi-exclamation-triangle-fill flex-shrink-0 mt-1" }),
23
- react_1.default.createElement("div", null,
24
- react_1.default.createElement("strong", null, voice_settings_types_1.PICOVOICE_KEY_ERROR_MESSAGES[keyError].heading),
25
- react_1.default.createElement("div", { className: "mt-1" }, voice_settings_types_1.PICOVOICE_KEY_ERROR_MESSAGES[keyError].body),
26
- react_1.default.createElement("a", { href: "https://console.picovoice.ai", target: "_blank", rel: "noopener noreferrer", className: "alert-link mt-1 d-inline-block" }, "Open console.picovoice.ai"))),
27
- react_1.default.createElement("button", { type: "button", className: "btn-close", onClick: onDismissKeyError }))),
28
- react_1.default.createElement("div", { className: "mb-3" },
29
- react_1.default.createElement("label", { className: "form-label" },
30
- "OpenAI API Key",
31
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Required for cloud STT (Whisper) and cloud TTS. Leave empty to use local/browser alternatives." }),
32
- settings.openaiApiKeySet && (react_1.default.createElement("span", { className: "badge bg-success ms-2" }, "Set"))),
33
- react_1.default.createElement("input", { type: "password", className: "form-control", value: openaiKey, onChange: (e) => onOpenaiKeyChange(e.target.value), placeholder: settings.openaiApiKeySet ? '••••••••••••••••' : 'sk-...' }),
34
- settings.openaiApiKeySet && (react_1.default.createElement("small", { className: "text-muted" }, "Leave blank to keep existing key")))));
7
+ const VoiceSettingsApiKeys = ({ settings, picovoiceKey, openaiKey, keyError, onPicovoiceKeyChange, onOpenaiKeyChange, onDismissKeyError, }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["Picovoice Access Key", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Required for wake word detection. Get a free key at [console.picovoice.ai](https://console.picovoice.ai)" }), settings.picovoiceAccessKeySet && (0, jsx_runtime_1.jsx)("span", { className: "badge bg-success ms-2", children: "Set" })] }), (0, jsx_runtime_1.jsx)("input", { type: "password", className: "form-control", value: picovoiceKey, onChange: (e) => onPicovoiceKeyChange(e.target.value), placeholder: settings.picovoiceAccessKeySet ? "••••••••••••••••" : "Enter your Picovoice access key" }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", children: [(0, jsx_runtime_1.jsx)("a", { href: "https://console.picovoice.ai", target: "_blank", rel: "noopener noreferrer", children: "Get a free access key" }), settings.picovoiceAccessKeySet && " (leave blank to keep existing key)"] })] }), keyError && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-warning alert-dismissible mb-4", role: "alert", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-start gap-2", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-exclamation-triangle-fill flex-shrink-0 mt-1" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: voice_settings_types_1.PICOVOICE_KEY_ERROR_MESSAGES[keyError].heading }), (0, jsx_runtime_1.jsx)("div", { className: "mt-1", children: voice_settings_types_1.PICOVOICE_KEY_ERROR_MESSAGES[keyError].body }), (0, jsx_runtime_1.jsx)("a", { href: "https://console.picovoice.ai", target: "_blank", rel: "noopener noreferrer", className: "alert-link mt-1 d-inline-block", children: "Open console.picovoice.ai" })] })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "btn-close", onClick: onDismissKeyError })] })), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["OpenAI API Key", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Required for cloud STT (Whisper) and cloud TTS. Leave empty to use local/browser alternatives." }), settings.openaiApiKeySet && (0, jsx_runtime_1.jsx)("span", { className: "badge bg-success ms-2", children: "Set" })] }), (0, jsx_runtime_1.jsx)("input", { type: "password", className: "form-control", value: openaiKey, onChange: (e) => onOpenaiKeyChange(e.target.value), placeholder: settings.openaiApiKeySet ? "••••••••••••••••" : "sk-..." }), settings.openaiApiKeySet && ((0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Leave blank to keep existing key" }))] })] }));
35
8
  exports.VoiceSettingsApiKeys = VoiceSettingsApiKeys;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { VoiceSettings } from './voice-settings-types';
1
+ import type React from "react";
2
+ import { type VoiceSettings } from "./voice-settings-types";
3
3
  interface OutputProps {
4
4
  settings: VoiceSettings;
5
5
  localSettings: VoiceSettings;
@@ -1,45 +1,7 @@
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.VoiceSettingsOutput = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
5
  const voice_settings_types_1 = require("./voice-settings-types");
9
- const VoiceSettingsOutput = ({ settings, localSettings, saving, testText, hasUnsavedChanges, audioDevices, onChange, onTestTextChange, onTestTTS, onTestRecording, }) => (react_1.default.createElement(react_1.default.Fragment, null,
10
- localSettings.ttsProvider === 'cloud' && (react_1.default.createElement("div", { className: "mb-3" },
11
- react_1.default.createElement("label", { className: "form-label" }, "Voice"),
12
- react_1.default.createElement("select", { className: "form-select", value: localSettings.ttsVoice || 'nova', onChange: (e) => onChange({ ttsVoice: e.target.value }), disabled: saving }, voice_settings_types_1.OPENAI_TTS_VOICES.map(voice => (react_1.default.createElement("option", { key: voice.id, value: voice.id },
13
- voice.name,
14
- " - ",
15
- voice.description)))))),
16
- react_1.default.createElement("div", { className: "mb-4" },
17
- react_1.default.createElement("label", { className: "form-label" },
18
- "Speaking Speed: ",
19
- localSettings.ttsSpeed.toFixed(1),
20
- "x"),
21
- react_1.default.createElement("input", { type: "range", className: "form-range", min: "0.5", max: "2", step: "0.1", value: localSettings.ttsSpeed, onChange: (e) => onChange({ ttsSpeed: parseFloat(e.target.value) }) }),
22
- react_1.default.createElement("div", { className: "d-flex justify-content-between" },
23
- react_1.default.createElement("small", { className: "text-muted" }, "Slower"),
24
- react_1.default.createElement("small", { className: "text-muted" }, "Faster"))),
25
- react_1.default.createElement("div", { className: "mb-4" },
26
- react_1.default.createElement("label", { className: "form-label" }, "Test TTS"),
27
- react_1.default.createElement("div", { className: "input-group" },
28
- react_1.default.createElement("input", { type: "text", className: "form-control", value: testText, onChange: (e) => onTestTextChange(e.target.value), placeholder: "Enter text to speak" }),
29
- react_1.default.createElement("button", { className: "btn btn-outline-primary", type: "button", onClick: onTestTTS, disabled: !settings.enabled && localSettings.ttsProvider === 'cloud' && !settings.openaiApiKeySet },
30
- react_1.default.createElement("i", { className: "bi bi-play-fill me-1" }),
31
- "Speak")),
32
- react_1.default.createElement("small", { className: "text-muted" }, hasUnsavedChanges && 'Save changes first to test with new settings')),
33
- react_1.default.createElement("hr", { className: "my-4" }),
34
- react_1.default.createElement("div", { className: "mb-4" },
35
- react_1.default.createElement("h6", { className: "mb-3" }, "Test Voice Input"),
36
- react_1.default.createElement("p", { className: "text-muted small" }, "Click the button below to test voice recording. Speak and it will stop when silence is detected."),
37
- react_1.default.createElement("button", { className: "btn btn-primary", onClick: onTestRecording, disabled: !settings.enabled || saving },
38
- react_1.default.createElement("i", { className: "bi bi-mic me-2" }),
39
- "Test Recording"),
40
- !settings.enabled && (react_1.default.createElement("small", { className: "text-muted ms-2" }, "Enable and save voice settings first"))),
41
- audioDevices.length > 0 && (react_1.default.createElement("div", { className: "mb-4" },
42
- react_1.default.createElement("h6", { className: "mb-3" }, "Available Audio Devices"),
43
- react_1.default.createElement("ul", { className: "list-group list-group-flush" }, audioDevices.map((device, index) => (react_1.default.createElement("li", { key: index, className: "list-group-item bg-transparent" },
44
- react_1.default.createElement("small", null, device)))))))));
6
+ const VoiceSettingsOutput = ({ settings, localSettings, saving, testText, hasUnsavedChanges, audioDevices, onChange, onTestTextChange, onTestTTS, onTestRecording, }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [localSettings.ttsProvider === "cloud" && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label", children: "Voice" }), (0, jsx_runtime_1.jsx)("select", { className: "form-select", value: localSettings.ttsVoice || "nova", onChange: (e) => onChange({ ttsVoice: e.target.value }), disabled: saving, children: voice_settings_types_1.OPENAI_TTS_VOICES.map((voice) => ((0, jsx_runtime_1.jsxs)("option", { value: voice.id, children: [voice.name, " - ", voice.description] }, voice.id))) })] })), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["Speaking Speed: ", localSettings.ttsSpeed.toFixed(1), "x"] }), (0, jsx_runtime_1.jsx)("input", { type: "range", className: "form-range", min: "0.5", max: "2", step: "0.1", value: localSettings.ttsSpeed, onChange: (e) => onChange({ ttsSpeed: parseFloat(e.target.value) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Slower" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Faster" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label", children: "Test TTS" }), (0, jsx_runtime_1.jsxs)("div", { className: "input-group", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", className: "form-control", value: testText, onChange: (e) => onTestTextChange(e.target.value), placeholder: "Enter text to speak" }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-outline-primary", type: "button", onClick: onTestTTS, disabled: !settings.enabled && localSettings.ttsProvider === "cloud" && !settings.openaiApiKeySet, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-play-fill me-1" }), "Speak"] })] }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: hasUnsavedChanges && "Save changes first to test with new settings" })] }), (0, jsx_runtime_1.jsx)("hr", { className: "my-4" }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-3", children: "Test Voice Input" }), (0, jsx_runtime_1.jsx)("p", { className: "text-muted small", children: "Click the button below to test voice recording. Speak and it will stop when silence is detected." }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-primary", onClick: onTestRecording, disabled: !settings.enabled || saving, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-mic me-2" }), "Test Recording"] }), !settings.enabled && ((0, jsx_runtime_1.jsx)("small", { className: "text-muted ms-2", children: "Enable and save voice settings first" }))] }), audioDevices.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-3", children: "Available Audio Devices" }), (0, jsx_runtime_1.jsx)("ul", { className: "list-group list-group-flush", children: audioDevices.map((device, index) => ((0, jsx_runtime_1.jsx)("li", { className: "list-group-item bg-transparent", children: (0, jsx_runtime_1.jsx)("small", { children: device }) }, index))) })] }))] }));
45
7
  exports.VoiceSettingsOutput = VoiceSettingsOutput;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { VoiceSettings } from './voice-settings-types';
1
+ import type React from "react";
2
+ import type { VoiceSettings } from "./voice-settings-types";
3
3
  interface ProvidersProps {
4
4
  localSettings: VoiceSettings;
5
5
  saving: boolean;
@@ -1,23 +1,6 @@
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.VoiceSettingsProviders = void 0;
7
- const react_1 = __importDefault(require("react"));
8
- const VoiceSettingsProviders = ({ localSettings, saving, onChange }) => (react_1.default.createElement(react_1.default.Fragment, null,
9
- react_1.default.createElement("h6", { className: "mb-3" }, "Speech to Text (STT)"),
10
- react_1.default.createElement("div", { className: "mb-4" },
11
- react_1.default.createElement("label", { className: "form-label" }, "STT Provider"),
12
- react_1.default.createElement("select", { className: "form-select", value: localSettings.sttProvider, onChange: (e) => onChange({ sttProvider: e.target.value }), disabled: saving },
13
- react_1.default.createElement("option", { value: "auto" }, "Auto (Cloud with local fallback)"),
14
- react_1.default.createElement("option", { value: "cloud" }, "Cloud only (OpenAI Whisper)"),
15
- react_1.default.createElement("option", { value: "local" }, "Local only (requires setup)"))),
16
- react_1.default.createElement("hr", { className: "my-4" }),
17
- react_1.default.createElement("h6", { className: "mb-3" }, "Text to Speech (TTS)"),
18
- react_1.default.createElement("div", { className: "mb-3" },
19
- react_1.default.createElement("label", { className: "form-label" }, "TTS Provider"),
20
- react_1.default.createElement("select", { className: "form-select", value: localSettings.ttsProvider, onChange: (e) => onChange({ ttsProvider: e.target.value }), disabled: saving },
21
- react_1.default.createElement("option", { value: "browser" }, "Browser (free, works offline)"),
22
- react_1.default.createElement("option", { value: "cloud" }, "Cloud (OpenAI TTS, natural voice)")))));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const VoiceSettingsProviders = ({ localSettings, saving, onChange, }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-3", children: "Speech to Text (STT)" }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label", children: "STT Provider" }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select", value: localSettings.sttProvider, onChange: (e) => onChange({ sttProvider: e.target.value }), disabled: saving, children: [(0, jsx_runtime_1.jsx)("option", { value: "auto", children: "Auto (Cloud with local fallback)" }), (0, jsx_runtime_1.jsx)("option", { value: "cloud", children: "Cloud only (OpenAI Whisper)" }), (0, jsx_runtime_1.jsx)("option", { value: "local", children: "Local only (requires setup)" })] })] }), (0, jsx_runtime_1.jsx)("hr", { className: "my-4" }), (0, jsx_runtime_1.jsx)("h6", { className: "mb-3", children: "Text to Speech (TTS)" }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label", children: "TTS Provider" }), (0, jsx_runtime_1.jsxs)("select", { className: "form-select", value: localSettings.ttsProvider, onChange: (e) => onChange({ ttsProvider: e.target.value }), disabled: saving, children: [(0, jsx_runtime_1.jsx)("option", { value: "browser", children: "Browser (free, works offline)" }), (0, jsx_runtime_1.jsx)("option", { value: "cloud", children: "Cloud (OpenAI TTS, natural voice)" })] })] })] }));
23
6
  exports.VoiceSettingsProviders = VoiceSettingsProviders;
@@ -1,7 +1,7 @@
1
- export type STTProvider = 'auto' | 'cloud' | 'local';
2
- export type TTSProvider = 'browser' | 'cloud';
3
- export type PicovoiceKeyError = 'refused' | 'invalid' | 'limit' | 'throttled';
4
- export type BuiltinWakeWord = 'ALEXA' | 'AMERICANO' | 'BLUEBERRY' | 'BUMBLEBEE' | 'COMPUTER' | 'GRAPEFRUIT' | 'GRASSHOPPER' | 'HEY_GOOGLE' | 'HEY_SIRI' | 'JARVIS' | 'OK_GOOGLE' | 'PICOVOICE' | 'PORCUPINE' | 'TERMINATOR';
1
+ export type STTProvider = "auto" | "cloud" | "local";
2
+ export type TTSProvider = "browser" | "cloud";
3
+ export type PicovoiceKeyError = "refused" | "invalid" | "limit" | "throttled";
4
+ export type BuiltinWakeWord = "ALEXA" | "AMERICANO" | "BLUEBERRY" | "BUMBLEBEE" | "COMPUTER" | "GRAPEFRUIT" | "GRASSHOPPER" | "HEY_GOOGLE" | "HEY_SIRI" | "JARVIS" | "OK_GOOGLE" | "PICOVOICE" | "PORCUPINE" | "TERMINATOR";
5
5
  export interface VoiceSettingsData {
6
6
  enabled: boolean;
7
7
  voiceOutputEnabled?: boolean;
@@ -4,52 +4,52 @@ exports.OPENAI_TTS_VOICES = exports.PICOVOICE_KEY_ERROR_MESSAGES = exports.BUILT
4
4
  exports.DEFAULT_SETTINGS = {
5
5
  enabled: false,
6
6
  voiceOutputEnabled: true,
7
- wakeWord: 'COMPUTER',
7
+ wakeWord: "COMPUTER",
8
8
  wakeWordSensitivity: 0.5,
9
9
  speechSensitivity: 0.7,
10
- sttProvider: 'auto',
11
- ttsProvider: 'browser',
10
+ sttProvider: "auto",
11
+ ttsProvider: "browser",
12
12
  ttsSpeed: 1.0,
13
13
  };
14
14
  exports.BUILTIN_WAKE_WORDS = [
15
- { id: 'ALEXA', name: 'Alexa' },
16
- { id: 'AMERICANO', name: 'Americano' },
17
- { id: 'BLUEBERRY', name: 'Blueberry' },
18
- { id: 'BUMBLEBEE', name: 'Bumblebee' },
19
- { id: 'COMPUTER', name: 'Computer' },
20
- { id: 'GRAPEFRUIT', name: 'Grapefruit' },
21
- { id: 'GRASSHOPPER', name: 'Grasshopper' },
22
- { id: 'HEY_GOOGLE', name: 'Hey Google' },
23
- { id: 'HEY_SIRI', name: 'Hey Siri' },
24
- { id: 'JARVIS', name: 'Jarvis' },
25
- { id: 'OK_GOOGLE', name: 'Ok Google' },
26
- { id: 'PICOVOICE', name: 'Picovoice' },
27
- { id: 'PORCUPINE', name: 'Porcupine' },
28
- { id: 'TERMINATOR', name: 'Terminator' },
15
+ { id: "ALEXA", name: "Alexa" },
16
+ { id: "AMERICANO", name: "Americano" },
17
+ { id: "BLUEBERRY", name: "Blueberry" },
18
+ { id: "BUMBLEBEE", name: "Bumblebee" },
19
+ { id: "COMPUTER", name: "Computer" },
20
+ { id: "GRAPEFRUIT", name: "Grapefruit" },
21
+ { id: "GRASSHOPPER", name: "Grasshopper" },
22
+ { id: "HEY_GOOGLE", name: "Hey Google" },
23
+ { id: "HEY_SIRI", name: "Hey Siri" },
24
+ { id: "JARVIS", name: "Jarvis" },
25
+ { id: "OK_GOOGLE", name: "Ok Google" },
26
+ { id: "PICOVOICE", name: "Picovoice" },
27
+ { id: "PORCUPINE", name: "Porcupine" },
28
+ { id: "TERMINATOR", name: "Terminator" },
29
29
  ];
30
30
  exports.PICOVOICE_KEY_ERROR_MESSAGES = {
31
31
  refused: {
32
- heading: 'Picovoice access key refused',
33
- body: 'Your key was rejected — it may have been revoked or banned. Generate a new key at console.picovoice.ai and paste it below.',
32
+ heading: "Picovoice access key refused",
33
+ body: "Your key was rejected — it may have been revoked or banned. Generate a new key at console.picovoice.ai and paste it below.",
34
34
  },
35
35
  invalid: {
36
- heading: 'Picovoice access key invalid',
37
- body: 'Your key is malformed or expired. Generate a new key at console.picovoice.ai and paste it below.',
36
+ heading: "Picovoice access key invalid",
37
+ body: "Your key is malformed or expired. Generate a new key at console.picovoice.ai and paste it below.",
38
38
  },
39
39
  limit: {
40
- heading: 'Picovoice device limit reached',
41
- body: 'Your key has been activated on too many devices. Go to console.picovoice.ai to deactivate old devices, generate a new key, or upgrade your plan.',
40
+ heading: "Picovoice device limit reached",
41
+ body: "Your key has been activated on too many devices. Go to console.picovoice.ai to deactivate old devices, generate a new key, or upgrade your plan.",
42
42
  },
43
43
  throttled: {
44
- heading: 'Picovoice activation throttled',
45
- body: 'Too many activation attempts. Please wait a moment, then save your settings again to retry.',
44
+ heading: "Picovoice activation throttled",
45
+ body: "Too many activation attempts. Please wait a moment, then save your settings again to retry.",
46
46
  },
47
47
  };
48
48
  exports.OPENAI_TTS_VOICES = [
49
- { id: 'alloy', name: 'Alloy', description: 'Neutral and balanced' },
50
- { id: 'echo', name: 'Echo', description: 'Warm and clear' },
51
- { id: 'fable', name: 'Fable', description: 'Expressive and dynamic' },
52
- { id: 'onyx', name: 'Onyx', description: 'Deep and authoritative' },
53
- { id: 'nova', name: 'Nova', description: 'Friendly and upbeat' },
54
- { id: 'shimmer', name: 'Shimmer', description: 'Soft and gentle' },
49
+ { id: "alloy", name: "Alloy", description: "Neutral and balanced" },
50
+ { id: "echo", name: "Echo", description: "Warm and clear" },
51
+ { id: "fable", name: "Fable", description: "Expressive and dynamic" },
52
+ { id: "onyx", name: "Onyx", description: "Deep and authoritative" },
53
+ { id: "nova", name: "Nova", description: "Friendly and upbeat" },
54
+ { id: "shimmer", name: "Shimmer", description: "Soft and gentle" },
55
55
  ];
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { VoiceSettings } from './voice-settings-types';
1
+ import type React from "react";
2
+ import { type VoiceSettings } from "./voice-settings-types";
3
3
  interface WakeWordProps {
4
4
  localSettings: VoiceSettings;
5
5
  saving: boolean;
@@ -1,39 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.VoiceSettingsWakeWord = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
5
  const tooltip_1 = require("../../components/tooltip");
9
6
  const voice_settings_types_1 = require("./voice-settings-types");
10
- const VoiceSettingsWakeWord = ({ localSettings, saving, onChange }) => (react_1.default.createElement(react_1.default.Fragment, null,
11
- react_1.default.createElement("div", { className: "mb-4" },
12
- react_1.default.createElement("label", { className: "form-label" },
13
- "Wake Word",
14
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "The phrase you say to activate voice recording. Choose a word that's easy for you to say and unlikely to occur in normal conversation." })),
15
- react_1.default.createElement("select", { className: "form-select", value: localSettings.wakeWord, onChange: (e) => onChange({ wakeWord: e.target.value }), disabled: saving }, voice_settings_types_1.BUILTIN_WAKE_WORDS.map(word => (react_1.default.createElement("option", { key: word.id, value: word.id }, word.name))))),
16
- react_1.default.createElement("div", { className: "mb-4" },
17
- react_1.default.createElement("label", { className: "form-label" },
18
- "Wake Word Sensitivity: ",
19
- localSettings.wakeWordSensitivity.toFixed(2),
20
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Higher values make the wake word easier to trigger but may cause false positives." })),
21
- react_1.default.createElement("input", { type: "range", className: "form-range", min: "0", max: "1", step: "0.05", value: localSettings.wakeWordSensitivity, onChange: (e) => onChange({ wakeWordSensitivity: parseFloat(e.target.value) }) }),
22
- react_1.default.createElement("div", { className: "d-flex justify-content-between" },
23
- react_1.default.createElement("small", { className: "text-muted" }, "Less sensitive"),
24
- react_1.default.createElement("small", { className: "text-muted" }, "More sensitive"))),
25
- react_1.default.createElement("div", { className: "mb-4" },
26
- react_1.default.createElement("label", { className: "form-label" },
27
- "Speech Detection: ",
28
- (localSettings.speechSensitivity ?? 0.7).toFixed(2),
29
- react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Controls how sensitive the microphone is when detecting speech. Higher values pick up quieter speech (better for quiet rooms or a close mic). Lower values require louder speech, which helps filter out background noise." })),
30
- react_1.default.createElement("input", { type: "range", className: "form-range", min: "0", max: "1", step: "0.05", value: localSettings.speechSensitivity ?? 0.7, onChange: (e) => onChange({ speechSensitivity: parseFloat(e.target.value) }) }),
31
- react_1.default.createElement("div", { className: "d-flex justify-content-between mb-1" },
32
- react_1.default.createElement("small", { className: "text-muted" }, "Loud / Noisy environment"),
33
- react_1.default.createElement("small", { className: "text-muted" }, "Quiet / Close mic")),
34
- react_1.default.createElement("div", { className: "d-flex justify-content-between px-1" },
35
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '0.7rem' } }, "0.2 \u2014 Shout"),
36
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '0.7rem' } }, "0.5 \u2014 Normal"),
37
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '0.7rem' } }, "0.7 \u2014 Desk"),
38
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '0.7rem' } }, "0.9 \u2014 Whisper")))));
7
+ const VoiceSettingsWakeWord = ({ localSettings, saving, onChange, }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["Wake Word", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "The phrase you say to activate voice recording. Choose a word that's easy for you to say and unlikely to occur in normal conversation." })] }), (0, jsx_runtime_1.jsx)("select", { className: "form-select", value: localSettings.wakeWord, onChange: (e) => onChange({ wakeWord: e.target.value }), disabled: saving, children: voice_settings_types_1.BUILTIN_WAKE_WORDS.map((word) => ((0, jsx_runtime_1.jsx)("option", { value: word.id, children: word.name }, word.id))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["Wake Word Sensitivity: ", localSettings.wakeWordSensitivity.toFixed(2), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Higher values make the wake word easier to trigger but may cause false positives." })] }), (0, jsx_runtime_1.jsx)("input", { type: "range", className: "form-range", min: "0", max: "1", step: "0.05", value: localSettings.wakeWordSensitivity, onChange: (e) => onChange({ wakeWordSensitivity: parseFloat(e.target.value) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Less sensitive" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "More sensitive" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label", children: ["Speech Detection: ", (localSettings.speechSensitivity ?? 0.7).toFixed(2), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Controls how sensitive the microphone is when detecting speech. Higher values pick up quieter speech (better for quiet rooms or a close mic). Lower values require louder speech, which helps filter out background noise." })] }), (0, jsx_runtime_1.jsx)("input", { type: "range", className: "form-range", min: "0", max: "1", step: "0.05", value: localSettings.speechSensitivity ?? 0.7, onChange: (e) => onChange({ speechSensitivity: parseFloat(e.target.value) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between mb-1", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Loud / Noisy environment" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Quiet / Close mic" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between px-1", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", style: { fontSize: "0.7rem" }, children: "0.2 \u2014 Shout" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", style: { fontSize: "0.7rem" }, children: "0.5 \u2014 Normal" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", style: { fontSize: "0.7rem" }, children: "0.7 \u2014 Desk" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", style: { fontSize: "0.7rem" }, children: "0.9 \u2014 Whisper" })] })] })] }));
39
8
  exports.VoiceSettingsWakeWord = VoiceSettingsWakeWord;
@@ -5,6 +5,6 @@
5
5
  * Settings are stored directly via pvars (auto-synced).
6
6
  * Keys are stored as secure pvars (write-only).
7
7
  */
8
- import React from 'react';
8
+ import type React from "react";
9
9
  export declare const VoiceSettings: React.FC;
10
10
  export default VoiceSettings;