@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,7 +1,6 @@
1
- import React from 'react';
2
1
  interface GroupSwitcherProps {
3
2
  colorMode: string;
4
3
  isMobile?: boolean;
5
4
  }
6
- export declare function GroupSwitcher({ colorMode, isMobile }: GroupSwitcherProps): React.JSX.Element;
5
+ export declare function GroupSwitcher({ colorMode, isMobile }: GroupSwitcherProps): import("react/jsx-runtime").JSX.Element;
7
6
  export {};
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.GroupSwitcher = GroupSwitcher;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
37
38
  const peers_sdk_1 = require("@peers-app/peers-sdk");
38
39
  const react_1 = __importStar(require("react"));
39
40
  const hooks_1 = require("../hooks");
@@ -59,12 +60,12 @@ function GroupSwitcher({ colorMode, isMobile = false }) {
59
60
  if (!currentGroupId)
60
61
  return null;
61
62
  return allGroups.find((g) => g.groupId === currentGroupId) || null;
62
- }, [allGroups, userContext?.currentlyActiveGroupId()]);
63
+ }, [allGroups, userContext?.currentlyActiveGroupId]);
63
64
  const handleGroupSelect = (group) => {
64
65
  if (!userContext)
65
66
  return;
66
67
  // Set the active group through user context
67
- userContext.currentlyActiveGroupId(group?.groupId || '');
68
+ userContext.currentlyActiveGroupId(group?.groupId || "");
68
69
  setShowDropdown(false);
69
70
  };
