@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,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadAllRoutes = exports.allRoutesLoaded = exports.allPackages = void 0;
4
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
5
+ require("../ui-defaults");
6
+ exports.allPackages = (0, peers_sdk_1.observable)([]);
7
+ exports.allRoutesLoaded = (0, peers_sdk_1.observable)(false);
8
+ (0, peers_sdk_1.Packages)().dataChanged.subscribe(async (evt) => {
9
+ if (!(0, exports.allRoutesLoaded)())
10
+ return;
11
+ const _allPackages = (0, exports.allPackages)();
12
+ if (evt.op === 'insert') {
13
+ _allPackages.push(evt.dataObject);
14
+ }
15
+ else if (evt.op === 'delete') {
16
+ let idx = (0, exports.allPackages)().findIndex(p => p.packageId === evt.dataObject.packageId);
17
+ if (idx >= 0) {
18
+ _allPackages.splice(idx, 1);
19
+ }
20
+ }
21
+ else {
22
+ let idx = (0, exports.allPackages)().findIndex(p => p.packageId === evt.dataObject.packageId);
23
+ if (idx >= 0) {
24
+ _allPackages[idx] = evt.dataObject;
25
+ }
26
+ }
27
+ (0, exports.allPackages)([..._allPackages]);
28
+ });
29
+ const loadAllRoutes = async () => {
30
+ if ((0, exports.allRoutesLoaded)())
31
+ return;
32
+ // Filter packages that have UI bundles (routesBundleFileId or uiBundleFileId)
33
+ let packagesWithUI = await (0, peers_sdk_1.Packages)().list({
34
+ disabled: { $ne: true },
35
+ routesBundleFileId: { $exists: true },
36
+ });
37
+ (0, exports.allPackages)(packagesWithUI);
38
+ await Promise.all(packagesWithUI.map(pkg => loadRoutesBundle(pkg)));
39
+ (0, exports.allRoutesLoaded)(true);
40
+ return true;
41
+ };
42
+ exports.loadAllRoutes = loadAllRoutes;
43
+ const routeLoadingPromises = {};
44
+ function loadRoutesBundle(pkg, forceRefresh) {
45
+ // Dynamically import the bundle
46
+ let importPromise = routeLoadingPromises[pkg.packageId];
47
+ if (!importPromise || forceRefresh) {
48
+ console.log(`loading routes bundle for ${pkg.name}`);
49
+ // just importing the module (running it) should be registering all of the package UIs with the Peers App runtime
50
+ importPromise = (async () => {
51
+ try {
52
+ while (!window.registerPeersUIRoute) {
53
+ console.log(`waiting for registerPeersUIRoute to be defined on the window object`);
54
+ await new Promise((resolve) => setTimeout(resolve, 20));
55
+ }
56
+ let bundleCode = '';
57
+ if (pkg.routesBundleFileId) {
58
+ bundleCode = await peers_sdk_1.rpcServerCalls.getFileContents(pkg.routesBundleFileId);
59
+ }
60
+ if (bundleCode) {
61
+ const exportRoutes = (peerRoutes) => {
62
+ peerRoutes.routes.forEach(route => {
63
+ // TODO maybe add package that this came from
64
+ window.registerPeersUIRoute(route);
65
+ });
66
+ };
67
+ const bundleFunction = new Function('exportRoutes', bundleCode);
68
+ bundleFunction(exportRoutes);
69
+ return {};
70
+ }
71
+ else {
72
+ console.warn(`Routes bundle file not found for ${pkg.name} (fileId: ${pkg.routesBundleFileId})`);
73
+ }
74
+ return null;
75
+ }
76
+ catch (err) {
77
+ console.error(`Error while loading routes bundle for ${pkg.name}`, err);
78
+ return null;
79
+ }
80
+ })();
81
+ routeLoadingPromises[pkg.packageId] = importPromise;
82
+ }
83
+ return importPromise;
84
+ }
85
+ const reloadPackage = (0, peers_sdk_1.debounceByArgs)(async (packageId) => {
86
+ const pkg = await (0, peers_sdk_1.Packages)().get(packageId);
87
+ if (pkg) {
88
+ await loadRoutesBundle(pkg, true);
89
+ }
90
+ }, 200);
91
+ (0, peers_sdk_1.Packages)().dataChanged.subscribe(evt => {
92
+ const pkg = evt.dataObject;
93
+ const loadingPromise = routeLoadingPromises[pkg.packageId];
94
+ if (!loadingPromise)
95
+ return;
96
+ reloadPackage(pkg.packageId);
97
+ });
@@ -0,0 +1,18 @@
1
+ import { IPeersUIRoute, UIContext } from "@peers-app/peers-sdk";
2
+ import React from "react";
3
+ import "../ui-defaults";
4
+ interface IProps extends UIContext {
5
+ props: Record<string, any>;
6
+ }
7
+ export declare const UIRouter: (props: IProps) => React.JSX.Element | undefined;
8
+ export declare const peersSystemPackageId = "000peers0system000package";
9
+ /**
10
+ * This is meant to make it easy to register components that are internal to peers
11
+ */
12
+ export declare function registerInternalPeersUI(props: {
13
+ component: React.ComponentType<any>;
14
+ propsSchema?: any;
15
+ routes?: Omit<IPeersUIRoute, 'peersUIId' | 'packageId'>[];
16
+ peersUIId?: string;
17
+ }): Promise<void>;
18
+ export {};
@@ -0,0 +1,481 @@
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.peersSystemPackageId = exports.UIRouter = void 0;
37
+ exports.registerInternalPeersUI = registerInternalPeersUI;
38
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
39
+ const lodash_1 = require("lodash");
40
+ const react_1 = __importStar(require("react"));
41
+ const loading_indicator_1 = require("../components/loading-indicator");
42
+ const globals_1 = require("../globals");
43
+ const hooks_1 = require("../hooks");
44
+ require("../ui-defaults");
45
+ const routes_loader_1 = require("./routes-loader");
46
+ const peersUIs = {};
47
+ class UIErrorBoundary extends react_1.Component {
48
+ constructor(props) {
49
+ super(props);
50
+ this.state = { hasError: false, error: null, errorInfo: null };
51
+ }
52
+ static getDerivedStateFromError(error) {
53
+ return { hasError: true, error, errorInfo: null };
54
+ }
55
+ componentDidCatch(error, errorInfo) {
56
+ console.error('UIErrorBoundary caught an error:', error, errorInfo);
57
+ this.setState({
58
+ error,
59
+ errorInfo,
60
+ });
61
+ }
62
+ render() {
63
+ if (this.state.hasError) {
64
+ const { peersUIId, packageName, componentName } = this.props;
65
+ const { error, errorInfo } = this.state;
66
+ return (react_1.default.createElement("div", { style: {
67
+ padding: '20px',
68
+ border: '2px solid #ff6b6b',
69
+ borderRadius: '8px',
70
+ backgroundColor: '#fff5f5',
71
+ color: '#721c24',
72
+ fontFamily: 'monospace',
73
+ margin: '10px 0'
74
+ } },
75
+ react_1.default.createElement("h3", { style: { color: '#c53030', marginTop: 0 } }, "UI Component Error"),
76
+ react_1.default.createElement("div", { style: { marginBottom: '15px' } },
77
+ peersUIId && react_1.default.createElement("div", null,
78
+ react_1.default.createElement("strong", null, "Peers UI ID:"),
79
+ " ",
80
+ peersUIId),
81
+ packageName && react_1.default.createElement("div", null,
82
+ react_1.default.createElement("strong", null, "Package:"),
83
+ " ",
84
+ packageName),
85
+ componentName && react_1.default.createElement("div", null,
86
+ react_1.default.createElement("strong", null, "Component:"),
87
+ " ",
88
+ componentName)),
89
+ react_1.default.createElement("details", { style: { marginBottom: '15px' } },
90
+ react_1.default.createElement("summary", { style: { cursor: 'pointer', fontWeight: 'bold', marginBottom: '10px' } }, "Error Details"),
91
+ react_1.default.createElement("div", { style: {
92
+ backgroundColor: '#fed7d7',
93
+ padding: '10px',
94
+ borderRadius: '4px',
95
+ whiteSpace: 'pre-wrap',
96
+ overflow: 'auto',
97
+ maxHeight: '200px'
98
+ } },
99
+ react_1.default.createElement("strong", null, "Error:"),
100
+ " ",
101
+ error?.message || 'Unknown error',
102
+ error?.stack && (react_1.default.createElement(react_1.default.Fragment, null,
103
+ react_1.default.createElement("br", null),
104
+ react_1.default.createElement("br", null),
105
+ react_1.default.createElement("strong", null, "Stack Trace:"),
106
+ react_1.default.createElement("br", null),
107
+ error.stack)))),
108
+ errorInfo && (react_1.default.createElement("details", null,
109
+ react_1.default.createElement("summary", { style: { cursor: 'pointer', fontWeight: 'bold', marginBottom: '10px' } }, "Component Stack"),
110
+ react_1.default.createElement("div", { style: {
111
+ backgroundColor: '#fed7d7',
112
+ padding: '10px',
113
+ borderRadius: '4px',
114
+ whiteSpace: 'pre-wrap',
115
+ overflow: 'auto',
116
+ maxHeight: '200px'
117
+ } }, errorInfo.componentStack))),
118
+ react_1.default.createElement("button", { onClick: () => this.setState({ hasError: false, error: null, errorInfo: null }), style: {
119
+ marginTop: '15px',
120
+ padding: '8px 16px',
121
+ backgroundColor: '#c53030',
122
+ color: 'white',
123
+ border: 'none',
124
+ borderRadius: '4px',
125
+ cursor: 'pointer'
126
+ } }, "Try Again")));
127
+ }
128
+ return this.props.children;
129
+ }
130
+ }
131
+ const UIRouter = (props) => {
132
+ let matchingRoute;
133
+ const allRoutes = _window.getPeersUIRoutes();
134
+ const filteredRoutes = allRoutes.filter(r => {
135
+ if (props.uiEditMode && props.uiEditMode !== '*' && r.uiEditMode !== '*' && r.uiEditMode !== props.uiEditMode)
136
+ return false;
137
+ if (props.uiCategory && props.uiCategory !== '*' && r.uiCategory !== '*' && r.uiCategory !== props.uiCategory)
138
+ return false;
139
+ if (props.uiSubcategory && props.uiSubcategory !== '*' && r.uiSubcategory !== '*' && r.uiSubcategory !== props.uiSubcategory)
140
+ return false;
141
+ return true;
142
+ });
143
+ const context = {
144
+ ...props,
145
+ path: props.path || (0, globals_1.mainContentPath)(),
146
+ };
147
+ for (const route of filteredRoutes) {
148
+ // if (route.path && !context.path.startsWith(route.path)) continue;
149
+ // <todo> test this
150
+ if (route.path) {
151
+ // since `isMatch` can already be used to match the path, this might be overkill
152
+ // but if you just need a simple regex match this makes it nice instead of having to declare a whole function
153
+ const match = route.path.match(/^\/(.+)\/([gimsuy]{0,6})$/);
154
+ if (match) {
155
+ const [, pattern, flags] = match;
156
+ try {
157
+ const regex = new RegExp(pattern, flags);
158
+ if (!regex.test(context.path))
159
+ continue;
160
+ }
161
+ catch {
162
+ // Invalid regex → treat as plain prefix
163
+ if (!context.path.startsWith(route.path))
164
+ continue;
165
+ }
166
+ }
167
+ else {
168
+ // TODO treating path as a prefix is confusing.
169
+ // Now that we have regex matching, we should treat it as exact match if it's not a regex
170
+ if (!context.path.startsWith(route.path))
171
+ continue;
172
+ }
173
+ }
174
+ // </todo>
175
+ if (!route.propsSchema || route.propsSchema.safeParse(props.props).success) {
176
+ if (!route.isMatch || route.isMatch(props.props, context)) {
177
+ matchingRoute = route;
178
+ break;
179
+ }
180
+ }
181
+ }
182
+ if (!matchingRoute) {
183
+ return undefined;
184
+ }
185
+ return UILoader({ peersUIId: matchingRoute.peersUIId, props: props.props });
186
+ };
187
+ exports.UIRouter = UIRouter;
188
+ const UILoader = (args) => {
189
+ const { props, peersUIId } = args;
190
+ const [lastReloadTime] = (0, hooks_1.useObservable)(globals_1.packageReloaded);
191
+ args.props.__lastPackageReload = lastReloadTime;
192
+ // check if peersUIId maps to an in-memory react component
193
+ const peersUI = peersUIs[peersUIId];
194
+ if (peersUI?.content) {
195
+ const parseResult = peersUI.propsSchema.safeParse(props);
196
+ if (!parseResult.success) {
197
+ console.error('props did not match schema', { props, schema: peersUI.propsSchema, errors: parseResult.error });
198
+ return (react_1.default.createElement("div", null,
199
+ react_1.default.createElement("pre", null,
200
+ "Peers UI could not be loaded ",
201
+ react_1.default.createElement("br", null),
202
+ "peersUIId: ",
203
+ peersUI.peersUIId,
204
+ " ",
205
+ react_1.default.createElement("br", null),
206
+ "Component name: ",
207
+ peersUI.content?.name,
208
+ " ",
209
+ react_1.default.createElement("br", null),
210
+ "Props did not match schema ",
211
+ react_1.default.createElement("br", null),
212
+ "Errors: ",
213
+ JSON.stringify(parseResult.error, null, 2),
214
+ " ",
215
+ react_1.default.createElement("br", null),
216
+ react_1.default.createElement("br", null),
217
+ "Props ",
218
+ JSON.stringify((0, peers_sdk_1.toJSON)(props), null, 2),
219
+ react_1.default.createElement("br", null))));
220
+ }
221
+ const Component = peersUI.content;
222
+ return (react_1.default.createElement(UIErrorBoundary, { peersUIId: peersUIId, componentName: peersUI.content?.name },
223
+ react_1.default.createElement(Component, { ...args.props })));
224
+ }
225
+ return react_1.default.createElement(UIAsyncLoader, { ...args });
226
+ };
227
+ const uiLoadingPromises = {};
228
+ function loadUIBundle(pkg, forceRefresh) {
229
+ // Dynamically import the bundle
230
+ let importPromise = uiLoadingPromises[pkg.packageId];
231
+ if (!importPromise || forceRefresh) {
232
+ console.log(`loading ui bundle for ${pkg.name}`);
233
+ importPromise = new Promise(async (resolve, reject) => {
234
+ try {
235
+ let bundleCode = '';
236
+ if (pkg.uiBundleFileId) {
237
+ bundleCode = await peers_sdk_1.rpcServerCalls.getFileContents(pkg.uiBundleFileId);
238
+ }
239
+ if (bundleCode) {
240
+ const exportUIs = (peerUIs) => {
241
+ // TODO maybe add packageId that this came from
242
+ peerUIs?.uis?.forEach(ui => {
243
+ peersUIs[ui.peersUIId] = ui;
244
+ });
245
+ };
246
+ const bundleFunction = new Function('exportUIs', bundleCode);
247
+ await bundleFunction(exportUIs);
248
+ }
249
+ resolve();
250
+ }
251
+ catch (err) {
252
+ console.error(`Error while loading ui module for ${pkg.name}`, err);
253
+ reject(err);
254
+ }
255
+ });
256
+ uiLoadingPromises[pkg.packageId] = importPromise;
257
+ }
258
+ return importPromise;
259
+ }
260
+ const UIAsyncLoader = (props) => {
261
+ const { peersUIId } = props;
262
+ const [loaded, setLoaded] = react_1.default.useState(false);
263
+ const [loadError, setLoadError] = react_1.default.useState(null);
264
+ const allRoutes = _window.getPeersUIRoutes();
265
+ const uiPackageId = allRoutes.find(r => r.peersUIId === peersUIId)?.packageId;
266
+ (0, hooks_1.useObservable)(routes_loader_1.allPackages);
267
+ const pkg = (0, routes_loader_1.allPackages)().find(p => p.packageId === uiPackageId);
268
+ (0, react_1.useEffect)(() => {
269
+ if (!pkg)
270
+ return;
271
+ setLoadError(null);
272
+ loadUIBundle(pkg)
273
+ .then(() => setLoaded(true))
274
+ .catch((error) => {
275
+ console.error(`Failed to load UI bundle for package ${pkg.name}:`, error);
276
+ setLoadError(error);
277
+ });
278
+ }, [pkg?.packageId]);
279
+ if (!pkg) {
280
+ return react_1.default.createElement("div", null,
281
+ "Could not find package that owns peersUIId ",
282
+ peersUIId);
283
+ }
284
+ if (loadError) {
285
+ return (react_1.default.createElement("div", { style: {
286
+ padding: '20px',
287
+ border: '2px solid #ff6b6b',
288
+ borderRadius: '8px',
289
+ backgroundColor: '#fff5f5',
290
+ color: '#721c24',
291
+ fontFamily: 'monospace',
292
+ margin: '10px 0'
293
+ } },
294
+ react_1.default.createElement("h3", { style: { color: '#c53030', marginTop: 0 } }, "Bundle Loading Error"),
295
+ react_1.default.createElement("div", { style: { marginBottom: '15px' } },
296
+ react_1.default.createElement("div", null,
297
+ react_1.default.createElement("strong", null, "Peers UI ID:"),
298
+ " ",
299
+ peersUIId),
300
+ react_1.default.createElement("div", null,
301
+ react_1.default.createElement("strong", null, "Package:"),
302
+ " ",
303
+ pkg.name),
304
+ react_1.default.createElement("div", null,
305
+ react_1.default.createElement("strong", null, "Package ID:"),
306
+ " ",
307
+ pkg.packageId)),
308
+ react_1.default.createElement("details", { style: { marginBottom: '15px' } },
309
+ react_1.default.createElement("summary", { style: { cursor: 'pointer', fontWeight: 'bold', marginBottom: '10px' } }, "Error Details"),
310
+ react_1.default.createElement("div", { style: {
311
+ backgroundColor: '#fed7d7',
312
+ padding: '10px',
313
+ borderRadius: '4px',
314
+ whiteSpace: 'pre-wrap',
315
+ overflow: 'auto',
316
+ maxHeight: '200px'
317
+ } },
318
+ react_1.default.createElement("strong", null, "Error:"),
319
+ " ",
320
+ loadError.message || 'Unknown error',
321
+ loadError.stack && (react_1.default.createElement(react_1.default.Fragment, null,
322
+ react_1.default.createElement("br", null),
323
+ react_1.default.createElement("br", null),
324
+ react_1.default.createElement("strong", null, "Stack Trace:"),
325
+ react_1.default.createElement("br", null),
326
+ loadError.stack)))),
327
+ react_1.default.createElement("button", { onClick: () => {
328
+ setLoadError(null);
329
+ setLoaded(false);
330
+ if (pkg) {
331
+ loadUIBundle(pkg, true)
332
+ .then(() => setLoaded(true))
333
+ .catch(setLoadError);
334
+ }
335
+ }, style: {
336
+ marginTop: '15px',
337
+ padding: '8px 16px',
338
+ backgroundColor: '#c53030',
339
+ color: 'white',
340
+ border: 'none',
341
+ borderRadius: '4px',
342
+ cursor: 'pointer'
343
+ } }, "Retry Loading")));
344
+ }
345
+ if (!loaded) {
346
+ return (react_1.default.createElement(loading_indicator_1.LoadingIndicator, null));
347
+ }
348
+ const peersUI = peersUIs[peersUIId];
349
+ if (peersUI?.content) {
350
+ const _props = { ...props, uiVar: undefined };
351
+ try {
352
+ peersUI.propsSchema.parse(_props);
353
+ const Component = peersUI.content;
354
+ return (react_1.default.createElement(UIErrorBoundary, { peersUIId: peersUIId, packageName: pkg.name, componentName: peersUI.content?.name },
355
+ react_1.default.createElement(Component, { ..._props })));
356
+ }
357
+ catch (parseError) {
358
+ return (react_1.default.createElement("div", { style: {
359
+ padding: '20px',
360
+ border: '2px solid #ff6b6b',
361
+ borderRadius: '8px',
362
+ backgroundColor: '#fff5f5',
363
+ color: '#721c24',
364
+ fontFamily: 'monospace',
365
+ margin: '10px 0'
366
+ } },
367
+ react_1.default.createElement("h3", { style: { color: '#c53030', marginTop: 0 } }, "Props Validation Error"),
368
+ react_1.default.createElement("div", { style: { marginBottom: '15px' } },
369
+ react_1.default.createElement("div", null,
370
+ react_1.default.createElement("strong", null, "Peers UI ID:"),
371
+ " ",
372
+ peersUIId),
373
+ react_1.default.createElement("div", null,
374
+ react_1.default.createElement("strong", null, "Package:"),
375
+ " ",
376
+ pkg.name),
377
+ react_1.default.createElement("div", null,
378
+ react_1.default.createElement("strong", null, "Component:"),
379
+ " ",
380
+ peersUI.content?.name)),
381
+ react_1.default.createElement("div", { style: {
382
+ backgroundColor: '#fed7d7',
383
+ padding: '10px',
384
+ borderRadius: '4px',
385
+ whiteSpace: 'pre-wrap',
386
+ overflow: 'auto',
387
+ maxHeight: '200px',
388
+ marginBottom: '15px'
389
+ } },
390
+ react_1.default.createElement("strong", null, "Error:"),
391
+ " Props did not match schema",
392
+ react_1.default.createElement("br", null),
393
+ react_1.default.createElement("strong", null, "Validation Error:"),
394
+ " ",
395
+ JSON.stringify(parseError, null, 2),
396
+ react_1.default.createElement("br", null),
397
+ react_1.default.createElement("br", null),
398
+ react_1.default.createElement("strong", null, "Props:"),
399
+ " ",
400
+ JSON.stringify((0, peers_sdk_1.toJSON)(_props), null, 2))));
401
+ }
402
+ }
403
+ else {
404
+ return react_1.default.createElement("div", null, "Component not found");
405
+ }
406
+ };
407
+ let _window;
408
+ if (typeof window !== 'undefined') {
409
+ _window = window;
410
+ if (!_window.registerPeersUIRoute) {
411
+ let uiRoutes = [];
412
+ Object.defineProperty(window, 'registerPeersUIRoute', {
413
+ value: (route) => {
414
+ uiRoutes = uiRoutes.filter(r => !(r.peersUIId === route.peersUIId));
415
+ uiRoutes.push(route);
416
+ uiRoutes = (0, lodash_1.orderBy)(uiRoutes, r => r.priority ?? 0, 'desc');
417
+ },
418
+ writable: false,
419
+ configurable: false
420
+ });
421
+ Object.defineProperty(window, 'getPeersUIRoutes', {
422
+ value: () => {
423
+ return [...uiRoutes];
424
+ },
425
+ writable: false,
426
+ configurable: false
427
+ });
428
+ Object.defineProperty(window, 'UIRouter', {
429
+ value: exports.UIRouter,
430
+ writable: false,
431
+ configurable: false
432
+ });
433
+ Object.defineProperty(window, 'UILoader', {
434
+ value: UILoader,
435
+ writable: false,
436
+ configurable: false
437
+ });
438
+ }
439
+ }
440
+ const reloadPackage = (0, peers_sdk_1.debounceByArgs)(async (packageId) => {
441
+ const pkg = await (0, peers_sdk_1.Packages)().get(packageId);
442
+ if (pkg) {
443
+ await loadUIBundle(pkg, true);
444
+ console.log(`reloaded UI bundle for ${pkg.name}`);
445
+ (0, globals_1.packageReloaded)(Date.now());
446
+ }
447
+ }, 200);
448
+ (0, peers_sdk_1.Packages)().dataChanged.subscribe(async (evt) => {
449
+ const pkg = evt.dataObject;
450
+ const loadingPromise = uiLoadingPromises[pkg.packageId];
451
+ if (!loadingPromise)
452
+ return;
453
+ reloadPackage(pkg.packageId);
454
+ });
455
+ exports.peersSystemPackageId = '000peers0system000package';
456
+ /**
457
+ * This is meant to make it easy to register components that are internal to peers
458
+ */
459
+ async function registerInternalPeersUI(props) {
460
+ while (!window.registerPeersUIRoute) {
461
+ console.log("Waiting for registerPeersUIRoute to be defined on the window object");
462
+ await new Promise((resolve) => setTimeout(resolve, 20));
463
+ }
464
+ const peersUIId = props.peersUIId || (0, peers_sdk_1.newid)();
465
+ const peersUI = {
466
+ peersUIId,
467
+ content: props.component,
468
+ propsSchema: props.propsSchema || peers_sdk_1.zodAnyObject,
469
+ };
470
+ peersUIs[peersUIId] = peersUI;
471
+ if (props.routes?.length) {
472
+ props.routes.forEach(route => {
473
+ _window.registerPeersUIRoute({
474
+ packageId: exports.peersSystemPackageId,
475
+ peersUIId,
476
+ propsSchema: props.propsSchema,
477
+ ...route,
478
+ });
479
+ });
480
+ }
481
+ }
@@ -0,0 +1,9 @@
1
+ export declare function htmlToText(html: string): string;
2
+ export declare function stripMentions(text: string): string;
3
+ export declare function trimAndSanitizeHtml(value: string): string;
4
+ export declare function isObject(x: any): x is Record<string, any>;
5
+ export declare function js(jsCode: string, externalReferences?: any): any;
6
+ export declare const AsyncFunction: any;
7
+ export declare function jsAsync(jsCode: string, externalReferences?: any): any;
8
+ export declare function toJSON(obj: any): any;
9
+ export declare function fromJSON(obj: any, externalReferences?: any): any;