@peers-app/peers-ui 0.0.14

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 (404) hide show
  1. package/.github/README.md +52 -0
  2. package/.github/workflows/publish.yml +45 -0
  3. package/babel.config.js +7 -0
  4. package/dist/app.d.ts +9 -0
  5. package/dist/app.js +54 -0
  6. package/dist/command-palette/command-palette-ui.d.ts +2 -0
  7. package/dist/command-palette/command-palette-ui.js +192 -0
  8. package/dist/command-palette/command-palette.d.ts +23 -0
  9. package/dist/command-palette/command-palette.js +371 -0
  10. package/dist/components/checkbox.d.ts +7 -0
  11. package/dist/components/checkbox.js +20 -0
  12. package/dist/components/group-switcher.d.ts +6 -0
  13. package/dist/components/group-switcher.js +301 -0
  14. package/dist/components/input-date.d.ts +7 -0
  15. package/dist/components/input-date.js +19 -0
  16. package/dist/components/input-datetime.d.ts +7 -0
  17. package/dist/components/input-datetime.js +35 -0
  18. package/dist/components/input-number.d.ts +9 -0
  19. package/dist/components/input-number.js +87 -0
  20. package/dist/components/input.d.ts +7 -0
  21. package/dist/components/input.js +20 -0
  22. package/dist/components/io-schema-values.d.ts +15 -0
  23. package/dist/components/io-schema-values.js +105 -0
  24. package/dist/components/io-schema.d.ts +13 -0
  25. package/dist/components/io-schema.js +163 -0
  26. package/dist/components/lazy-list.d.ts +13 -0
  27. package/dist/components/lazy-list.js +91 -0
  28. package/dist/components/lazy-sortable-list.d.ts +29 -0
  29. package/dist/components/lazy-sortable-list.js +12 -0
  30. package/dist/components/left-bar.d.ts +3 -0
  31. package/dist/components/left-bar.js +130 -0
  32. package/dist/components/list-screen.d.ts +16 -0
  33. package/dist/components/list-screen.js +100 -0
  34. package/dist/components/loading-indicator.d.ts +2 -0
  35. package/dist/components/loading-indicator.js +12 -0
  36. package/dist/components/main-content-container.d.ts +2 -0
  37. package/dist/components/main-content-container.js +90 -0
  38. package/dist/components/markdown-editor/autolink-plugin.d.ts +2 -0
  39. package/dist/components/markdown-editor/autolink-plugin.js +29 -0
  40. package/dist/components/markdown-editor/editor-inline.d.ts +3 -0
  41. package/dist/components/markdown-editor/editor-inline.js +13 -0
  42. package/dist/components/markdown-editor/editor.d.ts +18 -0
  43. package/dist/components/markdown-editor/editor.js +143 -0
  44. package/dist/components/markdown-editor/markdown-plugin.d.ts +9 -0
  45. package/dist/components/markdown-editor/markdown-plugin.js +194 -0
  46. package/dist/components/markdown-editor/mention-node.d.ts +21 -0
  47. package/dist/components/markdown-editor/mention-node.js +160 -0
  48. package/dist/components/markdown-editor/mentions-plugin.d.ts +7 -0
  49. package/dist/components/markdown-editor/mentions-plugin.js +268 -0
  50. package/dist/components/markdown-editor/theme.d.ts +46 -0
  51. package/dist/components/markdown-editor/theme.js +48 -0
  52. package/dist/components/markdown-editor/toolbar.d.ts +10 -0
  53. package/dist/components/markdown-editor/toolbar.js +112 -0
  54. package/dist/components/markdown-with-mentions.d.ts +4 -0
  55. package/dist/components/markdown-with-mentions.js +140 -0
  56. package/dist/components/message-logs/message-logs.d.ts +6 -0
  57. package/dist/components/message-logs/message-logs.js +307 -0
  58. package/dist/components/messages/avatar.d.ts +10 -0
  59. package/dist/components/messages/avatar.js +65 -0
  60. package/dist/components/messages/channel-message-list.d.ts +14 -0
  61. package/dist/components/messages/channel-message-list.js +158 -0
  62. package/dist/components/messages/channel-view.d.ts +6 -0
  63. package/dist/components/messages/channel-view.js +82 -0
  64. package/dist/components/messages/message-compose.d.ts +11 -0
  65. package/dist/components/messages/message-compose.js +152 -0
  66. package/dist/components/messages/message-display.d.ts +10 -0
  67. package/dist/components/messages/message-display.js +152 -0
  68. package/dist/components/messages/thread-message-list.d.ts +11 -0
  69. package/dist/components/messages/thread-message-list.js +122 -0
  70. package/dist/components/messages/thread-view.d.ts +6 -0
  71. package/dist/components/messages/thread-view.js +174 -0
  72. package/dist/components/off-canvas.d.ts +13 -0
  73. package/dist/components/off-canvas.js +89 -0
  74. package/dist/components/router.d.ts +6 -0
  75. package/dist/components/router.js +240 -0
  76. package/dist/components/save-button.d.ts +13 -0
  77. package/dist/components/save-button.js +75 -0
  78. package/dist/components/sortable-list.d.ts +36 -0
  79. package/dist/components/sortable-list.js +77 -0
  80. package/dist/components/tabs.d.ts +11 -0
  81. package/dist/components/tabs.js +69 -0
  82. package/dist/components/text-list-editor.tsx/text-list-editor.d.ts +6 -0
  83. package/dist/components/text-list-editor.tsx/text-list-editor.js +13 -0
  84. package/dist/components/tooltip.d.ts +11 -0
  85. package/dist/components/tooltip.js +20 -0
  86. package/dist/components/top-bar.d.ts +2 -0
  87. package/dist/components/top-bar.js +51 -0
  88. package/dist/components/typeahead/mentions-plugin.d.ts +7 -0
  89. package/dist/components/typeahead/mentions-plugin.js +203 -0
  90. package/dist/components/typeahead/typeahead-editor.d.ts +15 -0
  91. package/dist/components/typeahead/typeahead-editor.js +134 -0
  92. package/dist/components/typeahead/typeahead.d.ts +12 -0
  93. package/dist/components/typeahead/typeahead.js +94 -0
  94. package/dist/components/typeahead.d.ts +22 -0
  95. package/dist/components/typeahead.js +270 -0
  96. package/dist/globals.d.ts +29 -0
  97. package/dist/globals.js +148 -0
  98. package/dist/hooks.d.ts +34 -0
  99. package/dist/hooks.js +137 -0
  100. package/dist/index.d.ts +4 -0
  101. package/dist/index.js +20 -0
  102. package/dist/layout-vars.d.ts +6 -0
  103. package/dist/layout-vars.js +10 -0
  104. package/dist/mention-configs.d.ts +18 -0
  105. package/dist/mention-configs.js +149 -0
  106. package/dist/screens/assistants/assistant-config.d.ts +5 -0
  107. package/dist/screens/assistants/assistant-config.js +52 -0
  108. package/dist/screens/assistants/assistant-details.d.ts +4 -0
  109. package/dist/screens/assistants/assistant-details.js +85 -0
  110. package/dist/screens/assistants/assistant-info.d.ts +6 -0
  111. package/dist/screens/assistants/assistant-info.js +28 -0
  112. package/dist/screens/assistants/assistant-list.d.ts +2 -0
  113. package/dist/screens/assistants/assistant-list.js +114 -0
  114. package/dist/screens/assistants/assistant-tools.d.ts +5 -0
  115. package/dist/screens/assistants/assistant-tools.js +38 -0
  116. package/dist/screens/contacts/contact-details.d.ts +6 -0
  117. package/dist/screens/contacts/contact-details.js +100 -0
  118. package/dist/screens/contacts/contact-list.d.ts +2 -0
  119. package/dist/screens/contacts/contact-list.js +213 -0
  120. package/dist/screens/contacts/index.d.ts +4 -0
  121. package/dist/screens/contacts/index.js +21 -0
  122. package/dist/screens/events/cron.d.ts +3 -0
  123. package/dist/screens/events/cron.js +77 -0
  124. package/dist/screens/events/event-details.d.ts +6 -0
  125. package/dist/screens/events/event-details.js +112 -0
  126. package/dist/screens/events/event-handlers.d.ts +7 -0
  127. package/dist/screens/events/event-handlers.js +84 -0
  128. package/dist/screens/events/event-info.d.ts +5 -0
  129. package/dist/screens/events/event-info.js +19 -0
  130. package/dist/screens/events/event-list.d.ts +2 -0
  131. package/dist/screens/events/event-list.js +107 -0
  132. package/dist/screens/events/event-schedule.d.ts +5 -0
  133. package/dist/screens/events/event-schedule.js +124 -0
  134. package/dist/screens/groups/group-details.d.ts +6 -0
  135. package/dist/screens/groups/group-details.js +218 -0
  136. package/dist/screens/groups/group-list.d.ts +2 -0
  137. package/dist/screens/groups/group-list.js +275 -0
  138. package/dist/screens/groups/group-members.d.ts +8 -0
  139. package/dist/screens/groups/group-members.js +315 -0
  140. package/dist/screens/groups/index.d.ts +6 -0
  141. package/dist/screens/groups/index.js +23 -0
  142. package/dist/screens/knowledge/knowledge-frame-details.bk.d.ts +6 -0
  143. package/dist/screens/knowledge/knowledge-frame-details.bk.js +84 -0
  144. package/dist/screens/knowledge/knowledge-frame-details.d.ts +8 -0
  145. package/dist/screens/knowledge/knowledge-frame-details.js +143 -0
  146. package/dist/screens/knowledge/knowledge-frame-list.d.ts +2 -0
  147. package/dist/screens/knowledge/knowledge-frame-list.js +45 -0
  148. package/dist/screens/knowledge/knowledge-value-details.d.ts +6 -0
  149. package/dist/screens/knowledge/knowledge-value-details.js +150 -0
  150. package/dist/screens/knowledge/knowledge-value-list-item.d.ts +5 -0
  151. package/dist/screens/knowledge/knowledge-value-list-item.js +39 -0
  152. package/dist/screens/knowledge/knowledge-value-list.d.ts +3 -0
  153. package/dist/screens/knowledge/knowledge-value-list.js +123 -0
  154. package/dist/screens/packages/package-details.d.ts +6 -0
  155. package/dist/screens/packages/package-details.js +82 -0
  156. package/dist/screens/packages/package-info.d.ts +5 -0
  157. package/dist/screens/packages/package-info.js +42 -0
  158. package/dist/screens/packages/package-list.d.ts +2 -0
  159. package/dist/screens/packages/package-list.js +182 -0
  160. package/dist/screens/packages/package-new-local.d.ts +2 -0
  161. package/dist/screens/packages/package-new-local.js +82 -0
  162. package/dist/screens/peer-types/peer-type-details.d.ts +10 -0
  163. package/dist/screens/peer-types/peer-type-details.js +126 -0
  164. package/dist/screens/peer-types/peer-type-list.d.ts +2 -0
  165. package/dist/screens/peer-types/peer-type-list.js +57 -0
  166. package/dist/screens/predicates/predicate-details.d.ts +6 -0
  167. package/dist/screens/predicates/predicate-details.js +103 -0
  168. package/dist/screens/predicates/predicate-list.d.ts +2 -0
  169. package/dist/screens/predicates/predicate-list.js +46 -0
  170. package/dist/screens/profile.d.ts +2 -0
  171. package/dist/screens/profile.js +66 -0
  172. package/dist/screens/search/global-search.d.ts +2 -0
  173. package/dist/screens/search/global-search.js +186 -0
  174. package/dist/screens/settings/color-mode-dropdown.d.ts +6 -0
  175. package/dist/screens/settings/color-mode-dropdown.js +63 -0
  176. package/dist/screens/settings/settings-page.d.ts +2 -0
  177. package/dist/screens/settings/settings-page.js +49 -0
  178. package/dist/screens/setup-user.d.ts +2 -0
  179. package/dist/screens/setup-user.js +270 -0
  180. package/dist/screens/tools/tool-code.d.ts +5 -0
  181. package/dist/screens/tools/tool-code.js +32 -0
  182. package/dist/screens/tools/tool-details.d.ts +6 -0
  183. package/dist/screens/tools/tool-details.js +68 -0
  184. package/dist/screens/tools/tool-info.d.ts +5 -0
  185. package/dist/screens/tools/tool-info.js +74 -0
  186. package/dist/screens/tools/tool-list.d.ts +2 -0
  187. package/dist/screens/tools/tool-list.js +123 -0
  188. package/dist/screens/tools/tool-schema.d.ts +5 -0
  189. package/dist/screens/tools/tool-schema.js +30 -0
  190. package/dist/screens/tools/tool-test-details.d.ts +4 -0
  191. package/dist/screens/tools/tool-test-details.js +54 -0
  192. package/dist/screens/tools/tool-test-list.d.ts +4 -0
  193. package/dist/screens/tools/tool-test-list.js +82 -0
  194. package/dist/screens/variables/variable-details.d.ts +6 -0
  195. package/dist/screens/variables/variable-details.js +140 -0
  196. package/dist/screens/variables/variable-list.d.ts +2 -0
  197. package/dist/screens/variables/variable-list.js +58 -0
  198. package/dist/screens/workflows/workflow-details.d.ts +6 -0
  199. package/dist/screens/workflows/workflow-details.js +122 -0
  200. package/dist/screens/workflows/workflow-info.d.ts +5 -0
  201. package/dist/screens/workflows/workflow-info.js +18 -0
  202. package/dist/screens/workflows/workflow-instructions.d.ts +5 -0
  203. package/dist/screens/workflows/workflow-instructions.js +118 -0
  204. package/dist/screens/workflows/workflow-list.d.ts +2 -0
  205. package/dist/screens/workflows/workflow-list.js +109 -0
  206. package/dist/screens/workflows/workflow-subscriptions.d.ts +6 -0
  207. package/dist/screens/workflows/workflow-subscriptions.js +81 -0
  208. package/dist/setupTests.d.ts +1 -0
  209. package/dist/setupTests.js +31 -0
  210. package/dist/system-apps/assistants.app.d.ts +2 -0
  211. package/dist/system-apps/assistants.app.js +8 -0
  212. package/dist/system-apps/contacts.app.d.ts +2 -0
  213. package/dist/system-apps/contacts.app.js +9 -0
  214. package/dist/system-apps/events.app.d.ts +2 -0
  215. package/dist/system-apps/events.app.js +8 -0
  216. package/dist/system-apps/groups.app.d.ts +2 -0
  217. package/dist/system-apps/groups.app.js +9 -0
  218. package/dist/system-apps/index.d.ts +19 -0
  219. package/dist/system-apps/index.js +90 -0
  220. package/dist/system-apps/knowledge-frames.app.d.ts +2 -0
  221. package/dist/system-apps/knowledge-frames.app.js +9 -0
  222. package/dist/system-apps/knowledge-values.app.d.ts +2 -0
  223. package/dist/system-apps/knowledge-values.app.js +9 -0
  224. package/dist/system-apps/packages.app.d.ts +2 -0
  225. package/dist/system-apps/packages.app.js +8 -0
  226. package/dist/system-apps/predicates.app.d.ts +2 -0
  227. package/dist/system-apps/predicates.app.js +8 -0
  228. package/dist/system-apps/profile.app.d.ts +2 -0
  229. package/dist/system-apps/profile.app.js +8 -0
  230. package/dist/system-apps/search.app.d.ts +2 -0
  231. package/dist/system-apps/search.app.js +9 -0
  232. package/dist/system-apps/settings.app.d.ts +2 -0
  233. package/dist/system-apps/settings.app.js +8 -0
  234. package/dist/system-apps/threads.app.d.ts +2 -0
  235. package/dist/system-apps/threads.app.js +8 -0
  236. package/dist/system-apps/tools.app.d.ts +2 -0
  237. package/dist/system-apps/tools.app.js +8 -0
  238. package/dist/system-apps/types.app.d.ts +2 -0
  239. package/dist/system-apps/types.app.js +8 -0
  240. package/dist/system-apps/variables.app.d.ts +2 -0
  241. package/dist/system-apps/variables.app.js +8 -0
  242. package/dist/system-apps/workflows.app.d.ts +2 -0
  243. package/dist/system-apps/workflows.app.js +8 -0
  244. package/dist/tabs-layout/tabs-layout.d.ts +5 -0
  245. package/dist/tabs-layout/tabs-layout.js +374 -0
  246. package/dist/tabs-layout/tabs-state.d.ts +26 -0
  247. package/dist/tabs-layout/tabs-state.js +239 -0
  248. package/dist/three-bar-layout/left-bar-content.d.ts +7 -0
  249. package/dist/three-bar-layout/left-bar-content.js +151 -0
  250. package/dist/three-bar-layout/right-bar-content.d.ts +2 -0
  251. package/dist/three-bar-layout/right-bar-content.js +64 -0
  252. package/dist/three-bar-layout/three-bar-layout.d.ts +5 -0
  253. package/dist/three-bar-layout/three-bar-layout.js +218 -0
  254. package/dist/ui-defaults/index.d.ts +2 -0
  255. package/dist/ui-defaults/index.js +4 -0
  256. package/dist/ui-defaults/list-screen.d.ts +6 -0
  257. package/dist/ui-defaults/list-screen.js +74 -0
  258. package/dist/ui-defaults/notes-editor.d.ts +7 -0
  259. package/dist/ui-defaults/notes-editor.js +41 -0
  260. package/dist/ui-router/routes-loader.d.ts +25 -0
  261. package/dist/ui-router/routes-loader.js +97 -0
  262. package/dist/ui-router/ui-loader.d.ts +18 -0
  263. package/dist/ui-router/ui-loader.js +481 -0
  264. package/dist/utils.d.ts +9 -0
  265. package/dist/utils.js +250 -0
  266. package/docs/conversation-tab.md +201 -0
  267. package/docs/getting-started.md +284 -0
  268. package/docs/knowledge.md +187 -0
  269. package/docs/tabs-ui.md +696 -0
  270. package/docs/user-contacts-ui.md +384 -0
  271. package/jest.config.js +25 -0
  272. package/package.json +109 -0
  273. package/src/app.tsx +59 -0
  274. package/src/command-palette/command-palette-ui.tsx +264 -0
  275. package/src/command-palette/command-palette.ts +364 -0
  276. package/src/components/checkbox.tsx +22 -0
  277. package/src/components/group-switcher.tsx +469 -0
  278. package/src/components/input-date.tsx +28 -0
  279. package/src/components/input-datetime.tsx +41 -0
  280. package/src/components/input-number.tsx +67 -0
  281. package/src/components/input.tsx +22 -0
  282. package/src/components/io-schema-values.tsx +122 -0
  283. package/src/components/io-schema.tsx +234 -0
  284. package/src/components/lazy-list.tsx +98 -0
  285. package/src/components/lazy-sortable-list.tsx +51 -0
  286. package/src/components/left-bar.tsx +264 -0
  287. package/src/components/list-screen.tsx +105 -0
  288. package/src/components/loading-indicator.tsx +9 -0
  289. package/src/components/main-content-container.tsx +76 -0
  290. package/src/components/markdown-editor/autolink-plugin.tsx +36 -0
  291. package/src/components/markdown-editor/editor-inline.tsx +10 -0
  292. package/src/components/markdown-editor/editor.tsx +152 -0
  293. package/src/components/markdown-editor/markdown-plugin.tsx +224 -0
  294. package/src/components/markdown-editor/mention-node.ts +199 -0
  295. package/src/components/markdown-editor/mentions-plugin.tsx +356 -0
  296. package/src/components/markdown-editor/theme.ts +47 -0
  297. package/src/components/markdown-editor/toolbar.tsx +263 -0
  298. package/src/components/markdown-with-mentions.tsx +183 -0
  299. package/src/components/message-logs/message-logs.tsx +406 -0
  300. package/src/components/messages/avatar.tsx +95 -0
  301. package/src/components/messages/channel-message-list.tsx +177 -0
  302. package/src/components/messages/channel-view.tsx +74 -0
  303. package/src/components/messages/message-compose.tsx +162 -0
  304. package/src/components/messages/message-display.tsx +217 -0
  305. package/src/components/messages/thread-message-list.tsx +126 -0
  306. package/src/components/messages/thread-view.tsx +214 -0
  307. package/src/components/off-canvas.tsx +83 -0
  308. package/src/components/router.tsx +224 -0
  309. package/src/components/save-button.tsx +109 -0
  310. package/src/components/sortable-list.tsx +102 -0
  311. package/src/components/tabs.tsx +70 -0
  312. package/src/components/text-list-editor.tsx/text-list-editor.tsx +13 -0
  313. package/src/components/tooltip.tsx +50 -0
  314. package/src/components/top-bar.tsx +119 -0
  315. package/src/components/typeahead/mentions-plugin.tsx +265 -0
  316. package/src/components/typeahead/typeahead-editor.tsx +140 -0
  317. package/src/components/typeahead/typeahead.tsx +77 -0
  318. package/src/components/typeahead.tsx +359 -0
  319. package/src/globals.tsx +162 -0
  320. package/src/hooks.ts +144 -0
  321. package/src/index.tsx +8 -0
  322. package/src/layout-vars.ts +8 -0
  323. package/src/mention-configs.ts +166 -0
  324. package/src/screens/assistants/assistant-config.tsx +80 -0
  325. package/src/screens/assistants/assistant-details.tsx +77 -0
  326. package/src/screens/assistants/assistant-info.tsx +45 -0
  327. package/src/screens/assistants/assistant-list.tsx +115 -0
  328. package/src/screens/assistants/assistant-tools.tsx +61 -0
  329. package/src/screens/contacts/contact-details.tsx +175 -0
  330. package/src/screens/contacts/contact-list.tsx +251 -0
  331. package/src/screens/contacts/index.ts +6 -0
  332. package/src/screens/events/cron.ts +74 -0
  333. package/src/screens/events/event-details.tsx +117 -0
  334. package/src/screens/events/event-handlers.tsx +61 -0
  335. package/src/screens/events/event-info.tsx +29 -0
  336. package/src/screens/events/event-list.tsx +104 -0
  337. package/src/screens/events/event-schedule.tsx +130 -0
  338. package/src/screens/groups/group-details.tsx +306 -0
  339. package/src/screens/groups/group-list.tsx +366 -0
  340. package/src/screens/groups/group-members.tsx +455 -0
  341. package/src/screens/groups/index.ts +9 -0
  342. package/src/screens/knowledge/knowledge-frame-details.bk.tsx +160 -0
  343. package/src/screens/knowledge/knowledge-frame-details.tsx +176 -0
  344. package/src/screens/knowledge/knowledge-frame-list.tsx +49 -0
  345. package/src/screens/knowledge/knowledge-value-details.tsx +181 -0
  346. package/src/screens/knowledge/knowledge-value-list-item.tsx +48 -0
  347. package/src/screens/knowledge/knowledge-value-list.tsx +131 -0
  348. package/src/screens/packages/package-details.tsx +117 -0
  349. package/src/screens/packages/package-info.tsx +83 -0
  350. package/src/screens/packages/package-list.tsx +191 -0
  351. package/src/screens/packages/package-new-local.tsx +93 -0
  352. package/src/screens/peer-types/peer-type-details.tsx +162 -0
  353. package/src/screens/peer-types/peer-type-list.tsx +74 -0
  354. package/src/screens/predicates/predicate-details.tsx +125 -0
  355. package/src/screens/predicates/predicate-list.tsx +50 -0
  356. package/src/screens/profile.tsx +68 -0
  357. package/src/screens/search/global-search.tsx +274 -0
  358. package/src/screens/settings/color-mode-dropdown.tsx +57 -0
  359. package/src/screens/settings/settings-page.tsx +76 -0
  360. package/src/screens/setup-user.tsx +367 -0
  361. package/src/screens/tools/tool-code.tsx +35 -0
  362. package/src/screens/tools/tool-details.tsx +101 -0
  363. package/src/screens/tools/tool-info.tsx +60 -0
  364. package/src/screens/tools/tool-list.tsx +121 -0
  365. package/src/screens/tools/tool-schema.tsx +42 -0
  366. package/src/screens/tools/tool-test-details.tsx +100 -0
  367. package/src/screens/tools/tool-test-list.tsx +74 -0
  368. package/src/screens/variables/variable-details.tsx +183 -0
  369. package/src/screens/variables/variable-list.tsx +74 -0
  370. package/src/screens/workflows/workflow-details.tsx +130 -0
  371. package/src/screens/workflows/workflow-info.tsx +29 -0
  372. package/src/screens/workflows/workflow-instructions.tsx +127 -0
  373. package/src/screens/workflows/workflow-list.tsx +107 -0
  374. package/src/screens/workflows/workflow-subscriptions.tsx +58 -0
  375. package/src/setupTests.ts +32 -0
  376. package/src/system-apps/assistants.app.ts +7 -0
  377. package/src/system-apps/contacts.app.ts +8 -0
  378. package/src/system-apps/events.app.ts +7 -0
  379. package/src/system-apps/groups.app.ts +8 -0
  380. package/src/system-apps/index.ts +79 -0
  381. package/src/system-apps/knowledge-frames.app.ts +8 -0
  382. package/src/system-apps/knowledge-values.app.ts +8 -0
  383. package/src/system-apps/packages.app.ts +7 -0
  384. package/src/system-apps/predicates.app.ts +7 -0
  385. package/src/system-apps/profile.app.ts +7 -0
  386. package/src/system-apps/search.app.ts +8 -0
  387. package/src/system-apps/settings.app.ts +7 -0
  388. package/src/system-apps/threads.app.ts +7 -0
  389. package/src/system-apps/tools.app.ts +7 -0
  390. package/src/system-apps/types.app.ts +7 -0
  391. package/src/system-apps/variables.app.ts +7 -0
  392. package/src/system-apps/workflows.app.ts +7 -0
  393. package/src/tabs-layout/tabs-layout.tsx +672 -0
  394. package/src/tabs-layout/tabs-state.ts +269 -0
  395. package/src/three-bar-layout/left-bar-content.tsx +202 -0
  396. package/src/three-bar-layout/right-bar-content.tsx +67 -0
  397. package/src/three-bar-layout/three-bar-layout.tsx +297 -0
  398. package/src/ui-defaults/index.ts +3 -0
  399. package/src/ui-defaults/list-screen.tsx +92 -0
  400. package/src/ui-defaults/notes-editor.tsx +51 -0
  401. package/src/ui-router/routes-loader.ts +98 -0
  402. package/src/ui-router/ui-loader.tsx +497 -0
  403. package/src/utils.ts +266 -0
  404. package/tsconfig.json +24 -0