70
71
  const handleCreateClick = () => {
@@ -73,83 +74,82 @@ function GroupSwitcher({ colorMode, isMobile = false }) {
73
74
  };
74
75
  const getGroupIcon = (group) => {
75
76
  if (!group)
76
- return 'bi-person-fill'; // Personal group icon
77
- return group.iconClassName || 'bi-people-fill';
77
+ return "bi-person-fill"; // Personal group icon
78
+ return group.iconClassName || "bi-people-fill";
78
79
  };
79
80
  const getGroupName = (group) => {
80
81
  if (!group)
81
- return 'Personal';
82
+ return "Personal";
82
83
  return group.name;
83
84
  };
84
- const isDark = colorMode === 'dark';
85
- return (react_1.default.createElement(react_1.default.Fragment, null,
86
- react_1.default.createElement("div", { className: "dropdown" },
87
- react_1.default.createElement("button", { className: `btn btn-sm ${isMobile ? '' : 'me-2'} d-flex align-items-center`, onClick: () => setShowDropdown(!showDropdown), title: `Current group: ${getGroupName(currentGroup)}`, style: {
88
- padding: isMobile ? '4px' : '4px 8px',
89
- fontSize: '12px',
90
- borderRadius: '6px',
91
- border: 'none',
92
- background: 'transparent',
93
- color: isDark ? '#adb5bd' : '#6c757d',
94
- minWidth: isMobile ? '36px' : undefined
95
- }, onMouseEnter: (e) => {
96
- e.currentTarget.style.backgroundColor = isDark ? '#495057' : '#f8f9fa';
97
- e.currentTarget.style.color = isDark ? '#ffffff' : '#0d6efd';
98
- }, onMouseLeave: (e) => {
99
- e.currentTarget.style.backgroundColor = 'transparent';
100
- e.currentTarget.style.color = isDark ? '#adb5bd' : '#6c757d';
101
- } },
102
- react_1.default.createElement("i", { className: `${getGroupIcon(currentGroup)} ${isMobile ? '' : 'me-1'}`, style: { fontSize: '14px' } }),
103
- !isMobile && (react_1.default.createElement("span", { className: "text-truncate", style: { maxWidth: '80px' } }, getGroupName(currentGroup))),
104
- react_1.default.createElement("i", { className: "bi-chevron-down ms-1", style: { fontSize: '10px' } })),
105
- showDropdown && (react_1.default.createElement("div", { className: `dropdown-menu show position-absolute ${isDark ? 'dropdown-menu-dark' : ''}`, style: {
106
- left: 0,
107
- top: '100%',
108
- zIndex: 1000,
109
- minWidth: '200px',
110
- maxHeight: '300px',
111
- overflowY: 'auto'
112
- } },
113
- react_1.default.createElement("button", { className: `dropdown-item d-flex align-items-center ${!currentGroup ? 'active' : ''}`, style: { cursor: 'pointer', border: 'none', background: 'none', width: '100%', textAlign: 'left' }, onClick: () => handleGroupSelect(null) },
114
- react_1.default.createElement("i", { className: "bi-person-fill me-2" }),
115
- react_1.default.createElement("span", null, "Personal")),
116
- allGroups.length > 0 && (react_1.default.createElement("div", { className: "dropdown-divider" })),
117
- allGroups
118
- .filter((g) => !g.disabled)
119
- .map((group) => (react_1.default.createElement("button", { key: group.groupId, className: `dropdown-item d-flex align-items-center ${currentGroup?.groupId === group.groupId ? 'active' : ''}`, style: { cursor: 'pointer', border: 'none', background: 'none', width: '100%', textAlign: 'left' }, onClick: () => handleGroupSelect(group) },
120
- react_1.default.createElement("i", { className: `${getGroupIcon(group)} me-2` }),
121
- react_1.default.createElement("span", { className: "text-truncate" }, group.name)))),
122
- react_1.default.createElement("div", { className: "dropdown-divider" }),
123
- react_1.default.createElement("button", { className: "dropdown-item d-flex align-items-center", style: { cursor: 'pointer', border: 'none', background: 'none', width: '100%', textAlign: 'left' }, onClick: handleCreateClick },
124
- react_1.default.createElement("i", { className: "bi-plus-circle me-2" }),
125
- react_1.default.createElement("span", null, "Create Group")))),
126
- showDropdown && (react_1.default.createElement("div", { className: "position-fixed w-100 h-100", style: { top: 0, left: 0, zIndex: 999 }, onClick: () => setShowDropdown(false) }))),
127
- showCreateModal && userContext && (react_1.default.createElement(CreateGroupModal, { colorMode: colorMode, userContext: userContext, onClose: () => setShowCreateModal(false), onGroupCreated: async (groupId) => {
128
- // Refresh groups list
129
- const groupsTable = (0, peers_sdk_1.Groups)(userContext.userDataContext);
130
- const groupsList = await groupsTable.list({ disabled: { $ne: true } });
131
- setAllGroups(groupsList);
132
- // Switch to new group
133
- userContext.currentlyActiveGroupId(groupId);
134
- setShowCreateModal(false);
135
- } }))));
85
+ const isDark = colorMode === "dark";
86
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "dropdown", children: [(0, jsx_runtime_1.jsxs)("button", { className: `btn btn-sm ${isMobile ? "" : "me-2"} d-flex align-items-center`, onClick: () => setShowDropdown(!showDropdown), title: `Current group: ${getGroupName(currentGroup)}`, style: {
87
+ padding: isMobile ? "4px" : "4px 8px",
88
+ fontSize: "12px",
89
+ borderRadius: "6px",
90
+ border: "none",
91
+ background: "transparent",
92
+ color: isDark ? "#adb5bd" : "#6c757d",
93
+ minWidth: isMobile ? "36px" : undefined,
94
+ }, onMouseEnter: (e) => {
95
+ e.currentTarget.style.backgroundColor = isDark ? "#495057" : "#f8f9fa";
96
+ e.currentTarget.style.color = isDark ? "#ffffff" : "#0d6efd";
97
+ }, onMouseLeave: (e) => {
98
+ e.currentTarget.style.backgroundColor = "transparent";
99
+ e.currentTarget.style.color = isDark ? "#adb5bd" : "#6c757d";
100
+ }, children: [(0, jsx_runtime_1.jsx)("i", { className: `${getGroupIcon(currentGroup)} ${isMobile ? "" : "me-1"}`, style: { fontSize: "14px" } }), !isMobile && ((0, jsx_runtime_1.jsx)("span", { className: "text-truncate", style: { maxWidth: "80px" }, children: getGroupName(currentGroup) })), (0, jsx_runtime_1.jsx)("i", { className: "bi-chevron-down ms-1", style: { fontSize: "10px" } })] }), showDropdown && ((0, jsx_runtime_1.jsxs)("div", { className: `dropdown-menu show position-absolute ${isDark ? "dropdown-menu-dark" : ""}`, style: {
101
+ left: 0,
102
+ top: "100%",
103
+ zIndex: 1000,
104
+ minWidth: "200px",
105
+ maxHeight: "300px",
106
+ overflowY: "auto",
107
+ }, children: [(0, jsx_runtime_1.jsxs)("button", { className: `dropdown-item d-flex align-items-center ${!currentGroup ? "active" : ""}`, style: {
108
+ cursor: "pointer",
109
+ border: "none",
110
+ background: "none",
111
+ width: "100%",
112
+ textAlign: "left",
113
+ }, onClick: () => handleGroupSelect(null), children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-person-fill me-2" }), (0, jsx_runtime_1.jsx)("span", { children: "Personal" })] }), allGroups.length > 0 && (0, jsx_runtime_1.jsx)("div", { className: "dropdown-divider" }), allGroups
114
+ .filter((g) => !g.disabled)
115
+ .map((group) => ((0, jsx_runtime_1.jsxs)("button", { className: `dropdown-item d-flex align-items-center ${currentGroup?.groupId === group.groupId ? "active" : ""}`, style: {
116
+ cursor: "pointer",
117
+ border: "none",
118
+ background: "none",
119
+ width: "100%",
120
+ textAlign: "left",
121
+ }, onClick: () => handleGroupSelect(group), children: [(0, jsx_runtime_1.jsx)("i", { className: `${getGroupIcon(group)} me-2` }), (0, jsx_runtime_1.jsx)("span", { className: "text-truncate", children: group.name })] }, group.groupId))), (0, jsx_runtime_1.jsx)("div", { className: "dropdown-divider" }), (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item d-flex align-items-center", style: {
122
+ cursor: "pointer",
123
+ border: "none",
124
+ background: "none",
125
+ width: "100%",
126
+ textAlign: "left",
127
+ }, onClick: handleCreateClick, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-plus-circle me-2" }), (0, jsx_runtime_1.jsx)("span", { children: "Create Group" })] })] })), showDropdown && ((0, jsx_runtime_1.jsx)("div", { className: "position-fixed w-100 h-100", style: { top: 0, left: 0, zIndex: 999 }, onClick: () => setShowDropdown(false) }))] }), showCreateModal && userContext && ((0, jsx_runtime_1.jsx)(CreateGroupModal, { colorMode: colorMode, userContext: userContext, onClose: () => setShowCreateModal(false), onGroupCreated: async (groupId) => {
128
+ // Refresh groups list
129
+ const groupsTable = (0, peers_sdk_1.Groups)(userContext.userDataContext);
130
+ const groupsList = await groupsTable.list({ disabled: { $ne: true } });
131
+ setAllGroups(groupsList);
132
+ // Switch to new group
133
+ userContext.currentlyActiveGroupId(groupId);
134
+ setShowCreateModal(false);
135
+ } }))] }));
136
136
  }
