@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,186 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GlobalSearch = GlobalSearch;
37
+ const react_1 = __importStar(require("react"));
38
+ const hooks_1 = require("../../hooks");
39
+ const color_mode_dropdown_1 = require("../settings/color-mode-dropdown");
40
+ const tabs_state_1 = require("../../tabs-layout/tabs-state");
41
+ const mention_configs_1 = require("../../mention-configs");
42
+ function GlobalSearch() {
43
+ const [_colorMode] = (0, hooks_1.useObservable)(color_mode_dropdown_1.colorMode);
44
+ const [searchQuery, setSearchQuery] = (0, react_1.useState)('');
45
+ const [searchResults, setSearchResults] = (0, react_1.useState)([]);
46
+ const [isSearching, setIsSearching] = (0, react_1.useState)(false);
47
+ const inputRef = (0, react_1.useRef)(null);
48
+ const isDark = _colorMode === 'dark';
49
+ // Focus search input on mount
50
+ (0, react_1.useEffect)(() => {
51
+ if (inputRef.current) {
52
+ inputRef.current.focus();
53
+ }
54
+ }, []);
55
+ // Search configs with their display names
56
+ const searchConfigs = [
57
+ { config: mention_configs_1.toolMentionConfig, category: 'Tools', navigationPath: 'tools' },
58
+ { config: mention_configs_1.assistantMentionConfig, category: 'Assistants', navigationPath: 'assistants' },
59
+ { config: mention_configs_1.workflowMentionConfig, category: 'Workflows', navigationPath: 'workflows' },
60
+ { config: mention_configs_1.peerEventTypeMentionConfig, category: 'Events', navigationPath: 'events' },
61
+ { config: mention_configs_1.predicateMentionConfig, category: 'Predicates', navigationPath: 'predicates' },
62
+ { config: mention_configs_1.valueTypeMentionConfig, category: 'Types', navigationPath: 'peer-types' },
63
+ { config: mention_configs_1.userMentionConfig, category: 'Users', navigationPath: 'profile' },
64
+ ];
65
+ // Debounced search effect
66
+ (0, react_1.useEffect)(() => {
67
+ if (!searchQuery.trim()) {
68
+ setSearchResults([]);
69
+ return;
70
+ }
71
+ const timeoutId = setTimeout(async () => {
72
+ setIsSearching(true);
73
+ try {
74
+ // Search all entity types in parallel
75
+ const searchPromises = searchConfigs.map(async ({ config, category }) => {
76
+ try {
77
+ const items = await config.query(searchQuery);
78
+ if (items.length > 0) {
79
+ return { config, items, category };
80
+ }
81
+ return null;
82
+ }
83
+ catch (error) {
84
+ console.warn(`Search failed for ${category}:`, error);
85
+ return null;
86
+ }
87
+ });
88
+ const searchResults = await Promise.all(searchPromises);
89
+ const filteredResults = searchResults.filter(Boolean);
90
+ setSearchResults(filteredResults);
91
+ }
92
+ finally {
93
+ setIsSearching(false);
94
+ }
95
+ }, 300); // 300ms debounce
96
+ return () => clearTimeout(timeoutId);
97
+ }, [searchQuery]);
98
+ const handleItemClick = (result, item) => {
99
+ // Try using the config's onClick first
100
+ if (result.config.onClick) {
101
+ result.config.onClick(item);
102
+ return;
103
+ }
104
+ // Otherwise navigate to the appropriate list page
105
+ const configPath = searchConfigs.find(c => c.config === result.config)?.navigationPath;
106
+ if (configPath) {
107
+ if (configPath === 'profile') {
108
+ // Special case for users - just go to profile for now
109
+ (0, tabs_state_1.goToTabPath)('profile');
110
+ }
111
+ else {
112
+ // Navigate to the detail page if possible
113
+ (0, tabs_state_1.goToTabPath)(`${configPath}/${item.id}`);
114
+ }
115
+ }
116
+ };
117
+ const totalResults = searchResults.reduce((sum, result) => sum + result.items.length, 0);
118
+ return (react_1.default.createElement("div", { className: "container-fluid h-100 p-4", style: { maxHeight: '100vh', overflowY: 'auto' } },
119
+ react_1.default.createElement("div", { className: "mb-4" },
120
+ react_1.default.createElement("h1", { className: "h3 mb-3 d-flex align-items-center" },
121
+ react_1.default.createElement("i", { className: "bi-search me-3" }),
122
+ "Search Everything"),
123
+ react_1.default.createElement("div", { className: "position-relative" },
124
+ react_1.default.createElement("i", { className: "bi-search position-absolute", style: {
125
+ left: '16px',
126
+ top: '50%',
127
+ transform: 'translateY(-50%)',
128
+ color: '#6c757d',
129
+ zIndex: 1,
130
+ fontSize: '18px'
131
+ } }),
132
+ react_1.default.createElement("input", { ref: inputRef, type: "text", className: `form-control form-control-lg ${isDark ? 'bg-dark text-light border-secondary' : ''}`, placeholder: "Search across tools, assistants, workflows, events, and more...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), style: {
133
+ paddingLeft: '50px',
134
+ fontSize: '18px',
135
+ borderRadius: '12px',
136
+ backgroundColor: isDark ? '#343a40' : '#f8f9fa',
137
+ border: isDark ? '2px solid #495057' : '2px solid #dee2e6'
138
+ } }),
139
+ isSearching && (react_1.default.createElement("div", { className: "position-absolute", style: {
140
+ right: '16px',
141
+ top: '50%',
142
+ transform: 'translateY(-50%)'
143
+ } },
144
+ react_1.default.createElement("div", { className: "spinner-border spinner-border-sm text-muted" })))),
145
+ searchQuery && (react_1.default.createElement("div", { className: "mt-3 text-muted small" }, isSearching ? ('Searching...') : totalResults > 0 ? (`Found ${totalResults} result${totalResults !== 1 ? 's' : ''} across ${searchResults.length} categor${searchResults.length !== 1 ? 'ies' : 'y'}`) : searchQuery.trim() ? ('No results found') : null))),
146
+ searchQuery && !isSearching && (react_1.default.createElement("div", null, searchResults.length === 0 ? (react_1.default.createElement("div", { className: "text-center py-5" },
147
+ react_1.default.createElement("i", { className: "bi-search mb-3 d-block text-muted", style: { fontSize: '48px' } }),
148
+ react_1.default.createElement("h4", { className: "text-muted" }, "No results found"),
149
+ react_1.default.createElement("p", { className: "text-muted" }, "Try different keywords or check your spelling"))) : (react_1.default.createElement("div", null, searchResults.map((result) => (react_1.default.createElement("div", { key: result.category, className: "mb-5" },
150
+ react_1.default.createElement("div", { className: "d-flex align-items-center mb-3" },
151
+ react_1.default.createElement("i", { className: `${result.config.iconClass} me-3`, style: { fontSize: '20px', color: '#6c757d' } }),
152
+ react_1.default.createElement("h4", { className: "mb-0 me-3" }, result.category),
153
+ react_1.default.createElement("span", { className: "badge bg-secondary" }, result.items.length)),
154
+ react_1.default.createElement("div", { className: "row g-3" }, result.items.map((item) => (react_1.default.createElement("div", { key: item.id, className: "col-12 col-md-6 col-lg-4" },
155
+ react_1.default.createElement("div", { className: `card h-100 ${isDark ? 'bg-dark border-secondary' : 'bg-light'}`, style: {
156
+ cursor: 'pointer',
157
+ transition: 'all 0.15s ease',
158
+ borderRadius: '8px'
159
+ }, onClick: () => handleItemClick(result, item), onMouseEnter: (e) => {
160
+ e.currentTarget.style.transform = 'translateY(-2px)';
161
+ e.currentTarget.style.boxShadow = isDark
162
+ ? '0 4px 12px rgba(0,0,0,0.3)'
163
+ : '0 4px 12px rgba(0,0,0,0.1)';
164
+ }, onMouseLeave: (e) => {
165
+ e.currentTarget.style.transform = 'translateY(0)';
166
+ e.currentTarget.style.boxShadow = 'none';
167
+ } },
168
+ react_1.default.createElement("div", { className: "card-body p-3" },
169
+ react_1.default.createElement("div", { className: "d-flex align-items-start" },
170
+ react_1.default.createElement("i", { className: `${result.config.iconClass} me-3 mt-1`, style: {
171
+ fontSize: '16px',
172
+ color: isDark ? '#0d6efd' : '#0d6efd',
173
+ minWidth: '16px'
174
+ } }),
175
+ react_1.default.createElement("div", { className: "flex-grow-1" },
176
+ react_1.default.createElement("h6", { className: "card-title mb-1 fw-medium" }, item.name),
177
+ react_1.default.createElement("small", { className: "text-muted text-uppercase", style: { fontSize: '11px', letterSpacing: '0.5px' } }, result.category.slice(0, -1))),
178
+ react_1.default.createElement("i", { className: "bi-arrow-right text-muted", style: { fontSize: '12px' } }))))))))))))))),
179
+ !searchQuery && (react_1.default.createElement("div", { className: "text-center py-5" },
180
+ react_1.default.createElement("i", { className: "bi-search mb-3 d-block text-muted", style: { fontSize: '64px' } }),
181
+ react_1.default.createElement("h3", { className: "text-muted mb-3" }, "Search across everything"),
182
+ react_1.default.createElement("p", { className: "text-muted mb-4", style: { maxWidth: '400px', margin: '0 auto' } }, "Find tools, assistants, workflows, events, predicates, types, and users all in one place."),
183
+ react_1.default.createElement("div", { className: "d-flex flex-wrap justify-content-center gap-2" }, searchConfigs.map(({ config, category }) => (react_1.default.createElement("span", { key: category, className: `badge ${isDark ? 'bg-secondary' : 'bg-light text-dark'} px-3 py-2 d-flex align-items-center`, style: { fontSize: '12px' } },
184
+ react_1.default.createElement("i", { className: `${config.iconClass} me-2` }),
185
+ category))))))));
186
+ }
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export type ColorModePreference = 'light' | 'dark' | 'auto';
3
+ export type ColorMode = 'light' | 'dark';
4
+ export declare const colorMode: import("@peers-app/peers-sdk").PersistentVar<ColorMode>;
5
+ export declare const colorModePreference: import("@peers-app/peers-sdk").PersistentVar<ColorModePreference>;
6
+ export declare const ColorModeDropdown: () => React.JSX.Element;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ColorModeDropdown = exports.colorModePreference = exports.colorMode = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
9
+ const hooks_1 = require("../../hooks");
10
+ exports.colorMode = (0, peers_sdk_1.deviceVar)('colorMode', {
11
+ defaultValue: 'dark',
12
+ });
13
+ exports.colorModePreference = (0, peers_sdk_1.deviceVar)('colorModePreference', {
14
+ defaultValue: 'dark',
15
+ });
16
+ function applyColorMode(modePreference) {
17
+ if (!modePreference) {
18
+ modePreference = (0, exports.colorModePreference)() || 'dark';
19
+ }
20
+ else {
21
+ (0, exports.colorModePreference)(modePreference);
22
+ }
23
+ let mode = (0, exports.colorMode)();
24
+ if (modePreference === 'auto') {
25
+ const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
26
+ mode = isDarkMode ? 'dark' : 'light';
27
+ }
28
+ else {
29
+ mode = modePreference;
30
+ }
31
+ document.documentElement.setAttribute('data-bs-theme', mode);
32
+ if (mode === 'light') {
33
+ document.body.style.backgroundColor = 'initial';
34
+ }
35
+ else {
36
+ document.body.style.backgroundColor = 'rgb(33, 37, 41)';
37
+ }
38
+ (0, exports.colorMode)(mode);
39
+ exports.colorMode.notifySubscribers();
40
+ return mode;
41
+ }
42
+ exports.colorModePreference.subscribe(newValue => applyColorMode(newValue));
43
+ const ColorModeDropdown = () => {
44
+ const [modePreference] = (0, hooks_1.useObservable)(exports.colorModePreference);
45
+ return (react_1.default.createElement("div", { className: "dropdown" },
46
+ react_1.default.createElement("button", { className: "btn btn-secondary dropdown-toggle", type: "button", id: "colorModeDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false" },
47
+ "Color Mode: ",
48
+ (0, peers_sdk_1.camelCaseToSpaces)(modePreference)),
49
+ react_1.default.createElement("ul", { className: "dropdown-menu", "aria-labelledby": "colorModeDropdown" },
50
+ react_1.default.createElement("li", null,
51
+ react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('auto') },
52
+ "Auto ",
53
+ modePreference === 'auto' && '✓')),
54
+ react_1.default.createElement("li", null,
55
+ react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('light') },
56
+ "Light ",
57
+ modePreference === 'light' && '✓')),
58
+ react_1.default.createElement("li", null,
59
+ react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('dark') },
60
+ "Dark ",
61
+ modePreference === 'dark' && '✓')))));
62
+ };
63
+ exports.ColorModeDropdown = ColorModeDropdown;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SettingsPage: React.FC;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SettingsPage = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
9
+ const tooltip_1 = require("../../components/tooltip");
10
+ const color_mode_dropdown_1 = require("./color-mode-dropdown");
11
+ const input_1 = require("../../components/input");
12
+ const hooks_1 = require("../../hooks");
13
+ const SettingsPage = () => {
14
+ return (react_1.default.createElement("div", { className: 'container-fluid' },
15
+ react_1.default.createElement(color_mode_dropdown_1.ColorModeDropdown, null),
16
+ react_1.default.createElement(PackagesRootDirectory, null),
17
+ react_1.default.createElement(ReloadPackagesOnPageRefresh, null),
18
+ react_1.default.createElement(ResetDeviceSyncInfos, null)));
19
+ };
20
+ exports.SettingsPage = SettingsPage;
21
+ const PackagesRootDirectory = () => {
22
+ return (react_1.default.createElement("div", { className: 'mt-3' },
23
+ react_1.default.createElement("small", null,
24
+ "Packages Directory:",
25
+ react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })),
26
+ react_1.default.createElement(input_1.Input, { value: peers_sdk_1.packagesRootDir, className: 'form-control' })));
27
+ };
28
+ const ReloadPackagesOnPageRefresh = () => {
29
+ (0, hooks_1.useObservable)(peers_sdk_1.reloadPackagesOnPageRefresh);
30
+ return (react_1.default.createElement("div", null,
31
+ react_1.default.createElement("label", { htmlFor: "isPrimary", className: "form-label small mt-2 me-2" }, "Reload Packages on Page Load:"),
32
+ react_1.default.createElement("input", { type: "checkbox", checked: (0, peers_sdk_1.reloadPackagesOnPageRefresh)(), onChange: (e) => {
33
+ const checked = e.target.checked;
34
+ (0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
35
+ } }),
36
+ react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })));
37
+ };
38
+ const ResetDeviceSyncInfos = () => {
39
+ return (react_1.default.createElement("div", { className: 'mt-3' },
40
+ react_1.default.createElement("button", { className: 'btn btn-secondary btn-sm ms-2', onClick: async () => {
41
+ try {
42
+ await peers_sdk_1.rpcServerCalls.resetAllDeviceSyncInfo();
43
+ alert('All device sync info has been reset. Syncing in progress...');
44
+ }
45
+ catch (err) {
46
+ console.error('Error while resetting all device sync info', err);
47
+ }
48
+ } }, "Reset All Device Sync Info")));
49
+ };
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const SetupUser: () => React.JSX.Element;
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SetupUser = void 0;
37
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
38
+ const react_1 = __importStar(require("react"));
39
+ const input_1 = require("../components/input");
40
+ const markdown_with_mentions_1 = require("../components/markdown-with-mentions");
41
+ const tooltip_1 = require("../components/tooltip");
42
+ const globals_1 = require("../globals");
43
+ async function sendNewUserMessage(userId) {
44
+ const user = await (0, peers_sdk_1.Users)().get(userId);
45
+ if (!user) {
46
+ throw new Error('user not found');
47
+ }
48
+ const primaryAssistant = await (0, peers_sdk_1.getPrimaryAssistant)();
49
+ const message = {
50
+ messageId: (0, peers_sdk_1.newid)(),
51
+ message: [
52
+ `Hi, ${user.name}! Welcome to Peers! I'm your primary AI assistant.`,
53
+ "\n\n",
54
+ "If you have any questions, just ask! I'm here to help.",
55
+ // `\nRemind Mark to add some Getting-Started tasks that I can work through with you.`,
56
+ ].join(' '),
57
+ userId: user.userId,
58
+ assistantId: primaryAssistant?.assistantId,
59
+ channelId: user.userId,
60
+ createdAt: new Date(),
61
+ };
62
+ await (0, peers_sdk_1.Messages)().insert(message);
63
+ (0, globals_1.openThread)(message.messageId);
64
+ }
65
+ const SetupUser = () => {
66
+ const [username, setUsername] = (0, react_1.useState)('');
67
+ let [userId, setUserId] = (0, react_1.useState)('');
68
+ const [secretKey, setSecretKey] = (0, react_1.useState)('');
69
+ const [existingUser, setExistingUser] = (0, react_1.useState)(false);
70
+ const [registerAccount, setRegisterAccount] = (0, react_1.useState)(true);
71
+ const [showUserKeys, setShowUserKeys] = (0, react_1.useState)(false);
72
+ async function onSubmit(e) {
73
+ e.preventDefault();
74
+ let keys;
75
+ if (existingUser) {
76
+ if (!userId || !secretKey) {
77
+ confirm('Please enter a userId and secret key');
78
+ return;
79
+ }
80
+ if ((0, peers_sdk_1.isid)(userId) !== true) {
81
+ confirm('Invalid userId');
82
+ return;
83
+ }
84
+ try {
85
+ keys = (0, peers_sdk_1.loadKeys)(secretKey);
86
+ const msg = (0, peers_sdk_1.newid)();
87
+ const msgSigned = (0, peers_sdk_1.signMessageWithSecretKey)(msg, keys.secretKey);
88
+ const msgOpened = (0, peers_sdk_1.openMessageWithPublicKey)(msgSigned, keys.publicKey);
89
+ if (msg !== msgOpened) {
90
+ throw new Error('signed message does not match');
91
+ }
92
+ }
93
+ catch (e) {
94
+ confirm('Invalid secret key');
95
+ return;
96
+ }
97
+ }
98
+ else {
99
+ keys = (0, peers_sdk_1.newKeys)();
100
+ }
101
+ const _userId = userId || globals_1.me.userId;
102
+ let _me = await (0, peers_sdk_1.Users)().get(_userId);
103
+ const name = username.trim() || "Unnamed_1";
104
+ if (!_me) {
105
+ _me = {
106
+ userId: _userId,
107
+ name,
108
+ publicKey: keys.publicKey,
109
+ publicBoxKey: keys.publicBoxKey,
110
+ };
111
+ await (0, peers_sdk_1.Users)().insert(_me);
112
+ }
113
+ else {
114
+ _me.name = name;
115
+ _me.publicKey = keys.publicKey;
116
+ _me.publicBoxKey = keys.publicBoxKey;
117
+ await (0, peers_sdk_1.Users)().update(_me);
118
+ }
119
+ (0, peers_sdk_1.myUserId)(_userId);
120
+ const result = await peers_sdk_1.rpcServerCalls.setSecretKey(keys.secretKey).catch(err => {
121
+ confirm('Error setting user id and secret key: ' + String(err).replaceAll('\n', ' '));
122
+ return err;
123
+ });
124
+ if (result) {
125
+ return;
126
+ }
127
+ // if changing user then use new device id
128
+ (0, peers_sdk_1.thisDeviceId)((0, peers_sdk_1.newid)());
129
+ if (existingUser) {
130
+ (0, globals_1.mainContentPath)('profile');
131
+ setTimeout(() => {
132
+ (0, globals_1.mainContentPath)('profile');
133
+ window.location.reload();
134
+ }, 100);
135
+ }
136
+ else {
137
+ setUserId(_userId);
138
+ setSecretKey(keys.secretKey);
139
+ setShowUserKeys(true);
140
+ }
141
+ }
142
+ if (showUserKeys) {
143
+ return react_1.default.createElement(ShowUserKeys, { userId: userId, secretKey: secretKey });
144
+ }
145
+ return (react_1.default.createElement("div", { className: 'container-fluid' },
146
+ react_1.default.createElement("div", { className: "position-relative", style: {
147
+ height: '100vh',
148
+ } },
149
+ react_1.default.createElement("div", { className: "position-absolute start-50 translate-middle bg-body-tertiary", style: {
150
+ width: '400px',
151
+ padding: '20px',
152
+ border: '1px solid #ccc',
153
+ borderRadius: '5px',
154
+ top: '350px',
155
+ } },
156
+ react_1.default.createElement("h3", { className: 'text-center' }, "Setup User"),
157
+ react_1.default.createElement("form", { onSubmit: onSubmit },
158
+ react_1.default.createElement("label", null, "Display Name"),
159
+ react_1.default.createElement(tooltip_1.Tooltip, { positions: ['top', 'bottom', 'right', 'left'], markdownContent: "This can be whatever you want it to be. You can change it any time." }),
160
+ react_1.default.createElement("input", { id: "display-name", type: 'text', className: 'form-control', value: username, onChange: (e) => setUsername(e.target.value) }),
161
+ react_1.default.createElement("div", { className: "mt-2" },
162
+ react_1.default.createElement("label", null, "Existing User"),
163
+ react_1.default.createElement(tooltip_1.Tooltip, { positions: ['top', 'bottom', 'right', 'left'], markdownContent: "Check this if you have already have an account and need to enter your existing `userId` and `secretKey`." }),
164
+ "\u00A0",
165
+ react_1.default.createElement("input", { type: "checkbox", checked: existingUser, onChange: (e) => {
166
+ const checked = e.target.checked;
167
+ setExistingUser(checked);
168
+ if (checked) {
169
+ setUserId('');
170
+ setSecretKey('');
171
+ }
172
+ } })),
173
+ existingUser && (react_1.default.createElement(react_1.default.Fragment, null,
174
+ react_1.default.createElement("br", null),
175
+ react_1.default.createElement("label", null, "User Id"),
176
+ react_1.default.createElement(tooltip_1.Tooltip, { positions: ['top', 'bottom', 'right', 'left'], markdownContent: "The user id that was generated when you first setup your account." }),
177
+ react_1.default.createElement("input", { id: "user-id", type: "text", className: 'form-control', value: userId, onChange: (e) => setUserId(e.target.value), disabled: !existingUser }),
178
+ react_1.default.createElement("br", null),
179
+ react_1.default.createElement("label", null, "Secret Key"),
180
+ react_1.default.createElement(tooltip_1.Tooltip, { positions: ['top', 'bottom', 'right', 'left'], markdownContent: "The secret key for the public key that is currently associated with this account." }),
181
+ react_1.default.createElement("input", { id: "secret-key", type: 'password', className: 'form-control', value: secretKey, disabled: !existingUser, onChange: (e) => setSecretKey(e.target.value) }))),
182
+ react_1.default.createElement("div", { className: "mt-2" },
183
+ react_1.default.createElement("label", null, "Sync with Peers"),
184
+ react_1.default.createElement(tooltip_1.Tooltip, { positions: ['top', 'bottom', 'right', 'left'], markdownContent: [
185
+ "### PLEASE READ",
186
+ '\n',
187
+ "Leave this checked to register your `userId` and `publicKey` with [https://peers.app](https://peers.app) server.",
188
+ "\n\n**No other data is sent to the server.**\n\n",
189
+ "This is not required to use Peers but it is required to use the built-in network services.",
190
+ "Additionally this will ensure that your `userId` is not used publicly by someone else.",
191
+ "\n\n",
192
+ "**This is _highly_ recommended** but if your goal is absolute privacy, uncheck this.",
193
+ "\n\n",
194
+ "If you choose to not do this now, you can still do it later from the settings screen.",
195
+ ].join(' ') }),
196
+ "\u00A0",
197
+ react_1.default.createElement("input", { type: "checkbox", checked: registerAccount, onChange: (e) => setRegisterAccount(e.target.checked) })),
198
+ react_1.default.createElement("button", { className: 'btn btn-primary float-end', onClick: e => onSubmit(e) }, "Submit"))))));
199
+ };
200
+ exports.SetupUser = SetupUser;
201
+ const ShowUserKeys = (props) => {
202
+ const { userId, secretKey } = props;
203
+ const [secretKeySaved, setSecretKeySaved] = (0, react_1.useState)(false);
204
+ async function continueToApp() {
205
+ await sendNewUserMessage(userId);
206
+ window.location.reload();
207
+ }
208
+ const secretKeyExplainer = [
209
+ "**`NEVER SHARE THIS KEY WITH ANYONE!`**",
210
+ "\n\n",
211
+ "If this key is compromised another user can permanently take over your account.",
212
+ "\n\n",
213
+ "This key is used to:",
214
+ "\n - Sign messages so that other users can verify they were sent from you.",
215
+ "\n - Decrypt boxed data that was encrypted with your public box key.",
216
+ "\n - This allows other users to send data to you securely through public channels.",
217
+ "\n - Encrypt your own private data so that only you can decrypt it.",
218
+ "\n\n",
219
+ "Unlike a password, this key is never sent to the server and is entirely in your control.",
220
+ "This is the foundation of your account's security.",
221
+ "If you lose this key you will lose access to your account.",
222
+ "If this key is compromised your account will be too and you will be putting any groups you are a part of at risk.",
223
+ "\n\n",
224
+ "Since the secret key is never sent to the server, if you lose it you'll lose access to your account.",
225
+ "It is highly recommend to store these in a password manager like [1Password](https://1password.com).",
226
+ ].join(' ');
227
+ return (react_1.default.createElement("div", { className: 'container-fluid' },
228
+ react_1.default.createElement("div", { className: "position-relative", style: {
229
+ height: '100vh',
230
+ } },
231
+ react_1.default.createElement("div", { className: "position-absolute top-50 start-50 translate-middle bg-body-tertiary", style: {
232
+ width: '600px',
233
+ padding: '20px',
234
+ border: '1px solid #ccc',
235
+ borderRadius: '5px',
236
+ } },
237
+ react_1.default.createElement("h3", { className: 'text-center' }, "User Created!"),
238
+ react_1.default.createElement("small", null, "User Id:"),
239
+ react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." }),
240
+ react_1.default.createElement("button", { className: 'btn btn-secondary-outline', onClick: () => {
241
+ navigator.clipboard.writeText(userId);
242
+ }, title: "Copy User Id to Clipboard" },
243
+ react_1.default.createElement("i", { className: "bi bi-copy" })),
244
+ react_1.default.createElement(input_1.Input, { value: globals_1.me.userId, className: "form-control mb-3", disabled: true }),
245
+ react_1.default.createElement("small", null, "Secret Key:"),
246
+ react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: secretKeyExplainer }),
247
+ react_1.default.createElement("button", { className: 'btn btn-secondary-outline', onClick: () => {
248
+ navigator.clipboard.writeText(props.secretKey);
249
+ }, title: "Copy Secret Key to Clipboard" },
250
+ react_1.default.createElement("i", { className: "bi bi-copy" })),
251
+ react_1.default.createElement("pre", null, secretKey),
252
+ react_1.default.createElement("small", null,
253
+ react_1.default.createElement(markdown_with_mentions_1.MarkdownWithMentions, { content: [
254
+ "**`IMPORTANT:`**",
255
+ "**Copy your User Id and Secret Key to a secure location.**",
256
+ "\n\n",
257
+ "You won't be able to view this key again after you continue.",
258
+ "\n\n",
259
+ "It is highly recommended to store these in a password manager like [1Password](https://1password.com).",
260
+ "\n\n",
261
+ "Unlike a password, this key is never sent to the server and is entirely in your control.",
262
+ "If you lose this key you will lose access to your account and data.",
263
+ ].join(' ') })),
264
+ react_1.default.createElement("div", null,
265
+ react_1.default.createElement("label", { style: { textDecoration: 'underline' } }, "I Have Saved My Secret Key"),
266
+ " \u00A0",
267
+ react_1.default.createElement("input", { type: "checkbox", checked: secretKeySaved, onChange: (e) => setSecretKeySaved(e.target.checked) }),
268
+ "\u00A0 \u00A0",
269
+ react_1.default.createElement("button", { disabled: !secretKeySaved, className: (secretKeySaved ? 'btn btn-primary' : 'btn btn-secondary') + ' float-end', onClick: continueToApp }, "Continue"))))));
270
+ };
@@ -0,0 +1,5 @@
1
+ import { IDoc, ITool } from "@peers-app/peers-sdk";
2
+ import React from "react";
3
+ export declare const ToolCode: (props: {
4
+ tool: IDoc<ITool>;
5
+ }) => React.JSX.Element;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ToolCode = void 0;
7
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
8
+ const react_1 = __importDefault(require("react"));
9
+ const editor_inline_1 = require("../../components/markdown-editor/editor-inline");
10
+ const ToolCode = (props) => {
11
+ const { tool } = props;
12
+ let code = tool.qs.code() ?? '';
13
+ const toolCodeObs = (0, peers_sdk_1.computed)({
14
+ read: () => {
15
+ if (!code.startsWith('```')) {
16
+ code = '```javascript\n' + code + '\n```';
17
+ }
18
+ return code;
19
+ },
20
+ write: (newCode) => {
21
+ code = newCode;
22
+ if (code.startsWith('```javascript\n')) {
23
+ code = code.replace('```javascript\n', '');
24
+ code = code.replace('\n```', '');
25
+ }
26
+ tool.qs.code(code);
27
+ }
28
+ });
29
+ return (react_1.default.createElement("div", null,
30
+ react_1.default.createElement(editor_inline_1.MarkdownEditorInline, { value: toolCodeObs, hideToolbar: true })));
31
+ };
32
+ exports.ToolCode = ToolCode;
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface IToolDetailsProps {
3
+ toolId: string;
4
+ }
5
+ export declare const ToolDetails: (props: IToolDetailsProps) => React.JSX.Element;
6
+ export {};