@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,13 +1,18 @@
1
- import _, { isNumber } from 'lodash';
2
- import React, { useState } from 'react';
3
- import { formatMoney, unwrapObservable } from "@peers-app/peers-sdk";
4
- import { useObservable } from '../hooks';
1
+ import { formatMoney, type Observable, unwrapObservable } from "@peers-app/peers-sdk";
2
+ import _, { isNumber } from "lodash";
3
+ import type React from "react";
4
+ import { useState } from "react";
5
+ import { useObservable } from "../hooks";
5
6
 
6
- interface IProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
7
- value: any
8
- format?: 'money'
9
- precision?: number
10
- refPassthrough?: any
7
+ interface IProps
8
+ extends Omit<
9
+ React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,
10
+ "value"
11
+ > {
12
+ value?: number | null | string | Observable<number | null | string | undefined>;
13
+ format?: "money";
14
+ precision?: number;
15
+ refPassthrough?: React.LegacyRef<HTMLInputElement>;
11
16
  }
12
17
 
13
18
  export function InputNumber(props: IProps) {
@@ -16,45 +21,50 @@ export function InputNumber(props: IProps) {
16
21
  precision = 2;
17
22
  }
18
23
 
19
- let propsPassthrough = { ...props };
20
- // @ts-ignore
21
- ['value', 'format', 'precision', 'refPassthrough'].forEach(name => (delete propsPassthrough[name]));
24
+ const propsPassthrough = { ...props } as Record<string, unknown> & typeof props;
25
+ for (const name of ["value", "format", "precision", "refPassthrough"] as const) {
26
+ delete propsPassthrough[name];
27
+ }
22
28
 
23
29
  const [value, setValue] = useObservable(props.value);
24
30
 
25
- let [displayValue, setDisplayValue] = useState<string>(() => {
26
- if (isNaN(Number(value)) || value === null || String(value).trim() === '') {
27
- return '';
31
+ const [displayValue, setDisplayValue] = useState<string>(() => {
32
+ if (Number.isNaN(Number(value)) || value === null || String(value).trim() === "") {
33
+ return "";
28
34
  }
29
- if (format === 'money') {
35
+ if (format === "money") {
30
36
  return formatMoney(Number(unwrapObservable(props.value)), precision);
31
37
  }
32
38
  return String(value);
33
39
  });
34
-
35
40
 
36
41
  function onChange(evt: React.ChangeEvent<HTMLInputElement>) {
37
- let _value: any = evt.target.value;
42
+ const _value: string = evt.target.value;
38
43
  setDisplayValue(_value);
39
44
  // convert blank to null
40
- if (String(_value).trim() === '') {
45
+ if (String(_value).trim() === "") {
41
46
  setValue(null);
42
47
  return;
43
48
  }
44
-
45
- _value = _value.replace(/\$/g, '');
46
- _value = Number(_value);
47
- if (isNumber(_value) && !isNaN(_value)) {
48
- setValue(_value);
49
+
50
+ const stripped = _value.replace(/\$/g, "");
51
+ const parsed = Number(stripped);
52
+ if (isNumber(parsed) && !Number.isNaN(parsed)) {
53
+ setValue(parsed);
49
54
  }
50
55
  }
51
56
 
52
- function onBlur(evt: React.FocusEvent<HTMLInputElement>) {
53
- if (format === 'money' && !isNaN(Number(value)) && value !== null && String(value).trim() !== '') {
54
- const fmtMoney = formatMoney(value, precision);
57
+ function onBlur(_evt: React.FocusEvent<HTMLInputElement>) {
58
+ if (
59
+ format === "money" &&
60
+ !Number.isNaN(Number(value)) &&
61
+ value !== null &&
62
+ String(value).trim() !== ""
63
+ ) {
64
+ const fmtMoney = formatMoney(Number(value), precision);
55
65
  setDisplayValue(fmtMoney);
56
66
  } else if (value === null) {
57
- setDisplayValue('');
67
+ setDisplayValue("");
58
68
  } else {
59
69
  setDisplayValue(String(value));
60
70
  }
@@ -62,6 +72,12 @@ export function InputNumber(props: IProps) {
62
72
  }
63
73
 
64
74
  return (
65
- <input {...propsPassthrough} ref={refPassthrough} value={displayValue} onChange={onChange} onBlur={onBlur} />
66
- )
67
- }
75
+ <input
76
+ {...propsPassthrough}
77
+ ref={refPassthrough}
78
+ value={displayValue}
79
+ onChange={onChange}
80
+ onBlur={onBlur}
81
+ />
82
+ );
83
+ }
@@ -1,22 +1,25 @@
1
- import React from 'react';
2
- import { useObservable } from '../hooks';
1
+ import type { Observable } from "@peers-app/peers-sdk";
2
+ import type React from "react";
3
+ import { useObservable } from "../hooks";
3
4
 
4
- interface IProps extends React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
5
- value: any,
6
- type?: React.HTMLInputTypeAttribute
5
+ interface IProps
6
+ extends Omit<
7
+ React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,
8
+ "value"
9
+ > {
10
+ value?: string | number | null | Observable<string | number | null | undefined>;
11
+ type?: React.HTMLInputTypeAttribute;
7
12
  }
8
13
 
9
14
  export function Input(props: IProps) {
10
15
  const [value, setValue] = useObservable(props.value);
11
- const type = props.type ?? (typeof value);
16
+ const type = props.type ?? typeof value;
12
17
  function onChange(evt: React.ChangeEvent<HTMLInputElement>) {
13
- let _value: any = evt.target.value;
14
- if (type === 'number') {
18
+ let _value: string | number = evt.target.value;
19
+ if (type === "number") {
15
20
  _value = Number(_value);
16
21
  }
17
22
  setValue(_value);
18
23
  }
19
- return (
20
- <input onChange={onChange} type={type} {...props} value={value} />
21
- )
22
- }
24
+ return <input onChange={onChange} type={type} {...props} value={value ?? ""} />;
25
+ }
@@ -1,5 +1,6 @@
1
- import React, { useState, useEffect, useRef } from 'react';
2
- import InfiniteScroll from 'react-infinite-scroll-component';
1
+ import type React from "react";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
3
+ import InfiniteScroll from "react-infinite-scroll-component";
3
4
 
4
5
  interface IInverseLazyListProps<T> {
5
6
  /** Unique id for the scroll container — required to avoid id collisions */
@@ -13,7 +14,7 @@ interface IInverseLazyListProps<T> {
13
14
  /** Custom loading indicator */
14
15
  loadingIndicator?: React.ReactNode;
15
16
  /** Change this value to reset the list and reload from scratch */
16
- resetTrigger?: any;
17
+ resetTrigger?: unknown;
17
18
  /** Style for the outer scroll container */
18
19
  style?: React.CSSProperties;
19
20
  }
@@ -38,14 +39,14 @@ export function InverseLazyList<T>(props: IInverseLazyListProps<T>) {
38
39
  // Expose prepend function via ref so callers can push live updates
39
40
  useEffect(() => {
40
41
  if (props.prependRef) {
41
- props.prependRef.current = (item: T) => setItems(prev => [item, ...prev]);
42
+ props.prependRef.current = (item: T) => setItems((prev) => [item, ...prev]);
42
43
  }
43
44
  return () => {
44
45
  if (props.prependRef) props.prependRef.current = null;
45
46
  };
46
47
  }, [props.prependRef]);
47
48
 
48
- async function loadMore() {
49
+ const loadMore = useCallback(async () => {
49
50
  if (isLoadingRef.current || allLoaded) return;
50
51
  isLoadingRef.current = true;
51
52
  try {
@@ -53,41 +54,41 @@ export function InverseLazyList<T>(props: IInverseLazyListProps<T>) {
53
54
  if (!moreItems.length) {
54
55
  setAllLoaded(true);
55
56
  } else {
56
- setItems(prev => [...prev, ...moreItems]);
57
+ setItems((prev) => [...prev, ...moreItems]);
57
58
  }
58
59
  } finally {
59
60
  isLoadingRef.current = false;
60
61
  }
61
- }
62
+ }, [props.loadMore, allLoaded]);
62
63
 
63
64
  // Auto-preload when items are sparse
64
65
  useEffect(() => {
65
66
  if (items.length < PRELOAD_THRESHOLD && !allLoaded && !isLoadingRef.current) {
66
67
  loadMore();
67
68
  }
68
- }, [items.length, allLoaded]);
69
+ }, [items.length, allLoaded, loadMore]);
69
70
 
70
71
  // Reset when resetTrigger changes
71
72
  useEffect(() => {
72
73
  setItems([]);
73
74
  setAllLoaded(false);
74
75
  isLoadingRef.current = false;
75
- }, [props.resetTrigger]);
76
+ }, []);
76
77
 
77
78
  return (
78
79
  <div
79
80
  id={props.scrollableId}
80
81
  style={{
81
- overflow: 'auto',
82
- display: 'flex',
83
- flexDirection: 'column-reverse',
82
+ overflow: "auto",
83
+ display: "flex",
84
+ flexDirection: "column-reverse",
84
85
  ...props.style,
85
86
  }}
86
87
  >
87
88
  <InfiniteScroll
88
89
  dataLength={items.length}
89
90
  next={loadMore}
90
- style={{ display: 'flex', flexDirection: 'column-reverse', overflow: 'hidden' }}
91
+ style={{ display: "flex", flexDirection: "column-reverse", overflow: "hidden" }}
91
92
  inverse={true}
92
93
  hasMore={!allLoaded}
93
94
  loader={
@@ -1,56 +1,61 @@
1
- import React, { useEffect, useState } from "react";
2
- import { IOSchema, Observable, observable, camelCaseToSpaces } from "@peers-app/peers-sdk";
3
- import { Tooltip } from "./tooltip";
4
- import { MarkdownEditorInline } from "./markdown-editor/editor-inline";
1
+ import {
2
+ camelCaseToSpaces,
3
+ type IOSchema,
4
+ type Observable,
5
+ observable,
6
+ } from "@peers-app/peers-sdk";
7
+ import { useEffect, useState } from "react";
8
+ import { useSubscription } from "../hooks";
9
+ import { Checkbox } from "./checkbox";
5
10
  import { Input } from "./input";
6
11
  import { InputNumber } from "./input-number";
7
- import { Checkbox } from "./checkbox";
8
- import { useSubscription } from "../hooks";
12
+ import { MarkdownEditorInline } from "./markdown-editor/editor-inline";
13
+ import { Tooltip } from "./tooltip";
9
14
 
10
15
  interface IOSchemaValuesProps {
11
16
  ioSchema: IOSchema;
12
- values: Record<string, any>;
17
+ values: Record<string, unknown>;
13
18
  q: Observable<number>;
14
19
  excludeFields?: string[];
15
20
  }
16
21
 
17
22
  export const IOSchemaValues = (props: IOSchemaValuesProps) => {
18
-
19
23
  const { ioSchema, values, q } = props;
20
24
 
21
25
  return (
22
26
  <div>
23
- {ioSchema.fields.map((field, i) => {
27
+ {ioSchema.fields.map((field) => {
24
28
  if (props.excludeFields?.includes(field.name)) {
25
29
  return null;
26
30
  }
27
31
  return (
28
- <div key={i} className='mt-2'>
32
+ <div key={field.name} className="mt-2">
29
33
  <small className="text-body-secondary">
30
34
  {camelCaseToSpaces(field.name)}:
31
35
  <small>
32
- <Tooltip markdownContent={field.description ?? ''} />
36
+ <Tooltip markdownContent={field.description ?? ""} />
33
37
  </small>
34
38
  </small>
35
39
 
36
- <IOSchemaValue
37
- field={field}
38
- values={values}
39
- q={q}
40
- />
40
+ <IOSchemaValue field={field} values={values} q={q} />
41
41
  </div>
42
- )
42
+ );
43
43
  })}
44
44
  </div>
45
- )
45
+ );
46
+ };
46
47
 
47
- }
48
-
49
- export const IOSchemaValue = (props: { field: IOSchema['fields'][0], values: Record<string, any>, q: Observable<number> }) => {
48
+ export const IOSchemaValue = (props: {
49
+ field: IOSchema["fields"][0];
50
+ values: Record<string, unknown>;
51
+ q: Observable<number>;
52
+ }) => {
50
53
  const { field, values, q } = props;
51
54
 
52
55
  const [valueObs] = useState(() => {
53
- const obs = observable<any | undefined>(values[field.name] ?? '');
56
+ // Field values are heterogeneous (string | number | boolean | Date | …) at runtime.
57
+ // biome-ignore lint/suspicious/noExplicitAny: dynamic IO schema binding
58
+ const obs = observable<any | undefined>(values[field.name] ?? "");
54
59
  return obs;
55
60
  });
56
61
 
@@ -61,12 +66,16 @@ export const IOSchemaValue = (props: { field: IOSchema['fields'][0], values: Rec
61
66
  });
62
67
  return () => {
63
68
  sub.dispose();
64
- }
69
+ };
65
70
  });
66
71
 
67
- useSubscription(q, () => {
68
- valueObs(values[field.name] ?? '');
69
- }, true);
72
+ useSubscription(
73
+ q,
74
+ () => {
75
+ valueObs(values[field.name] ?? "");
76
+ },
77
+ true,
78
+ );
70
79
 
71
80
  const valueType = field.type;
72
81
 
@@ -74,49 +83,22 @@ export const IOSchemaValue = (props: { field: IOSchema['fields'][0], values: Rec
74
83
 
75
84
  // TODO UI Types - text:secret, date:time, date:date, date:datetime, enum
76
85
 
77
- if (valueType === 'string') {
78
- if (field.subType === 'markdown' || (!field.subType && field.name.toLowerCase().includes('body'))) {
79
- return (
80
- <MarkdownEditorInline
81
- value={valueObs}
82
- maxHeight={'250px'}
83
- />
84
- );
86
+ if (valueType === "string") {
87
+ if (
88
+ field.subType === "markdown" ||
89
+ (!field.subType && field.name.toLowerCase().includes("body"))
90
+ ) {
91
+ return <MarkdownEditorInline value={valueObs} maxHeight={"250px"} />;
85
92
  } else {
86
- return (
87
- <Input
88
- className='form-control'
89
- value={valueObs}
90
- />
91
- )
93
+ return <Input className="form-control" value={valueObs} />;
92
94
  }
95
+ } else if (valueType === "number") {
96
+ return <InputNumber className="form-control" value={valueObs} />;
97
+ } else if (valueType === "boolean") {
98
+ return <Checkbox className="form-control" checked={valueObs} />;
99
+ } else if (valueType === "Date") {
100
+ return <Input className="form-control" value={valueObs} type="date" />;
101
+ } else {
102
+ return <div>Unknown type: {valueType}</div>;
93
103
  }
94
- else if (valueType === 'number') {
95
- return (
96
- <InputNumber
97
- className='form-control'
98
- value={valueObs}
99
- />
100
- )
101
- }
102
- else if (valueType === 'boolean') {
103
- return (
104
- <Checkbox
105
- className='form-control'
106
- checked={valueObs}
107
- />
108
- )
109
- }
110
- else if (valueType === 'Date') {
111
- return (
112
- <Input
113
- className='form-control'
114
- value={valueObs}
115
- type='date'
116
- />
117
- )
118
- }
119
- else {
120
- return <div>Unknown type: {valueType}</div>
121
- }
122
- }
104
+ };
@@ -1,9 +1,22 @@
1
- import { arrayAsTable, FieldType, IField, initDoc, IOSchema, IOSchemaType, newid, Observable, observable } from "@peers-app/peers-sdk";
2
- import React, { useEffect, useState } from "react";
1
+ import {
2
+ arrayAsTable,
3
+ FieldType,
4
+ type IField,
5
+ type IOSchema,
6
+ IOSchemaType,
7
+ initDoc,
8
+ newid,
9
+ type Observable,
10
+ observable,
11
+ } from "@peers-app/peers-sdk";
12
+ import { useCallback, useEffect, useState } from "react";
3
13
  import { useObservable, useObservableState } from "../hooks";
4
14
  import { MarkdownEditorInline } from "./markdown-editor/editor-inline";
5
15
 
6
- export const IOSchemaEditor = (props: { ioSchema: Observable<IOSchema>, simpleValueName: string }) => {
16
+ export const IOSchemaEditor = (props: {
17
+ ioSchema: Observable<IOSchema>;
18
+ simpleValueName: string;
19
+ }) => {
7
20
  const { ioSchema, simpleValueName } = props;
8
21
 
9
22
  if (!ioSchema().type) {
@@ -13,17 +26,17 @@ export const IOSchemaEditor = (props: { ioSchema: Observable<IOSchema>, simpleVa
13
26
  ioSchema().fields = [];
14
27
  }
15
28
 
16
- const q = useObservableState(0)
29
+ const q = useObservableState(0);
17
30
 
18
31
  useEffect(() => {
19
- let schemaType = ioSchema().type;
32
+ const schemaType = ioSchema().type;
20
33
  const sub = ioSchema.subscribe(() => {
21
34
  if (schemaType !== ioSchema().type) {
22
35
  q(q() + 1);
23
36
  }
24
37
  });
25
38
  return () => sub.dispose();
26
- }, [ioSchema, q()]);
39
+ }, [ioSchema, q]);
27
40
 
28
41
  return (
29
42
  <>
@@ -31,11 +44,11 @@ export const IOSchemaEditor = (props: { ioSchema: Observable<IOSchema>, simpleVa
31
44
  className="form-select form-select-sm"
32
45
  style={{ width: "150px", display: "inline-block" }}
33
46
  defaultValue={ioSchema().type}
34
- onChange={evt => {
47
+ onChange={(evt) => {
35
48
  ioSchema({
36
49
  ...ioSchema(),
37
50
  type: evt.target.value as IOSchemaType,
38
- })
51
+ });
39
52
  }}
40
53
  >
41
54
  <option value="none">None</option>
@@ -43,35 +56,39 @@ export const IOSchemaEditor = (props: { ioSchema: Observable<IOSchema>, simpleVa
43
56
  <option value="complex">Complex Value</option>
44
57
  </select>
45
58
 
46
- <div
47
- className="ms-4"
48
- >
49
- {ioSchema().type === IOSchemaType.simple && <SimpleInputSchema ioSchema={ioSchema} simpleValueName={simpleValueName} />}
59
+ <div className="ms-4">
60
+ {ioSchema().type === IOSchemaType.simple && (
61
+ <SimpleInputSchema ioSchema={ioSchema} simpleValueName={simpleValueName} />
62
+ )}
50
63
  {ioSchema().type === IOSchemaType.complex && <ComplexInputSchema ioSchema={ioSchema} />}
51
64
  </div>
52
65
  </>
53
- )
54
- }
55
-
56
- export const SimpleInputSchema = (props: { ioSchema: Observable<IOSchema>, simpleValueName: string }) => {
66
+ );
67
+ };
57
68
 
69
+ export const SimpleInputSchema = (props: {
70
+ ioSchema: Observable<IOSchema>;
71
+ simpleValueName: string;
72
+ }) => {
58
73
  const { ioSchema, simpleValueName } = props;
59
74
  useObservable(ioSchema);
60
75
 
61
- const [ioValueType] = useState(() => observable(ioSchema()?.fields?.[0]?.type || FieldType.string));
76
+ const [ioValueType] = useState(() =>
77
+ observable(ioSchema()?.fields?.[0]?.type || FieldType.string),
78
+ );
62
79
  const [ioValueDesc] = useState(() => observable(ioSchema()?.fields?.[0]?.description || ""));
63
80
 
64
- const setSimpleInputSchema = () => {
65
- const _ioSchema = { ...ioSchema() }
81
+ const setSimpleInputSchema = useCallback(() => {
82
+ const _ioSchema = { ...ioSchema() };
66
83
  _ioSchema.type = IOSchemaType.simple;
67
84
  _ioSchema.fields = _ioSchema.fields || [];
68
85
  _ioSchema.fields[0] = {
69
86
  name: simpleValueName,
70
87
  description: ioValueDesc(),
71
88
  type: ioValueType(),
72
- }
89
+ };
73
90
  ioSchema(_ioSchema);
74
- }
91
+ }, [ioSchema, simpleValueName, ioValueDesc, ioValueType]);
75
92
 
76
93
  useEffect(() => {
77
94
  const sub = ioValueType.subscribe(() => {
@@ -83,96 +100,104 @@ export const SimpleInputSchema = (props: { ioSchema: Observable<IOSchema>, simpl
83
100
  return () => {
84
101
  sub.dispose();
85
102
  sub2.dispose();
86
- }
87
- }, [ioSchema]);
103
+ };
104
+ }, [ioValueDesc, ioValueType, setSimpleInputSchema]);
88
105
 
89
106
  const simpleValueTypes = Object.values(FieldType);
90
107
 
91
108
  return (
92
109
  <div>
93
- <small>Value Type:</small><br />
110
+ <small>Value Type:</small>
111
+ <br />
94
112
  <select
95
113
  className="form-select form-select-sm mt-2 mb-2"
96
114
  defaultValue={ioValueType()}
97
- onChange={evt => ioValueType(evt.target.value as FieldType)}
115
+ onChange={(evt) => ioValueType(evt.target.value as FieldType)}
98
116
  style={{ width: "150px", display: "inline-block" }}
99
117
  >
100
- {simpleValueTypes.map((type) =>
101
- <option
102
- key={type}
103
- value={type}
104
- >
118
+ {simpleValueTypes.map((type) => (
119
+ <option key={type} value={type}>
105
120
  {type}
106
121
  </option>
107
- )}
122
+ ))}
108
123
  </select>
109
124
  <br />
110
125
  <small>Value Description:</small>
111
- <MarkdownEditorInline
112
- value={ioValueDesc}
113
- hideToolbar={true}
114
- />
126
+ <MarkdownEditorInline value={ioValueDesc} hideToolbar={true} />
115
127
  </div>
116
- )
117
- }
128
+ );
129
+ };
118
130
 
119
131
  export const ComplexInputSchema = (props: { ioSchema: Observable<IOSchema> }) => {
120
132
  const { ioSchema } = props;
121
133
  useObservable(ioSchema);
122
134
 
123
- const [[fields, newRow], __setState] = useState(() => {
135
+ const [[fields, _newRow], __setState] = useState(() => {
124
136
  const _fields: IField[] = ioSchema().fields || [];
125
- // @ts-ignore
126
- _fields.forEach(f => f.fakeId = newid());
137
+ for (const f of _fields) {
138
+ // @ts-expect-error
139
+ f.fakeId = newid();
140
+ }
127
141
  const inMemoryTable = arrayAsTable(_fields, {
128
142
  primaryKeyName: "fakeId",
129
143
  fields: [
130
- { name: "fakeId", type: FieldType.string, description: '', defaultValue: () => newid() },
131
- { name: "name", type: FieldType.string, description: '' },
132
- { name: "type", type: FieldType.string, description: '' },
133
- { name: "description", type: FieldType.string, description: '' },
134
- { name: "default", type: FieldType.string, description: '' },
135
- { name: "optional", type: FieldType.string, description: '' },
136
- { name: "isArray", type: FieldType.string, description: '' },
137
- ]
144
+ { name: "fakeId", type: FieldType.string, description: "", defaultValue: () => newid() },
145
+ { name: "name", type: FieldType.string, description: "" },
146
+ { name: "type", type: FieldType.string, description: "" },
147
+ { name: "description", type: FieldType.string, description: "" },
148
+ { name: "default", type: FieldType.string, description: "" },
149
+ { name: "optional", type: FieldType.string, description: "" },
150
+ { name: "isArray", type: FieldType.string, description: "" },
151
+ ],
138
152
  });
139
- const _fieldsDocs = _fields.map(f => initDoc(f, inMemoryTable));
153
+ const _fieldsDocs = _fields.map((f) => initDoc(f, inMemoryTable));
140
154
  const _fieldsDocsObs = observable(_fieldsDocs);
141
155
 
142
156
  const newRow = () => {
143
- const newField = initDoc({
144
- // @ts-ignore
145
- fakeId: newid(),
146
- name: "",
147
- description: "",
148
- type: FieldType.string,
149
- optional: false,
150
- default: "",
151
- isArray: false,
152
- }, inMemoryTable);
157
+ const newField = initDoc(
158
+ {
159
+ // @ts-expect-error
160
+ fakeId: newid(),
161
+ name: "",
162
+ description: "",
163
+ type: FieldType.string,
164
+ optional: false,
165
+ default: "",
166
+ isArray: false,
167
+ },
168
+ inMemoryTable,
169
+ );
153
170
  _fieldsDocsObs([..._fieldsDocsObs(), newField]);
154
171
  return newField;
155
- }
172
+ };
156
173
  return [_fieldsDocsObs, newRow];
157
174
  });
158
175
 
159
176
  useObservable(fields);
160
177
 
161
- function updateSchemaFields() {
178
+ const updateSchemaFields = useCallback(() => {
162
179
  ioSchema({
163
180
  ...ioSchema(),
164
181
  type: IOSchemaType.complex,
165
- fields: fields().map(f => f.toJS()),
182
+ fields: fields().map((f) => f.toJS()),
166
183
  });
167
- }
184
+ }, [fields, ioSchema]);
168
185
 
169
186
  useEffect(() => {
170
- const subs = fields().map(f => f.q.subscribe(() => updateSchemaFields()));
171
- return () => subs.forEach(s => s.dispose());
172
- }, [fields()]);
187
+ const subs = fields().map((f) =>
188
+ f.q.subscribe(() => {
189
+ updateSchemaFields();
190
+ }),
191
+ );
192
+ return () => {
193
+ for (const s of subs) {
194
+ s.dispose();
195
+ }
196
+ };
197
+ }, [fields, updateSchemaFields]);
173
198
 
174
199
  return (
175
- <div style={{ fontSize: '9pt' }} className="mt-2">
200
+ <div style={{ fontSize: "9pt" }} className="mt-2">
176
201
  TODO - Move Datagrid over from peers-kore
177
202
  {/* <Datagrid<IField>
178
203
  primaryKey={{ name: "fakeId", dataType: "string" }}
@@ -230,5 +255,5 @@ export const ComplexInputSchema = (props: { ioSchema: Observable<IOSchema> }) =>
230
255
  newRow={newRow}
231
256
  /> */}
232
257
  </div>
233
- )
234
- }
258
+ );
259
+ };