137
- function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }) {
138
- const [groupName, setGroupName] = (0, react_1.useState)('');
139
- const [iconClassName, setIconClassName] = (0, react_1.useState)('bi-people-fill');
140
- const [description, setDescription] = (0, react_1.useState)('');
137
+ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated, }) {
138
+ const [groupName, setGroupName] = (0, react_1.useState)("");
139
+ const [iconClassName, setIconClassName] = (0, react_1.useState)("bi-people-fill");
140
+ const [description, setDescription] = (0, react_1.useState)("");
141
141
  const [isCreating, setIsCreating] = (0, react_1.useState)(false);
142
142
  const [error, setError] = (0, react_1.useState)(null);
143
- const isDark = colorMode === 'dark';
143
+ const isDark = colorMode === "dark";
144
144
  const handleCreate = async () => {
145
145
  // Validate
146
146
  const trimmedName = groupName.trim();
147
147
  if (!trimmedName) {
148
- setError('Group name is required');
148
+ setError("Group name is required");
149
149
  return;
150
150
  }
151
151
  if (trimmedName.length > 100) {
152
- setError('Group name must be 100 characters or less');
152
+ setError("Group name must be 100 characters or less");
153
153
  return;
154
154
  }
155
155
  setIsCreating(true);
@@ -162,12 +162,12 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }) {
162
162
  // Create group data context
163
163
  const groupDataContext = userContext.getDataContext(groupId);
164
164
  // Store groupKeys.secretKey securely for this group
165
- const persistentVarsTable = userContext.userDataContext.tableContainer.getTableByName('PersistentVars');
166
- const groupSecretKeyVarName = 'groupSecretKey_' + groupDataContext.dataContextId;
165
+ const persistentVarsTable = userContext.userDataContext.tableContainer.getTableByName("PersistentVars");
166
+ const groupSecretKeyVarName = `groupSecretKey_${groupDataContext.dataContextId}`;
167
167
  await persistentVarsTable.save({
168
168
  persistentVarId: (0, peers_sdk_1.newid)(),
169
169
  name: groupSecretKeyVarName,
170
- scope: 'groupUser',
170
+ scope: "groupUser",
171
171
  isSecret: true,
172
172
  value: { value: groupKeys.secretKey },
173
173
  });
@@ -181,125 +181,85 @@ function CreateGroupModal({ colorMode, userContext, onClose, onGroupCreated }) {
181
181
  groupId,
182
182
  name: trimmedName,
183
183
  description: description.trim(),
184
- iconClassName: iconClassName.trim() || 'bi-people-fill',
184
+ iconClassName: iconClassName.trim() || "bi-people-fill",
185
185
  founderUserId: me.userId,
186
186
  disabled: false,
187
187
  publicKey: groupKeys.publicKey,
188
188
  publicBoxKey: groupKeys.publicBoxKey,
189
- signature: '', // Will be set by signAndSave()
189
+ signature: "", // Will be set by signAndSave()
190
190
  });