@@ -0,0 +1,125 @@
1
+ import { IDoc, IPredicate, Observable, Predicates } from "@peers-app/peers-sdk";
2
+ import React, { useEffect } from "react";
3
+ import { Input } from "../../components/input";
4
+ import { LoadingIndicator } from "../../components/loading-indicator";
5
+ import { MarkdownEditorInline } from "../../components/markdown-editor/editor-inline";
6
+ import { SaveButton } from "../../components/save-button";
7
+ import { ScreenTabBody, Tabs } from "../../components/tabs";
8
+ import { usePromise } from "../../hooks";
9
+ import { updateActiveTabTitle } from "../../tabs-layout/tabs-state";
10
+
11
+ interface IProps {
12
+ predicateId: string;
13
+ }
14
+
15
+ export const PredicateDetails = (props: IProps) => {
16
+
17
+ const predicate = usePromise(async () => {
18
+ const predicate = await Predicates().get(props.predicateId);
19
+ if (!predicate) {
20
+ throw new Error('Predicate not found');
21
+ }
22
+ const doc = Predicates().initDoc(predicate);
23
+ updateActiveTabTitle(doc.name || "Predicate");
24
+ return doc;
25
+ }, undefined, [props.predicateId]);
26
+
27
+
28
+ useEffect(() => {
29
+ if (!predicate) return;
30
+ const sub = predicate.qs.name.subscribe(() => {
31
+ predicate.name = predicate.qs.name().replaceAll(/\s/g, '_').replaceAll(/[^a-zA-Z0-9_-]/g, '');
32
+ });
33
+ return () => {
34
+ sub.dispose();
35
+ }
36
+ }, [predicate]);
37
+
38
+ if (!predicate) {
39
+ return <LoadingIndicator />;
40
+ }
41
+
42
+ return (
43
+ <div className="container-fluid p-3">
44
+
45
+ <div className="d-flex">
46
+ <div>
47
+ <h4>
48
+ <i className="me-2 bi bi-node-plus-fill"></i>
49
+ </h4>
50
+ </div>
51
+ <div className="flex-grow-1">
52
+ <h4>
53
+ <Input
54
+ key={predicate.predicateId}
55
+ className='border border-0'
56
+ style={{ width: '100%', outline: 'none', backgroundColor: 'transparent' }}
57
+ value={predicate.qs.name}
58
+ />
59
+ </h4>
60
+ </div>
61
+ <div>
62
+ <SaveButton
63
+ key={predicate.predicateId}
64
+ doc={predicate}
65
+ />
66
+ </div>
67
+ </div>
68
+
69
+ <Tabs
70
+ key={predicate.predicateId}
71
+ tabs={[
72
+ {
73
+ name: 'Info', content:
74
+ <ScreenTabBody>
75
+ <PredicateInfo predicate={predicate} />
76
+ </ScreenTabBody>
77
+ },
78
+ {
79
+ name: 'Allowed Types', content:
80
+ <ScreenTabBody>
81
+ <AllowedTypes predicate={predicate} />
82
+ </ScreenTabBody>
83
+ },
84
+ ]}
85
+ />
86
+ </div>
87
+ )
88
+ }
89
+
90
+
91
+ const PredicateInfo = (props: { predicate: IDoc<IPredicate> }) => {
92
+ const { predicate } = props
93
+
94
+ predicate.description = predicate.description || '';
95
+
96
+ return (
97
+ <div>
98
+
99
+ <small>Name:</small>
100
+ <Input
101
+ value={predicate.qs.name}
102
+ className="form-control mb-3 p-0 ps-2"
103
+ placeholder="Variable name"
104
+ title="Variable name"
105
+ />
106
+
107
+ <small className="mt-2">Description:</small>
108
+ <MarkdownEditorInline
109
+ value={predicate.qs.description as Observable<string>}
110
+ />
111
+
112
+ </div>
113
+ )
114
+ }
115
+
116
+ const AllowedTypes = (props: { predicate: IDoc<IPredicate> }) => {
117
+ const { predicate } = props
118
+
119
+ return (
120
+ <div>
121
+ {/* <TextListEditor value={predicate} /> */}
122
+ </div>
123
+ )
124
+ }
125
+
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import { newid, IPredicate, Predicates } from "@peers-app/peers-sdk";
3
+ import { ListScreen } from '../../components/list-screen';
4
+ import { MarkdownWithMentions } from '../../components/markdown-with-mentions';
5
+ import { mainContentPath } from '../../globals';
6
+
7
+ export function PredicateList() {
8
+ const screenPathPart = 'predicates';
9
+ const icon = 'bi bi-node-plus-fill';
10
+
11
+ return ListScreen({
12
+ table: Predicates(),
13
+ sortBy: ['-predicateId'],
14
+ placeholderName: 'frame',
15
+ getFilter: (text: string) => {
16
+ return {
17
+ $or: [
18
+ { name: { $matchWords: text } },
19
+ { description: { $matchWords: text } },
20
+ ]
21
+ };
22
+ },
23
+ newRecord: async (text: string) => {
24
+ text = text.trim().replace(/\s+/g, '_');
25
+ const item = await Predicates().insert({
26
+ predicateId: newid(),
27
+ name: text,
28
+ description: '',
29
+ });
30
+ mainContentPath(`${screenPathPart}/${item.predicateId}`);
31
+ return item;
32
+ },
33
+ renderItem: (item: IPredicate) => {
34
+ return (
35
+ <div
36
+ key={item.predicateId}
37
+ className='container-fluid pb-4'
38
+ >
39
+ <i className={icon}></i>&nbsp;
40
+ <a href={`#${screenPathPart}/${item.predicateId}`}>
41
+ {item.name || '<empty-name>'}
42
+ </a>
43
+ <div style={{ paddingLeft: '20px' }}>
44
+ <MarkdownWithMentions content={item.description || ''} />
45
+ </div>
46
+ </div>
47
+ )
48
+ },
49
+ });
50
+ }
@@ -0,0 +1,68 @@
1
+
2
+ import React, { useState } from 'react';
3
+ import { thisDeviceId, Users } from "@peers-app/peers-sdk";
4
+ import { SaveButton } from '../components/save-button';
5
+ import { Tooltip } from '../components/tooltip';
6
+ import * as globals from '../globals';
7
+ import { Input } from '../components/input';
8
+
9
+ export const Profile = () => {
10
+
11
+ const [me] = useState(() => Users().initDoc(globals.me));
12
+
13
+ return (
14
+ <div className="container mt-4">
15
+
16
+ <div className="d-flex mb-2">
17
+ <div className="flex-grow-1">
18
+ <h4>Profile</h4>
19
+ </div>
20
+ <div>
21
+ <SaveButton
22
+ doc={me}
23
+ noBuiltInActions
24
+ />
25
+ </div>
26
+ </div>
27
+
28
+ <small>Name:</small>
29
+ <Input
30
+ value={me.qs.name}
31
+ className="form-control mb-3"
32
+ />
33
+
34
+ <small>User Id:</small>
35
+ <Tooltip markdownContent="This uniquely identifies you to all other users." />
36
+ <Input
37
+ value={me.userId}
38
+ className="form-control mb-3"
39
+ disabled
40
+ />
41
+
42
+ <small>Device Id:</small>
43
+ <Tooltip markdownContent="This uniquely identifies this device on Peers networks." />
44
+ <Input
45
+ value={thisDeviceId()}
46
+ className="form-control mb-3"
47
+ disabled
48
+ />
49
+
50
+ <small>Public Key:</small>
51
+ <Tooltip markdownContent="This is your public key that other users will use to verify your signatures and thereby confirm a message was actually from you." />
52
+ <Input
53
+ value={me.publicKey}
54
+ className="form-control mb-3"
55
+ disabled
56
+ />
57
+
58
+ <small>Public Box Key:</small>
59
+ <Tooltip markdownContent="This is the public key that other users can use to encrypt data so that only you can open it with your secret key." />
60
+ <Input
61
+ value={me.publicBoxKey}
62
+ className="form-control mb-3"
63
+ disabled
64
+ />
65
+
66
+ </div>
67
+ );
68
+ }
@@ -0,0 +1,274 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import { useObservable } from '../../hooks';
3
+ import { colorMode } from '../settings/color-mode-dropdown';
4
+ import { goToTabPath } from '../../tabs-layout/tabs-state';
5
+ import {
6
+ toolMentionConfig,
7
+ userMentionConfig,
8
+ assistantMentionConfig,
9
+ workflowMentionConfig,
10
+ peerEventTypeMentionConfig,
11
+ predicateMentionConfig,
12
+ valueTypeMentionConfig,
13
+ IMentionConfig
14
+ } from '../../mention-configs';
15
+ import { IMentionData } from "@peers-app/peers-sdk";
16
+
17
+ interface SearchResult {
18
+ config: IMentionConfig;
19
+ items: IMentionData[];
20
+ category: string;
21
+ }
22
+
23
+ export function GlobalSearch() {
24
+ const [_colorMode] = useObservable(colorMode);
25
+ const [searchQuery, setSearchQuery] = useState('');
26
+ const [searchResults, setSearchResults] = useState<SearchResult[]>([]);
27
+ const [isSearching, setIsSearching] = useState(false);
28
+ const inputRef = useRef<HTMLInputElement>(null);
29
+
30
+ const isDark = _colorMode === 'dark';
31
+
32
+ // Focus search input on mount
33
+ useEffect(() => {
34
+ if (inputRef.current) {
35
+ inputRef.current.focus();
36
+ }
37
+ }, []);
38
+
39
+ // Search configs with their display names
40
+ const searchConfigs: Array<{ config: IMentionConfig; category: string; navigationPath: string }> = [
41
+ { config: toolMentionConfig, category: 'Tools', navigationPath: 'tools' },
42
+ { config: assistantMentionConfig, category: 'Assistants', navigationPath: 'assistants' },
43
+ { config: workflowMentionConfig, category: 'Workflows', navigationPath: 'workflows' },
44
+ { config: peerEventTypeMentionConfig, category: 'Events', navigationPath: 'events' },
45
+ { config: predicateMentionConfig, category: 'Predicates', navigationPath: 'predicates' },
46
+ { config: valueTypeMentionConfig, category: 'Types', navigationPath: 'peer-types' },
47
+ { config: userMentionConfig, category: 'Users', navigationPath: 'profile' },
48
+ ];
49
+
50
+ // Debounced search effect
51
+ useEffect(() => {
52
+ if (!searchQuery.trim()) {
53
+ setSearchResults([]);
54
+ return;
55
+ }
56
+
57
+ const timeoutId = setTimeout(async () => {
58
+ setIsSearching(true);
59
+ try {
60
+ // Search all entity types in parallel
61
+ const searchPromises = searchConfigs.map(async ({ config, category }) => {
62
+ try {
63
+ const items = await config.query(searchQuery);
64
+ if (items.length > 0) {
65
+ return { config, items, category };
66
+ }
67
+ return null;
68
+ } catch (error) {
69
+ console.warn(`Search failed for ${category}:`, error);
70
+ return null;
71
+ }
72
+ });
73
+
74
+ const searchResults = await Promise.all(searchPromises);
75
+ const filteredResults = searchResults.filter(Boolean) as SearchResult[];
76
+
77
+ setSearchResults(filteredResults);
78
+ } finally {
79
+ setIsSearching(false);
80
+ }
81
+ }, 300); // 300ms debounce
82
+
83
+ return () => clearTimeout(timeoutId);
84
+ }, [searchQuery]);
85
+
86
+ const handleItemClick = (result: SearchResult, item: IMentionData) => {
87
+ // Try using the config's onClick first
88
+ if (result.config.onClick) {
89
+ result.config.onClick(item);
90
+ return;
91
+ }
92
+
93
+ // Otherwise navigate to the appropriate list page
94
+ const configPath = searchConfigs.find(c => c.config === result.config)?.navigationPath;
95
+ if (configPath) {
96
+ if (configPath === 'profile') {
97
+ // Special case for users - just go to profile for now
98
+ goToTabPath('profile');
99
+ } else {
100
+ // Navigate to the detail page if possible
101
+ goToTabPath(`${configPath}/${item.id}`);
102
+ }
103
+ }
104
+ };
105
+
106
+ const totalResults = searchResults.reduce((sum, result) => sum + result.items.length, 0);
107
+
108
+ return (
109
+ <div className="container-fluid h-100 p-4" style={{ maxHeight: '100vh', overflowY: 'auto' }}>
110
+ {/* Search Header */}
111
+ <div className="mb-4">
112
+ <h1 className="h3 mb-3 d-flex align-items-center">
113
+ <i className="bi-search me-3" />
114
+ Search Everything
115
+ </h1>
116
+
117
+ {/* Search Input */}
118
+ <div className="position-relative">
119
+ <i
120
+ className="bi-search position-absolute"
121
+ style={{
122
+ left: '16px',
123
+ top: '50%',
124
+ transform: 'translateY(-50%)',
125
+ color: '#6c757d',
126
+ zIndex: 1,
127
+ fontSize: '18px'
128
+ }}
129
+ />
130
+ <input
131
+ ref={inputRef}
132
+ type="text"
133
+ className={`form-control form-control-lg ${isDark ? 'bg-dark text-light border-secondary' : ''}`}
134
+ placeholder="Search across tools, assistants, workflows, events, and more..."
135
+ value={searchQuery}
136
+ onChange={(e) => setSearchQuery(e.target.value)}
137
+ style={{
138
+ paddingLeft: '50px',
139
+ fontSize: '18px',
140
+ borderRadius: '12px',
141
+ backgroundColor: isDark ? '#343a40' : '#f8f9fa',
142
+ border: isDark ? '2px solid #495057' : '2px solid #dee2e6'
143
+ }}
144
+ />
145
+ {isSearching && (
146
+ <div
147
+ className="position-absolute"
148
+ style={{
149
+ right: '16px',
150
+ top: '50%',
151
+ transform: 'translateY(-50%)'
152
+ }}
153
+ >
154
+ <div className="spinner-border spinner-border-sm text-muted" />
155
+ </div>
156
+ )}
157
+ </div>
158
+
159
+ {/* Search Stats */}
160
+ {searchQuery && (
161
+ <div className="mt-3 text-muted small">
162
+ {isSearching ? (
163
+ 'Searching...'
164
+ ) : totalResults > 0 ? (
165
+ `Found ${totalResults} result${totalResults !== 1 ? 's' : ''} across ${searchResults.length} categor${searchResults.length !== 1 ? 'ies' : 'y'}`
166
+ ) : searchQuery.trim() ? (
167
+ 'No results found'
168
+ ) : null}
169
+ </div>
170
+ )}
171
+ </div>
172
+
173
+ {/* Search Results */}
174
+ {searchQuery && !isSearching && (
175
+ <div>
176
+ {searchResults.length === 0 ? (
177
+ <div className="text-center py-5">
178
+ <i className="bi-search mb-3 d-block text-muted" style={{ fontSize: '48px' }} />
179
+ <h4 className="text-muted">No results found</h4>
180
+ <p className="text-muted">
181
+ Try different keywords or check your spelling
182
+ </p>
183
+ </div>
184
+ ) : (
185
+ <div>
186
+ {searchResults.map((result) => (
187
+ <div key={result.category} className="mb-5">
188
+ {/* Category Header */}
189
+ <div className="d-flex align-items-center mb-3">
190
+ <i className={`${result.config.iconClass} me-3`} style={{ fontSize: '20px', color: '#6c757d' }} />
191
+ <h4 className="mb-0 me-3">{result.category}</h4>
192
+ <span className="badge bg-secondary">{result.items.length}</span>
193
+ </div>
194
+
195
+ {/* Items */}
196
+ <div className="row g-3">
197
+ {result.items.map((item) => (
198
+ <div key={item.id} className="col-12 col-md-6 col-lg-4">
199
+ <div
200
+ className={`card h-100 ${isDark ? 'bg-dark border-secondary' : 'bg-light'}`}
201
+ style={{
202
+ cursor: 'pointer',
203
+ transition: 'all 0.15s ease',
204
+ borderRadius: '8px'
205
+ }}
206
+ onClick={() => handleItemClick(result, item)}
207
+ onMouseEnter={(e) => {
208
+ e.currentTarget.style.transform = 'translateY(-2px)';
209
+ e.currentTarget.style.boxShadow = isDark
210
+ ? '0 4px 12px rgba(0,0,0,0.3)'
211
+ : '0 4px 12px rgba(0,0,0,0.1)';
212
+ }}
213
+ onMouseLeave={(e) => {
214
+ e.currentTarget.style.transform = 'translateY(0)';
215
+ e.currentTarget.style.boxShadow = 'none';
216
+ }}
217
+ >
218
+ <div className="card-body p-3">
219
+ <div className="d-flex align-items-start">
220
+ <i
221
+ className={`${result.config.iconClass} me-3 mt-1`}
222
+ style={{
223
+ fontSize: '16px',
224
+ color: isDark ? '#0d6efd' : '#0d6efd',
225
+ minWidth: '16px'
226
+ }}
227
+ />
228
+ <div className="flex-grow-1">
229
+ <h6 className="card-title mb-1 fw-medium">
230
+ {item.name}
231
+ </h6>
232
+ <small className="text-muted text-uppercase" style={{ fontSize: '11px', letterSpacing: '0.5px' }}>
233
+ {result.category.slice(0, -1)}
234
+ </small>
235
+ </div>
236
+ <i className="bi-arrow-right text-muted" style={{ fontSize: '12px' }} />
237
+ </div>
238
+ </div>
239
+ </div>
240
+ </div>
241
+ ))}
242
+ </div>
243
+ </div>
244
+ ))}
245
+ </div>
246
+ )}
247
+ </div>
248
+ )}
249
+
250
+ {/* Initial State */}
251
+ {!searchQuery && (
252
+ <div className="text-center py-5">
253
+ <i className="bi-search mb-3 d-block text-muted" style={{ fontSize: '64px' }} />
254
+ <h3 className="text-muted mb-3">Search across everything</h3>
255
+ <p className="text-muted mb-4" style={{ maxWidth: '400px', margin: '0 auto' }}>
256
+ Find tools, assistants, workflows, events, predicates, types, and users all in one place.
257
+ </p>
258
+ <div className="d-flex flex-wrap justify-content-center gap-2">
259
+ {searchConfigs.map(({ config, category }) => (
260
+ <span
261
+ key={category}
262
+ className={`badge ${isDark ? 'bg-secondary' : 'bg-light text-dark'} px-3 py-2 d-flex align-items-center`}
263
+ style={{ fontSize: '12px' }}
264
+ >
265
+ <i className={`${config.iconClass} me-2`} />
266
+ {category}
267
+ </span>
268
+ ))}
269
+ </div>
270
+ </div>
271
+ )}
272
+ </div>
273
+ );
274
+ }
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { camelCaseToSpaces, deviceVar } from "@peers-app/peers-sdk";
3
+ import { useObservable } from '../../hooks';
4
+
5
+ export type ColorModePreference = 'light' | 'dark' | 'auto';
6
+ export type ColorMode = 'light' | 'dark';
7
+
8
+ export const colorMode = deviceVar<ColorMode>('colorMode', {
9
+ defaultValue: 'dark',
10
+ });
11
+
12
+ export const colorModePreference = deviceVar<ColorModePreference>('colorModePreference', {
13
+ defaultValue: 'dark',
14
+ });
15
+
16
+ function applyColorMode(modePreference?: ColorModePreference): ColorMode {
17
+ if (!modePreference) {
18
+ modePreference = colorModePreference() || 'dark';
19
+ } else {
20
+ colorModePreference(modePreference);
21
+ }
22
+ let mode = colorMode();
23
+ if (modePreference === 'auto') {
24
+ const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
25
+ mode = isDarkMode ? 'dark' : 'light';
26
+ } else {
27
+ mode = modePreference;
28
+ }
29
+ document.documentElement.setAttribute('data-bs-theme', mode);
30
+ if (mode === 'light') {
31
+ document.body.style.backgroundColor = 'initial';
32
+ } else {
33
+ document.body.style.backgroundColor = 'rgb(33, 37, 41)';
34
+ }
35
+ colorMode(mode);
36
+ colorMode.notifySubscribers();
37
+ return mode;
38
+ }
39
+
40
+ colorModePreference.subscribe(newValue => applyColorMode(newValue));
41
+
42
+ export const ColorModeDropdown = () => {
43
+ const [modePreference] = useObservable(colorModePreference);
44
+
45
+ return (
46
+ <div className="dropdown">
47
+ <button className="btn btn-secondary dropdown-toggle" type="button" id="colorModeDropdown" data-bs-toggle="dropdown" aria-expanded="false">
48
+ Color Mode: {camelCaseToSpaces(modePreference)}
49
+ </button>
50
+ <ul className="dropdown-menu" aria-labelledby="colorModeDropdown">
51
+ <li><button className="dropdown-item" onClick={() => colorModePreference('auto')}>Auto {modePreference === 'auto' && '✓'}</button></li>
52
+ <li><button className="dropdown-item" onClick={() => colorModePreference('light')}>Light {modePreference === 'light' && '✓'}</button></li>
53
+ <li><button className="dropdown-item" onClick={() => colorModePreference('dark')}>Dark {modePreference === 'dark' && '✓'}</button></li>
54
+ </ul>
55
+ </div>
56
+ );
57
+ };
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import { packagesRootDir, reloadPackagesOnPageRefresh, rpcServerCalls } from "@peers-app/peers-sdk";
3
+ import { Tooltip } from '../../components/tooltip';
4
+ import { ColorModeDropdown } from './color-mode-dropdown';
5
+ import { Input } from '../../components/input';
6
+ import { useObservable } from '../../hooks';
7
+
8
+ export const SettingsPage: React.FC = () => {
9
+ return (
10
+ <div className='container-fluid'>
11
+ <ColorModeDropdown />
12
+ <PackagesRootDirectory />
13
+ <ReloadPackagesOnPageRefresh />
14
+ <ResetDeviceSyncInfos />
15
+ </div>
16
+ );
17
+ };
18
+
19
+ const PackagesRootDirectory: React.FC = () => {
20
+ return (
21
+ <div className='mt-3'>
22
+ <small>
23
+ Packages Directory:
24
+ <Tooltip
25
+ markdownContent={`Changing this will not effect existing packages.`}
26
+ />
27
+ </small>
28
+ <Input
29
+ value={packagesRootDir}
30
+ className='form-control'
31
+ />
32
+ </div>
33
+ );
34
+ };
35
+
36
+ const ReloadPackagesOnPageRefresh: React.FC = () => {
37
+ useObservable(reloadPackagesOnPageRefresh);
38
+ return (
39
+ <div>
40
+ <label htmlFor="isPrimary" className="form-label small mt-2 me-2">
41
+ Reload Packages on Page Load:
42
+ </label>
43
+ <input
44
+ type="checkbox"
45
+ checked={reloadPackagesOnPageRefresh()}
46
+ onChange={(e) => {
47
+ const checked = (e.target as HTMLInputElement).checked;
48
+ reloadPackagesOnPageRefresh(checked);
49
+ }}
50
+ />
51
+ <Tooltip
52
+ markdownContent={`Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.`}
53
+ />
54
+ </div>
55
+ );
56
+ }
57
+
58
+ const ResetDeviceSyncInfos: React.FC = () => {
59
+ return (
60
+ <div className='mt-3'>
61
+ <button
62
+ className='btn btn-secondary btn-sm ms-2'
63
+ onClick={async () => {
64
+ try {
65
+ await rpcServerCalls.resetAllDeviceSyncInfo();
66
+ alert('All device sync info has been reset. Syncing in progress...');
67
+ } catch (err) {
68
+ console.error('Error while resetting all device sync info', err);
69
+ }
70
+ }}
71
+ >
72
+ Reset All Device Sync Info
73
+ </button>
74
+ </div>
75
+ );
76
+ }