@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,3 +1,4 @@
1
+ import type { IMentionData } from "@peers-app/peers-sdk";
1
2
  import {
2
3
  $applyNodeReplacement,
3
4
  type DOMConversionMap,
@@ -9,10 +10,9 @@ import {
9
10
  type SerializedTextNode,
10
11
  type Spread,
11
12
  TextNode,
12
- } from 'lexical';
13
- import { IMentionData } from "@peers-app/peers-sdk";
14
- import { mainContentPath } from '../../globals';
15
- import { mentionConfigs } from '../../mention-configs';
13
+ } from "lexical";
14
+ import { mainContentPath } from "../../globals";
15
+ import { mentionConfigs } from "../../mention-configs";
16
16
 
17
17
  export type SerializedMentionNode = Spread<
18
18
  {
@@ -21,20 +21,18 @@ export type SerializedMentionNode = Spread<
21
21
  SerializedTextNode
22
22
  >;
23
23
 
24
- function $convertMentionElement(
25
- domNode: HTMLElement,
26
- ): DOMConversionOutput | null {
24
+ function $convertMentionElement(domNode: HTMLElement): DOMConversionOutput | null {
27
25
  const mentionName = domNode.textContent?.substring(1);
28
- const dataKind = domNode.getAttribute('data-kind') ?? '';
29
- const dataId = domNode.getAttribute('data-id') ?? '';
30
- const clickable = domNode.getAttribute('data-clickable');
31
-
26
+ const dataKind = domNode.getAttribute("data-kind") ?? "";
27
+ const dataId = domNode.getAttribute("data-id") ?? "";
28
+ const clickable = domNode.getAttribute("data-clickable");
29
+
32
30
  if (mentionName && dataId) {
33
31
  const data: IMentionData = {
34
- kind: dataKind as any,
32
+ kind: dataKind,
35
33
  name: mentionName,
36
34
  id: dataId,
37
- clickable: clickable === 'true' ? true : clickable === 'false' ? false : undefined,
35
+ clickable: clickable === "true" ? true : clickable === "false" ? false : undefined,
38
36
  };
39
37
  const node = $createMentionNode(data);
40
38
  return {
@@ -46,9 +44,8 @@ function $convertMentionElement(
46
44
  }
47
45
 
48
46
  export class MentionNode extends TextNode {
49
-
50
47
  static getType(): string {
51
- return 'mention';
48
+ return "mention";
52
49
  }
53
50
 
54
51
  static clone(node: MentionNode): MentionNode {
@@ -67,17 +64,17 @@ export class MentionNode extends TextNode {
67
64
 
68
65
  constructor(
69
66
  public readonly data: IMentionData,
70
- key?: NodeKey
67
+ key?: NodeKey,
71
68
  ) {
72
69
  // const prefix = (data.kind === 'assistant' || data.kind === 'user') ? '@' : '$';
73
- const prefix = data.kind === 'user' ? '@' : '';
70
+ const prefix = data.kind === "user" ? "@" : "";
74
71
  super(prefix + data.name, key);
75
72
  }
76
73
 
77
74
  exportJSON(): SerializedMentionNode {
78
75
  return {
79
76
  ...super.exportJSON(),
80
- type: 'mention',
77
+ type: "mention",
81
78
  version: 1,
82
79
  data: this.data,
83
80
  };
@@ -87,24 +84,27 @@ export class MentionNode extends TextNode {
87
84
  const dom = super.createDOM(config);
88
85
 
89
86
  const kind = this.data.kind;
90
- const mentionConfig = mentionConfigs.find(c => c.kind === kind);
87
+ const mentionConfig = mentionConfigs.find((c) => c.kind === kind);
91
88
 
92
89
  if (mentionConfig) {
93
- dom.className = mentionConfig.styleClass || 'mention-default-default';
90
+ dom.className = mentionConfig.styleClass || "mention-default-default";
94
91
  } else {
95
92
  dom.className = `mention-${this.data.kind}`;
96
93
  }
97
94
 
98
95
  dom.textContent = this.__text;
99
- dom.setAttribute('data-kind', this.data.kind);
100
- dom.setAttribute('data-id', this.data.id);
101
- dom.setAttribute('data-clickable', this.data.clickable === undefined ? '' : String(this.data.clickable));
96
+ dom.setAttribute("data-kind", this.data.kind);
97
+ dom.setAttribute("data-id", this.data.id);
98
+ dom.setAttribute(
99
+ "data-clickable",
100
+ this.data.clickable === undefined ? "" : String(this.data.clickable),
101
+ );
102
102
 
103
103
  // currently ignoring `clickable` attribute
104
104
  // if (this.data.clickable !== false) {...
105
105
  const onClick = mentionConfig?.onClick;
106
- dom.style.cursor = 'pointer';
107
- dom.addEventListener('click', () => {
106
+ dom.style.cursor = "pointer";
107
+ dom.addEventListener("click", () => {
108
108
  if (onClick) {
109
109
  onClick(this.data);
110
110
  } else {
@@ -114,9 +114,9 @@ export class MentionNode extends TextNode {
114
114
  }
115
115
  });
116
116
 
117
- if (mentionConfig && kind !== 'user') {
118
- const iconSpan = document.createElement('i');
119
- iconSpan.className = 'pe-1 ' + mentionConfig.iconClass;
117
+ if (mentionConfig && kind !== "user") {
118
+ const iconSpan = document.createElement("i");
119
+ iconSpan.className = `pe-1 ${mentionConfig.iconClass}`;
120
120
  dom.prepend(iconSpan);
121
121
  return dom;
122
122
  }
@@ -150,19 +150,22 @@ export class MentionNode extends TextNode {
150
150
  }
151
151
 
152
152
  exportDOM(): DOMExportOutput {
153
- const element = document.createElement('span');
154
- element.setAttribute('data-lexical-mention', 'true');
153
+ const element = document.createElement("span");
154
+ element.setAttribute("data-lexical-mention", "true");
155
155
  element.textContent = this.__text;
156
- element.setAttribute('data-kind', this.data.kind);
157
- element.setAttribute('data-id', this.data.id);
158
- element.setAttribute('data-clickable', this.data.clickable === undefined ? '' : String(this.data.clickable));
156
+ element.setAttribute("data-kind", this.data.kind);
157
+ element.setAttribute("data-id", this.data.id);
158
+ element.setAttribute(
159
+ "data-clickable",
160
+ this.data.clickable === undefined ? "" : String(this.data.clickable),
161
+ );
159
162
  return { element };
160
163
  }
161
164
 
162
165
  static importDOM(): DOMConversionMap | null {
163
166
  return {
164
167
  span: (domNode: HTMLElement) => {
165
- if (!domNode.hasAttribute('data-lexical-mention')) {
168
+ if (!domNode.hasAttribute("data-lexical-mention")) {
166
169
  return null;
167
170
  }
168
171
  return {
@@ -188,12 +191,10 @@ export class MentionNode extends TextNode {
188
191
 
189
192
  export function $createMentionNode(data: IMentionData): MentionNode {
190
193
  const mentionNode = new MentionNode(data);
191
- mentionNode.setMode('segmented').toggleDirectionless();
194
+ mentionNode.setMode("segmented").toggleDirectionless();
192
195
  return $applyNodeReplacement(mentionNode);
193
196
  }
194
197
 
195
- export function $isMentionNode(
196
- node: LexicalNode | null | undefined,
197
- ): node is MentionNode {
198
+ export function $isMentionNode(node: LexicalNode | null | undefined): node is MentionNode {
198
199
  return node instanceof MentionNode;
199
200
  }
@@ -1,22 +1,21 @@
1
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
1
+ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
2
2
  import {
3
3
  LexicalTypeaheadMenuPlugin,
4
4
  MenuOption,
5
- MenuTextMatch,
5
+ type MenuTextMatch,
6
6
  useBasicTypeaheadTriggerMatch,
7
- } from '@lexical/react/LexicalTypeaheadMenuPlugin';
8
- import { IMentionData, observable, Observable } from "@peers-app/peers-sdk";
9
- import { $getSelection, TextNode } from 'lexical';
10
- import { sortBy, uniqBy } from 'lodash';
11
- import * as React from 'react';
12
- import { useCallback, useEffect, useMemo, useState } from 'react';
13
- import * as ReactDOM from 'react-dom';
14
- import { IMentionConfig } from '../../mention-configs';
15
- import { $createMentionNode } from './mention-node';
16
-
17
- const PUNCTUATION =
18
- '\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%\'"~=<>_:;';
19
- const NAME = '\\b[A-Z][^\\s' + PUNCTUATION + ']';
7
+ } from "@lexical/react/LexicalTypeaheadMenuPlugin";
8
+ import { type IMentionData, type Observable, observable } from "@peers-app/peers-sdk";
9
+ import { $getSelection, type TextNode } from "lexical";
10
+ import { sortBy, uniqBy } from "lodash";
11
+ import * as React from "react";
12
+ import { useCallback, useEffect, useMemo, useState } from "react";
13
+ import * as ReactDOM from "react-dom";
14
+ import type { IMentionConfig } from "../../mention-configs";
15
+ import { $createMentionNode } from "./mention-node";
16
+
17
+ const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
18
+ const NAME = `\\b[A-Z][^\\s${PUNCTUATION}]`;
20
19
 
21
20
  const DocumentMentionsRegex = {
22
21
  NAME,
@@ -25,36 +24,36 @@ const DocumentMentionsRegex = {
25
24
 
26
25
  const PUNC = DocumentMentionsRegex.PUNCTUATION;
27
26
 
28
- const TRIGGERS = ['@', '<'].join('');
27
+ const TRIGGERS = ["@", "<"].join("");
29
28
 
30
29
  // Chars we expect to see in a mention (non-space, non-punctuation).
31
- const VALID_CHARS = '[^' + TRIGGERS + PUNC + '\\s]';
30
+ const VALID_CHARS = `[^${TRIGGERS}${PUNC}\\s]`;
32
31
 
33
32
  // Non-standard series of chars. Each series must be preceded and followed by
34
33
  // a valid char.
35
34
  const VALID_JOINS =
36
- '(?:' +
37
- '\\.[ |$]|' + // E.g. "r. " in "Mr. Smith"
38
- ' |' + // E.g. " " in "Josh Duck"
39
- '[' +
35
+ "(?:" +
36
+ "\\.[ |$]|" + // E.g. "r. " in "Mr. Smith"
37
+ " |" + // E.g. " " in "Josh Duck"
38
+ "[" +
40
39
  PUNC +
41
- ']|' + // E.g. "-' in "Salier-Hellendag"
42
- ')';
40
+ "]|" + // E.g. "-' in "Salier-Hellendag"
41
+ ")";
43
42
 
44
43
  const LENGTH_LIMIT = 75;
45
44
 
46
45
  const AtSignMentionsRegex = new RegExp(
47
- '(^|\\s|\\()(' +
48
- '[' +
49
- TRIGGERS +
50
- ']' +
51
- '((?:' +
52
- VALID_CHARS +
53
- VALID_JOINS +
54
- '){0,' +
55
- LENGTH_LIMIT +
56
- '})' +
57
- ')$',
46
+ "(^|\\s|\\()(" +
47
+ "[" +
48
+ TRIGGERS +
49
+ "]" +
50
+ "((?:" +
51
+ VALID_CHARS +
52
+ VALID_JOINS +
53
+ "){0," +
54
+ LENGTH_LIMIT +
55
+ "})" +
56
+ ")$",
58
57
  );
59
58
 
60
59
  // 50 is the longest alias length limit.
@@ -62,82 +61,85 @@ const ALIAS_LENGTH_LIMIT = 50;
62
61
 
63
62
  // Regex used to match alias.
64
63
  const AtSignMentionsRegexAliasRegex = new RegExp(
65
- '(^|\\s|\\()(' +
66
- '[' +
67
- TRIGGERS +
68
- ']' +
69
- '((?:' +
70
- VALID_CHARS +
71
- '){0,' +
72
- ALIAS_LENGTH_LIMIT +
73
- '})' +
74
- ')$',
64
+ "(^|\\s|\\()(" +
65
+ "[" +
66
+ TRIGGERS +
67
+ "]" +
68
+ "((?:" +
69
+ VALID_CHARS +
70
+ "){0," +
71
+ ALIAS_LENGTH_LIMIT +
72
+ "})" +
73
+ ")$",
75
74
  );
76
75
 
77
76
  // At most, 5 suggestions are shown in the popup.
78
77
  const SUGGESTION_LIST_LENGTH_LIMIT = 10;
79
78
  export const MENTIONS_MAX_RESULTS = 10;
80
79
 
81
-
82
- function useMentionLookupService(mentionString: string | null, mentionConfigs: IMentionConfig[] = []): IMentionData[] {
80
+ function useMentionLookupService(
81
+ mentionString: string | null,
82
+ mentionConfigs: IMentionConfig[] = [],
83
+ ): IMentionData[] {
83
84
  const [results, setResults] = useState<Array<IMentionData>>([]);
84
85
 
85
86
  useEffect(() => {
86
87
  if (!mentionString) {
87
88
  setResults([]);
88
- return;
89
+ return;
89
90
  }
90
91
  (async () => {
91
92
  const prefix = mentionString[0];
92
93
  mentionString = mentionString.slice(1);
93
94
  // TODO simplify how users can include completed tasks in their search
94
- let searchCompletedTasks = prefix === '$' && mentionString.startsWith('done');
95
+ const searchCompletedTasks = prefix === "$" && mentionString.startsWith("done");
95
96
  if (searchCompletedTasks) {
96
97
  mentionString = mentionString.slice(4);
97
98
  }
98
- let kind = '';
99
- if (mentionString.includes(':')) {
100
- const parts = mentionString.split(':');
99
+ let kind = "";
100
+ if (mentionString.includes(":")) {
101
+ const parts = mentionString.split(":");
101
102
  kind = parts[0];
102
- mentionString = parts[1] || '';
103
+ mentionString = parts[1] || "";
103
104
  }
104
- const config = mentionConfigs?.find(c => c.kind === kind);
105
+ const config = mentionConfigs?.find((c) => c.kind === kind);
105
106
  if (config) {
106
107
  const results = await config.query(mentionString);
107
108
  setResults(results);
108
109
  return;
109
110
  }
110
- const results = await Promise.all(
111
- mentionConfigs?.map(c => c.query(mentionString || '')),
112
- );
111
+ const results = await Promise.all(mentionConfigs?.map((c) => c.query(mentionString || "")));
113
112
  let allResults = results.flat();
114
- allResults = uniqBy(allResults, 'id');
113
+ allResults = uniqBy(allResults, "id");
115
114
  let filteredResults = allResults;
116
- if (prefix === '@') {
117
- filteredResults = filteredResults.filter((result) => result.kind === 'user' || result.kind === 'assistant');
115
+ if (prefix === "@") {
116
+ filteredResults = filteredResults.filter(
117
+ (result) => result.kind === "user" || result.kind === "assistant",
118
+ );
118
119
  } else {
119
- filteredResults = filteredResults.filter((result) => result.kind !== 'user' && result.kind !== 'assistant');
120
+ filteredResults = filteredResults.filter(
121
+ (result) => result.kind !== "user" && result.kind !== "assistant",
122
+ );
120
123
  }
121
124
  if (kind) {
122
- filteredResults = allResults.filter((result) => result.kind.toLowerCase() === kind.toLowerCase());
125
+ filteredResults = allResults.filter(
126
+ (result) => result.kind.toLowerCase() === kind.toLowerCase(),
127
+ );
123
128
  } else if (!filteredResults.length) {
124
129
  filteredResults = allResults;
125
130
  }
126
- filteredResults = sortBy(filteredResults, r => {
127
- return r.name.toLowerCase().indexOf((mentionString!).toLowerCase());
131
+ filteredResults = sortBy(filteredResults, (r) => {
132
+ return r.name.toLowerCase().indexOf((mentionString ?? "").toLowerCase());
128
133
  });
129
134
  filteredResults = filteredResults.slice(0, SUGGESTION_LIST_LENGTH_LIMIT);
130
135
  setResults(filteredResults);
131
136
  })();
132
- }, [mentionString]);
137
+ }, [mentionString, mentionConfigs?.find, mentionConfigs?.map]);
133
138
 
134
139
  return results;
135
140
  }
136
141
 
137
- function checkForAtSignMentions(
138
- text: string,
139
- minMatchLength: number,
140
- ): MenuTextMatch | null {
142
+ function checkForAtSignMentions(text: string, minMatchLength: number): MenuTextMatch | null {
141
143
  let match = AtSignMentionsRegex.exec(text);
142
144
 
143
145
  if (match === null) {
@@ -172,7 +174,7 @@ class MentionTypeaheadOption extends MenuOption {
172
174
 
173
175
  constructor(
174
176
  public readonly data: IMentionData,
175
- picture: JSX.Element
177
+ picture: JSX.Element,
176
178
  ) {
177
179
  super(data.name);
178
180
  this.name = data.name;
@@ -197,9 +199,9 @@ function MentionsTypeaheadMenuItem({
197
199
  onMouseEnter: () => void;
198
200
  option: MentionTypeaheadOption;
199
201
  }) {
200
- let className = 'item';
202
+ let className = "item";
201
203
  if (isSelected) {
202
- className += ' selected';
204
+ className += " selected";
203
205
  }
204
206
  return (
205
207
  <li
@@ -207,9 +209,8 @@ function MentionsTypeaheadMenuItem({
207
209
  tabIndex={-1}
208
210
  className={className}
209
211
  ref={option.setRefElement}
210
- role="option"
211
212
  aria-selected={isSelected}
212
- id={'typeahead-item-' + index}
213
+ id={`typeahead-item-${index}`}
213
214
  onMouseEnter={onMouseEnter}
214
215
  onClick={onClick}
215
216
  data-kind={option.data.kind}
@@ -222,17 +223,15 @@ function MentionsTypeaheadMenuItem({
222
223
  );
223
224
  }
224
225
 
225
- export function MentionsPlugin(
226
- props: {
227
- mentionConfigs?: IMentionConfig[]
228
- mentionsOpen?: Observable<boolean>
229
- }
230
- ): JSX.Element | null {
226
+ export function MentionsPlugin(props: {
227
+ mentionConfigs?: IMentionConfig[];
228
+ mentionsOpen?: Observable<boolean>;
229
+ }): JSX.Element | null {
231
230
  const [editor] = useLexicalComposerContext();
232
231
 
233
232
  const [queryString, setQueryString] = useState<string | null>(null);
234
233
  const results = useMentionLookupService(queryString, props.mentionConfigs);
235
- const [_mentionsOpen] = useState(() => observable(false));
234
+ const [_mentionsOpen] = useState(() => observable(false));
236
235
 
237
236
  if (props.mentionsOpen) {
238
237
  const finalMentionsOpen = _mentionsOpen() && results.length > 0;
@@ -241,31 +240,30 @@ export function MentionsPlugin(
241
240
  }
242
241
  }
243
242
 
244
- const checkForSlashTriggerMatch = useBasicTypeaheadTriggerMatch('/', {
243
+ const checkForSlashTriggerMatch = useBasicTypeaheadTriggerMatch("/", {
245
244
  minLength: 0,
246
245
  });
247
246
 
248
247
  const options = useMemo(
249
248
  () =>
250
249
  results
251
- .map(
252
- (result) => {
253
- let picture = <i className="bi bi-question pe-1" />;
254
- const config = props.mentionConfigs?.find(c => c.kind === result.kind);
255
- if (config) {
256
- if (config.picture) {
257
- picture = config.picture(result);
258
- } else {
259
- picture = <i className={config.iconClass + ' pe-1'} />;
260
- }
250
+ .map((result) => {
251
+ const picKey = `mention-pic-${result.kind}-${result.id}`;
252
+ let picture = <i key={picKey} className="bi bi-question pe-1" />;
253
+ const config = props.mentionConfigs?.find((c) => c.kind === result.kind);
254
+ if (config) {
255
+ if (config.picture) {
256
+ picture = config.picture(result);
261
257
  } else {
262
- picture = <i className={'bi bi-question pe-1'} />;
258
+ picture = <i key={picKey} className={`${config.iconClass} pe-1`} />;
263
259
  }
264
- return new MentionTypeaheadOption(result, picture);
260
+ } else {
261
+ picture = <i key={picKey} className={"bi bi-question pe-1"} />;
265
262
  }
266
- )
263
+ return new MentionTypeaheadOption(result, picture);
264
+ })
267
265
  .slice(0, SUGGESTION_LIST_LENGTH_LIMIT),
268
- [results],
266
+ [results, props.mentionConfigs?.find],
269
267
  );
270
268
 
271
269
  const onSelectOption = useCallback(
@@ -282,7 +280,7 @@ export function MentionsPlugin(
282
280
  mentionNode.selectNext(); // Move cursor to the position after the mention
283
281
  const selection = $getSelection();
284
282
  if (selection !== null) {
285
- selection.insertText(' '); // Insert a space after the mention
283
+ selection.insertText(" "); // Insert a space after the mention
286
284
  }
287
285
  closeMenu();
288
286
  });
@@ -301,7 +299,7 @@ export function MentionsPlugin(
301
299
  [checkForSlashTriggerMatch, editor],
302
300
  );
303
301
 
304
- const popoverRef = React.useRef<HTMLDivElement>(null);
302
+ const _popoverRef = React.useRef<HTMLDivElement>(null);
305
303
 
306
304
  return (
307
305
  <LexicalTypeaheadMenuPlugin<MentionTypeaheadOption>
@@ -318,14 +316,14 @@ export function MentionsPlugin(
318
316
  if (!(anchorElementRef.current && results.length)) {
319
317
  return null;
320
318
  }
321
-
319
+
322
320
  // distance from the top of the viewport to the top of the anchor element
323
321
  const anchorTop = anchorElementRef.current.getBoundingClientRect().top;
324
322
  const viewportHeight = window.innerHeight;
325
323
 
326
- let className = 'typeahead-popover mentions-menu';
327
- if (anchorTop > (viewportHeight / 2)) {
328
- className += ' mentions-menu-popup';
324
+ let className = "typeahead-popover mentions-menu";
325
+ if (anchorTop > viewportHeight / 2) {
326
+ className += " mentions-menu-popup";
329
327
  }
330
328
 
331
329
  return ReactDOM.createPortal(
@@ -6,42 +6,41 @@
6
6
  *
7
7
  */
8
8
  export default {
9
- code: 'editor-code',
9
+ code: "editor-code",
10
10
  heading: {
11
- h1: 'editor-heading-h1',
12
- h2: 'editor-heading-h2',
13
- h3: 'editor-heading-h3',
14
- h4: 'editor-heading-h4',
15
- h5: 'editor-heading-h5',
11
+ h1: "editor-heading-h1",
12
+ h2: "editor-heading-h2",
13
+ h3: "editor-heading-h3",
14
+ h4: "editor-heading-h4",
15
+ h5: "editor-heading-h5",
16
16
  },
17
- image: 'editor-image',
18
- link: 'editor-link',
17
+ image: "editor-image",
18
+ link: "editor-link",
19
19
  list: {
20
- listitem: 'editor-listitem',
20
+ listitem: "editor-listitem",
21
21
  nested: {
22
22
  // listitem: 'editor-nested-listitem',
23
- listitem: 'PlaygroundEditorTheme__nestedListItem',
23
+ listitem: "PlaygroundEditorTheme__nestedListItem",
24
24
  },
25
- ol: 'editor-list-ol',
26
- ul: 'editor-list-ul',
27
- checklist: 'PlaygroundEditorTheme__checklist',
28
- listitemChecked: 'PlaygroundEditorTheme__listItemChecked',
29
- listitemUnchecked: 'PlaygroundEditorTheme__listItemUnchecked',
30
-
25
+ ol: "editor-list-ol",
26
+ ul: "editor-list-ul",
27
+ checklist: "PlaygroundEditorTheme__checklist",
28
+ listitemChecked: "PlaygroundEditorTheme__listItemChecked",
29
+ listitemUnchecked: "PlaygroundEditorTheme__listItemUnchecked",
31
30
  },
32
- ltr: 'ltr',
33
- paragraph: 'editor-paragraph',
34
- placeholder: 'editor-placeholder',
35
- quote: 'editor-quote',
36
- rtl: 'rtl',
31
+ ltr: "ltr",
32
+ paragraph: "editor-paragraph",
33
+ placeholder: "editor-placeholder",
34
+ quote: "editor-quote",
35
+ rtl: "rtl",
37
36
  text: {
38
- bold: 'editor-text-bold',
39
- code: 'editor-text-code',
40
- hashtag: 'editor-text-hashtag',
41
- italic: 'editor-text-italic',
42
- overflowed: 'editor-text-overflowed',
43
- strikethrough: 'editor-text-strikethrough',
44
- underline: 'editor-text-underline',
45
- underlineStrikethrough: 'editor-text-underlineStrikethrough',
37
+ bold: "editor-text-bold",
38
+ code: "editor-text-code",
39
+ hashtag: "editor-text-hashtag",
40
+ italic: "editor-text-italic",
41
+ overflowed: "editor-text-overflowed",
42
+ strikethrough: "editor-text-strikethrough",
43
+ underline: "editor-text-underline",
44
+ underlineStrikethrough: "editor-text-underlineStrikethrough",
46
45
  },
47
46
  };