191
191
  await (0, peers_sdk_1.Groups)(groupDataContext).signAndSave(newGroup);
192
192
  // Auto-install peers-core for the new group
193
- await peers_sdk_1.rpcServerCalls.addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: groupId }).catch((err) => {
194
- console.error('Error auto-installing peers-core for group:', err);
193
+ await peers_sdk_1.rpcServerCalls
194
+ .addOrUpdatePackage(peers_sdk_1.peersCorePackageId, { dataContextId: groupId })
195
+ .catch((err) => {
196
+ console.error("Error auto-installing peers-core for group:", err);
195
197
  });
196
198
  // Notify parent
197
199
  onGroupCreated(newGroup.groupId);
198
200
  }
199
201
  catch (err) {
200
- console.error('Failed to create group:', err);
201
- setError(err.message || 'Failed to create group. Please try again.');
202
+ console.error("Failed to create group:", err);
203
+ setError(err instanceof Error ? err.message : "Failed to create group. Please try again.");
202
204
  setIsCreating(false);
203
205
  }
204
206
  };
205
207
  const handleKeyDown = (e) => {
206
- if (e.key === 'Enter' && !e.shiftKey && groupName.trim()) {
208
+ if (e.key === "Enter" && !e.shiftKey && groupName.trim()) {
207
209
  e.preventDefault();
208
210
  handleCreate();
209
211
  }
210
- else if (e.key === 'Escape') {
212
+ else if (e.key === "Escape") {
211
213
  onClose();
212
214
  }
213
215
  };
214
- return (react_1.default.createElement("div", { className: "position-fixed w-100 h-100 d-flex align-items-start justify-content-center", style: {
216
+ return ((0, jsx_runtime_1.jsx)("div", { className: "position-fixed w-100 h-100 d-flex align-items-start justify-content-center", style: {
215
217
  top: 0,
216
218
  left: 0,
217
219
  zIndex: 1050,
218
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
219
- backdropFilter: 'blur(4px)',
220
- paddingTop: '10vh'
220
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
221
+ backdropFilter: "blur(4px)",
222
+ paddingTop: "10vh",
221
223
  }, onClick: (e) => {
222
224
  if (e.target === e.currentTarget) {
223
225
  onClose();
224
226
  }
225
- } },
226
- react_1.default.createElement("div", { className: `${isDark ? 'bg-dark text-light' : 'bg-white text-dark'}`, style: {
227
- width: '90%',
228
- maxWidth: '500px',
229
- borderRadius: '12px',
230
- boxShadow: isDark
231
- ? '0 20px 40px rgba(0, 0, 0, 0.5)'
232
- : '0 20px 40px rgba(0, 0, 0, 0.1)',
233
- border: isDark ? '1px solid #495057' : '1px solid #dee2e6',
234
- overflow: 'hidden'
235
- } },
236
- react_1.default.createElement("div", { className: "p-3 border-bottom d-flex align-items-center justify-content-between", style: {
237
- borderBottomColor: isDark ? '#495057' : '#dee2e6'
238
- } },
239
- react_1.default.createElement("div", { className: "d-flex align-items-center" },
240
- react_1.default.createElement("i", { className: "bi-people-fill me-2", style: { fontSize: '20px' } }),
241
- react_1.default.createElement("h6", { className: "mb-0" }, "Create New Group")),
242
- react_1.default.createElement("button", { className: "btn btn-sm p-0", style: {
243
- border: 'none',
244
- background: 'none',
245
- fontSize: '24px',
246
- lineHeight: '1',
247
- opacity: 0.6
248
- }, onClick: onClose, disabled: isCreating, onMouseEnter: (e) => e.currentTarget.style.opacity = '1', onMouseLeave: (e) => e.currentTarget.style.opacity = '0.6' },
249
- react_1.default.createElement("i", { className: "bi-x" }))),
250
- react_1.default.createElement("div", { className: "p-3" },
251
- error && (react_1.default.createElement("div", { className: "alert alert-danger py-2 px-3 mb-3", style: { fontSize: '14px' } },
252
- react_1.default.createElement("i", { className: "bi-exclamation-triangle me-2" }),
253
- error)),
254
- react_1.default.createElement("div", { className: "mb-3" },
255
- react_1.default.createElement("label", { className: "form-label small mb-1" },
256
- "Group Name ",
257
- react_1.default.createElement("span", { className: "text-danger" }, "*")),
258
- react_1.default.createElement("input", { type: "text", className: `form-control ${isDark ? 'bg-dark text-light border-secondary' : ''}`, placeholder: "Enter group name", value: groupName, onChange: (e) => {
259
- setGroupName(e.target.value);
260
- setError(null);
261
- }, onKeyDown: handleKeyDown, autoFocus: true, disabled: isCreating, maxLength: 100, style: {
262
- fontSize: '14px',
263
- backgroundColor: isDark ? '#343a40' : '#ffffff'
264
- } }),
265
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '11px' } },
266
- groupName.length,
267
- "/100 characters")),
268
- react_1.default.createElement("div", { className: "mb-3" },
269
- react_1.default.createElement("label", { className: "form-label small mb-1" }, "Icon"),
270
- react_1.default.createElement("div", { className: "input-group" },
271
- react_1.default.createElement("span", { className: `input-group-text ${isDark ? 'bg-dark text-light border-secondary' : ''}`, style: { backgroundColor: isDark ? '#343a40' : undefined } },
272
- react_1.default.createElement("i", { className: iconClassName || 'bi-people-fill' })),
273
- react_1.default.createElement("input", { type: "text", className: `form-control ${isDark ? 'bg-dark text-light border-secondary' : ''}`, placeholder: "bi-people-fill", value: iconClassName, onChange: (e) => setIconClassName(e.target.value), onKeyDown: handleKeyDown, disabled: isCreating, style: {
274
- fontSize: '14px',
275
- backgroundColor: isDark ? '#343a40' : '#ffffff'
276
- } })),
277
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '11px' } }, "Bootstrap icon class name (e.g., bi-star-fill, bi-house-fill)")),
278
- react_1.default.createElement("div", { className: "mb-3" },
279
- react_1.default.createElement("label", { className: "form-label small mb-1" }, "Description (optional)"),
280
- react_1.default.createElement("textarea", { className: `form-control ${isDark ? 'bg-dark text-light border-secondary' : ''}`, placeholder: "Enter group description", value: description, onChange: (e) => setDescription(e.target.value), disabled: isCreating, rows: 3, maxLength: 500, style: {
281
- fontSize: '14px',
282
- backgroundColor: isDark ? '#343a40' : '#ffffff',
283
- resize: 'none'
284
- } }),
285
- react_1.default.createElement("small", { className: "text-muted", style: { fontSize: '11px' } },
286
- description.length,
287
- "/500 characters"))),
288
- react_1.default.createElement("div", { className: "p-3 border-top d-flex justify-content-end gap-2", style: {
289
- borderTopColor: isDark ? '#495057' : '#dee2e6'
290
- } },
291
- react_1.default.createElement("button", { className: `btn btn-sm ${isDark ? 'btn-outline-light' : 'btn-outline-secondary'}`, onClick: onClose, disabled: isCreating, style: { minWidth: '80px' } }, "Cancel"),
292
- react_1.default.createElement("button", { className: "btn btn-sm btn-primary", onClick: handleCreate, disabled: isCreating || !groupName.trim(), style: { minWidth: '80px' } }, isCreating ? (react_1.default.createElement(react_1.default.Fragment, null,
293
- react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }),
294
- "Creating...")) : (react_1.default.createElement(react_1.default.Fragment, null,
295
- react_1.default.createElement("i", { className: "bi-plus-circle me-1" }),
296
- "Create")))),
297
- react_1.default.createElement("div", { className: `px-3 py-2 small text-muted border-top`, style: {
298
- borderTopColor: isDark ? '#495057' : '#dee2e6',
299
- fontSize: '11px'
300
- } },
301
- react_1.default.createElement("kbd", { className: "small" }, "\u21B5"),
302
- " to create \u2022 ",
303
- react_1.default.createElement("kbd", { className: "small" }, "esc"),
304
- " to cancel"))));
227
+ }, children: (0, jsx_runtime_1.jsxs)("div", { className: `${isDark ? "bg-dark text-light" : "bg-white text-dark"}`, style: {
228
+ width: "90%",
229
+ maxWidth: "500px",
230
+ borderRadius: "12px",
231
+ boxShadow: isDark ? "0 20px 40px rgba(0, 0, 0, 0.5)" : "0 20px 40px rgba(0, 0, 0, 0.1)",
232
+ border: isDark ? "1px solid #495057" : "1px solid #dee2e6",
233
+ overflow: "hidden",
234
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-3 border-bottom d-flex align-items-center justify-content-between", style: {
235
+ borderBottomColor: isDark ? "#495057" : "#dee2e6",
236
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-people-fill me-2", style: { fontSize: "20px" } }), (0, jsx_runtime_1.jsx)("h6", { className: "mb-0", children: "Create New Group" })] }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm p-0", style: {
237
+ border: "none",
238
+ background: "none",
239
+ fontSize: "24px",
240
+ lineHeight: "1",
241
+ opacity: 0.6,
242
+ }, onClick: onClose, disabled: isCreating, onMouseEnter: (e) => {
243
+ e.currentTarget.style.opacity = "1";
244
+ }, onMouseLeave: (e) => {
245
+ e.currentTarget.style.opacity = "0.6";
246
+ }, children: (0, jsx_runtime_1.jsx)("i", { className: "bi-x" }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-3", children: [error && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-danger py-2 px-3 mb-3", style: { fontSize: "14px" }, children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-exclamation-triangle me-2" }), error] })), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("label", { className: "form-label small mb-1", children: ["Group Name ", (0, jsx_runtime_1.jsx)("span", { className: "text-danger", children: "*" })] }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: `form-control ${isDark ? "bg-dark text-light border-secondary" : ""}`, placeholder: "Enter group name", value: groupName, onChange: (e) => {
247
+ setGroupName(e.target.value);
248
+ setError(null);
249
+ }, onKeyDown: handleKeyDown, disabled: isCreating, maxLength: 100, style: {
250
+ fontSize: "14px",
251
+ backgroundColor: isDark ? "#343a40" : "#ffffff",
252
+ } }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", style: { fontSize: "11px" }, children: [groupName.length, "/100 characters"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small mb-1", children: "Icon" }), (0, jsx_runtime_1.jsxs)("div", { className: "input-group", children: [(0, jsx_runtime_1.jsx)("span", { className: `input-group-text ${isDark ? "bg-dark text-light border-secondary" : ""}`, style: { backgroundColor: isDark ? "#343a40" : undefined }, children: (0, jsx_runtime_1.jsx)("i", { className: iconClassName || "bi-people-fill" }) }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: `form-control ${isDark ? "bg-dark text-light border-secondary" : ""}`, placeholder: "bi-people-fill", value: iconClassName, onChange: (e) => setIconClassName(e.target.value), onKeyDown: handleKeyDown, disabled: isCreating, style: {
253
+ fontSize: "14px",
254
+ backgroundColor: isDark ? "#343a40" : "#ffffff",
255
+ } })] }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted", style: { fontSize: "11px" }, children: "Bootstrap icon class name (e.g., bi-star-fill, bi-house-fill)" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small mb-1", children: "Description (optional)" }), (0, jsx_runtime_1.jsx)("textarea", { className: `form-control ${isDark ? "bg-dark text-light border-secondary" : ""}`, placeholder: "Enter group description", value: description, onChange: (e) => setDescription(e.target.value), disabled: isCreating, rows: 3, maxLength: 500, style: {
256
+ fontSize: "14px",
257
+ backgroundColor: isDark ? "#343a40" : "#ffffff",
258
+ resize: "none",
259
+ } }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", style: { fontSize: "11px" }, children: [description.length, "/500 characters"] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-3 border-top d-flex justify-content-end gap-2", style: {
260
+ borderTopColor: isDark ? "#495057" : "#dee2e6",
261
+ }, children: [(0, jsx_runtime_1.jsx)("button", { className: `btn btn-sm ${isDark ? "btn-outline-light" : "btn-outline-secondary"}`, onClick: onClose, disabled: isCreating, style: { minWidth: "80px" }, children: "Cancel" }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-primary", onClick: handleCreate, disabled: isCreating || !groupName.trim(), style: { minWidth: "80px" }, children: isCreating ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }), "Creating..."] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-plus-circle me-1" }), "Create"] })) })] }), (0, jsx_runtime_1.jsxs)("div", { className: `px-3 py-2 small text-muted border-top`, style: {
262
+ borderTopColor: isDark ? "#495057" : "#dee2e6",
263
+ fontSize: "11px",
264
+ }, children: [(0, jsx_runtime_1.jsx)("kbd", { className: "small", children: "\u21B5" }), " to create \u2022 ", (0, jsx_runtime_1.jsx)("kbd", { className: "small", children: "esc" }), " to cancel"] })] }) }));
305
265
  }
