@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,176 @@
1
+ import { DataFilter, formatMention, getAllMentions, IDoc, IKnowledgeFrame, IKnowledgeValue, KnowledgeFrames, KnowledgeValues, Observable, observable, PeersUI } from "@peers-app/peers-sdk";
2
+ import { sortBy } from "lodash";
3
+ import React, { useState } from "react";
4
+ import { Input } from "../../components/input";
5
+ import { LoadingIndicator } from "../../components/loading-indicator";
6
+ import { SaveButton } from "../../components/save-button";
7
+ import { Typeahead } from "../../components/typeahead/typeahead";
8
+ import { useObservable, useObservableState, usePromise, useSubscription } from "../../hooks";
9
+ import { mentionConfigs } from "../../mention-configs";
10
+ import { updateActiveTabTitle } from "../../tabs-layout/tabs-state";
11
+
12
+ interface IProps {
13
+ knowledgeFrameId: string;
14
+ }
15
+
16
+ export const KnowledgeFrameDetails = (props: IProps) => {
17
+
18
+ const frame = usePromise(async () => {
19
+ const frame = await KnowledgeFrames().get(props.knowledgeFrameId);
20
+ if (!frame) {
21
+ throw new Error('Knowledge Frame not found');
22
+ }
23
+ const doc = KnowledgeFrames().initDoc(frame);
24
+ updateActiveTabTitle(doc.name || "Knowledge Frame");
25
+ return doc;
26
+ }, undefined, [props.knowledgeFrameId]);
27
+
28
+ const typeaheadText = useObservableState('', true);
29
+
30
+ if (!frame) {
31
+ return <LoadingIndicator />;
32
+ }
33
+
34
+ function createKnowledgeValue() {
35
+ console.log('submit', { textValue: typeaheadText() });
36
+ }
37
+
38
+ return (
39
+ <div className="container-fluid p-3">
40
+
41
+ <div className="d-flex">
42
+ <div>
43
+ <h4>
44
+ <i className="me-2 bi bi-window-dock"></i>
45
+ </h4>
46
+ </div>
47
+ <div className="flex-grow-1">
48
+ <h4>
49
+ <Input
50
+ key={frame.knowledgeFrameId}
51
+ className='border border-0'
52
+ style={{ width: '100%', outline: 'none', backgroundColor: 'transparent' }}
53
+ value={frame.qs.name}
54
+ />
55
+ </h4>
56
+ </div>
57
+ <div>
58
+ <SaveButton
59
+ key={frame.knowledgeFrameId}
60
+ doc={frame}
61
+ />
62
+ </div>
63
+ </div>
64
+
65
+ <br />
66
+
67
+ <Typeahead
68
+ value={observable('')}
69
+ textValue={typeaheadText}
70
+ mentionConfigs={mentionConfigs}
71
+ // placeholder={`Search for knowledge to add or create new`}
72
+ autoFocus
73
+ onSubmit={createKnowledgeValue}
74
+ />
75
+
76
+ <KnowledgeSearchValuesList searchText={typeaheadText} />
77
+
78
+ <KnowledgeFrameValuesList frame={frame} />
79
+
80
+ </div>
81
+ )
82
+ }
83
+
84
+ let p: ReturnType<typeof setTimeout> | undefined = undefined;
85
+ const KnowledgeSearchValuesList = (props: { searchText: Observable<string> }) => {
86
+ const { searchText } = props;
87
+
88
+ useObservable(searchText);
89
+ const [searchResults, setSearchResults] = useState<IKnowledgeValue[] | undefined>(undefined);
90
+
91
+ useSubscription(searchText, async (text) => {
92
+ clearTimeout(p);
93
+ setSearchResults(undefined);
94
+ if (!searchText()) {
95
+ return;
96
+ }
97
+ p = setTimeout(async () => {
98
+ p = undefined;
99
+ const values = await searchKnowledgeValues(searchText());
100
+ if (p) return;
101
+ setSearchResults(values);
102
+ }, 1000);
103
+ }, true);
104
+
105
+ if (!searchText()) {
106
+ return null;
107
+ }
108
+
109
+ if (searchResults === undefined) {
110
+ return (
111
+ <div className="d-flex justify-content-center m-3">
112
+ <div className="spinner-grow" role="status"
113
+ style={{ width: '1.2rem', height: '1.2rem', }}
114
+ >
115
+ <span className="visually-hidden">Loading...</span>
116
+ </div>
117
+ </div>
118
+ )
119
+ }
120
+ if (searchResults.length === 0) {
121
+ return (
122
+ <div className="d-flex justify-content-center mt-3" style={{ minHeight: '35px' }}>
123
+ <div>No results found</div>
124
+ </div>
125
+ )
126
+ }
127
+ return (
128
+ <div style={{ minHeight: '51px' }}>
129
+ {searchResults.map(item =>
130
+ <PeersUI
131
+ key={item.knowledgeValueId}
132
+ uiEditMode="view"
133
+ uiCategory="list-item"
134
+ props={{ knowledgeValue: item }}
135
+ />
136
+ )}
137
+ </div>
138
+ )
139
+ }
140
+
141
+ const KnowledgeFrameValuesList = (props: { frame: IDoc<IKnowledgeFrame> }) => {
142
+ const { frame } = props;
143
+ return (
144
+ <div>
145
+ show values included in frame
146
+ </div>
147
+ )
148
+ }
149
+
150
+ export async function searchKnowledgeValues(searchText: string): Promise<IKnowledgeValue[]> {
151
+ const mentions = getAllMentions(searchText)
152
+ const typeMentions = mentions.filter(m => m.kind === "type");
153
+ const otherMentions = mentions.filter(m => m.kind !== "type");
154
+ const filter: DataFilter<IKnowledgeValue> = {};
155
+ if (typeMentions.length) {
156
+ filter.peerTypeId = typeMentions.map(m => m.id);
157
+ for (const typeMention of typeMentions) {
158
+ searchText = searchText.replace(formatMention(typeMention), '');
159
+ }
160
+ }
161
+
162
+ if (otherMentions.length) {
163
+ for (const mention of mentions) {
164
+ searchText = searchText.replace(formatMention(mention), mention.id);
165
+ }
166
+ }
167
+ searchText = searchText.trim();
168
+
169
+ let matches = await KnowledgeValues().list(filter, { pageSize: 100, textSearch: searchText });
170
+
171
+ if (searchText) {
172
+ const words = searchText.toLowerCase().split(' ');
173
+ matches = sortBy(matches, r => words.filter(w => r.name.toLowerCase().includes(w)).length).reverse();
174
+ }
175
+ return matches;
176
+ }
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { newid, IKnowledgeFrame, KnowledgeFrames } from "@peers-app/peers-sdk";
3
+ import { ListScreen } from '../../components/list-screen';
4
+ import { mainContentPath } from '../../globals';
5
+
6
+
7
+ export const KnowledgeFrameList = () => {
8
+ const screenPathPart = 'knowledge-frames';
9
+ const icon = 'bi bi-window-dock';
10
+
11
+ return ListScreen({
12
+ table: KnowledgeFrames(),
13
+ sortBy: ['-modified'],
14
+ placeholderName: 'frame',
15
+ getFilter: (text: string) => {
16
+ return {
17
+ $or: [
18
+ { name: { $matchWords: text } },
19
+ { body: { $matchWords: text } },
20
+ ]
21
+ };
22
+ },
23
+ newRecord: async (text: string) => {
24
+ const knowledgeFrame = await KnowledgeFrames().insert({
25
+ knowledgeFrameId: newid(),
26
+ name: text,
27
+ knowledgeValueIds: [],
28
+ body: '',
29
+ modified: Date.now(),
30
+ });
31
+ mainContentPath(`${screenPathPart}/${knowledgeFrame.knowledgeFrameId}`);
32
+ return knowledgeFrame;
33
+ },
34
+ renderItem: (item: IKnowledgeFrame) => {
35
+ return (
36
+ <div
37
+ key={item.knowledgeFrameId}
38
+ className='container-fluid pb-4'
39
+ >
40
+ <i style={{ cursor: 'pointer' }} className={icon}></i>
41
+ &nbsp;&nbsp;
42
+ <a href={`#${screenPathPart}/${item.knowledgeFrameId}`}>
43
+ {item.name?.trim() || 'No Name'}
44
+ </a>
45
+ </div>
46
+ )
47
+ },
48
+ });
49
+ };
@@ -0,0 +1,181 @@
1
+ import { IDoc, IKnowledgeValue, KnowledgeValues, newid, PeersUI, PeerTypes } from "@peers-app/peers-sdk";
2
+ import React, { useEffect, useState } from "react";
3
+ import { Input } from "../../components/input";
4
+ import { IOSchemaValues } from "../../components/io-schema-values";
5
+ import { LoadingIndicator } from "../../components/loading-indicator";
6
+ import { SaveButton } from "../../components/save-button";
7
+ import { Tooltip } from "../../components/tooltip";
8
+ import { Typeahead } from "../../components/typeahead/typeahead";
9
+ import { useObservable, usePromise, useSubscription } from "../../hooks";
10
+ import { valueTypeMentionConfig } from "../../mention-configs";
11
+ import { updateActiveTabTitle } from "../../tabs-layout/tabs-state";
12
+
13
+ interface IProps {
14
+ knowledgeValueId: string;
15
+ }
16
+
17
+ export const KnowledgeValueDetails = (props: IProps) => {
18
+
19
+ const knowledgeValue = usePromise(async () => {
20
+ const knowledgeValue = await KnowledgeValues().get(props.knowledgeValueId);
21
+ if (!knowledgeValue) {
22
+ throw new Error('Knowledge Value not found');
23
+ }
24
+ updateActiveTabTitle(knowledgeValue.name || "Knowledge Value");
25
+ return KnowledgeValues().initDoc(knowledgeValue);
26
+ }, undefined, [props.knowledgeValueId]);
27
+
28
+ // Force refresh when value type changes
29
+ const [forceRefreshOnTypeChange, setForceRefreshOnTypeChange] = useState(newid());
30
+ useEffect(() => {
31
+ if (!knowledgeValue) return;
32
+ const sub = knowledgeValue.qs.peerTypeId.subscribe(() => {
33
+ setForceRefreshOnTypeChange(newid());
34
+ });
35
+ return () => {
36
+ sub.dispose();
37
+ }
38
+ }, [knowledgeValue]);
39
+
40
+ if (!(knowledgeValue)) {
41
+ return <LoadingIndicator />;
42
+ }
43
+
44
+ async function saveChanges() {
45
+ if (!knowledgeValue) return;
46
+ const type = await PeerTypes().get(knowledgeValue.peerTypeId);
47
+ const existingFields = type?.schema.fields.map(f => f.name) || [];
48
+ const value = knowledgeValue.value || {};
49
+ for (const key of Object.keys(value)) {
50
+ if (!existingFields.includes(key)) {
51
+ delete value[key];
52
+ }
53
+ }
54
+ knowledgeValue.save();
55
+ }
56
+
57
+ return (
58
+ <div className="container-fluid p-1">
59
+ <Autosave doc={knowledgeValue} />
60
+
61
+ <div className="d-flex">
62
+ <div>
63
+ <h4>
64
+ <KnowledgeValueIcon knowledgeValue={knowledgeValue} />
65
+ </h4>
66
+ </div>
67
+ <div className="flex-grow-1">
68
+ <h4>
69
+ <Input
70
+ className='border border-0'
71
+ style={{ width: '100%', outline: 'none', backgroundColor: 'transparent' }}
72
+ value={knowledgeValue.qs.name}
73
+ placeholder="Name"
74
+ />
75
+ </h4>
76
+ </div>
77
+ <div>
78
+ <SaveButton
79
+ key={knowledgeValue.knowledgeValueId}
80
+ doc={knowledgeValue}
81
+ onClick={saveChanges}
82
+ />
83
+ </div>
84
+ </div>
85
+
86
+ {/* <br /> */}
87
+
88
+ <PeersUI
89
+ key={forceRefreshOnTypeChange}
90
+ uiEditMode="edit"
91
+ uiCategory="details"
92
+ props={{ knowledgeValue }}
93
+ >
94
+ <KnowledgeValueDefaultEditor knowledgeValue={knowledgeValue} />
95
+ </PeersUI>
96
+ </div>
97
+ )
98
+ }
99
+
100
+ const Autosave = (props: { doc: IDoc<IKnowledgeValue> }) => {
101
+ let p = setTimeout(() => { }, 0);
102
+ const oldTypeId = props.doc.peerTypeId;
103
+ useSubscription(props.doc.q, () => {
104
+ clearTimeout(p);
105
+ p = setTimeout(() => {
106
+ if (props.doc.q() === 0) return;
107
+ if (oldTypeId === props.doc.peerTypeId) {
108
+ props.doc.lastModified = new Date();
109
+ props.doc.save();
110
+ } else {
111
+ console.log('Not auto-saving because type changed which can cause unexpected data loss');
112
+ }
113
+ }, 2000);
114
+ });
115
+ return null;
116
+ }
117
+
118
+ const KnowledgeValueIcon = (props: { knowledgeValue: IDoc<IKnowledgeValue> }) => {
119
+ const { knowledgeValue } = props;
120
+
121
+ useObservable(knowledgeValue.qs.peerTypeId);
122
+
123
+ const valueType = usePromise(async () => {
124
+ const valueType = await PeerTypes().get(knowledgeValue.peerTypeId, { useCache: true });
125
+ return valueType;
126
+ }, undefined, [knowledgeValue.peerTypeId]);
127
+
128
+ return (
129
+ <Tooltip
130
+ handle={
131
+ <i className={"btn btn-secondary dropdown-toggle me-2 " + (valueType?.iconClass || "bi bi-diagram-2-fill")}>&nbsp;</i>
132
+ }
133
+ positions={['bottom', 'right', 'left']}
134
+ genericContent={
135
+ <div
136
+ style={{ minWidth: 200 }}
137
+ className="bg-dark p-2"
138
+ >
139
+ <small>
140
+ Knowledge Type:
141
+ </small>
142
+ <Typeahead
143
+ value={knowledgeValue.qs.peerTypeId}
144
+ mentionConfigs={[valueTypeMentionConfig]}
145
+ />
146
+ </div>
147
+ }
148
+ />
149
+ );
150
+ }
151
+
152
+ const KnowledgeValueDefaultEditor = (props: { knowledgeValue: IDoc<IKnowledgeValue> }) => {
153
+ const { knowledgeValue } = props;
154
+ const [peerTypeId] = useObservable(knowledgeValue.qs.peerTypeId);
155
+
156
+ const valueType = usePromise(async () => {
157
+ const valueType = await PeerTypes().get(peerTypeId);
158
+ if (valueType) {
159
+ return PeerTypes().initDoc(valueType);
160
+ }
161
+ }, null, [peerTypeId]);
162
+
163
+ if (valueType === undefined) {
164
+ return <div>Value Type {peerTypeId} not found in database</div>
165
+ }
166
+
167
+ if (!valueType) {
168
+ return <LoadingIndicator />;
169
+ }
170
+
171
+ return (
172
+ <div>
173
+ <IOSchemaValues
174
+ q={knowledgeValue.q}
175
+ ioSchema={valueType.schema}
176
+ values={knowledgeValue.value || {}}
177
+ excludeFields={['name']}
178
+ />
179
+ </div>
180
+ );
181
+ }
@@ -0,0 +1,48 @@
1
+ import { IKnowledgeValue, knowledgeValueSchema, PeerTypes } from "@peers-app/peers-sdk";
2
+ import React from 'react';
3
+ import { z } from 'zod';
4
+ import { usePromise } from '../../hooks';
5
+ import { registerInternalPeersUI } from '../../ui-router/ui-loader';
6
+
7
+ export const KnowledgeValueListItem = (props: { knowledgeValue: IKnowledgeValue }) => {
8
+ const { knowledgeValue } = props;
9
+ const id = knowledgeValue.knowledgeValueId;
10
+ const _item = knowledgeValue.value as any;
11
+ const description = _item.description || _item.body || _item.content || _item.value;
12
+
13
+ const peerType = usePromise(async () => {
14
+ const peerType = await PeerTypes().get(knowledgeValue.peerTypeId, { useCache: true });
15
+ return peerType;
16
+ }, undefined, [knowledgeValue.peerTypeId]);
17
+
18
+ const name = knowledgeValue.name || knowledgeValue.value?.name || knowledgeValue.knowledgeValueId;
19
+
20
+ return (
21
+ <div
22
+ key={id}
23
+ className='container-fluid pb-3'
24
+ >
25
+ <i style={{ cursor: 'pointer' }} className={peerType?.iconClass || "bi bi-diagram-2-fill"}></i>
26
+ &nbsp;&nbsp;
27
+ <a href={`#knowledge-values/${id}`}>
28
+ {name || 'No Name'}
29
+ </a>
30
+ {/* <div style={{ paddingLeft: '20px' }}>
31
+ <MarkdownWithMentions content={String(description || '').substring(0, 200)} />
32
+ </div> */}
33
+ </div>
34
+ )
35
+ }
36
+
37
+ registerInternalPeersUI({
38
+ peersUIId: '00m5enc2nj313e8neyf35f1gp',
39
+ component: KnowledgeValueListItem,
40
+ propsSchema: z.object({
41
+ knowledgeValue: knowledgeValueSchema as any,
42
+ }),
43
+ routes: [{
44
+ // isMatch: (props) => true,
45
+ uiCategory: 'list-item',
46
+ uiEditMode: 'view',
47
+ }]
48
+ });
@@ -0,0 +1,131 @@
1
+ import { ICursorIterable, IKnowledgeValue, KnowledgeValues, newid, observable, PeersUI } from "@peers-app/peers-sdk";
2
+ import React, { useEffect, useState } from 'react';
3
+ import { Input } from "../../components/input";
4
+ import { LazyList } from "../../components/lazy-list";
5
+ import { LoadingIndicator } from '../../components/loading-indicator';
6
+ import { isDesktop, mainContentPath } from '../../globals';
7
+ import { useObservable } from "../../hooks";
8
+ import { registerInternalPeersUI } from "../../ui-router/ui-loader";
9
+ import './knowledge-value-list-item';
10
+
11
+ const screenPathPart = 'knowledge-values';
12
+ // const icon = 'bi bi-diagram-2-fill';
13
+
14
+
15
+ export const KnowledgeValueList = (props: {}) => {
16
+ const [searchTextObs] = useState(() => observable(''));
17
+ const [searchText] = useObservable(searchTextObs);
18
+
19
+ const [cursorObs] = useState(() => observable<ICursorIterable<IKnowledgeValue>>());
20
+ const [allLoadedIds] = useState(() => new Set<string>());
21
+
22
+ async function newCursor() {
23
+ const cursor = await KnowledgeValues().cursor({}, { sortBy: ['-lastModified', '-knowledgeValueId'], textSearch: searchText });
24
+ cursorObs(cursor);
25
+ return cursor;
26
+ }
27
+
28
+ useEffect(() => {
29
+ cursorObs(undefined); // Clear existing cursor first
30
+ allLoadedIds.clear(); // Clear loaded IDs when search changes
31
+ newCursor();
32
+ }, [searchText]);
33
+
34
+
35
+ async function loadMore(existing: IKnowledgeValue[]): Promise<IKnowledgeValue[]> {
36
+ let moreMatches: IKnowledgeValue[] = [];
37
+ let cursor = cursorObs() || await newCursor();
38
+
39
+ for await (const nextRecord of cursor) {
40
+ // Skip if already loaded globally or in existing items
41
+ if (allLoadedIds.has(nextRecord.knowledgeValueId) ||
42
+ existing.some(e => e.knowledgeValueId === nextRecord.knowledgeValueId)) {
43
+ continue;
44
+ }
45
+
46
+ allLoadedIds.add(nextRecord.knowledgeValueId); // Track as loaded
47
+ moreMatches.push(nextRecord);
48
+ if (searchText.length && moreMatches.length > 5) break;
49
+ if (moreMatches.length >= 50) break;
50
+ }
51
+ if (moreMatches.length === 0) {
52
+ cursorObs(undefined);
53
+ }
54
+
55
+ return moreMatches;
56
+ }
57
+
58
+
59
+ async function searchSubmit(evt: React.KeyboardEvent<HTMLInputElement>) {
60
+ if (evt.key !== "Enter") return;
61
+ const name = searchText.trim();
62
+ if (!name) return;
63
+
64
+ const newKV = await KnowledgeValues().insert({
65
+ knowledgeValueId: newid(),
66
+ lastModified: new Date(),
67
+ name: name,
68
+ peerTypeId: "00m3g0ntcop3mrh6ynuzgekiy", // `Note` value type
69
+ value: {
70
+ body: '',
71
+ },
72
+ });
73
+ mainContentPath(`${screenPathPart}/${newKV.knowledgeValueId}`);
74
+ }
75
+
76
+ return (
77
+ <div className='container-fluid'>
78
+
79
+ <div className="input-group mt-3 mb-3">
80
+ {/* <Typeahead /> */}
81
+ <Input value={searchTextObs} className="form-control" placeholder={`Search or create knowledge`}
82
+ autoFocus={isDesktop() ? true : false}
83
+ onKeyUp={evt => searchSubmit(evt)}
84
+ />
85
+ </div>
86
+
87
+ <div className="peers-list-container">
88
+ <LazyList
89
+ resetTrigger={searchText}
90
+ loadMore={loadMore}
91
+ scrollThreshold={0.6}
92
+ renderItems={(items) => {
93
+ // return items.map(item => <KnowledgeValueListItem key={item.knowledgeValueId} data={item} />);
94
+ return items.map(item =>
95
+ <PeersUI
96
+ key={item.knowledgeValueId}
97
+ uiEditMode='view'
98
+ uiCategory='list-item'
99
+ props={{ knowledgeValue: item }}
100
+ />
101
+ );
102
+ }}
103
+ loadingIndicator={
104
+ <div className="d-flex justify-content-center" style={{ height: 200 }}>
105
+ <LoadingIndicator />
106
+ </div>
107
+ }
108
+ endOfList={
109
+ <div className="d-flex justify-content-center" style={{ height: 200 }}>
110
+ {/* <span className="h3">End of List</span> */}
111
+ </div>
112
+ }
113
+ />
114
+ </div>
115
+ </div>
116
+ );
117
+ };
118
+
119
+
120
+ registerInternalPeersUI({
121
+ peersUIId: '00m5fshz2g6ea23v8z6y0a1ck',
122
+ component: KnowledgeValueList,
123
+ routes: [
124
+ {
125
+ isMatch: (props, context) => context.path === 'knowledge-values',
126
+ // path: 'knowledge-values',
127
+ uiCategory: 'screen',
128
+ priority: 2
129
+ }
130
+ ]
131
+ })
@@ -0,0 +1,117 @@
1
+ import { Packages, rpcServerCalls } from "@peers-app/peers-sdk";
2
+ import React from "react";
3
+ import { LoadingIndicator } from "../../components/loading-indicator";
4
+ import { ISaveButtonProps, SaveButton } from "../../components/save-button";
5
+ import { ScreenTabBody, Tabs } from "../../components/tabs";
6
+ import { PackageInfo } from "./package-info";
7
+ import { useObservableState, usePromise } from "../../hooks";
8
+ import { Input } from "../../components/input";
9
+ import { updateActiveTabTitle } from "../../tabs-layout/tabs-state";
10
+
11
+
12
+ interface IProps {
13
+ packageId: string;
14
+ }
15
+
16
+ export const PackageDetails = (props: IProps) => {
17
+
18
+ const refresh = useObservableState(Date.now());
19
+
20
+ const pkg = usePromise(async () => {
21
+ const pkg = await Packages().get(props.packageId);
22
+ if (!pkg) {
23
+ throw new Error('Workflow not found');
24
+ }
25
+ updateActiveTabTitle(pkg.name || "Package");
26
+ return Packages().initDoc(pkg);
27
+ }, undefined, [props.packageId, refresh()]);
28
+
29
+ if (!pkg) {
30
+ return <LoadingIndicator />;
31
+ }
32
+
33
+ const addActions: ISaveButtonProps['addActions'] = [
34
+ {
35
+ label: 'Reload Package',
36
+ onClick: async () => {
37
+ await rpcServerCalls.installOrUpdatePackage(pkg.packageId);
38
+ await pkg.load();
39
+ window.location.reload();
40
+ }
41
+ },
42
+ ];
43
+ if (!pkg.remoteRepo) {
44
+ addActions.push({
45
+ label: 'Make Remote ',
46
+ // className: 'text-bg-warning',
47
+ onClick: async () => {
48
+ if (confirm(`Create a remote repository from this local one: ${pkg.name}`)) {
49
+ try {
50
+
51
+ await rpcServerCalls.linkRemoteRepo(pkg.packageId);
52
+ await rpcServerCalls.installOrUpdatePackage(pkg.packageId);
53
+ refresh(Date.now());
54
+ } catch (err) {
55
+ alert(`Error linking remote repo: ${err}`);
56
+ }
57
+ }
58
+ }
59
+ });
60
+ }
61
+
62
+ return (
63
+ <div className="container-fluid p-3">
64
+
65
+ <div className="d-flex">
66
+ <div>
67
+ <h4>
68
+ <i className="bi bi-box-fill me-2"></i>
69
+ </h4>
70
+ </div>
71
+ <div className="flex-grow-1">
72
+ <h4>
73
+ <Input
74
+ key={pkg.packageId}
75
+ className='border border-0'
76
+ style={{ width: '100%', outline: 'none', backgroundColor: 'transparent' }}
77
+ value={pkg.qs.name}
78
+ />
79
+ </h4>
80
+ </div>
81
+ <div>
82
+ <SaveButton
83
+ key={pkg.packageId}
84
+ doc={pkg}
85
+ addActions={[
86
+ ...addActions
87
+ ]}
88
+ />
89
+ </div>
90
+ </div>
91
+
92
+ <Tabs
93
+ key={pkg.packageId}
94
+ tabs={[
95
+ {
96
+ name: 'Info', content:
97
+ <ScreenTabBody>
98
+ <PackageInfo pkg={pkg} />
99
+ </ScreenTabBody>
100
+ },
101
+ {
102
+ name: 'Components', content:
103
+ <ScreenTabBody>
104
+ TODO - show all of the different components in the package
105
+ </ScreenTabBody>
106
+ },
107
+ {
108
+ name: 'Dependencies', content:
109
+ <ScreenTabBody>
110
+ TODO - show all of the dependencies of the package
111
+ </ScreenTabBody>
112
+ },
113
+ ]}
114
+ />
115
+ </div>
116
+ )
117
+ }