@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.
- package/.github/README.md +52 -0
- package/.github/workflows/publish.yml +45 -0
- package/babel.config.js +7 -0
- package/dist/app.d.ts +9 -0
- package/dist/app.js +54 -0
- package/dist/command-palette/command-palette-ui.d.ts +2 -0
- package/dist/command-palette/command-palette-ui.js +192 -0
- package/dist/command-palette/command-palette.d.ts +23 -0
- package/dist/command-palette/command-palette.js +371 -0
- package/dist/components/checkbox.d.ts +7 -0
- package/dist/components/checkbox.js +20 -0
- package/dist/components/group-switcher.d.ts +6 -0
- package/dist/components/group-switcher.js +301 -0
- package/dist/components/input-date.d.ts +7 -0
- package/dist/components/input-date.js +19 -0
- package/dist/components/input-datetime.d.ts +7 -0
- package/dist/components/input-datetime.js +35 -0
- package/dist/components/input-number.d.ts +9 -0
- package/dist/components/input-number.js +87 -0
- package/dist/components/input.d.ts +7 -0
- package/dist/components/input.js +20 -0
- package/dist/components/io-schema-values.d.ts +15 -0
- package/dist/components/io-schema-values.js +105 -0
- package/dist/components/io-schema.d.ts +13 -0
- package/dist/components/io-schema.js +163 -0
- package/dist/components/lazy-list.d.ts +13 -0
- package/dist/components/lazy-list.js +91 -0
- package/dist/components/lazy-sortable-list.d.ts +29 -0
- package/dist/components/lazy-sortable-list.js +12 -0
- package/dist/components/left-bar.d.ts +3 -0
- package/dist/components/left-bar.js +130 -0
- package/dist/components/list-screen.d.ts +16 -0
- package/dist/components/list-screen.js +100 -0
- package/dist/components/loading-indicator.d.ts +2 -0
- package/dist/components/loading-indicator.js +12 -0
- package/dist/components/main-content-container.d.ts +2 -0
- package/dist/components/main-content-container.js +90 -0
- package/dist/components/markdown-editor/autolink-plugin.d.ts +2 -0
- package/dist/components/markdown-editor/autolink-plugin.js +29 -0
- package/dist/components/markdown-editor/editor-inline.d.ts +3 -0
- package/dist/components/markdown-editor/editor-inline.js +13 -0
- package/dist/components/markdown-editor/editor.d.ts +18 -0
- package/dist/components/markdown-editor/editor.js +143 -0
- package/dist/components/markdown-editor/markdown-plugin.d.ts +9 -0
- package/dist/components/markdown-editor/markdown-plugin.js +194 -0
- package/dist/components/markdown-editor/mention-node.d.ts +21 -0
- package/dist/components/markdown-editor/mention-node.js +160 -0
- package/dist/components/markdown-editor/mentions-plugin.d.ts +7 -0
- package/dist/components/markdown-editor/mentions-plugin.js +268 -0
- package/dist/components/markdown-editor/theme.d.ts +46 -0
- package/dist/components/markdown-editor/theme.js +48 -0
- package/dist/components/markdown-editor/toolbar.d.ts +10 -0
- package/dist/components/markdown-editor/toolbar.js +112 -0
- package/dist/components/markdown-with-mentions.d.ts +4 -0
- package/dist/components/markdown-with-mentions.js +140 -0
- package/dist/components/message-logs/message-logs.d.ts +6 -0
- package/dist/components/message-logs/message-logs.js +307 -0
- package/dist/components/messages/avatar.d.ts +10 -0
- package/dist/components/messages/avatar.js +65 -0
- package/dist/components/messages/channel-message-list.d.ts +14 -0
- package/dist/components/messages/channel-message-list.js +158 -0
- package/dist/components/messages/channel-view.d.ts +6 -0
- package/dist/components/messages/channel-view.js +82 -0
- package/dist/components/messages/message-compose.d.ts +11 -0
- package/dist/components/messages/message-compose.js +152 -0
- package/dist/components/messages/message-display.d.ts +10 -0
- package/dist/components/messages/message-display.js +152 -0
- package/dist/components/messages/thread-message-list.d.ts +11 -0
- package/dist/components/messages/thread-message-list.js +122 -0
- package/dist/components/messages/thread-view.d.ts +6 -0
- package/dist/components/messages/thread-view.js +174 -0
- package/dist/components/off-canvas.d.ts +13 -0
- package/dist/components/off-canvas.js +89 -0
- package/dist/components/router.d.ts +6 -0
- package/dist/components/router.js +240 -0
- package/dist/components/save-button.d.ts +13 -0
- package/dist/components/save-button.js +75 -0
- package/dist/components/sortable-list.d.ts +36 -0
- package/dist/components/sortable-list.js +77 -0
- package/dist/components/tabs.d.ts +11 -0
- package/dist/components/tabs.js +69 -0
- package/dist/components/text-list-editor.tsx/text-list-editor.d.ts +6 -0
- package/dist/components/text-list-editor.tsx/text-list-editor.js +13 -0
- package/dist/components/tooltip.d.ts +11 -0
- package/dist/components/tooltip.js +20 -0
- package/dist/components/top-bar.d.ts +2 -0
- package/dist/components/top-bar.js +51 -0
- package/dist/components/typeahead/mentions-plugin.d.ts +7 -0
- package/dist/components/typeahead/mentions-plugin.js +203 -0
- package/dist/components/typeahead/typeahead-editor.d.ts +15 -0
- package/dist/components/typeahead/typeahead-editor.js +134 -0
- package/dist/components/typeahead/typeahead.d.ts +12 -0
- package/dist/components/typeahead/typeahead.js +94 -0
- package/dist/components/typeahead.d.ts +22 -0
- package/dist/components/typeahead.js +270 -0
- package/dist/globals.d.ts +29 -0
- package/dist/globals.js +148 -0
- package/dist/hooks.d.ts +34 -0
- package/dist/hooks.js +137 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/layout-vars.d.ts +6 -0
- package/dist/layout-vars.js +10 -0
- package/dist/mention-configs.d.ts +18 -0
- package/dist/mention-configs.js +149 -0
- package/dist/screens/assistants/assistant-config.d.ts +5 -0
- package/dist/screens/assistants/assistant-config.js +52 -0
- package/dist/screens/assistants/assistant-details.d.ts +4 -0
- package/dist/screens/assistants/assistant-details.js +85 -0
- package/dist/screens/assistants/assistant-info.d.ts +6 -0
- package/dist/screens/assistants/assistant-info.js +28 -0
- package/dist/screens/assistants/assistant-list.d.ts +2 -0
- package/dist/screens/assistants/assistant-list.js +114 -0
- package/dist/screens/assistants/assistant-tools.d.ts +5 -0
- package/dist/screens/assistants/assistant-tools.js +38 -0
- package/dist/screens/contacts/contact-details.d.ts +6 -0
- package/dist/screens/contacts/contact-details.js +100 -0
- package/dist/screens/contacts/contact-list.d.ts +2 -0
- package/dist/screens/contacts/contact-list.js +213 -0
- package/dist/screens/contacts/index.d.ts +4 -0
- package/dist/screens/contacts/index.js +21 -0
- package/dist/screens/events/cron.d.ts +3 -0
- package/dist/screens/events/cron.js +77 -0
- package/dist/screens/events/event-details.d.ts +6 -0
- package/dist/screens/events/event-details.js +112 -0
- package/dist/screens/events/event-handlers.d.ts +7 -0
- package/dist/screens/events/event-handlers.js +84 -0
- package/dist/screens/events/event-info.d.ts +5 -0
- package/dist/screens/events/event-info.js +19 -0
- package/dist/screens/events/event-list.d.ts +2 -0
- package/dist/screens/events/event-list.js +107 -0
- package/dist/screens/events/event-schedule.d.ts +5 -0
- package/dist/screens/events/event-schedule.js +124 -0
- package/dist/screens/groups/group-details.d.ts +6 -0
- package/dist/screens/groups/group-details.js +218 -0
- package/dist/screens/groups/group-list.d.ts +2 -0
- package/dist/screens/groups/group-list.js +275 -0
- package/dist/screens/groups/group-members.d.ts +8 -0
- package/dist/screens/groups/group-members.js +315 -0
- package/dist/screens/groups/index.d.ts +6 -0
- package/dist/screens/groups/index.js +23 -0
- package/dist/screens/knowledge/knowledge-frame-details.bk.d.ts +6 -0
- package/dist/screens/knowledge/knowledge-frame-details.bk.js +84 -0
- package/dist/screens/knowledge/knowledge-frame-details.d.ts +8 -0
- package/dist/screens/knowledge/knowledge-frame-details.js +143 -0
- package/dist/screens/knowledge/knowledge-frame-list.d.ts +2 -0
- package/dist/screens/knowledge/knowledge-frame-list.js +45 -0
- package/dist/screens/knowledge/knowledge-value-details.d.ts +6 -0
- package/dist/screens/knowledge/knowledge-value-details.js +150 -0
- package/dist/screens/knowledge/knowledge-value-list-item.d.ts +5 -0
- package/dist/screens/knowledge/knowledge-value-list-item.js +39 -0
- package/dist/screens/knowledge/knowledge-value-list.d.ts +3 -0
- package/dist/screens/knowledge/knowledge-value-list.js +123 -0
- package/dist/screens/packages/package-details.d.ts +6 -0
- package/dist/screens/packages/package-details.js +82 -0
- package/dist/screens/packages/package-info.d.ts +5 -0
- package/dist/screens/packages/package-info.js +42 -0
- package/dist/screens/packages/package-list.d.ts +2 -0
- package/dist/screens/packages/package-list.js +182 -0
- package/dist/screens/packages/package-new-local.d.ts +2 -0
- package/dist/screens/packages/package-new-local.js +82 -0
- package/dist/screens/peer-types/peer-type-details.d.ts +10 -0
- package/dist/screens/peer-types/peer-type-details.js +126 -0
- package/dist/screens/peer-types/peer-type-list.d.ts +2 -0
- package/dist/screens/peer-types/peer-type-list.js +57 -0
- package/dist/screens/predicates/predicate-details.d.ts +6 -0
- package/dist/screens/predicates/predicate-details.js +103 -0
- package/dist/screens/predicates/predicate-list.d.ts +2 -0
- package/dist/screens/predicates/predicate-list.js +46 -0
- package/dist/screens/profile.d.ts +2 -0
- package/dist/screens/profile.js +66 -0
- package/dist/screens/search/global-search.d.ts +2 -0
- package/dist/screens/search/global-search.js +186 -0
- package/dist/screens/settings/color-mode-dropdown.d.ts +6 -0
- package/dist/screens/settings/color-mode-dropdown.js +63 -0
- package/dist/screens/settings/settings-page.d.ts +2 -0
- package/dist/screens/settings/settings-page.js +49 -0
- package/dist/screens/setup-user.d.ts +2 -0
- package/dist/screens/setup-user.js +270 -0
- package/dist/screens/tools/tool-code.d.ts +5 -0
- package/dist/screens/tools/tool-code.js +32 -0
- package/dist/screens/tools/tool-details.d.ts +6 -0
- package/dist/screens/tools/tool-details.js +68 -0
- package/dist/screens/tools/tool-info.d.ts +5 -0
- package/dist/screens/tools/tool-info.js +74 -0
- package/dist/screens/tools/tool-list.d.ts +2 -0
- package/dist/screens/tools/tool-list.js +123 -0
- package/dist/screens/tools/tool-schema.d.ts +5 -0
- package/dist/screens/tools/tool-schema.js +30 -0
- package/dist/screens/tools/tool-test-details.d.ts +4 -0
- package/dist/screens/tools/tool-test-details.js +54 -0
- package/dist/screens/tools/tool-test-list.d.ts +4 -0
- package/dist/screens/tools/tool-test-list.js +82 -0
- package/dist/screens/variables/variable-details.d.ts +6 -0
- package/dist/screens/variables/variable-details.js +140 -0
- package/dist/screens/variables/variable-list.d.ts +2 -0
- package/dist/screens/variables/variable-list.js +58 -0
- package/dist/screens/workflows/workflow-details.d.ts +6 -0
- package/dist/screens/workflows/workflow-details.js +122 -0
- package/dist/screens/workflows/workflow-info.d.ts +5 -0
- package/dist/screens/workflows/workflow-info.js +18 -0
- package/dist/screens/workflows/workflow-instructions.d.ts +5 -0
- package/dist/screens/workflows/workflow-instructions.js +118 -0
- package/dist/screens/workflows/workflow-list.d.ts +2 -0
- package/dist/screens/workflows/workflow-list.js +109 -0
- package/dist/screens/workflows/workflow-subscriptions.d.ts +6 -0
- package/dist/screens/workflows/workflow-subscriptions.js +81 -0
- package/dist/setupTests.d.ts +1 -0
- package/dist/setupTests.js +31 -0
- package/dist/system-apps/assistants.app.d.ts +2 -0
- package/dist/system-apps/assistants.app.js +8 -0
- package/dist/system-apps/contacts.app.d.ts +2 -0
- package/dist/system-apps/contacts.app.js +9 -0
- package/dist/system-apps/events.app.d.ts +2 -0
- package/dist/system-apps/events.app.js +8 -0
- package/dist/system-apps/groups.app.d.ts +2 -0
- package/dist/system-apps/groups.app.js +9 -0
- package/dist/system-apps/index.d.ts +19 -0
- package/dist/system-apps/index.js +90 -0
- package/dist/system-apps/knowledge-frames.app.d.ts +2 -0
- package/dist/system-apps/knowledge-frames.app.js +9 -0
- package/dist/system-apps/knowledge-values.app.d.ts +2 -0
- package/dist/system-apps/knowledge-values.app.js +9 -0
- package/dist/system-apps/packages.app.d.ts +2 -0
- package/dist/system-apps/packages.app.js +8 -0
- package/dist/system-apps/predicates.app.d.ts +2 -0
- package/dist/system-apps/predicates.app.js +8 -0
- package/dist/system-apps/profile.app.d.ts +2 -0
- package/dist/system-apps/profile.app.js +8 -0
- package/dist/system-apps/search.app.d.ts +2 -0
- package/dist/system-apps/search.app.js +9 -0
- package/dist/system-apps/settings.app.d.ts +2 -0
- package/dist/system-apps/settings.app.js +8 -0
- package/dist/system-apps/threads.app.d.ts +2 -0
- package/dist/system-apps/threads.app.js +8 -0
- package/dist/system-apps/tools.app.d.ts +2 -0
- package/dist/system-apps/tools.app.js +8 -0
- package/dist/system-apps/types.app.d.ts +2 -0
- package/dist/system-apps/types.app.js +8 -0
- package/dist/system-apps/variables.app.d.ts +2 -0
- package/dist/system-apps/variables.app.js +8 -0
- package/dist/system-apps/workflows.app.d.ts +2 -0
- package/dist/system-apps/workflows.app.js +8 -0
- package/dist/tabs-layout/tabs-layout.d.ts +5 -0
- package/dist/tabs-layout/tabs-layout.js +374 -0
- package/dist/tabs-layout/tabs-state.d.ts +26 -0
- package/dist/tabs-layout/tabs-state.js +239 -0
- package/dist/three-bar-layout/left-bar-content.d.ts +7 -0
- package/dist/three-bar-layout/left-bar-content.js +151 -0
- package/dist/three-bar-layout/right-bar-content.d.ts +2 -0
- package/dist/three-bar-layout/right-bar-content.js +64 -0
- package/dist/three-bar-layout/three-bar-layout.d.ts +5 -0
- package/dist/three-bar-layout/three-bar-layout.js +218 -0
- package/dist/ui-defaults/index.d.ts +2 -0
- package/dist/ui-defaults/index.js +4 -0
- package/dist/ui-defaults/list-screen.d.ts +6 -0
- package/dist/ui-defaults/list-screen.js +74 -0
- package/dist/ui-defaults/notes-editor.d.ts +7 -0
- package/dist/ui-defaults/notes-editor.js +41 -0
- package/dist/ui-router/routes-loader.d.ts +25 -0
- package/dist/ui-router/routes-loader.js +97 -0
- package/dist/ui-router/ui-loader.d.ts +18 -0
- package/dist/ui-router/ui-loader.js +481 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.js +250 -0
- package/docs/conversation-tab.md +201 -0
- package/docs/getting-started.md +284 -0
- package/docs/knowledge.md +187 -0
- package/docs/tabs-ui.md +696 -0
- package/docs/user-contacts-ui.md +384 -0
- package/jest.config.js +25 -0
- package/package.json +109 -0
- package/src/app.tsx +59 -0
- package/src/command-palette/command-palette-ui.tsx +264 -0
- package/src/command-palette/command-palette.ts +364 -0
- package/src/components/checkbox.tsx +22 -0
- package/src/components/group-switcher.tsx +469 -0
- package/src/components/input-date.tsx +28 -0
- package/src/components/input-datetime.tsx +41 -0
- package/src/components/input-number.tsx +67 -0
- package/src/components/input.tsx +22 -0
- package/src/components/io-schema-values.tsx +122 -0
- package/src/components/io-schema.tsx +234 -0
- package/src/components/lazy-list.tsx +98 -0
- package/src/components/lazy-sortable-list.tsx +51 -0
- package/src/components/left-bar.tsx +264 -0
- package/src/components/list-screen.tsx +105 -0
- package/src/components/loading-indicator.tsx +9 -0
- package/src/components/main-content-container.tsx +76 -0
- package/src/components/markdown-editor/autolink-plugin.tsx +36 -0
- package/src/components/markdown-editor/editor-inline.tsx +10 -0
- package/src/components/markdown-editor/editor.tsx +152 -0
- package/src/components/markdown-editor/markdown-plugin.tsx +224 -0
- package/src/components/markdown-editor/mention-node.ts +199 -0
- package/src/components/markdown-editor/mentions-plugin.tsx +356 -0
- package/src/components/markdown-editor/theme.ts +47 -0
- package/src/components/markdown-editor/toolbar.tsx +263 -0
- package/src/components/markdown-with-mentions.tsx +183 -0
- package/src/components/message-logs/message-logs.tsx +406 -0
- package/src/components/messages/avatar.tsx +95 -0
- package/src/components/messages/channel-message-list.tsx +177 -0
- package/src/components/messages/channel-view.tsx +74 -0
- package/src/components/messages/message-compose.tsx +162 -0
- package/src/components/messages/message-display.tsx +217 -0
- package/src/components/messages/thread-message-list.tsx +126 -0
- package/src/components/messages/thread-view.tsx +214 -0
- package/src/components/off-canvas.tsx +83 -0
- package/src/components/router.tsx +224 -0
- package/src/components/save-button.tsx +109 -0
- package/src/components/sortable-list.tsx +102 -0
- package/src/components/tabs.tsx +70 -0
- package/src/components/text-list-editor.tsx/text-list-editor.tsx +13 -0
- package/src/components/tooltip.tsx +50 -0
- package/src/components/top-bar.tsx +119 -0
- package/src/components/typeahead/mentions-plugin.tsx +265 -0
- package/src/components/typeahead/typeahead-editor.tsx +140 -0
- package/src/components/typeahead/typeahead.tsx +77 -0
- package/src/components/typeahead.tsx +359 -0
- package/src/globals.tsx +162 -0
- package/src/hooks.ts +144 -0
- package/src/index.tsx +8 -0
- package/src/layout-vars.ts +8 -0
- package/src/mention-configs.ts +166 -0
- package/src/screens/assistants/assistant-config.tsx +80 -0
- package/src/screens/assistants/assistant-details.tsx +77 -0
- package/src/screens/assistants/assistant-info.tsx +45 -0
- package/src/screens/assistants/assistant-list.tsx +115 -0
- package/src/screens/assistants/assistant-tools.tsx +61 -0
- package/src/screens/contacts/contact-details.tsx +175 -0
- package/src/screens/contacts/contact-list.tsx +251 -0
- package/src/screens/contacts/index.ts +6 -0
- package/src/screens/events/cron.ts +74 -0
- package/src/screens/events/event-details.tsx +117 -0
- package/src/screens/events/event-handlers.tsx +61 -0
- package/src/screens/events/event-info.tsx +29 -0
- package/src/screens/events/event-list.tsx +104 -0
- package/src/screens/events/event-schedule.tsx +130 -0
- package/src/screens/groups/group-details.tsx +306 -0
- package/src/screens/groups/group-list.tsx +366 -0
- package/src/screens/groups/group-members.tsx +455 -0
- package/src/screens/groups/index.ts +9 -0
- package/src/screens/knowledge/knowledge-frame-details.bk.tsx +160 -0
- package/src/screens/knowledge/knowledge-frame-details.tsx +176 -0
- package/src/screens/knowledge/knowledge-frame-list.tsx +49 -0
- package/src/screens/knowledge/knowledge-value-details.tsx +181 -0
- package/src/screens/knowledge/knowledge-value-list-item.tsx +48 -0
- package/src/screens/knowledge/knowledge-value-list.tsx +131 -0
- package/src/screens/packages/package-details.tsx +117 -0
- package/src/screens/packages/package-info.tsx +83 -0
- package/src/screens/packages/package-list.tsx +191 -0
- package/src/screens/packages/package-new-local.tsx +93 -0
- package/src/screens/peer-types/peer-type-details.tsx +162 -0
- package/src/screens/peer-types/peer-type-list.tsx +74 -0
- package/src/screens/predicates/predicate-details.tsx +125 -0
- package/src/screens/predicates/predicate-list.tsx +50 -0
- package/src/screens/profile.tsx +68 -0
- package/src/screens/search/global-search.tsx +274 -0
- package/src/screens/settings/color-mode-dropdown.tsx +57 -0
- package/src/screens/settings/settings-page.tsx +76 -0
- package/src/screens/setup-user.tsx +367 -0
- package/src/screens/tools/tool-code.tsx +35 -0
- package/src/screens/tools/tool-details.tsx +101 -0
- package/src/screens/tools/tool-info.tsx +60 -0
- package/src/screens/tools/tool-list.tsx +121 -0
- package/src/screens/tools/tool-schema.tsx +42 -0
- package/src/screens/tools/tool-test-details.tsx +100 -0
- package/src/screens/tools/tool-test-list.tsx +74 -0
- package/src/screens/variables/variable-details.tsx +183 -0
- package/src/screens/variables/variable-list.tsx +74 -0
- package/src/screens/workflows/workflow-details.tsx +130 -0
- package/src/screens/workflows/workflow-info.tsx +29 -0
- package/src/screens/workflows/workflow-instructions.tsx +127 -0
- package/src/screens/workflows/workflow-list.tsx +107 -0
- package/src/screens/workflows/workflow-subscriptions.tsx +58 -0
- package/src/setupTests.ts +32 -0
- package/src/system-apps/assistants.app.ts +7 -0
- package/src/system-apps/contacts.app.ts +8 -0
- package/src/system-apps/events.app.ts +7 -0
- package/src/system-apps/groups.app.ts +8 -0
- package/src/system-apps/index.ts +79 -0
- package/src/system-apps/knowledge-frames.app.ts +8 -0
- package/src/system-apps/knowledge-values.app.ts +8 -0
- package/src/system-apps/packages.app.ts +7 -0
- package/src/system-apps/predicates.app.ts +7 -0
- package/src/system-apps/profile.app.ts +7 -0
- package/src/system-apps/search.app.ts +8 -0
- package/src/system-apps/settings.app.ts +7 -0
- package/src/system-apps/threads.app.ts +7 -0
- package/src/system-apps/tools.app.ts +7 -0
- package/src/system-apps/types.app.ts +7 -0
- package/src/system-apps/variables.app.ts +7 -0
- package/src/system-apps/workflows.app.ts +7 -0
- package/src/tabs-layout/tabs-layout.tsx +672 -0
- package/src/tabs-layout/tabs-state.ts +269 -0
- package/src/three-bar-layout/left-bar-content.tsx +202 -0
- package/src/three-bar-layout/right-bar-content.tsx +67 -0
- package/src/three-bar-layout/three-bar-layout.tsx +297 -0
- package/src/ui-defaults/index.ts +3 -0
- package/src/ui-defaults/list-screen.tsx +92 -0
- package/src/ui-defaults/notes-editor.tsx +51 -0
- package/src/ui-router/routes-loader.ts +98 -0
- package/src/ui-router/ui-loader.tsx +497 -0
- package/src/utils.ts +266 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# Contacts System App - Implementation Plan
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Contacts system app provides a unified interface for managing and viewing all users that the current user knows about, aggregated from both their personal database and all group databases they're a member of.
|
|
6
|
+
|
|
7
|
+
## Key Features
|
|
8
|
+
|
|
9
|
+
### **📋 Unified User Directory**
|
|
10
|
+
- **Personal Contacts**: Users stored in the user's personal `Users` table
|
|
11
|
+
- **Group Contacts**: Users discovered from `Users` tables across all joined groups
|
|
12
|
+
- **Deduplication**: Each user appears only once, prioritizing personal contacts over group contacts
|
|
13
|
+
- **Efficient Loading**: Cursor-based lazy loading to handle thousands of users
|
|
14
|
+
|
|
15
|
+
### **🔍 Smart Aggregation Strategy**
|
|
16
|
+
1. **Primary Source**: Load users from personal `Users` table first
|
|
17
|
+
2. **Secondary Sources**: Load users from group `Users` tables
|
|
18
|
+
3. **Deduplication Logic**: Skip users already shown from personal context
|
|
19
|
+
4. **Visual Separation**: Horizontal divider between personal and group-discovered users
|
|
20
|
+
|
|
21
|
+
## System App Definition
|
|
22
|
+
|
|
23
|
+
### **App Registration**
|
|
24
|
+
```typescript
|
|
25
|
+
// src/system-apps/contacts.app.ts
|
|
26
|
+
export const contactsApp: IAppNav = {
|
|
27
|
+
name: 'Contacts',
|
|
28
|
+
displayName: 'Contacts',
|
|
29
|
+
iconClassName: 'bi-person-fill-check',
|
|
30
|
+
navigationPath: 'contacts'
|
|
31
|
+
};
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### **Integration**
|
|
35
|
+
- Add to `systemApps` array in Core Management Apps section
|
|
36
|
+
- Register routes using modern `registerInternalPeersUI` system
|
|
37
|
+
|
|
38
|
+
## UI Architecture
|
|
39
|
+
|
|
40
|
+
### **Component Structure**
|
|
41
|
+
```
|
|
42
|
+
src/screens/contacts/
|
|
43
|
+
├── index.ts # Component imports and exports
|
|
44
|
+
├── contact-list.tsx # Main list screen with lazy loading
|
|
45
|
+
└── contact-details.tsx # Individual contact profile view (future)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### **List Screen Design**
|
|
49
|
+
```typescript
|
|
50
|
+
// Main component structure
|
|
51
|
+
export const ContactList = () => {
|
|
52
|
+
return (
|
|
53
|
+
<div className="container-fluid p-3">
|
|
54
|
+
<div className="d-flex justify-content-between align-items-center mb-3">
|
|
55
|
+
<h4>
|
|
56
|
+
<i className="bi-person-fill-check me-2" />
|
|
57
|
+
Contacts
|
|
58
|
+
</h4>
|
|
59
|
+
<UserStats />
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<SearchAndFilter />
|
|
63
|
+
<LazyUserList />
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Data Loading Strategy
|
|
70
|
+
|
|
71
|
+
### **Cursor-Based Lazy Loading**
|
|
72
|
+
Using `LazyScrollableList` component (following existing patterns):
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Load personal users first
|
|
76
|
+
const personalUsersLoader = async (cursor?: string, limit = 50) => {
|
|
77
|
+
const userContext = await getUserContext();
|
|
78
|
+
const personalUsersTable = Users(userContext.userDataContext);
|
|
79
|
+
|
|
80
|
+
return await personalUsersTable.list({
|
|
81
|
+
// Exclude current user
|
|
82
|
+
userId: { $ne: userContext.userId() }
|
|
83
|
+
}, {
|
|
84
|
+
cursor,
|
|
85
|
+
limit,
|
|
86
|
+
sortBy: ['name']
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// Load group users after personal users exhausted
|
|
91
|
+
const groupUsersLoader = async (cursor?: string, limit = 50) => {
|
|
92
|
+
const userContext = await getUserContext();
|
|
93
|
+
const groups = await Groups(userContext.userDataContext).list({});
|
|
94
|
+
|
|
95
|
+
// Aggregate users from all group contexts
|
|
96
|
+
const allGroupUsers = [];
|
|
97
|
+
for (const group of groups) {
|
|
98
|
+
const groupDataContext = userContext.getDataContext(group.groupId);
|
|
99
|
+
const groupUsersTable = Users(groupDataContext);
|
|
100
|
+
const groupUsers = await groupUsersTable.list({}, { cursor, limit });
|
|
101
|
+
allGroupUsers.push(...groupUsers.map(u => ({ ...u, sourceGroupId: group.groupId })));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return deduplicateUsers(allGroupUsers);
|
|
105
|
+
};
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### **Deduplication Logic**
|
|
109
|
+
```typescript
|
|
110
|
+
interface UserWithSource extends IUser {
|
|
111
|
+
sourceType: 'personal' | 'group';
|
|
112
|
+
sourceGroupId?: string;
|
|
113
|
+
sourceGroupName?: string;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const deduplicateUsers = (users: IUser[], seenUserIds: Set<string>) => {
|
|
117
|
+
return users.filter(user => {
|
|
118
|
+
if (seenUserIds.has(user.userId)) {
|
|
119
|
+
return false; // Skip already seen users
|
|
120
|
+
}
|
|
121
|
+
seenUserIds.add(user.userId);
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## UI Components
|
|
128
|
+
|
|
129
|
+
### **UserCard Component**
|
|
130
|
+
```typescript
|
|
131
|
+
interface UserCardProps {
|
|
132
|
+
user: UserWithSource;
|
|
133
|
+
isCurrentUser: boolean;
|
|
134
|
+
onViewDetails?: (userId: string) => void;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const UserCard = ({ user, isCurrentUser }: UserCardProps) => (
|
|
138
|
+
<div className="list-group-item d-flex align-items-center justify-content-between">
|
|
139
|
+
<div className="d-flex align-items-center">
|
|
140
|
+
<i className="bi-person-circle me-3" style={{ fontSize: '32px' }} />
|
|
141
|
+
<div>
|
|
142
|
+
<strong>
|
|
143
|
+
{user.name}
|
|
144
|
+
{isCurrentUser && ' (You)'}
|
|
145
|
+
</strong>
|
|
146
|
+
<div className="d-flex align-items-center">
|
|
147
|
+
<small className="text-muted">{user.userId}</small>
|
|
148
|
+
{user.sourceType === 'group' && (
|
|
149
|
+
<>
|
|
150
|
+
<span className="mx-1">•</span>
|
|
151
|
+
<small className="text-primary">
|
|
152
|
+
From: {user.sourceGroupName}
|
|
153
|
+
</small>
|
|
154
|
+
</>
|
|
155
|
+
)}
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div className="d-flex align-items-center">
|
|
161
|
+
{user.trustLevel && (
|
|
162
|
+
<TrustLevelBadge level={user.trustLevel} />
|
|
163
|
+
)}
|
|
164
|
+
<button className="btn btn-outline-primary btn-sm ms-2">
|
|
165
|
+
View Details
|
|
166
|
+
</button>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### **Section Headers**
|
|
173
|
+
```typescript
|
|
174
|
+
const SectionHeader = ({ title, icon, count }: SectionHeaderProps) => (
|
|
175
|
+
<div className="d-flex align-items-center justify-content-between mb-3 mt-4">
|
|
176
|
+
<h6 className="mb-0">
|
|
177
|
+
<i className={`${icon} me-2`} />
|
|
178
|
+
{title}
|
|
179
|
+
</h6>
|
|
180
|
+
<span className="badge bg-secondary">{count}</span>
|
|
181
|
+
</div>
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
// Usage
|
|
185
|
+
<SectionHeader
|
|
186
|
+
title="Personal Contacts"
|
|
187
|
+
icon="bi-person-fill"
|
|
188
|
+
count={personalUsers.length}
|
|
189
|
+
/>
|
|
190
|
+
|
|
191
|
+
<hr className="my-4" /> {/* Separator */}
|
|
192
|
+
|
|
193
|
+
<SectionHeader
|
|
194
|
+
title="Group Contacts"
|
|
195
|
+
icon="bi-people-fill"
|
|
196
|
+
count={groupUsers.length}
|
|
197
|
+
/>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Performance Optimizations
|
|
201
|
+
|
|
202
|
+
### **Lazy Loading Implementation**
|
|
203
|
+
```typescript
|
|
204
|
+
const LazyUserList = () => {
|
|
205
|
+
const [personalUsersComplete, setPersonalUsersComplete] = useState(false);
|
|
206
|
+
const [seenUserIds] = useState(new Set<string>());
|
|
207
|
+
|
|
208
|
+
return (
|
|
209
|
+
<div>
|
|
210
|
+
{/* Personal Users Section */}
|
|
211
|
+
<LazyScrollableList
|
|
212
|
+
loader={personalUsersLoader}
|
|
213
|
+
renderItem={(user) => (
|
|
214
|
+
<UserCard
|
|
215
|
+
user={{ ...user, sourceType: 'personal' }}
|
|
216
|
+
isCurrentUser={user.userId === currentUserId}
|
|
217
|
+
/>
|
|
218
|
+
)}
|
|
219
|
+
onComplete={() => setPersonalUsersComplete(true)}
|
|
220
|
+
onUserLoad={(user) => seenUserIds.add(user.userId)}
|
|
221
|
+
/>
|
|
222
|
+
|
|
223
|
+
{/* Separator when personal users complete */}
|
|
224
|
+
{personalUsersComplete && (
|
|
225
|
+
<>
|
|
226
|
+
<hr className="my-4" />
|
|
227
|
+
<SectionHeader title="Group Contacts" icon="bi-people-fill" />
|
|
228
|
+
</>
|
|
229
|
+
)}
|
|
230
|
+
|
|
231
|
+
{/* Group Users Section */}
|
|
232
|
+
{personalUsersComplete && (
|
|
233
|
+
<LazyScrollableList
|
|
234
|
+
loader={(cursor, limit) => groupUsersLoader(cursor, limit, seenUserIds)}
|
|
235
|
+
renderItem={(user) => (
|
|
236
|
+
<UserCard
|
|
237
|
+
user={{ ...user, sourceType: 'group' }}
|
|
238
|
+
isCurrentUser={user.userId === currentUserId}
|
|
239
|
+
/>
|
|
240
|
+
)}
|
|
241
|
+
/>
|
|
242
|
+
)}
|
|
243
|
+
</div>
|
|
244
|
+
);
|
|
245
|
+
};
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### **Search and Filtering**
|
|
249
|
+
```typescript
|
|
250
|
+
const SearchAndFilter = ({ onFilter }: SearchAndFilterProps) => {
|
|
251
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
252
|
+
const [sourceFilter, setSourceFilter] = useState<'all' | 'personal' | 'group'>('all');
|
|
253
|
+
|
|
254
|
+
return (
|
|
255
|
+
<div className="row g-2 mb-4">
|
|
256
|
+
<div className="col-md-8">
|
|
257
|
+
<div className="position-relative">
|
|
258
|
+
<i className="bi-search position-absolute" style={{ left: '12px', top: '50%', transform: 'translateY(-50%)' }} />
|
|
259
|
+
<input
|
|
260
|
+
type="text"
|
|
261
|
+
className="form-control"
|
|
262
|
+
placeholder="Search contacts by name or ID..."
|
|
263
|
+
value={searchTerm}
|
|
264
|
+
onChange={(e) => setSearchTerm(e.target.value)}
|
|
265
|
+
style={{ paddingLeft: '40px' }}
|
|
266
|
+
/>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
<div className="col-md-4">
|
|
270
|
+
<select
|
|
271
|
+
className="form-select"
|
|
272
|
+
value={sourceFilter}
|
|
273
|
+
onChange={(e) => setSourceFilter(e.target.value as any)}
|
|
274
|
+
>
|
|
275
|
+
<option value="all">All Contacts</option>
|
|
276
|
+
<option value="personal">Personal Only</option>
|
|
277
|
+
<option value="group">Group Only</option>
|
|
278
|
+
</select>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
);
|
|
282
|
+
};
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## User Statistics
|
|
286
|
+
|
|
287
|
+
### **Summary Component**
|
|
288
|
+
```typescript
|
|
289
|
+
const UserStats = () => {
|
|
290
|
+
const stats = usePromise(async () => {
|
|
291
|
+
const userContext = await getUserContext();
|
|
292
|
+
|
|
293
|
+
const personalCount = await Users(userContext.userDataContext).count({
|
|
294
|
+
userId: { $ne: userContext.userId() }
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
const groups = await Groups(userContext.userDataContext).list({});
|
|
298
|
+
let groupUsersCount = 0;
|
|
299
|
+
const uniqueGroupUsers = new Set<string>();
|
|
300
|
+
|
|
301
|
+
for (const group of groups) {
|
|
302
|
+
const groupDataContext = userContext.getDataContext(group.groupId);
|
|
303
|
+
const groupUsers = await Users(groupDataContext).list({});
|
|
304
|
+
groupUsers.forEach(u => uniqueGroupUsers.add(u.userId));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return {
|
|
308
|
+
personalContacts: personalCount,
|
|
309
|
+
groupContacts: uniqueGroupUsers.size,
|
|
310
|
+
totalGroups: groups.length
|
|
311
|
+
};
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
if (!stats) return null;
|
|
315
|
+
|
|
316
|
+
return (
|
|
317
|
+
<div className="d-flex gap-3">
|
|
318
|
+
<span className="badge bg-primary">{stats.personalContacts} Personal</span>
|
|
319
|
+
<span className="badge bg-secondary">{stats.groupContacts} From Groups</span>
|
|
320
|
+
<span className="badge bg-info">{stats.totalGroups} Groups</span>
|
|
321
|
+
</div>
|
|
322
|
+
);
|
|
323
|
+
};
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Trust Level Integration
|
|
327
|
+
|
|
328
|
+
### **Trust Level Badge**
|
|
329
|
+
```typescript
|
|
330
|
+
const TrustLevelBadge = ({ level }: { level: TrustLevel }) => {
|
|
331
|
+
const config = {
|
|
332
|
+
[TrustLevel.Trusted]: { color: 'success', icon: 'bi-shield-check', text: 'Trusted' },
|
|
333
|
+
[TrustLevel.Unknown]: { color: 'warning', icon: 'bi-shield-exclamation', text: 'Unknown' },
|
|
334
|
+
[TrustLevel.Blocked]: { color: 'danger', icon: 'bi-shield-x', text: 'Blocked' }
|
|
335
|
+
}[level];
|
|
336
|
+
|
|
337
|
+
return (
|
|
338
|
+
<span className={`badge bg-${config.color} d-flex align-items-center gap-1`}>
|
|
339
|
+
<i className={config.icon} />
|
|
340
|
+
{config.text}
|
|
341
|
+
</span>
|
|
342
|
+
);
|
|
343
|
+
};
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## Future Enhancements
|
|
347
|
+
|
|
348
|
+
### **Phase 2 Features**
|
|
349
|
+
- **Contact Details View**: Comprehensive user profiles with interaction history
|
|
350
|
+
- **Trust Level Management**: Update trust levels and manage blocked users
|
|
351
|
+
- **Contact Actions**: Message, invite to groups, share contacts
|
|
352
|
+
- **Advanced Search**: Filter by trust level, group membership, recent activity
|
|
353
|
+
|
|
354
|
+
### **Phase 3 Features**
|
|
355
|
+
- **Contact Import/Export**: Sync with external contact systems
|
|
356
|
+
- **Relationship Mapping**: Visualize user connections across groups
|
|
357
|
+
- **Activity Tracking**: Show recent interactions and shared content
|
|
358
|
+
- **Bulk Operations**: Manage multiple contacts simultaneously
|
|
359
|
+
|
|
360
|
+
## Implementation Checklist
|
|
361
|
+
|
|
362
|
+
### **Core Implementation**
|
|
363
|
+
- [ ] Create `contacts.app.ts` system app definition
|
|
364
|
+
- [ ] Add to systemApps array and router integration
|
|
365
|
+
- [ ] Implement `ContactList` component with lazy loading
|
|
366
|
+
- [ ] Create `UserCard` component with source attribution
|
|
367
|
+
- [ ] Implement cursor-based loading for personal users
|
|
368
|
+
- [ ] Implement cursor-based loading for group users
|
|
369
|
+
- [ ] Add deduplication logic with Set-based tracking
|
|
370
|
+
|
|
371
|
+
### **UI Polish**
|
|
372
|
+
- [ ] Add search and filtering functionality
|
|
373
|
+
- [ ] Implement user statistics summary
|
|
374
|
+
- [ ] Add section headers and visual separators
|
|
375
|
+
- [ ] Integrate trust level badges
|
|
376
|
+
- [ ] Add responsive design for mobile
|
|
377
|
+
|
|
378
|
+
### **Performance**
|
|
379
|
+
- [ ] Implement lazy scrollable list with virtualization
|
|
380
|
+
- [ ] Add proper loading states and error handling
|
|
381
|
+
- [ ] Optimize group user aggregation queries
|
|
382
|
+
- [ ] Add caching for expensive group discovery operations
|
|
383
|
+
|
|
384
|
+
This implementation will provide a comprehensive, performant contacts system that scales to thousands of users while maintaining a clean, intuitive interface.
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
preset: 'ts-jest',
|
|
3
|
+
testEnvironment: 'jsdom',
|
|
4
|
+
setupFilesAfterEnv: ['<rootDir>/src/setupTests.ts'],
|
|
5
|
+
moduleNameMapper: {
|
|
6
|
+
'\\.(css|less|scss|sass)$': 'identity-obj-proxy',
|
|
7
|
+
},
|
|
8
|
+
transform: {
|
|
9
|
+
'^.+\\.(ts|tsx)$': 'ts-jest',
|
|
10
|
+
},
|
|
11
|
+
testMatch: [
|
|
12
|
+
'<rootDir>/src/**/__tests__/**/*.(ts|tsx|js)',
|
|
13
|
+
'<rootDir>/src/**/?(*.)(spec|test).(ts|tsx|js)',
|
|
14
|
+
],
|
|
15
|
+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
16
|
+
collectCoverageFrom: [
|
|
17
|
+
'src/**/*.(ts|tsx)',
|
|
18
|
+
'!src/**/*.d.ts',
|
|
19
|
+
'!src/**/__tests__/**',
|
|
20
|
+
'!src/**/?(*.)(spec|test).*',
|
|
21
|
+
],
|
|
22
|
+
roots: ['<rootDir>/src'],
|
|
23
|
+
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
|
|
24
|
+
coveragePathIgnorePatterns: ['/node_modules/', '/dist/'],
|
|
25
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@peers-app/peers-ui",
|
|
3
|
+
"version": "0.0.14",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/peers-app/peers-ui.git"
|
|
7
|
+
},
|
|
8
|
+
"author": "Mark Archer <mark_archer@live.com>",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"clean": "rm -rf dist",
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"dev": "tsc -w",
|
|
19
|
+
"clean:build": "yarn clean && yarn build",
|
|
20
|
+
"deploy": "yarn clean && yarn build && npm version patch && npm publish && git push",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test:watch": "jest --watch",
|
|
23
|
+
"test:coverage": "jest --coverage"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"bootstrap": "^5.3.3",
|
|
27
|
+
"@peers-app/peers-sdk": "^0.1.4",
|
|
28
|
+
"react": "^18.0.0",
|
|
29
|
+
"react-dom": "^18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@babel/core": "^7.24.5",
|
|
33
|
+
"@babel/preset-env": "^7.24.5",
|
|
34
|
+
"@babel/preset-react": "^7.24.1",
|
|
35
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
36
|
+
"@electron/rebuild": "^3.6.0",
|
|
37
|
+
"@testing-library/dom": "^10.4.0",
|
|
38
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
39
|
+
"@testing-library/react": "^16.3.0",
|
|
40
|
+
"@testing-library/user-event": "^14.6.1",
|
|
41
|
+
"@types/bootstrap": "^5.2.10",
|
|
42
|
+
"@types/dompurify": "^3.0.5",
|
|
43
|
+
"@types/jest": "^29.5.12",
|
|
44
|
+
"@types/lodash": "^4.17.1",
|
|
45
|
+
"@types/node": "^20.12.10",
|
|
46
|
+
"@types/prismjs": "^1.26.4",
|
|
47
|
+
"@types/react": "^18.3.1",
|
|
48
|
+
"@types/react-dom": "^18.3.0",
|
|
49
|
+
"@types/semver": "^7.5.8",
|
|
50
|
+
"@types/ws": "^8.5.12",
|
|
51
|
+
"babel-loader": "^9.1.3",
|
|
52
|
+
"bootstrap": "^5.3.3",
|
|
53
|
+
"identity-obj-proxy": "^3.0.0",
|
|
54
|
+
"jest": "^29.7.0",
|
|
55
|
+
"jest-environment-jsdom": "^30.0.5",
|
|
56
|
+
"path-browserify": "^1.0.1",
|
|
57
|
+
"@peers-app/peers-sdk": "^0.1.4",
|
|
58
|
+
"react": "^18.0.0",
|
|
59
|
+
"react-dom": "^18.0.0",
|
|
60
|
+
"string-width": "^7.1.0",
|
|
61
|
+
"ts-jest": "^29.1.2",
|
|
62
|
+
"ts-node": "^10.9.2",
|
|
63
|
+
"typescript": "^5.4.5",
|
|
64
|
+
"webpack": "^5.91.0",
|
|
65
|
+
"webpack-cli": "^5.1.4"
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@langchain/community": "^0.0.55",
|
|
69
|
+
"@langchain/core": "^0.1.62",
|
|
70
|
+
"@lexical/code": "^0.20.0",
|
|
71
|
+
"@lexical/list": "^0.20.0",
|
|
72
|
+
"@lexical/markdown": "^0.20.0",
|
|
73
|
+
"@lexical/react": "^0.20.0",
|
|
74
|
+
"@types/sortablejs": "^1.15.8",
|
|
75
|
+
"bootstrap": "^5.3.3",
|
|
76
|
+
"bootstrap-icons": "^1.11.3",
|
|
77
|
+
"cheerio": "^1.0.0-rc.12",
|
|
78
|
+
"cheminfo-types": "^1.7.3",
|
|
79
|
+
"compression-webpack-plugin": "^11.1.0",
|
|
80
|
+
"cron-parser": "^4.9.0",
|
|
81
|
+
"cron-validate": "^1.4.5",
|
|
82
|
+
"css-loader": "^7.1.1",
|
|
83
|
+
"dompurify": "^3.1.4",
|
|
84
|
+
"dotenv": "^16.4.5",
|
|
85
|
+
"fast-json-stable-stringify": "^2.1.0",
|
|
86
|
+
"js-sha256": "^0.11.0",
|
|
87
|
+
"keytar": "^7.9.0",
|
|
88
|
+
"langchain": "^0.1.36",
|
|
89
|
+
"lexical": "^0.20.0",
|
|
90
|
+
"lodash": "^4.17.21",
|
|
91
|
+
"ml-tree-similarity": "^2.2.0",
|
|
92
|
+
"moment": "^2.30.1",
|
|
93
|
+
"moment-timezone": "^0.5.46",
|
|
94
|
+
"react-infinite-scroll-component": "^6.1.0",
|
|
95
|
+
"react-markdown": "^9.0.1",
|
|
96
|
+
"react-split-pane": "^0.1.92",
|
|
97
|
+
"react-tiny-popover": "^8.0.4",
|
|
98
|
+
"remark-gfm": "^4.0.0",
|
|
99
|
+
"socket.io": "^4.7.5",
|
|
100
|
+
"socket.io-client": "^4.8.0",
|
|
101
|
+
"sortablejs": "^1.15.6",
|
|
102
|
+
"source-map-loader": "^5.0.0",
|
|
103
|
+
"style-loader": "^4.0.0",
|
|
104
|
+
"svg-inline-loader": "^0.8.2",
|
|
105
|
+
"ts-loader": "^9.5.1",
|
|
106
|
+
"tweetnacl": "^1.0.3",
|
|
107
|
+
"tweetnacl-util": "^0.15.1"
|
|
108
|
+
}
|
|
109
|
+
}
|
package/src/app.tsx
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { sleep } from "@peers-app/peers-sdk";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { LeftBar } from './components/left-bar';
|
|
4
|
+
import { TopBar } from './components/top-bar';
|
|
5
|
+
import { usePromise } from './hooks';
|
|
6
|
+
import { colorModePreference, ColorModePreference } from './screens/settings/color-mode-dropdown';
|
|
7
|
+
import { TabsLayout } from './tabs-layout/tabs-layout';
|
|
8
|
+
import './ui-router/ui-loader';
|
|
9
|
+
|
|
10
|
+
export const App = (props: { colorMode?: ColorModePreference}) => {
|
|
11
|
+
return <TabsLayout colorMode={props.colorMode} />;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const AppSimple = (props: { colorMode?: ColorModePreference}) => {
|
|
15
|
+
console.log('AppSimple waiting');
|
|
16
|
+
const loaded = usePromise(async () => {
|
|
17
|
+
await sleep(100);
|
|
18
|
+
return true;
|
|
19
|
+
});
|
|
20
|
+
if (!loaded) return false;
|
|
21
|
+
console.log('AppSimple loaded');
|
|
22
|
+
|
|
23
|
+
document.getElementById('appLoadingDiv')?.remove();
|
|
24
|
+
|
|
25
|
+
colorModePreference(props.colorMode);
|
|
26
|
+
|
|
27
|
+
// return (
|
|
28
|
+
// <div className='container'>
|
|
29
|
+
// <h1>Hi</h1>
|
|
30
|
+
// <main className="peers-main-content">
|
|
31
|
+
// HI! v2
|
|
32
|
+
// </main>
|
|
33
|
+
// <pre>
|
|
34
|
+
// {`
|
|
35
|
+
// hi
|
|
36
|
+
// hi
|
|
37
|
+
// hi
|
|
38
|
+
// hi
|
|
39
|
+
// hi
|
|
40
|
+
// hi
|
|
41
|
+
// hi
|
|
42
|
+
// `}
|
|
43
|
+
|
|
44
|
+
// </pre>
|
|
45
|
+
// </div>
|
|
46
|
+
// )
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div>
|
|
50
|
+
<TopBar />
|
|
51
|
+
<LeftBar />
|
|
52
|
+
{/* <NotificationsBar /> */}
|
|
53
|
+
{/* <MediaViewer /> */}
|
|
54
|
+
<main className="peers-main-content">
|
|
55
|
+
{/* <MainContentContainer /> */}
|
|
56
|
+
</main>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|