@@ -1,7 +1,7 @@
1
- import React from "react";
2
- import { Observable } from "@peers-app/peers-sdk";
1
+ import type { Observable } from "@peers-app/peers-sdk";
2
+ import type React from "react";
3
3
  interface IProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
4
4
  date: Observable<Date | undefined> | Date | undefined;
5
5
  }
6
- export declare const InputDate: (props: IProps) => React.JSX.Element;
6
+ export declare const InputDate: (props: IProps) => import("react/jsx-runtime").JSX.Element;
7
7
  export {};
@@ -4,16 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.InputDate = void 0;
7
- const react_1 = __importDefault(require("react"));
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const moment_timezone_1 = __importDefault(require("moment-timezone"));
9
9
  const hooks_1 = require("../hooks");
10
10
  const InputDate = (props) => {
11
11
  const [date, setDate] = (0, hooks_1.useObservable)(props.date);
12
- const inputProps = { ...props };
13
- // @ts-ignore
14
- delete inputProps.date;
15
- return (react_1.default.createElement("input", { ...inputProps, type: 'date', value: date?.toISOString?.().substring(0, 10) ?? '', onChange: evt => {
16
- setDate(evt.currentTarget.value ? (0, moment_timezone_1.default)(new Date(evt.currentTarget.value)).startOf('day').add(1, 'day').toDate() : undefined);
12
+ const { date: _omitDate, ...inputProps } = props;
13
+ return ((0, jsx_runtime_1.jsx)("input", { ...inputProps, type: "date", value: date?.toISOString?.().substring(0, 10) ?? "", onChange: (evt) => {
14
+ setDate(evt.currentTarget.value
15
+ ? (0, moment_timezone_1.default)(new Date(evt.currentTarget.value)).startOf("day").add(1, "day").toDate()
16
+ : undefined);
17
17
  } }));
18
18
  };
19
19
  exports.InputDate = InputDate;
@@ -1,9 +1,10 @@
1
- import React from 'react';
2
- interface IProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
3
- value: any;
4
- format?: 'money';
1
+ import { type Observable } from "@peers-app/peers-sdk";
2
+ import type React from "react";
3
+ interface IProps extends Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "value"> {
4
+ value?: number | null | string | Observable<number | null | string | undefined>;
5
+ format?: "money";
5
6
  precision?: number;
6
- refPassthrough?: any;
7
+ refPassthrough?: React.LegacyRef<HTMLInputElement>;
7
8
  }
8
- export declare function InputNumber(props: IProps): React.JSX.Element;
9
+ export declare function InputNumber(props: IProps): import("react/jsx-runtime").JSX.Element;
9
10
  export {};
@@ -34,54 +34,59 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.InputNumber = InputNumber;
37
- const lodash_1 = __importStar(require("lodash"));
38
- const react_1 = __importStar(require("react"));
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
38
  const peers_sdk_1 = require("@peers-app/peers-sdk");
39
+ const lodash_1 = __importStar(require("lodash"));
40
+ const react_1 = require("react");
40
41
  const hooks_1 = require("../hooks");
41
42
  function InputNumber(props) {
42
43
  let { format, precision, refPassthrough } = props;
43
44
  if (!lodash_1.default.isNumber(precision)) {
44
45
  precision = 2;
45
46
  }
46
- let propsPassthrough = { ...props };
47
- // @ts-ignore
48
- ['value', 'format', 'precision', 'refPassthrough'].forEach(name => (delete propsPassthrough[name]));
47
+ const propsPassthrough = { ...props };
48
+ for (const name of ["value", "format", "precision", "refPassthrough"]) {
49
+ delete propsPassthrough[name];
50
+ }
49
51
  const [value, setValue] = (0, hooks_1.useObservable)(props.value);
50
- let [displayValue, setDisplayValue] = (0, react_1.useState)(() => {
51
- if (isNaN(Number(value)) || value === null || String(value).trim() === '') {
52
- return '';
52
+ const [displayValue, setDisplayValue] = (0, react_1.useState)(() => {
53
+ if (Number.isNaN(Number(value)) || value === null || String(value).trim() === "") {
54
+ return "";
53
55
  }
54
- if (format === 'money') {
56
+ if (format === "money") {
55
57
  return (0, peers_sdk_1.formatMoney)(Number((0, peers_sdk_1.unwrapObservable)(props.value)), precision);
56
58
  }
57
59
  return String(value);
58
60
  });
59
61
  function onChange(evt) {
60
- let _value = evt.target.value;
62
+ const _value = evt.target.value;
61
63
  setDisplayValue(_value);
62
64
  // convert blank to null
63
- if (String(_value).trim() === '') {
65
+ if (String(_value).trim() === "") {
64
66
  setValue(null);
65
67
  return;
66
68
  }
67
- _value = _value.replace(/\$/g, '');
68
- _value = Number(_value);
69
- if ((0, lodash_1.isNumber)(_value) && !isNaN(_value)) {
70
- setValue(_value);
69
+ const stripped = _value.replace(/\$/g, "");
70
+ const parsed = Number(stripped);
71
+ if ((0, lodash_1.isNumber)(parsed) && !Number.isNaN(parsed)) {
72
+ setValue(parsed);
71
73
  }
72
74
  }
73
- function onBlur(evt) {
74
- if (format === 'money' && !isNaN(Number(value)) && value !== null && String(value).trim() !== '') {
75
- const fmtMoney = (0, peers_sdk_1.formatMoney)(value, precision);
75
+ function onBlur(_evt) {
76
+ if (format === "money" &&
77
+ !Number.isNaN(Number(value)) &&
78
+ value !== null &&
79
+ String(value).trim() !== "") {
80
+ const fmtMoney = (0, peers_sdk_1.formatMoney)(Number(value), precision);
76
81
  setDisplayValue(fmtMoney);
77
82
  }
78
83
  else if (value === null) {
79
- setDisplayValue('');
84
+ setDisplayValue("");
80
85
  }
81
86
  else {
82
87
  setDisplayValue(String(value));
83
88
  }
84
89
  // todo if not money format precision and set display
85
90
  }
86
- return (react_1.default.createElement("input", { ...propsPassthrough, ref: refPassthrough, value: displayValue, onChange: onChange, onBlur: onBlur }));
91
+ return ((0, jsx_runtime_1.jsx)("input", { ...propsPassthrough, ref: refPassthrough, value: displayValue, onChange: onChange, onBlur: onBlur }));
87
92
  }
@@ -1,7 +1,8 @@
1
- import React from 'react';
2
- interface IProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
3
- value: any;
1
+ import type { Observable } from "@peers-app/peers-sdk";
2
+ import type React from "react";
3
+ interface IProps extends Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "value"> {
4
+ value?: string | number | null | Observable<string | number | null | undefined>;
4
5
  type?: React.HTMLInputTypeAttribute;
5
6
  }
6
- export declare function Input(props: IProps): React.JSX.Element;
7
+ export declare function Input(props: IProps): import("react/jsx-runtime").JSX.Element;
7
8
  export {};
@@ -1,20 +1,17 @@
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.Input = Input;
7
- const react_1 = __importDefault(require("react"));
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
5
  const hooks_1 = require("../hooks");
9
6
  function Input(props) {
10
7
  const [value, setValue] = (0, hooks_1.useObservable)(props.value);
11
- const type = props.type ?? (typeof value);
8
+ const type = props.type ?? typeof value;
12
9
  function onChange(evt) {
13
10
  let _value = evt.target.value;
14
- if (type === 'number') {
11
+ if (type === "number") {
15
12
  _value = Number(_value);
16
13
  }
17
14
  setValue(_value);
18
15
  }
19
- return (react_1.default.createElement("input", { onChange: onChange, type: type, ...props, value: value }));
16
+ return (0, jsx_runtime_1.jsx)("input", { onChange: onChange, type: type, ...props, value: value ?? "" });
20
17
  }
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from "react";
2
2
  interface IInverseLazyListProps<T> {
3
3
  /** Unique id for the scroll container — required to avoid id collisions */
4
4
  scrollableId: string;
@@ -11,7 +11,7 @@ interface IInverseLazyListProps<T> {
11
11
  /** Custom loading indicator */
12
12
  loadingIndicator?: React.ReactNode;
13
13
  /** Change this value to reset the list and reload from scratch */
14
- resetTrigger?: any;
14
+ resetTrigger?: unknown;
15
15
  /** Style for the outer scroll container */
16
16
  style?: React.CSSProperties;
17
17
  }
@@ -21,5 +21,5 @@ interface IInverseLazyListProps<T> {
21
21
  *
22
22
  * Items state is managed internally. Use prependRef to push live inserts from outside.
23
23
  */
24
- export declare function InverseLazyList<T>(props: IInverseLazyListProps<T>): React.JSX.Element;
24
+ export declare function InverseLazyList<T>(props: IInverseLazyListProps<T>): import("react/jsx-runtime").JSX.Element;
25
25
  export {};