@peers-app/peers-ui 0.14.0 → 0.15.0
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/workflows/publish.yml +8 -5
- package/babel.config.js +4 -4
- package/biome.json +191 -0
- package/dist/command-palette/command-palette-ui.d.ts +1 -2
- package/dist/command-palette/command-palette-ui.js +175 -244
- package/dist/command-palette/command-palette.js +65 -64
- package/dist/components/chat-overlay.d.ts +2 -2
- package/dist/components/chat-overlay.js +160 -217
- package/dist/components/checkbox.d.ts +5 -4
- package/dist/components/checkbox.js +4 -7
- package/dist/components/group-switcher.d.ts +1 -2
- package/dist/components/group-switcher.js +119 -159
- package/dist/components/input-date.d.ts +3 -3
- package/dist/components/input-date.js +6 -6
- package/dist/components/input-number.d.ts +7 -6
- package/dist/components/input-number.js +25 -20
- package/dist/components/input.d.ts +5 -4
- package/dist/components/input.js +4 -7
- package/dist/components/inverse-lazy-list.d.ts +3 -3
- package/dist/components/inverse-lazy-list.js +13 -47
- package/dist/components/io-schema-values.d.ts +5 -6
- package/dist/components/io-schema-values.js +28 -65
- package/dist/components/io-schema.d.ts +4 -5
- package/dist/components/io-schema.js +42 -79
- package/dist/components/lazy-list.d.ts +3 -3
- package/dist/components/lazy-list.js +38 -58
- package/dist/components/list-screen.d.ts +3 -8
- package/dist/components/list-screen.js +28 -23
- package/dist/components/loading-indicator.d.ts +1 -2
- package/dist/components/loading-indicator.js +2 -6
- package/dist/components/markdown-editor/autolink-plugin.js +5 -8
- package/dist/components/markdown-editor/editor-inline.d.ts +2 -3
- package/dist/components/markdown-editor/editor-inline.js +2 -6
- package/dist/components/markdown-editor/editor.d.ts +6 -6
- package/dist/components/markdown-editor/editor.js +9 -19
- package/dist/components/markdown-editor/markdown-plugin.d.ts +1 -1
- package/dist/components/markdown-editor/markdown-plugin.js +20 -21
- package/dist/components/markdown-editor/mention-node.d.ts +2 -2
- package/dist/components/markdown-editor/mention-node.js +24 -24
- package/dist/components/markdown-editor/mentions-plugin.d.ts +2 -2
- package/dist/components/markdown-editor/mentions-plugin.js +61 -62
- package/dist/components/markdown-editor/theme.js +28 -28
- package/dist/components/markdown-editor/toolbar.d.ts +2 -3
- package/dist/components/markdown-editor/toolbar.js +32 -49
- package/dist/components/markdown-with-mentions.d.ts +1 -1
- package/dist/components/markdown-with-mentions.js +43 -43
- package/dist/components/message-logs/message-logs.d.ts +1 -2
- package/dist/components/message-logs/message-logs.js +91 -116
- package/dist/components/messages/avatar.d.ts +3 -4
- package/dist/components/messages/avatar.js +37 -46
- package/dist/components/messages/channel-message-list.d.ts +5 -6
- package/dist/components/messages/channel-message-list.js +34 -34
- package/dist/components/messages/channel-view.d.ts +1 -2
- package/dist/components/messages/channel-view.js +23 -57
- package/dist/components/messages/message-compose.d.ts +3 -4
- package/dist/components/messages/message-compose.js +27 -38
- package/dist/components/messages/message-display.d.ts +2 -3
- package/dist/components/messages/message-display.js +42 -95
- package/dist/components/messages/thread-message-list.d.ts +4 -5
- package/dist/components/messages/thread-message-list.js +29 -29
- package/dist/components/router.d.ts +1 -2
- package/dist/components/router.js +58 -66
- package/dist/components/save-button.d.ts +3 -3
- package/dist/components/save-button.js +23 -33
- package/dist/components/sortable-list.d.ts +11 -12
- package/dist/components/sortable-list.js +42 -22
- package/dist/components/tabs.d.ts +3 -3
- package/dist/components/tabs.js +16 -47
- package/dist/components/tooltip.d.ts +4 -4
- package/dist/components/tooltip.js +4 -9
- package/dist/components/trust-level-badge.d.ts +2 -3
- package/dist/components/trust-level-badge.js +16 -16
- package/dist/components/trust-level-dropdown.d.ts +3 -4
- package/dist/components/trust-level-dropdown.js +32 -55
- package/dist/components/typeahead.d.ts +3 -3
- package/dist/components/typeahead.js +48 -89
- package/dist/components/voice-indicator.d.ts +2 -2
- package/dist/components/voice-indicator.js +93 -106
- package/dist/components/voice-subscribe-events.d.ts +32 -0
- package/dist/components/voice-subscribe-events.js +2 -0
- package/dist/globals.d.ts +3 -5
- package/dist/globals.js +22 -33
- package/dist/hooks.d.ts +5 -5
- package/dist/hooks.js +22 -12
- package/dist/hooks.test.js +129 -145
- package/dist/index.d.ts +9 -8
- package/dist/index.js +13 -12
- package/dist/mention-configs.d.ts +2 -2
- package/dist/mention-configs.js +55 -42
- package/dist/screens/assistants/assistant-config.d.ts +2 -3
- package/dist/screens/assistants/assistant-config.js +9 -22
- package/dist/screens/assistants/assistant-details.d.ts +1 -2
- package/dist/screens/assistants/assistant-details.js +13 -28
- package/dist/screens/assistants/assistant-info.d.ts +2 -3
- package/dist/screens/assistants/assistant-info.js +3 -17
- package/dist/screens/assistants/assistant-list.d.ts +1 -2
- package/dist/screens/assistants/assistant-list.js +15 -56
- package/dist/screens/assistants/assistant-tools.d.ts +2 -3
- package/dist/screens/assistants/assistant-tools.js +10 -24
- package/dist/screens/console-logs/console-logs-list.d.ts +1 -2
- package/dist/screens/console-logs/console-logs-list.js +130 -134
- package/dist/screens/console-logs/log-display.d.ts +2 -3
- package/dist/screens/console-logs/log-display.js +40 -42
- package/dist/screens/console-logs/log-filters.d.ts +1 -2
- package/dist/screens/console-logs/log-filters.js +2 -24
- package/dist/screens/console-logs/mobile-log-card.d.ts +2 -3
- package/dist/screens/console-logs/mobile-log-card.js +64 -67
- package/dist/screens/console-logs/resizable-table-header.d.ts +1 -2
- package/dist/screens/console-logs/resizable-table-header.js +31 -67
- package/dist/screens/contacts/contact-details.d.ts +1 -2
- package/dist/screens/contacts/contact-details.js +16 -46
- package/dist/screens/contacts/contact-list.d.ts +1 -2
- package/dist/screens/contacts/contact-list.js +44 -103
- package/dist/screens/contacts/index.d.ts +4 -4
- package/dist/screens/contacts/index.js +1 -1
- package/dist/screens/contacts/user-connect.d.ts +1 -2
- package/dist/screens/contacts/user-connect.js +85 -186
- package/dist/screens/data-explorer/data-explorer.d.ts +1 -2
- package/dist/screens/data-explorer/data-explorer.js +61 -181
- package/dist/screens/data-explorer/index.d.ts +2 -2
- package/dist/screens/data-explorer/query-executor.d.ts +1 -2
- package/dist/screens/data-explorer/query-executor.js +56 -166
- package/dist/screens/groups/group-details.d.ts +1 -2
- package/dist/screens/groups/group-details.js +27 -122
- package/dist/screens/groups/group-invite-listener.d.ts +2 -3
- package/dist/screens/groups/group-invite-listener.js +8 -104
- package/dist/screens/groups/group-list.d.ts +1 -2
- package/dist/screens/groups/group-list.js +56 -133
- package/dist/screens/groups/group-members.d.ts +2 -3
- package/dist/screens/groups/group-members.js +62 -132
- package/dist/screens/groups/index.d.ts +4 -4
- package/dist/screens/groups/index.js +1 -1
- package/dist/screens/join-group/index.d.ts +2 -2
- package/dist/screens/join-group/join-group.d.ts +1 -2
- package/dist/screens/join-group/join-group.js +9 -109
- package/dist/screens/network-viewer/connection-troubleshooter.d.ts +2 -3
- package/dist/screens/network-viewer/connection-troubleshooter.js +89 -193
- package/dist/screens/network-viewer/cpu-usage-graph.d.ts +1 -2
- package/dist/screens/network-viewer/cpu-usage-graph.js +60 -99
- package/dist/screens/network-viewer/device-details-modal.d.ts +1 -2
- package/dist/screens/network-viewer/device-details-modal.js +25 -177
- package/dist/screens/network-viewer/group-details-modal.d.ts +1 -2
- package/dist/screens/network-viewer/group-details-modal.js +31 -142
- package/dist/screens/network-viewer/index.d.ts +4 -4
- package/dist/screens/network-viewer/index.js +3 -3
- package/dist/screens/network-viewer/network-viewer-ipc.d.ts +22 -0
- package/dist/screens/network-viewer/network-viewer-ipc.js +6 -0
- package/dist/screens/network-viewer/network-viewer.d.ts +1 -2
- package/dist/screens/network-viewer/network-viewer.js +91 -296
- package/dist/screens/network-viewer/usage-graph.d.ts +1 -2
- package/dist/screens/network-viewer/usage-graph.js +78 -110
- package/dist/screens/packages/package-details.d.ts +1 -2
- package/dist/screens/packages/package-details.js +35 -41
- package/dist/screens/packages/package-info.d.ts +2 -2
- package/dist/screens/packages/package-info.js +33 -86
- package/dist/screens/packages/package-list.d.ts +1 -2
- package/dist/screens/packages/package-list.js +42 -106
- package/dist/screens/packages/package-new-local.d.ts +1 -2
- package/dist/screens/packages/package-new-local.js +13 -19
- package/dist/screens/packages/package-versions.d.ts +2 -3
- package/dist/screens/packages/package-versions.js +29 -96
- package/dist/screens/peer-types/peer-type-details.d.ts +3 -4
- package/dist/screens/peer-types/peer-type-details.js +26 -78
- package/dist/screens/peer-types/peer-type-list.d.ts +1 -2
- package/dist/screens/peer-types/peer-type-list.js +13 -24
- package/dist/screens/search/global-search.d.ts +1 -2
- package/dist/screens/search/global-search.js +104 -182
- package/dist/screens/settings/color-mode-dropdown.d.ts +3 -4
- package/dist/screens/settings/color-mode-dropdown.js +18 -37
- package/dist/screens/settings/settings-page.d.ts +1 -1
- package/dist/screens/settings/settings-page.js +86 -213
- package/dist/screens/settings/voice-settings-agent.d.ts +1 -1
- package/dist/screens/settings/voice-settings-agent.js +7 -44
- package/dist/screens/settings/voice-settings-api-keys.d.ts +2 -2
- package/dist/screens/settings/voice-settings-api-keys.js +2 -29
- package/dist/screens/settings/voice-settings-output.d.ts +2 -2
- package/dist/screens/settings/voice-settings-output.js +2 -40
- package/dist/screens/settings/voice-settings-providers.d.ts +2 -2
- package/dist/screens/settings/voice-settings-providers.js +2 -19
- package/dist/screens/settings/voice-settings-types.d.ts +4 -4
- package/dist/screens/settings/voice-settings-types.js +31 -31
- package/dist/screens/settings/voice-settings-wake-word.d.ts +2 -2
- package/dist/screens/settings/voice-settings-wake-word.js +2 -33
- package/dist/screens/settings/voice-settings.d.ts +1 -1
- package/dist/screens/settings/voice-settings.js +35 -112
- package/dist/screens/setup-user.d.ts +1 -2
- package/dist/screens/setup-user.js +38 -116
- package/dist/screens/tools/tool-code.d.ts +2 -3
- package/dist/screens/tools/tool-code.js +9 -13
- package/dist/screens/tools/tool-details.d.ts +1 -2
- package/dist/screens/tools/tool-details.js +26 -39
- package/dist/screens/tools/tool-info.d.ts +2 -3
- package/dist/screens/tools/tool-info.js +9 -48
- package/dist/screens/tools/tool-list.d.ts +1 -2
- package/dist/screens/tools/tool-list.js +33 -65
- package/dist/screens/tools/tool-schema.d.ts +2 -3
- package/dist/screens/tools/tool-schema.js +2 -13
- package/dist/screens/tools/tool-test-details.d.ts +1 -2
- package/dist/screens/tools/tool-test-details.js +12 -28
- package/dist/screens/tools/tool-test-list.d.ts +1 -2
- package/dist/screens/tools/tool-test-list.js +17 -56
- package/dist/screens/variables/variable-details.d.ts +1 -2
- package/dist/screens/variables/variable-details.js +19 -86
- package/dist/screens/variables/variable-list.d.ts +1 -2
- package/dist/screens/variables/variable-list.js +16 -27
- package/dist/screens/welcome-modal.d.ts +1 -2
- package/dist/screens/welcome-modal.js +44 -111
- package/dist/screens/workflows/workflow-details.d.ts +1 -2
- package/dist/screens/workflows/workflow-details.js +17 -31
- package/dist/screens/workflows/workflow-info.d.ts +2 -3
- package/dist/screens/workflows/workflow-info.js +2 -9
- package/dist/screens/workflows/workflow-instructions.d.ts +2 -3
- package/dist/screens/workflows/workflow-instructions.js +23 -55
- package/dist/screens/workflows/workflow-list.d.ts +1 -2
- package/dist/screens/workflows/workflow-list.js +23 -62
- package/dist/setupTests.d.ts +1 -1
- package/dist/setupTests.js +10 -11
- package/dist/system-apps/assistants.app.d.ts +1 -1
- package/dist/system-apps/assistants.app.js +3 -3
- package/dist/system-apps/console-logs.app.d.ts +1 -1
- package/dist/system-apps/console-logs.app.js +3 -3
- package/dist/system-apps/contacts.app.d.ts +1 -1
- package/dist/system-apps/contacts.app.js +4 -4
- package/dist/system-apps/data-explorer.app.d.ts +1 -1
- package/dist/system-apps/data-explorer.app.js +4 -4
- package/dist/system-apps/groups.app.d.ts +1 -1
- package/dist/system-apps/groups.app.js +4 -4
- package/dist/system-apps/index.d.ts +17 -17
- package/dist/system-apps/index.js +52 -52
- package/dist/system-apps/join-group.app.d.ts +1 -1
- package/dist/system-apps/join-group.app.js +4 -4
- package/dist/system-apps/mobile-settings.app.d.ts +1 -1
- package/dist/system-apps/mobile-settings.app.js +3 -3
- package/dist/system-apps/network-viewer.app.d.ts +1 -1
- package/dist/system-apps/network-viewer.app.js +4 -4
- package/dist/system-apps/packages.app.d.ts +1 -1
- package/dist/system-apps/packages.app.js +3 -3
- package/dist/system-apps/search.app.d.ts +1 -1
- package/dist/system-apps/search.app.js +4 -4
- package/dist/system-apps/settings.app.d.ts +1 -1
- package/dist/system-apps/settings.app.js +3 -3
- package/dist/system-apps/threads.app.d.ts +1 -1
- package/dist/system-apps/threads.app.js +3 -3
- package/dist/system-apps/tools.app.d.ts +1 -1
- package/dist/system-apps/tools.app.js +3 -3
- package/dist/system-apps/types.app.d.ts +1 -1
- package/dist/system-apps/types.app.js +3 -3
- package/dist/system-apps/variables.app.d.ts +1 -1
- package/dist/system-apps/variables.app.js +3 -3
- package/dist/system-apps/workflows.app.d.ts +1 -1
- package/dist/system-apps/workflows.app.js +3 -3
- package/dist/tabs-layout/tabs-layout.d.ts +2 -3
- package/dist/tabs-layout/tabs-layout.js +215 -246
- package/dist/tabs-layout/tabs-state.d.ts +2 -2
- package/dist/tabs-layout/tabs-state.js +73 -61
- package/dist/ui-defaults/index.d.ts +2 -2
- package/dist/ui-defaults/list-screen.d.ts +2 -3
- package/dist/ui-defaults/list-screen.js +33 -37
- package/dist/ui-defaults/markdown-field.js +24 -56
- package/dist/ui-router/routes-loader.d.ts +1 -1
- package/dist/ui-router/routes-loader.js +17 -13
- package/dist/ui-router/ui-loader.d.ts +6 -6
- package/dist/ui-router/ui-loader.js +172 -268
- package/dist/utils.js +49 -39
- package/jest.config.js +16 -16
- package/package.json +16 -14
- package/src/command-palette/command-palette-ui.tsx +261 -237
- package/src/command-palette/command-palette.ts +81 -78
- package/src/components/chat-overlay.tsx +366 -261
- package/src/components/checkbox.tsx +15 -12
- package/src/components/group-switcher.tsx +150 -105
- package/src/components/input-date.tsx +17 -16
- package/src/components/input-number.tsx +47 -31
- package/src/components/input.tsx +15 -12
- package/src/components/inverse-lazy-list.tsx +14 -13
- package/src/components/io-schema-values.tsx +51 -69
- package/src/components/io-schema.tsx +94 -69
- package/src/components/lazy-list.tsx +51 -34
- package/src/components/list-screen.tsx +51 -35
- package/src/components/loading-indicator.tsx +2 -4
- package/src/components/markdown-editor/autolink-plugin.tsx +4 -11
- package/src/components/markdown-editor/editor-inline.tsx +3 -4
- package/src/components/markdown-editor/editor.tsx +53 -51
- package/src/components/markdown-editor/markdown-plugin.tsx +48 -40
- package/src/components/markdown-editor/mention-node.ts +39 -38
- package/src/components/markdown-editor/mentions-plugin.tsx +99 -101
- package/src/components/markdown-editor/theme.ts +28 -29
- package/src/components/markdown-editor/toolbar.tsx +53 -47
- package/src/components/markdown-with-mentions.tsx +56 -46
- package/src/components/message-logs/message-logs.tsx +225 -165
- package/src/components/messages/avatar.tsx +70 -52
- package/src/components/messages/channel-message-list.tsx +80 -68
- package/src/components/messages/channel-view.tsx +34 -33
- package/src/components/messages/message-compose.tsx +84 -67
- package/src/components/messages/message-display.tsx +103 -89
- package/src/components/messages/thread-message-list.tsx +53 -44
- package/src/components/router.tsx +42 -43
- package/src/components/save-button.tsx +43 -39
- package/src/components/sortable-list.tsx +77 -49
- package/src/components/tabs.tsx +31 -31
- package/src/components/tooltip.tsx +21 -28
- package/src/components/trust-level-badge.tsx +15 -11
- package/src/components/trust-level-dropdown.tsx +49 -19
- package/src/components/typeahead.tsx +57 -59
- package/src/components/voice-indicator.tsx +158 -141
- package/src/components/voice-subscribe-events.ts +20 -0
- package/src/globals.tsx +42 -40
- package/src/hooks.test.tsx +141 -134
- package/src/hooks.ts +80 -48
- package/src/index.tsx +17 -10
- package/src/mention-configs.ts +122 -68
- package/src/screens/assistants/assistant-config.tsx +28 -18
- package/src/screens/assistants/assistant-details.tsx +35 -36
- package/src/screens/assistants/assistant-info.tsx +16 -11
- package/src/screens/assistants/assistant-list.tsx +37 -34
- package/src/screens/assistants/assistant-tools.tsx +41 -20
- package/src/screens/console-logs/console-logs-list.tsx +173 -140
- package/src/screens/console-logs/log-display.tsx +65 -38
- package/src/screens/console-logs/log-filters.tsx +4 -3
- package/src/screens/console-logs/mobile-log-card.tsx +78 -71
- package/src/screens/console-logs/resizable-table-header.tsx +29 -21
- package/src/screens/contacts/contact-details.tsx +29 -30
- package/src/screens/contacts/contact-list.tsx +71 -60
- package/src/screens/contacts/index.ts +5 -5
- package/src/screens/contacts/user-connect.tsx +177 -171
- package/src/screens/data-explorer/data-explorer.tsx +134 -98
- package/src/screens/data-explorer/index.ts +2 -3
- package/src/screens/data-explorer/query-executor.tsx +90 -80
- package/src/screens/groups/group-details.tsx +120 -101
- package/src/screens/groups/group-invite-listener.tsx +34 -37
- package/src/screens/groups/group-list.tsx +119 -103
- package/src/screens/groups/group-members.tsx +225 -164
- package/src/screens/groups/index.ts +5 -6
- package/src/screens/join-group/index.ts +2 -2
- package/src/screens/join-group/join-group.tsx +41 -39
- package/src/screens/network-viewer/connection-troubleshooter.tsx +145 -104
- package/src/screens/network-viewer/cpu-usage-graph.tsx +39 -43
- package/src/screens/network-viewer/device-details-modal.tsx +46 -59
- package/src/screens/network-viewer/group-details-modal.tsx +68 -49
- package/src/screens/network-viewer/index.ts +4 -5
- package/src/screens/network-viewer/network-viewer-ipc.ts +23 -0
- package/src/screens/network-viewer/network-viewer.tsx +261 -236
- package/src/screens/network-viewer/usage-graph.tsx +57 -49
- package/src/screens/packages/package-details.tsx +43 -35
- package/src/screens/packages/package-info.tsx +107 -66
- package/src/screens/packages/package-list.tsx +175 -98
- package/src/screens/packages/package-new-local.tsx +28 -26
- package/src/screens/packages/package-versions.tsx +102 -77
- package/src/screens/peer-types/peer-type-details.tsx +60 -50
- package/src/screens/peer-types/peer-type-list.tsx +20 -30
- package/src/screens/search/global-search.tsx +153 -137
- package/src/screens/settings/color-mode-dropdown.tsx +52 -35
- package/src/screens/settings/settings-page.tsx +215 -141
- package/src/screens/settings/voice-settings-agent.tsx +13 -12
- package/src/screens/settings/voice-settings-api-keys.tsx +14 -12
- package/src/screens/settings/voice-settings-output.tsx +12 -11
- package/src/screens/settings/voice-settings-providers.tsx +7 -3
- package/src/screens/settings/voice-settings-types.ts +52 -49
- package/src/screens/settings/voice-settings-wake-word.tsx +25 -9
- package/src/screens/settings/voice-settings.tsx +66 -43
- package/src/screens/setup-user.tsx +88 -41
- package/src/screens/tools/tool-code.tsx +12 -17
- package/src/screens/tools/tool-details.tsx +28 -28
- package/src/screens/tools/tool-info.tsx +14 -19
- package/src/screens/tools/tool-list.tsx +58 -40
- package/src/screens/tools/tool-schema.tsx +16 -9
- package/src/screens/tools/tool-test-details.tsx +11 -22
- package/src/screens/tools/tool-test-list.tsx +29 -30
- package/src/screens/variables/variable-details.tsx +63 -51
- package/src/screens/variables/variable-list.tsx +29 -30
- package/src/screens/welcome-modal.tsx +68 -48
- package/src/screens/workflows/workflow-details.tsx +40 -30
- package/src/screens/workflows/workflow-info.tsx +4 -11
- package/src/screens/workflows/workflow-instructions.tsx +35 -28
- package/src/screens/workflows/workflow-list.tsx +50 -40
- package/src/setupTests.ts +14 -13
- package/src/system-apps/assistants.app.ts +5 -5
- package/src/system-apps/console-logs.app.ts +4 -4
- package/src/system-apps/contacts.app.ts +6 -6
- package/src/system-apps/data-explorer.app.ts +5 -5
- package/src/system-apps/groups.app.ts +6 -6
- package/src/system-apps/index.ts +49 -49
- package/src/system-apps/join-group.app.ts +5 -5
- package/src/system-apps/mobile-settings.app.ts +4 -5
- package/src/system-apps/network-viewer.app.ts +5 -5
- package/src/system-apps/packages.app.ts +5 -5
- package/src/system-apps/search.app.ts +6 -6
- package/src/system-apps/settings.app.ts +5 -5
- package/src/system-apps/threads.app.ts +5 -5
- package/src/system-apps/tools.app.ts +5 -5
- package/src/system-apps/types.app.ts +5 -5
- package/src/system-apps/variables.app.ts +5 -5
- package/src/system-apps/workflows.app.ts +5 -5
- package/src/tabs-layout/tabs-layout.tsx +345 -254
- package/src/tabs-layout/tabs-state.ts +100 -81
- package/src/ui-defaults/index.ts +2 -3
- package/src/ui-defaults/list-screen.tsx +45 -40
- package/src/ui-defaults/markdown-field.tsx +22 -26
- package/src/ui-router/routes-loader.ts +40 -24
- package/src/ui-router/ui-loader.tsx +312 -214
- package/src/utils.ts +68 -81
- package/tsconfig.json +5 -10
- package/dist/components/input-datetime.d.ts +0 -7
- package/dist/components/input-datetime.js +0 -35
- package/dist/components/lazy-sortable-list.d.ts +0 -29
- package/dist/components/lazy-sortable-list.js +0 -12
- package/dist/components/left-bar.d.ts +0 -5
- package/dist/components/left-bar.js +0 -207
- package/dist/components/main-content-container.d.ts +0 -2
- package/dist/components/main-content-container.js +0 -92
- package/dist/components/messages/thread-view.d.ts +0 -6
- package/dist/components/messages/thread-view.js +0 -174
- package/dist/components/off-canvas.d.ts +0 -13
- package/dist/components/off-canvas.js +0 -89
- package/dist/components/text-list-editor.tsx/text-list-editor.d.ts +0 -6
- package/dist/components/text-list-editor.tsx/text-list-editor.js +0 -13
- package/dist/components/top-bar.d.ts +0 -2
- package/dist/components/top-bar.js +0 -51
- package/dist/components/typeahead/mentions-plugin.d.ts +0 -7
- package/dist/components/typeahead/mentions-plugin.js +0 -203
- package/dist/components/typeahead/typeahead-editor.d.ts +0 -15
- package/dist/components/typeahead/typeahead-editor.js +0 -134
- package/dist/components/typeahead/typeahead.d.ts +0 -12
- package/dist/components/typeahead/typeahead.js +0 -94
- package/dist/screens/profile.d.ts +0 -2
- package/dist/screens/profile.js +0 -76
- package/src/components/input-datetime.tsx +0 -41
- package/src/components/lazy-sortable-list.tsx +0 -51
- package/src/components/left-bar.tsx +0 -322
- package/src/components/main-content-container.tsx +0 -79
- package/src/components/messages/thread-view.tsx +0 -214
- package/src/components/off-canvas.tsx +0 -83
- package/src/components/text-list-editor.tsx/text-list-editor.tsx +0 -13
- package/src/components/top-bar.tsx +0 -119
- package/src/components/typeahead/mentions-plugin.tsx +0 -265
- package/src/components/typeahead/typeahead-editor.tsx +0 -140
- package/src/components/typeahead/typeahead.tsx +0 -77
- package/src/screens/profile.tsx +0 -75
|
@@ -1,46 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import {
|
|
2
|
+
Groups,
|
|
3
|
+
getMe,
|
|
4
|
+
getUserContext,
|
|
5
|
+
type ICursorIterable,
|
|
6
|
+
type IGroup,
|
|
7
|
+
newid,
|
|
8
|
+
newKeys,
|
|
9
|
+
observable,
|
|
10
|
+
peersCorePackageId,
|
|
11
|
+
rpcServerCalls,
|
|
12
|
+
setUserTrustLevel,
|
|
13
|
+
TrustLevel,
|
|
14
|
+
Users,
|
|
15
|
+
} from "@peers-app/peers-sdk";
|
|
16
|
+
import type React from "react";
|
|
17
|
+
import { useCallback, useEffect, useState } from "react";
|
|
18
|
+
import { Input } from "../../components/input";
|
|
19
|
+
import { LazyList } from "../../components/lazy-list";
|
|
20
|
+
import { LoadingIndicator } from "../../components/loading-indicator";
|
|
21
|
+
import { MarkdownWithMentions } from "../../components/markdown-with-mentions";
|
|
22
|
+
import { isDesktop, mainContentPath } from "../../globals";
|
|
23
|
+
import { useObservable, usePromise } from "../../hooks";
|
|
24
|
+
import { registerInternalPeersUI } from "../../ui-router/ui-loader";
|
|
10
25
|
|
|
11
26
|
export function GroupList() {
|
|
12
27
|
const userContext = usePromise(getUserContext);
|
|
13
|
-
const [searchTextObs] = useState(() => observable(
|
|
28
|
+
const [searchTextObs] = useState(() => observable(""));
|
|
14
29
|
const [searchText] = useObservable(searchTextObs);
|
|
15
30
|
const [cursorObs] = useState(() => observable<ICursorIterable<IGroup> | undefined>());
|
|
16
|
-
|
|
31
|
+
|
|
17
32
|
// All hooks must be called before any conditional returns
|
|
18
33
|
const groupsTable = userContext ? Groups(userContext.userDataContext) : null;
|
|
19
34
|
|
|
20
|
-
|
|
35
|
+
const newCursor = useCallback(async () => {
|
|
21
36
|
if (!groupsTable) return;
|
|
22
|
-
|
|
37
|
+
|
|
23
38
|
const filter = {
|
|
24
|
-
$or: [
|
|
25
|
-
|
|
26
|
-
{ description: { $matchWords: searchText } },
|
|
27
|
-
],
|
|
28
|
-
disabled: { $ne: true }
|
|
39
|
+
$or: [{ name: { $matchWords: searchText } }, { description: { $matchWords: searchText } }],
|
|
40
|
+
disabled: { $ne: true },
|
|
29
41
|
};
|
|
30
|
-
const cursor = await groupsTable.cursor(searchText ? filter : { disabled: { $ne: true } }, {
|
|
31
|
-
sortBy: [
|
|
32
|
-
...(searchText ? {} : { textSearch: searchText })
|
|
42
|
+
const cursor = await groupsTable.cursor(searchText ? filter : { disabled: { $ne: true } }, {
|
|
43
|
+
sortBy: ["name"],
|
|
44
|
+
...(searchText ? {} : { textSearch: searchText }),
|
|
33
45
|
});
|
|
34
46
|
cursorObs(cursor);
|
|
35
47
|
return cursor;
|
|
36
|
-
}
|
|
48
|
+
}, [groupsTable, searchText, cursorObs]);
|
|
37
49
|
|
|
38
50
|
useEffect(() => {
|
|
39
51
|
if (groupsTable) {
|
|
40
|
-
newCursor();
|
|
52
|
+
void newCursor();
|
|
41
53
|
}
|
|
42
|
-
}, [
|
|
43
|
-
|
|
54
|
+
}, [groupsTable, newCursor]);
|
|
55
|
+
|
|
44
56
|
// Early return after all hooks
|
|
45
57
|
if (!userContext) {
|
|
46
58
|
return <LoadingIndicator />;
|
|
@@ -48,13 +60,14 @@ export function GroupList() {
|
|
|
48
60
|
|
|
49
61
|
async function loadMore(existing: IGroup[]): Promise<IGroup[]> {
|
|
50
62
|
if (!groupsTable) return [];
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
63
|
+
|
|
64
|
+
const moreMatches: IGroup[] = [];
|
|
65
|
+
const cursor = cursorObs() || (await newCursor());
|
|
54
66
|
if (!cursor) return [];
|
|
55
|
-
|
|
67
|
+
|
|
56
68
|
for await (const nextRecord of cursor) {
|
|
57
|
-
if (existing.
|
|
69
|
+
if (existing.some((e) => e.groupId === nextRecord.groupId)) continue;
|
|
70
|
+
if (moreMatches.some((e) => e.groupId === nextRecord.groupId)) continue;
|
|
58
71
|
moreMatches.push(nextRecord);
|
|
59
72
|
if (searchText.length && moreMatches.length > 5) break;
|
|
60
73
|
if (moreMatches.length >= 10) break;
|
|
@@ -69,7 +82,7 @@ export function GroupList() {
|
|
|
69
82
|
if (evt.key !== "Enter") return;
|
|
70
83
|
const name = searchText.trim();
|
|
71
84
|
if (!name) return;
|
|
72
|
-
searchTextObs(
|
|
85
|
+
searchTextObs("");
|
|
73
86
|
await newRecord(name);
|
|
74
87
|
}
|
|
75
88
|
|
|
@@ -86,16 +99,17 @@ export function GroupList() {
|
|
|
86
99
|
const groupDataContext = userContext.getDataContext(groupId);
|
|
87
100
|
|
|
88
101
|
// Store groupKeys.secretKey securely for this group
|
|
89
|
-
const persistentVarsTable =
|
|
90
|
-
|
|
102
|
+
const persistentVarsTable =
|
|
103
|
+
userContext.userDataContext.tableContainer.getTableByName("PersistentVars");
|
|
104
|
+
const groupSecretKeyVarName = `groupSecretKey_${groupDataContext.dataContextId}`;
|
|
91
105
|
await persistentVarsTable.save({
|
|
92
106
|
persistentVarId: newid(),
|
|
93
107
|
name: groupSecretKeyVarName,
|
|
94
|
-
scope:
|
|
108
|
+
scope: "groupUser",
|
|
95
109
|
isSecret: true,
|
|
96
110
|
value: { value: groupKeys.secretKey },
|
|
97
111
|
});
|
|
98
|
-
|
|
112
|
+
|
|
99
113
|
// add me to the group's users table
|
|
100
114
|
const me = await getMe();
|
|
101
115
|
await Users(groupDataContext).save(me);
|
|
@@ -107,52 +121,49 @@ export function GroupList() {
|
|
|
107
121
|
const group = await Groups(userContext.userDataContext).signAndSave({
|
|
108
122
|
groupId,
|
|
109
123
|
name: groupName,
|
|
110
|
-
description:
|
|
111
|
-
iconClassName:
|
|
124
|
+
description: "",
|
|
125
|
+
iconClassName: "bi-people-fill", // Default icon
|
|
112
126
|
founderUserId: me.userId,
|
|
113
127
|
disabled: false,
|
|
114
128
|
publicKey: groupKeys.publicKey,
|
|
115
129
|
publicBoxKey: groupKeys.publicBoxKey,
|
|
116
|
-
signature:
|
|
130
|
+
signature: "", // will be set via signAndSave
|
|
117
131
|
});
|
|
118
132
|
await Groups(groupDataContext).signAndSave(group);
|
|
119
133
|
|
|
120
134
|
// Auto-install peers-core for the new group
|
|
121
|
-
await rpcServerCalls
|
|
122
|
-
|
|
123
|
-
|
|
135
|
+
await rpcServerCalls
|
|
136
|
+
.addOrUpdatePackage(peersCorePackageId, { dataContextId: groupId })
|
|
137
|
+
.catch((err: unknown) => {
|
|
138
|
+
console.error("Error auto-installing peers-core for group:", err);
|
|
139
|
+
});
|
|
124
140
|
|
|
125
141
|
mainContentPath(`groups/${group.groupId}`);
|
|
126
142
|
return group;
|
|
127
143
|
}
|
|
128
144
|
|
|
129
145
|
function renderItem(group: IGroup) {
|
|
130
|
-
const groupIcon = group.iconClassName ||
|
|
146
|
+
const groupIcon = group.iconClassName || "bi-people-fill";
|
|
131
147
|
return (
|
|
132
|
-
<div
|
|
133
|
-
key={group.groupId}
|
|
134
|
-
className='container-fluid pb-4'
|
|
135
|
-
>
|
|
148
|
+
<div key={group.groupId} className="container-fluid pb-4">
|
|
136
149
|
<i className={groupIcon}></i>
|
|
137
|
-
<a href={`#groups/${group.groupId}`}>
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
<div style={{ paddingLeft: '20px' }}>
|
|
141
|
-
<MarkdownWithMentions content={group.description || ''} />
|
|
150
|
+
<a href={`#groups/${group.groupId}`}>{group.name || "<unnamed-group>"}</a>
|
|
151
|
+
<div style={{ paddingLeft: "20px" }}>
|
|
152
|
+
<MarkdownWithMentions content={group.description || ""} />
|
|
142
153
|
</div>
|
|
143
154
|
</div>
|
|
144
155
|
);
|
|
145
156
|
}
|
|
146
157
|
|
|
147
158
|
return (
|
|
148
|
-
<div className=
|
|
159
|
+
<div className="container-fluid">
|
|
149
160
|
<div className="input-group mt-3 mb-3">
|
|
150
|
-
<Input
|
|
151
|
-
value={searchTextObs}
|
|
152
|
-
className="form-control"
|
|
161
|
+
<Input
|
|
162
|
+
value={searchTextObs}
|
|
163
|
+
className="form-control"
|
|
153
164
|
placeholder="Search or create group"
|
|
154
|
-
autoFocus={isDesktop()
|
|
155
|
-
onKeyUp={evt => searchSubmit(evt)}
|
|
165
|
+
autoFocus={!!isDesktop()}
|
|
166
|
+
onKeyUp={(evt) => searchSubmit(evt)}
|
|
156
167
|
/>
|
|
157
168
|
<ImportGroupButton />
|
|
158
169
|
</div>
|
|
@@ -161,7 +172,7 @@ export function GroupList() {
|
|
|
161
172
|
<LazyList
|
|
162
173
|
resetTrigger={searchText}
|
|
163
174
|
loadMore={loadMore}
|
|
164
|
-
scrollThreshold={0.6}
|
|
175
|
+
scrollThreshold={0.6}
|
|
165
176
|
renderItems={(groups) => {
|
|
166
177
|
return groups.map(renderItem);
|
|
167
178
|
}}
|
|
@@ -184,7 +195,7 @@ export function GroupList() {
|
|
|
184
195
|
const ImportGroupButton = () => {
|
|
185
196
|
const [isImporting, setIsImporting] = useState(false);
|
|
186
197
|
const [showImportDialog, setShowImportDialog] = useState(false);
|
|
187
|
-
const [importText, setImportText] = useState(
|
|
198
|
+
const [importText, setImportText] = useState("");
|
|
188
199
|
const [importResult, setImportResult] = useState<{
|
|
189
200
|
success: boolean;
|
|
190
201
|
message: string;
|
|
@@ -195,34 +206,33 @@ const ImportGroupButton = () => {
|
|
|
195
206
|
if (!importText.trim()) {
|
|
196
207
|
setImportResult({
|
|
197
208
|
success: false,
|
|
198
|
-
message:
|
|
209
|
+
message: "Please paste the group share JSON data",
|
|
199
210
|
});
|
|
200
211
|
return;
|
|
201
212
|
}
|
|
202
213
|
|
|
203
214
|
setIsImporting(true);
|
|
204
215
|
setImportResult(null);
|
|
205
|
-
|
|
216
|
+
|
|
206
217
|
try {
|
|
207
218
|
const groupId = await rpcServerCalls.importGroupShare(importText.trim());
|
|
208
219
|
setImportResult({
|
|
209
220
|
success: true,
|
|
210
221
|
message: `Group imported successfully!`,
|
|
211
|
-
groupId
|
|
222
|
+
groupId,
|
|
212
223
|
});
|
|
213
|
-
setImportText(
|
|
214
|
-
|
|
224
|
+
setImportText("");
|
|
225
|
+
|
|
215
226
|
// Navigate to the imported group after a brief delay
|
|
216
227
|
setTimeout(() => {
|
|
217
228
|
mainContentPath(`groups/${groupId}`);
|
|
218
229
|
setShowImportDialog(false);
|
|
219
230
|
setImportResult(null);
|
|
220
231
|
}, 2000);
|
|
221
|
-
|
|
222
|
-
} catch (error: any) {
|
|
232
|
+
} catch (error: unknown) {
|
|
223
233
|
setImportResult({
|
|
224
234
|
success: false,
|
|
225
|
-
message: `Import failed: ${error.message}
|
|
235
|
+
message: `Import failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
226
236
|
});
|
|
227
237
|
} finally {
|
|
228
238
|
setIsImporting(false);
|
|
@@ -231,31 +241,28 @@ const ImportGroupButton = () => {
|
|
|
231
241
|
|
|
232
242
|
const handlePasteFromClipboard = async () => {
|
|
233
243
|
try {
|
|
234
|
-
if (navigator.clipboard
|
|
244
|
+
if (navigator.clipboard?.readText) {
|
|
235
245
|
const clipboardText = await navigator.clipboard.readText();
|
|
236
246
|
setImportText(clipboardText);
|
|
237
247
|
}
|
|
238
|
-
} catch (
|
|
239
|
-
console.log(
|
|
248
|
+
} catch (_error) {
|
|
249
|
+
console.log("Failed to read from clipboard - user can paste manually");
|
|
240
250
|
}
|
|
241
251
|
};
|
|
242
252
|
|
|
243
253
|
return (
|
|
244
254
|
<>
|
|
245
|
-
<button
|
|
246
|
-
className="btn btn-outline-secondary dropdown-toggle"
|
|
247
|
-
type="button"
|
|
248
|
-
data-bs-toggle="dropdown"
|
|
255
|
+
<button
|
|
256
|
+
className="btn btn-outline-secondary dropdown-toggle"
|
|
257
|
+
type="button"
|
|
258
|
+
data-bs-toggle="dropdown"
|
|
249
259
|
aria-expanded="false"
|
|
250
260
|
>
|
|
251
261
|
<i className="bi-plus-lg"></i>
|
|
252
262
|
</button>
|
|
253
263
|
<ul className="dropdown-menu dropdown-menu-end">
|
|
254
264
|
<li>
|
|
255
|
-
<button
|
|
256
|
-
className="dropdown-item"
|
|
257
|
-
onClick={() => setShowImportDialog(true)}
|
|
258
|
-
>
|
|
265
|
+
<button className="dropdown-item" onClick={() => setShowImportDialog(true)}>
|
|
259
266
|
<i className="bi-download me-2"></i>
|
|
260
267
|
Import Shared Group
|
|
261
268
|
</button>
|
|
@@ -263,19 +270,21 @@ const ImportGroupButton = () => {
|
|
|
263
270
|
</ul>
|
|
264
271
|
|
|
265
272
|
{showImportDialog && (
|
|
266
|
-
<div
|
|
267
|
-
|
|
268
|
-
|
|
273
|
+
<div
|
|
274
|
+
className="position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center"
|
|
275
|
+
style={{ backgroundColor: "rgba(0,0,0,0.5)", zIndex: 1050 }}
|
|
276
|
+
>
|
|
277
|
+
<div className="card" style={{ maxWidth: "600px", width: "90%" }}>
|
|
269
278
|
<div className="card-header d-flex justify-content-between align-items-center">
|
|
270
279
|
<h6 className="mb-0">
|
|
271
280
|
<i className="bi-download me-2"></i>
|
|
272
281
|
Import Shared Group
|
|
273
282
|
</h6>
|
|
274
|
-
<button
|
|
275
|
-
className="btn-close"
|
|
283
|
+
<button
|
|
284
|
+
className="btn-close"
|
|
276
285
|
onClick={() => {
|
|
277
286
|
setShowImportDialog(false);
|
|
278
|
-
setImportText(
|
|
287
|
+
setImportText("");
|
|
279
288
|
setImportResult(null);
|
|
280
289
|
}}
|
|
281
290
|
aria-label="Close"
|
|
@@ -283,13 +292,14 @@ const ImportGroupButton = () => {
|
|
|
283
292
|
</div>
|
|
284
293
|
<div className="card-body">
|
|
285
294
|
<p className="mb-3">
|
|
286
|
-
Paste the group share JSON data below to import a shared group with its admin
|
|
295
|
+
Paste the group share JSON data below to import a shared group with its admin
|
|
296
|
+
members.
|
|
287
297
|
</p>
|
|
288
|
-
|
|
298
|
+
|
|
289
299
|
<div className="mb-3">
|
|
290
300
|
<label className="form-label">Group Share JSON:</label>
|
|
291
301
|
<div className="d-flex gap-2 mb-2">
|
|
292
|
-
<button
|
|
302
|
+
<button
|
|
293
303
|
className="btn btn-secondary btn-sm"
|
|
294
304
|
onClick={handlePasteFromClipboard}
|
|
295
305
|
title="Paste from clipboard"
|
|
@@ -304,13 +314,15 @@ const ImportGroupButton = () => {
|
|
|
304
314
|
value={importText}
|
|
305
315
|
onChange={(e) => setImportText(e.target.value)}
|
|
306
316
|
placeholder="Paste the group share JSON here..."
|
|
307
|
-
style={{ fontSize:
|
|
317
|
+
style={{ fontSize: "0.9em" }}
|
|
308
318
|
/>
|
|
309
319
|
</div>
|
|
310
|
-
|
|
320
|
+
|
|
311
321
|
{importResult && (
|
|
312
|
-
<div className={`alert alert-${importResult.success ?
|
|
313
|
-
<i
|
|
322
|
+
<div className={`alert alert-${importResult.success ? "success" : "danger"} mb-3`}>
|
|
323
|
+
<i
|
|
324
|
+
className={`bi-${importResult.success ? "check-circle" : "exclamation-triangle"} me-2`}
|
|
325
|
+
></i>
|
|
314
326
|
{importResult.message}
|
|
315
327
|
{importResult.success && importResult.groupId && (
|
|
316
328
|
<div className="mt-2">
|
|
@@ -319,27 +331,31 @@ const ImportGroupButton = () => {
|
|
|
319
331
|
)}
|
|
320
332
|
</div>
|
|
321
333
|
)}
|
|
322
|
-
|
|
334
|
+
|
|
323
335
|
<div className="text-end">
|
|
324
|
-
<button
|
|
336
|
+
<button
|
|
325
337
|
className="btn btn-secondary me-2"
|
|
326
338
|
onClick={() => {
|
|
327
339
|
setShowImportDialog(false);
|
|
328
|
-
setImportText(
|
|
340
|
+
setImportText("");
|
|
329
341
|
setImportResult(null);
|
|
330
342
|
}}
|
|
331
343
|
disabled={isImporting}
|
|
332
344
|
>
|
|
333
345
|
Cancel
|
|
334
346
|
</button>
|
|
335
|
-
<button
|
|
347
|
+
<button
|
|
336
348
|
className="btn btn-primary"
|
|
337
349
|
onClick={handleImport}
|
|
338
350
|
disabled={isImporting || !importText.trim()}
|
|
339
351
|
>
|
|
340
352
|
{isImporting ? (
|
|
341
353
|
<>
|
|
342
|
-
<span
|
|
354
|
+
<span
|
|
355
|
+
className="spinner-border spinner-border-sm me-1"
|
|
356
|
+
role="status"
|
|
357
|
+
aria-hidden="true"
|
|
358
|
+
></span>
|
|
343
359
|
Importing...
|
|
344
360
|
</>
|
|
345
361
|
) : (
|
|
@@ -359,13 +375,13 @@ const ImportGroupButton = () => {
|
|
|
359
375
|
};
|
|
360
376
|
|
|
361
377
|
registerInternalPeersUI({
|
|
362
|
-
peersUIId:
|
|
378
|
+
peersUIId: "00mf8qrs004w5u2wqk64d2yp6",
|
|
363
379
|
component: GroupList,
|
|
364
380
|
routes: [
|
|
365
381
|
{
|
|
366
|
-
isMatch: (
|
|
367
|
-
uiCategory:
|
|
368
|
-
priority: 2
|
|
369
|
-
}
|
|
370
|
-
]
|
|
371
|
-
})
|
|
382
|
+
isMatch: (_props, context) => context.path === "groups",
|
|
383
|
+
uiCategory: "screen",
|
|
384
|
+
priority: 2,
|
|
385
|
+
},
|
|
386
|
+
],
|
|
387
|
+
});
|