@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,158 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ChannelMessageList = void 0;
|
|
40
|
+
exports.getMessages = getMessages;
|
|
41
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
42
|
+
const lodash_1 = require("lodash");
|
|
43
|
+
const react_1 = __importStar(require("react"));
|
|
44
|
+
const react_infinite_scroll_component_1 = __importDefault(require("react-infinite-scroll-component"));
|
|
45
|
+
const globals_1 = require("../../globals");
|
|
46
|
+
const loading_indicator_1 = require("../loading-indicator");
|
|
47
|
+
const message_display_1 = require("./message-display");
|
|
48
|
+
const windowHeight = () => window.innerHeight;
|
|
49
|
+
const ChannelMessageList = (props) => {
|
|
50
|
+
const { height, channelId, batchSize } = props;
|
|
51
|
+
const [messages, setMessages] = (0, react_1.useState)([]);
|
|
52
|
+
const [allMessagesLoaded, setAllMessagesLoaded] = (0, react_1.useState)(false);
|
|
53
|
+
const messagesEndRef = react_1.default.useRef(null);
|
|
54
|
+
function scrollToBottom(behavior, delay = 100) {
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
messagesEndRef.current?.scrollIntoView({ behavior });
|
|
57
|
+
}, delay);
|
|
58
|
+
}
|
|
59
|
+
(0, react_1.useEffect)(() => {
|
|
60
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
61
|
+
props?.scrollChanged?.(entry.isIntersecting);
|
|
62
|
+
}, { threshold: 1.0 });
|
|
63
|
+
if (messagesEndRef.current) {
|
|
64
|
+
observer.observe(messagesEndRef.current);
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
if (messagesEndRef.current) {
|
|
68
|
+
observer.unobserve(messagesEndRef.current);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}, []);
|
|
72
|
+
function prependItems() {
|
|
73
|
+
const lastMessage = messages[messages.length - 1];
|
|
74
|
+
getMessages(batchSize, channelId, lastMessage)
|
|
75
|
+
.then(fetchedMessages => {
|
|
76
|
+
if (fetchedMessages.length === 0) {
|
|
77
|
+
setAllMessagesLoaded(true);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const _messages = (0, lodash_1.sortBy)([...messages, ...fetchedMessages], 'createdAt').reverse();
|
|
81
|
+
setMessages((0, lodash_1.uniqBy)(_messages, 'messageId'));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
const minHeightOfMessage = 20;
|
|
87
|
+
(0, react_1.useEffect)(() => {
|
|
88
|
+
if (!allMessagesLoaded && (!messages.length || messages.length * minHeightOfMessage < windowHeight())) {
|
|
89
|
+
prependItems();
|
|
90
|
+
}
|
|
91
|
+
}, [channelId, messages]);
|
|
92
|
+
const [effects] = (0, react_1.useState)(() => props.effects || {});
|
|
93
|
+
effects.pushMessage = (newMessage) => {
|
|
94
|
+
if ((messages.length > batchSize && (0, lodash_1.min)(messages.map(m => m.createdAt)) > newMessage.createdAt)
|
|
95
|
+
|| messages.find(m => m.messageId === newMessage.messageId)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
let _messages = (0, lodash_1.sortBy)([newMessage, ...messages], 'createdAt').reverse();
|
|
99
|
+
setMessages(_messages);
|
|
100
|
+
if (newMessage.userId === globals_1.me.userId && !newMessage.assistantId) {
|
|
101
|
+
scrollToBottom('instant', 1);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
scrollToBottom('smooth');
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
(0, react_1.useEffect)(() => {
|
|
108
|
+
const sub = (0, peers_sdk_1.Messages)().dataChanged.subscribe(evt => {
|
|
109
|
+
const message = evt.dataObject;
|
|
110
|
+
if (message.channelId !== channelId || message.messageParentId) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (evt.op === 'insert') {
|
|
114
|
+
effects.pushMessage(message);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return () => {
|
|
118
|
+
sub.unsubscribe();
|
|
119
|
+
};
|
|
120
|
+
}, [channelId]);
|
|
121
|
+
return (react_1.default.createElement("div", { id: "scrollableDiv", style: {
|
|
122
|
+
height,
|
|
123
|
+
overflow: 'auto',
|
|
124
|
+
display: 'flex',
|
|
125
|
+
flexDirection: 'column-reverse',
|
|
126
|
+
// marginBottom: '70px',
|
|
127
|
+
} },
|
|
128
|
+
react_1.default.createElement(react_infinite_scroll_component_1.default, { dataLength: messages.length, next: prependItems, style: { display: 'flex', flexDirection: 'column-reverse', overflow: 'hidden' }, inverse: true, hasMore: !allMessagesLoaded, loader: react_1.default.createElement(loading_indicator_1.LoadingIndicator, null), scrollableTarget: "scrollableDiv", endMessage: react_1.default.createElement(react_1.Fragment, null,
|
|
129
|
+
react_1.default.createElement("div", { className: "d-flex justify-content-center" }, messages[0] && (react_1.default.createElement("div", null, (new Date(messages[messages.length - 1].createdAt).toLocaleDateString())))),
|
|
130
|
+
react_1.default.createElement("div", { className: "d-flex justify-content-center" },
|
|
131
|
+
react_1.default.createElement("div", null,
|
|
132
|
+
react_1.default.createElement("i", null, "beginning of messages")))) },
|
|
133
|
+
react_1.default.createElement("div", { ref: messagesEndRef }),
|
|
134
|
+
messages.map((message, index) => {
|
|
135
|
+
return react_1.default.createElement(message_display_1.MessageDisplay, { key: message.messageId, message: message, messageAbove: messages[index + 1], index: index });
|
|
136
|
+
}))));
|
|
137
|
+
};
|
|
138
|
+
exports.ChannelMessageList = ChannelMessageList;
|
|
139
|
+
async function getMessages(batchSize, channelId, lastMessage) {
|
|
140
|
+
const query = {
|
|
141
|
+
channelId,
|
|
142
|
+
messageParentId: null,
|
|
143
|
+
};
|
|
144
|
+
if (lastMessage) {
|
|
145
|
+
query.messageId = { $lt: lastMessage.messageId };
|
|
146
|
+
}
|
|
147
|
+
const cursor = await (0, peers_sdk_1.Messages)().cursor(query, {
|
|
148
|
+
sortBy: ['-createdAt', '-messageId'],
|
|
149
|
+
});
|
|
150
|
+
const messages = [];
|
|
151
|
+
for await (const message of cursor) {
|
|
152
|
+
messages.push(message);
|
|
153
|
+
if (messages.length >= batchSize) {
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return messages;
|
|
158
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
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.ChannelMessages = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
39
|
+
const globals_1 = require("../../globals");
|
|
40
|
+
const channel_message_list_1 = require("./channel-message-list");
|
|
41
|
+
const message_compose_1 = require("./message-compose");
|
|
42
|
+
const ui_loader_1 = require("../../ui-router/ui-loader");
|
|
43
|
+
const ChannelMessages = (props) => {
|
|
44
|
+
const messagesEndRef = (0, react_1.useRef)(null);
|
|
45
|
+
const [effects] = (0, react_1.useState)(() => ({}));
|
|
46
|
+
const [scrolledToBottom, setScrolledToBottom] = (0, react_1.useState)(true);
|
|
47
|
+
let channelId = props.channelId;
|
|
48
|
+
// const scrollToBottom = (behavior: 'instant' | 'smooth' = 'instant') => {
|
|
49
|
+
// setTimeout(() => messagesEndRef.current?.scrollIntoView({ behavior }), 500);
|
|
50
|
+
// };
|
|
51
|
+
const sendMessage = (userMessage) => {
|
|
52
|
+
effects.pushMessage(userMessage);
|
|
53
|
+
(0, peers_sdk_1.Messages)().save(userMessage).then(message => {
|
|
54
|
+
(0, globals_1.openThread)(message.messageId);
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
channelId = channelId || globals_1.me.userId;
|
|
58
|
+
return (react_1.default.createElement("div", { className: "d-flex flex-column flex-col-reverse", style: {
|
|
59
|
+
// height: '100vh',
|
|
60
|
+
height: 'calc(100vh - 50px)',
|
|
61
|
+
// marginTop: '50px',
|
|
62
|
+
} },
|
|
63
|
+
react_1.default.createElement(channel_message_list_1.ChannelMessageList, { batchSize: 30, channelId: channelId,
|
|
64
|
+
// height="calc(100vh - 50px)"
|
|
65
|
+
height: '100vh', effects: effects, scrollChanged: setScrolledToBottom }),
|
|
66
|
+
react_1.default.createElement("div", { ref: messagesEndRef }),
|
|
67
|
+
react_1.default.createElement("div", { className: 'p-2 pt-1', style: {
|
|
68
|
+
boxShadow: scrolledToBottom ? '' : `0 -10px 11px -10px rgba(0, 0, 0, 0.9)`
|
|
69
|
+
} },
|
|
70
|
+
react_1.default.createElement(message_compose_1.MessageCompose, { channelId: channelId, onMessageSubmit: sendMessage }))));
|
|
71
|
+
};
|
|
72
|
+
exports.ChannelMessages = ChannelMessages;
|
|
73
|
+
(0, ui_loader_1.registerInternalPeersUI)({
|
|
74
|
+
peersUIId: '00m5fsd8d4jma58fgvyr1riny',
|
|
75
|
+
component: exports.ChannelMessages,
|
|
76
|
+
routes: [
|
|
77
|
+
{
|
|
78
|
+
isMatch: (props, context) => context.path === 'threads' || context.path === '',
|
|
79
|
+
uiCategory: 'screen'
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IFile, IMessage, PersistentVar } from "@peers-app/peers-sdk";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export declare function getContentPersistenceValue(channelId: string, threadId?: string): PersistentVar<string>;
|
|
4
|
+
interface IProps {
|
|
5
|
+
channelId: string;
|
|
6
|
+
threadId?: string;
|
|
7
|
+
onMessageSubmit: (message: IMessage, files?: IFile[]) => any;
|
|
8
|
+
}
|
|
9
|
+
export declare const MessageCompose: (props: IProps) => React.JSX.Element;
|
|
10
|
+
export declare function isMobile(): boolean;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,152 @@
|
|
|
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.MessageCompose = void 0;
|
|
37
|
+
exports.getContentPersistenceValue = getContentPersistenceValue;
|
|
38
|
+
exports.isMobile = isMobile;
|
|
39
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
40
|
+
const peers_sdk_2 = require("@peers-app/peers-sdk");
|
|
41
|
+
const react_1 = __importStar(require("react"));
|
|
42
|
+
const globals_1 = require("../../globals");
|
|
43
|
+
const hooks_1 = require("../../hooks");
|
|
44
|
+
const editor_1 = require("../markdown-editor/editor");
|
|
45
|
+
const pVarCache = {};
|
|
46
|
+
function getContentPersistenceValue(channelId, threadId) {
|
|
47
|
+
const contentPersistenceName = `messageCompose-channel-${channelId}${threadId ? '-thread-' + threadId : ''}`;
|
|
48
|
+
if (!pVarCache[contentPersistenceName]) {
|
|
49
|
+
pVarCache[contentPersistenceName] = (0, peers_sdk_1.userVar)(contentPersistenceName, { defaultValue: '' });
|
|
50
|
+
}
|
|
51
|
+
return pVarCache[contentPersistenceName];
|
|
52
|
+
}
|
|
53
|
+
const MessageCompose = (props) => {
|
|
54
|
+
const { channelId, threadId, onMessageSubmit } = props;
|
|
55
|
+
const [contentObs] = (0, react_1.useState)(() => (0, peers_sdk_1.observable)(''));
|
|
56
|
+
const [mdEffects] = (0, react_1.useState)(() => ({}));
|
|
57
|
+
const composeBottomRef = react_1.default.useRef(null);
|
|
58
|
+
function scrollToBottom() {
|
|
59
|
+
if (composeBottomRef?.current) {
|
|
60
|
+
composeBottomRef.current.scrollIntoView({ behavior: 'instant' });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
(0, react_1.useEffect)(() => {
|
|
64
|
+
let disposed = false;
|
|
65
|
+
let sub;
|
|
66
|
+
getContentPersistenceValue(channelId, threadId).loadingPromise.then(pVar => {
|
|
67
|
+
if (!disposed) {
|
|
68
|
+
contentObs(pVar() ?? '');
|
|
69
|
+
sub = contentObs.subscribe(() => pVar(contentObs()));
|
|
70
|
+
setTimeout(() => scrollToBottom(), 100);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return () => {
|
|
74
|
+
disposed = true;
|
|
75
|
+
sub?.dispose();
|
|
76
|
+
};
|
|
77
|
+
}, [channelId, threadId]);
|
|
78
|
+
(0, react_1.useEffect)(() => {
|
|
79
|
+
const sub = contentObs.subscribe(() => scrollToBottom());
|
|
80
|
+
return () => sub.dispose();
|
|
81
|
+
}, [contentObs]);
|
|
82
|
+
function submitMessage() {
|
|
83
|
+
const markdown = contentObs() ?? '';
|
|
84
|
+
contentObs('');
|
|
85
|
+
if (!markdown.trim()) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const userMessage = {
|
|
89
|
+
messageId: (0, peers_sdk_2.newid)(),
|
|
90
|
+
message: markdown,
|
|
91
|
+
userId: globals_1.me.userId,
|
|
92
|
+
channelId,
|
|
93
|
+
messageParentId: threadId,
|
|
94
|
+
createdAt: new Date(),
|
|
95
|
+
};
|
|
96
|
+
onMessageSubmit(userMessage);
|
|
97
|
+
}
|
|
98
|
+
return (react_1.default.createElement("div", { className: "border rounded border-dark-subtle", style: { overflowY: 'auto' } },
|
|
99
|
+
react_1.default.createElement(editor_1.MarkdownEditor, { value: contentObs, effects: mdEffects, autoFocus: !!threadId, maxHeight: '50vh' }),
|
|
100
|
+
react_1.default.createElement(BottomControls, { submitMessage: submitMessage, contentObs: contentObs, mdEffects: mdEffects }),
|
|
101
|
+
react_1.default.createElement("div", { ref: composeBottomRef })));
|
|
102
|
+
};
|
|
103
|
+
exports.MessageCompose = MessageCompose;
|
|
104
|
+
const BottomControls = (props) => {
|
|
105
|
+
const { submitMessage, contentObs } = props;
|
|
106
|
+
const [content] = (0, hooks_1.useObservable)(contentObs, [contentObs]);
|
|
107
|
+
const [submitOnEnter] = (0, react_1.useState)(() => (0, peers_sdk_1.deviceVar)(`messageCompose-submitOnEnter`, { defaultValue: true }));
|
|
108
|
+
(0, hooks_1.useObservable)(submitOnEnter);
|
|
109
|
+
if (isMobile()) {
|
|
110
|
+
submitOnEnter(false);
|
|
111
|
+
}
|
|
112
|
+
function onKeyDown(evt) {
|
|
113
|
+
if (evt.code === 'Enter' && !evt.ctrlKey && !evt.shiftKey && !evt.altKey && !evt.metaKey) {
|
|
114
|
+
if (submitOnEnter()) {
|
|
115
|
+
submitMessage();
|
|
116
|
+
evt.preventDefault();
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (evt.code === 'Enter' && (evt.ctrlKey || evt.metaKey)) {
|
|
121
|
+
if (!submitOnEnter()) {
|
|
122
|
+
submitMessage();
|
|
123
|
+
evt.preventDefault();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
props.mdEffects.onKeyDown = onKeyDown;
|
|
129
|
+
return (react_1.default.createElement("div", null,
|
|
130
|
+
react_1.default.createElement("div", { className: 'float-end small' },
|
|
131
|
+
react_1.default.createElement("span", { className: 'small', hidden: isMobile() },
|
|
132
|
+
react_1.default.createElement("input", { type: "checkbox", id: "sendOnEnter", checked: !!submitOnEnter(), onChange: evt => submitOnEnter(evt.target.checked) }),
|
|
133
|
+
" Send on Enter"),
|
|
134
|
+
"\u00A0\u00A0",
|
|
135
|
+
content.trim()?.length === 0
|
|
136
|
+
? (react_1.default.createElement("button", { className: "btn btn-sm btn-outline", type: "button", disabled: true },
|
|
137
|
+
"Send \u00A0",
|
|
138
|
+
react_1.default.createElement("i", { className: "bi bi-send-fill" })))
|
|
139
|
+
: (react_1.default.createElement("button", { className: "btn btn-sm btn-success", type: "button", onClick: props.submitMessage },
|
|
140
|
+
"Send \u00A0",
|
|
141
|
+
react_1.default.createElement("i", { className: "bi bi-send-fill" }))))));
|
|
142
|
+
};
|
|
143
|
+
function isMobile() {
|
|
144
|
+
if (navigator?.userAgentData?.mobile) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
let check = false;
|
|
148
|
+
// @ts-ignore
|
|
149
|
+
(function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
|
|
150
|
+
check = true; })(navigator.userAgent || navigator.vendor || window.opera);
|
|
151
|
+
return check;
|
|
152
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMessage } from "@peers-app/peers-sdk";
|
|
3
|
+
interface IProps {
|
|
4
|
+
message: IMessage;
|
|
5
|
+
messageAbove?: IMessage;
|
|
6
|
+
isThreadParent?: boolean;
|
|
7
|
+
index?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const MessageDisplay: (props: IProps) => React.JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.MessageDisplay = void 0;
|
|
40
|
+
const react_1 = __importStar(require("react"));
|
|
41
|
+
const avatar_1 = require("./avatar");
|
|
42
|
+
// import { FileListDisplay } from './file-list-display';
|
|
43
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
44
|
+
const moment_1 = __importDefault(require("moment"));
|
|
45
|
+
const globals_1 = require("../../globals");
|
|
46
|
+
const hooks_1 = require("../../hooks");
|
|
47
|
+
const markdown_with_mentions_1 = require("../markdown-with-mentions");
|
|
48
|
+
const message_logs_1 = require("../message-logs/message-logs");
|
|
49
|
+
const MessageDisplay = (props) => {
|
|
50
|
+
const { message, messageAbove, isThreadParent } = props;
|
|
51
|
+
const [messageId, setMessageId] = (0, react_1.useState)(message.messageId);
|
|
52
|
+
(0, hooks_1.useSubscription)(globals_1.openThreads, () => {
|
|
53
|
+
});
|
|
54
|
+
const [user, setUser] = (0, react_1.useState)();
|
|
55
|
+
const [messageChangedTime, setMessageChangedTime] = (0, react_1.useState)(0);
|
|
56
|
+
const assistant = (0, hooks_1.usePromise)(async () => {
|
|
57
|
+
if (message.assistantId) {
|
|
58
|
+
return (0, peers_sdk_1.Assistants)().get(message.assistantId);
|
|
59
|
+
}
|
|
60
|
+
}, undefined, [message.assistantId]);
|
|
61
|
+
const countReplies = (0, hooks_1.usePromise)(() => (0, peers_sdk_1.Messages)().count({ messageParentId: messageId }), 1, [messageId, messageChangedTime]);
|
|
62
|
+
const [showMenu] = (0, react_1.useState)(() => (0, peers_sdk_1.observable)(false));
|
|
63
|
+
(0, react_1.useEffect)(() => {
|
|
64
|
+
setMessageId(message.messageId);
|
|
65
|
+
const sub = (0, peers_sdk_1.Messages)().dataChanged.subscribe((evt) => {
|
|
66
|
+
const changedMessage = evt.dataObject;
|
|
67
|
+
if (changedMessage.messageId === messageId || changedMessage.messageParentId === messageId) {
|
|
68
|
+
setMessageChangedTime(Date.now());
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return () => {
|
|
72
|
+
sub.unsubscribe();
|
|
73
|
+
};
|
|
74
|
+
}, [message]);
|
|
75
|
+
// calculate short time string
|
|
76
|
+
const messageDate = new Date(message.createdAt);
|
|
77
|
+
let hour = messageDate.getHours();
|
|
78
|
+
const minute = messageDate.getMinutes().toString().padStart(2, '0');
|
|
79
|
+
let ampm = "AM";
|
|
80
|
+
if (hour > 11) {
|
|
81
|
+
ampm = "PM";
|
|
82
|
+
}
|
|
83
|
+
if (hour > 12) {
|
|
84
|
+
hour = hour - 12;
|
|
85
|
+
}
|
|
86
|
+
let timeStr = `${hour || 12}:${minute} ${ampm}`;
|
|
87
|
+
const showDateDivider = messageAbove
|
|
88
|
+
&& messageDate.toDateString() !== (new Date(messageAbove.createdAt)).toDateString();
|
|
89
|
+
const showUserInfo = showDateDivider
|
|
90
|
+
|| !messageAbove || !message
|
|
91
|
+
|| messageAbove.userId !== message.userId
|
|
92
|
+
|| messageAbove.assistantId !== message.assistantId
|
|
93
|
+
|| messageDate.getHours() !== (new Date(messageAbove.createdAt)).getHours()
|
|
94
|
+
|| countReplies > 0;
|
|
95
|
+
// // show time of this message if hour is different than last message
|
|
96
|
+
// const showTime = !showUserInfo
|
|
97
|
+
// && messageDate.getHours() !== (new Date(messageAbove.modified)).getHours();
|
|
98
|
+
const isThreadView = isThreadParent || message.messageParentId;
|
|
99
|
+
const dateTimeStr = (0, moment_1.default)(message.createdAt).calendar().split(' at ')[0] + ' ' + timeStr;
|
|
100
|
+
if (isThreadParent) {
|
|
101
|
+
timeStr = dateTimeStr;
|
|
102
|
+
}
|
|
103
|
+
let messageParsed = message.message.trim();
|
|
104
|
+
return (react_1.default.createElement("div", { className: isThreadParent ? '' : `peers-message-container`, onMouseEnter: () => showMenu(true), onMouseLeave: () => showMenu(false) },
|
|
105
|
+
react_1.default.createElement(MessageMenu, { message: message, showMenu: showMenu, isThreadView: !!isThreadView }),
|
|
106
|
+
showDateDivider && (react_1.default.createElement("div", { style: { marginTop: `20px` } },
|
|
107
|
+
react_1.default.createElement("hr", null),
|
|
108
|
+
react_1.default.createElement("div", { className: "d-flex justify-content-center" },
|
|
109
|
+
react_1.default.createElement("span", { className: 'message-display-list-date', style: {
|
|
110
|
+
position: 'relative',
|
|
111
|
+
top: '-29px',
|
|
112
|
+
paddingLeft: '11px',
|
|
113
|
+
paddingRight: '11px',
|
|
114
|
+
fontSize: '16px',
|
|
115
|
+
borderRadius: '20px',
|
|
116
|
+
} },
|
|
117
|
+
react_1.default.createElement("strong", null, (0, moment_1.default)(message.createdAt).calendar().split(' at ')[0].replace('Last', '')))))),
|
|
118
|
+
showUserInfo && (react_1.default.createElement("div", { style: { marginTop: '15px' } })),
|
|
119
|
+
react_1.default.createElement("div", { className: "d-flex" },
|
|
120
|
+
react_1.default.createElement("div", { className: "p-0 flex-shrink-0 justify-content-center align-items-center", style: {
|
|
121
|
+
width: '46px',
|
|
122
|
+
height: '20px',
|
|
123
|
+
overflow: 'visible',
|
|
124
|
+
// zIndex: message.modified,
|
|
125
|
+
position: 'relative',
|
|
126
|
+
top: '4px',
|
|
127
|
+
left: '3px',
|
|
128
|
+
} }, showUserInfo && react_1.default.createElement(avatar_1.Avatar, { userId: message.userId, assistantId: message.assistantId, setUser: setUser })),
|
|
129
|
+
react_1.default.createElement("div", { className: "p-1 flex-grow-1 justify-content-start text-break", style: {
|
|
130
|
+
maxWidth: 'calc(100% - 50px)',
|
|
131
|
+
} },
|
|
132
|
+
showUserInfo && (react_1.default.createElement("div", { className: "peers-message" },
|
|
133
|
+
react_1.default.createElement("span", { style: { fontSize: '9pt' } },
|
|
134
|
+
react_1.default.createElement("b", null, assistant?.name || message?.assistantId || user?.name || message.userId)),
|
|
135
|
+
react_1.default.createElement("span", { className: "text-muted sub-sup-font-size", style: { fontSize: '8pt' }, title: dateTimeStr },
|
|
136
|
+
"\u00A0\u00A0",
|
|
137
|
+
timeStr))),
|
|
138
|
+
messageParsed.length > 0 && (react_1.default.createElement("div", { className: "peers-message" },
|
|
139
|
+
react_1.default.createElement(markdown_with_mentions_1.MarkdownWithMentions, { content: messageParsed }))),
|
|
140
|
+
react_1.default.createElement(message_logs_1.MessageLogs, { key: messageId, messageId: messageId }),
|
|
141
|
+
!isThreadView && countReplies > 0 && (react_1.default.createElement("div", { className: "d-inline" },
|
|
142
|
+
"\u00A0",
|
|
143
|
+
react_1.default.createElement("button", { className: "btn btn-sm btn-link m-1", onClick: () => (0, globals_1.openThread)(message.messageParentId || messageId), tabIndex: props.index }, countReplies === 1 ? '1 reply' : countReplies + ' replies'))))),
|
|
144
|
+
message?.fileIds?.length && (react_1.default.createElement("div", { style: { marginLeft: '46px' } })) || undefined));
|
|
145
|
+
};
|
|
146
|
+
exports.MessageDisplay = MessageDisplay;
|
|
147
|
+
const MessageMenu = (props) => {
|
|
148
|
+
const { message, isThreadView, showMenu } = props;
|
|
149
|
+
(0, hooks_1.useObservable)(showMenu);
|
|
150
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, showMenu() && !isThreadView && (react_1.default.createElement("div", { className: "message-hover-menu" },
|
|
151
|
+
react_1.default.createElement("button", { className: "btn btn-sm btn-link m-1", onClick: () => (0, globals_1.openThread)(message.messageParentId || message.messageId) }, "Reply")))));
|
|
152
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMessage } from "@peers-app/peers-sdk";
|
|
3
|
+
interface IProps {
|
|
4
|
+
threadId: string;
|
|
5
|
+
effects?: {
|
|
6
|
+
pushMessage: (message: IMessage) => any;
|
|
7
|
+
};
|
|
8
|
+
scrollChanged?: (isBottomInView: boolean) => any;
|
|
9
|
+
}
|
|
10
|
+
export declare const ThreadMessageList: (props: IProps) => false | React.JSX.Element;
|
|
11
|
+
export {};
|