@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,7 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
Assistants,
|
|
3
|
+
camelCaseToSpaces,
|
|
4
|
+
type IAssistant,
|
|
5
|
+
type IDoc,
|
|
6
|
+
type Observable,
|
|
7
|
+
ToolInclusionStrategy,
|
|
8
|
+
} from "@peers-app/peers-sdk";
|
|
4
9
|
import { MarkdownEditorInline } from "../../components/markdown-editor/editor-inline";
|
|
10
|
+
import { Tooltip } from "../../components/tooltip";
|
|
5
11
|
import { useObservable } from "../../hooks";
|
|
6
12
|
|
|
7
13
|
export const AssistantTools = (props: { assistant: IDoc<IAssistant> }) => {
|
|
@@ -9,53 +15,68 @@ export const AssistantTools = (props: { assistant: IDoc<IAssistant> }) => {
|
|
|
9
15
|
|
|
10
16
|
return (
|
|
11
17
|
<div>
|
|
12
|
-
|
|
13
|
-
<div className='mt-2'>
|
|
18
|
+
<div className="mt-2">
|
|
14
19
|
<small>
|
|
15
20
|
Tool Inclusion Strategy:
|
|
16
21
|
<small>
|
|
17
|
-
<Tooltip
|
|
22
|
+
<Tooltip
|
|
23
|
+
markdownContent={
|
|
24
|
+
Assistants().metaData.fields.find((f) => f.name === "toolInclusionStrategy")
|
|
25
|
+
?.description ?? ""
|
|
26
|
+
}
|
|
27
|
+
/>
|
|
18
28
|
</small>
|
|
19
29
|
</small>
|
|
20
30
|
<ToolInclusionStrategyDropDown assistant={assistant} />
|
|
21
31
|
</div>
|
|
22
32
|
|
|
23
|
-
<div className=
|
|
33
|
+
<div className="mt-2">
|
|
24
34
|
<small>
|
|
25
35
|
Tools to Include:
|
|
26
36
|
<small>
|
|
27
|
-
<Tooltip
|
|
37
|
+
<Tooltip
|
|
38
|
+
markdownContent={
|
|
39
|
+
Assistants().metaData.fields.find((f) => f.name === "toolsToInclude")
|
|
40
|
+
?.description ?? ""
|
|
41
|
+
}
|
|
42
|
+
/>
|
|
28
43
|
</small>
|
|
29
44
|
</small>
|
|
30
|
-
<MarkdownEditorInline
|
|
31
|
-
value={assistant.qs.toolsToInclude as any}
|
|
32
|
-
/>
|
|
45
|
+
<MarkdownEditorInline value={assistant.qs.toolsToInclude as Observable<string>} />
|
|
33
46
|
</div>
|
|
34
|
-
|
|
35
47
|
</div>
|
|
36
48
|
);
|
|
37
49
|
};
|
|
38
50
|
|
|
39
|
-
|
|
40
51
|
const ToolInclusionStrategyDropDown = (props: { assistant: IDoc<IAssistant> }) => {
|
|
41
|
-
const { assistant } = props;
|
|
52
|
+
const { assistant } = props;
|
|
42
53
|
|
|
43
54
|
useObservable(assistant.qs.toolInclusionStrategy);
|
|
44
|
-
|
|
55
|
+
|
|
45
56
|
return (
|
|
46
57
|
<div className="dropdown">
|
|
47
|
-
<button
|
|
58
|
+
<button
|
|
59
|
+
className="btn btn-secondary dropdown-toggle"
|
|
60
|
+
type="button"
|
|
61
|
+
data-bs-toggle="dropdown"
|
|
62
|
+
aria-expanded="false"
|
|
63
|
+
>
|
|
48
64
|
{camelCaseToSpaces(assistant.toolInclusionStrategy)}
|
|
49
65
|
</button>
|
|
50
66
|
<ul className="dropdown-menu">
|
|
51
|
-
{Object.values(ToolInclusionStrategy).map(strategy => {
|
|
67
|
+
{Object.values(ToolInclusionStrategy).map((strategy) => {
|
|
52
68
|
return (
|
|
53
|
-
<li
|
|
69
|
+
<li
|
|
70
|
+
key={strategy}
|
|
71
|
+
onClick={() => {
|
|
72
|
+
assistant.toolInclusionStrategy = strategy;
|
|
73
|
+
}}
|
|
74
|
+
>
|
|
54
75
|
<span className="dropdown-item">{camelCaseToSpaces(strategy)}</span>
|
|
55
76
|
</li>
|
|
56
|
-
)
|
|
77
|
+
);
|
|
57
78
|
})}
|
|
58
79
|
</ul>
|
|
59
80
|
</div>
|
|
60
81
|
);
|
|
61
|
-
}
|
|
82
|
+
};
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import {
|
|
2
|
+
ConsoleLogs,
|
|
3
|
+
type DataFilter,
|
|
4
|
+
type IConsoleLog,
|
|
5
|
+
type ISubscriptionResult,
|
|
6
|
+
newid,
|
|
7
|
+
} from "@peers-app/peers-sdk";
|
|
8
|
+
import { min, sortBy, uniqBy } from "lodash";
|
|
9
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
10
|
+
import InfiniteScroll from "react-infinite-scroll-component";
|
|
11
|
+
import { LoadingIndicator } from "../../components/loading-indicator";
|
|
12
|
+
import { isDesktop } from "../../globals";
|
|
6
13
|
import { useObservable, useObservableState } from "../../hooks";
|
|
7
14
|
import { registerInternalPeersUI } from "../../ui-router/ui-loader";
|
|
8
|
-
import { colorMode } from
|
|
9
|
-
import { LogDisplay } from
|
|
10
|
-
import { LogFilters } from
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { MobileLogCard } from './mobile-log-card';
|
|
15
|
+
import { colorMode } from "../settings/color-mode-dropdown";
|
|
16
|
+
import { LogDisplay } from "./log-display";
|
|
17
|
+
import { LogFilters } from "./log-filters";
|
|
18
|
+
import { MobileLogCard } from "./mobile-log-card";
|
|
19
|
+
import { ResizableTableHeader } from "./resizable-table-header";
|
|
14
20
|
|
|
15
21
|
const windowHeight = () => window.innerHeight;
|
|
16
22
|
|
|
@@ -21,20 +27,22 @@ interface Column {
|
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
const DEFAULT_COLUMNS: Column[] = [
|
|
24
|
-
{ key:
|
|
25
|
-
{ key:
|
|
26
|
-
{ key:
|
|
27
|
-
{ key:
|
|
28
|
-
{ key:
|
|
30
|
+
{ key: "timestamp", label: "Timestamp", width: 150 },
|
|
31
|
+
{ key: "level", label: "Level", width: 80 },
|
|
32
|
+
{ key: "process", label: "Process", width: 100 },
|
|
33
|
+
{ key: "source", label: "Source", width: 120 },
|
|
34
|
+
{ key: "message", label: "Message", width: 600 },
|
|
29
35
|
];
|
|
30
36
|
|
|
31
37
|
export const ConsoleLogsList = () => {
|
|
32
38
|
const logs = useObservableState<IConsoleLog[]>([]);
|
|
33
39
|
const [allLogsLoaded, setAllLogsLoaded] = useState(false);
|
|
34
40
|
const loadMoreId = useObservableState<string>(newid(), true);
|
|
35
|
-
const [levelFilter, setLevelFilter] = useState<string>(
|
|
36
|
-
const [processFilter, setProcessFilter] = useState<string>(
|
|
37
|
-
const searchText = useObservableState<string>(
|
|
41
|
+
const [levelFilter, setLevelFilter] = useState<string>("all");
|
|
42
|
+
const [processFilter, setProcessFilter] = useState<string>("all");
|
|
43
|
+
const searchText = useObservableState<string>("");
|
|
44
|
+
/** Observable ref is stable — depend on this string in hooks so search changes refetch. */
|
|
45
|
+
const searchQuery = searchText();
|
|
38
46
|
const [columns, setColumns] = useState<Column[]>(DEFAULT_COLUMNS);
|
|
39
47
|
const [totalLogCount, setTotalLogCount] = useState<number>(0);
|
|
40
48
|
const [_colorMode] = useObservable(colorMode);
|
|
@@ -46,169 +54,194 @@ export const ConsoleLogsList = () => {
|
|
|
46
54
|
const batchSize = 50;
|
|
47
55
|
|
|
48
56
|
// Track fixed column widths to trigger message column recalculation
|
|
49
|
-
const
|
|
57
|
+
const _fixedColumnsWidthKey = useMemo(() => {
|
|
50
58
|
return columns
|
|
51
|
-
.filter(col => col.key !==
|
|
52
|
-
.map(col => `${col.key}:${col.width}`)
|
|
53
|
-
.join(
|
|
59
|
+
.filter((col) => col.key !== "message")
|
|
60
|
+
.map((col) => `${col.key}:${col.width}`)
|
|
61
|
+
.join(",");
|
|
54
62
|
}, [columns]);
|
|
55
63
|
|
|
56
|
-
// Calculate message column width based on available space
|
|
64
|
+
// Calculate message column width based on available space.
|
|
65
|
+
// Do not depend on `columns` — updating the message column width changes `columns` and would re-enter this effect forever.
|
|
66
|
+
// Re-run when fixed (non-message) column widths change (`_fixedColumnsWidthKey`) or on window resize.
|
|
57
67
|
useEffect(() => {
|
|
58
68
|
const updateMessageColumnWidth = () => {
|
|
59
69
|
if (!containerRef.current) return;
|
|
60
70
|
|
|
61
71
|
const containerWidth = containerRef.current.offsetWidth;
|
|
62
|
-
const fixedColumnsWidth = columns
|
|
63
|
-
.filter(col => col.key !== 'message')
|
|
64
|
-
.reduce((sum, col) => sum + col.width, 0);
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
setColumns((prev) => {
|
|
74
|
+
const fixedColumnsWidth = prev
|
|
75
|
+
.filter((col) => col.key !== "message")
|
|
76
|
+
.reduce((sum, col) => sum + col.width, 0);
|
|
67
77
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
const messageWidth = Math.max(200, containerWidth - fixedColumnsWidth - 20); // 20px for scrollbar
|
|
79
|
+
|
|
80
|
+
return prev.map((col) => (col.key === "message" ? { ...col, width: messageWidth } : col));
|
|
81
|
+
});
|
|
71
82
|
};
|
|
72
83
|
|
|
73
84
|
updateMessageColumnWidth();
|
|
74
|
-
window.addEventListener(
|
|
85
|
+
window.addEventListener("resize", updateMessageColumnWidth);
|
|
75
86
|
|
|
76
87
|
return () => {
|
|
77
|
-
window.removeEventListener(
|
|
88
|
+
window.removeEventListener("resize", updateMessageColumnWidth);
|
|
78
89
|
};
|
|
79
|
-
}, [
|
|
90
|
+
}, [_fixedColumnsWidthKey]);
|
|
80
91
|
|
|
81
92
|
// Build filter from UI state
|
|
82
|
-
const buildFilter = (): DataFilter<IConsoleLog> => {
|
|
93
|
+
const buildFilter = useCallback((): DataFilter<IConsoleLog> => {
|
|
83
94
|
const filter: DataFilter<IConsoleLog> = {};
|
|
84
|
-
if (levelFilter !==
|
|
85
|
-
filter.level = levelFilter as
|
|
95
|
+
if (levelFilter !== "all") {
|
|
96
|
+
filter.level = levelFilter as IConsoleLog["level"];
|
|
86
97
|
}
|
|
87
|
-
if (processFilter !==
|
|
98
|
+
if (processFilter !== "all") {
|
|
88
99
|
filter.process = processFilter;
|
|
89
100
|
}
|
|
90
|
-
if (
|
|
91
|
-
filter.message = { $matchWords:
|
|
101
|
+
if (searchQuery.trim()) {
|
|
102
|
+
filter.message = { $matchWords: searchQuery };
|
|
92
103
|
}
|
|
93
104
|
return filter;
|
|
94
|
-
};
|
|
105
|
+
}, [levelFilter, processFilter, searchQuery]);
|
|
95
106
|
|
|
96
107
|
// Update total log count
|
|
97
|
-
|
|
108
|
+
const updateLogCount = useCallback(async () => {
|
|
98
109
|
const table = await ConsoleLogs();
|
|
99
110
|
const filter = buildFilter();
|
|
100
|
-
|
|
111
|
+
const count = await table.count(filter);
|
|
101
112
|
setTotalLogCount(count);
|
|
102
|
-
}
|
|
113
|
+
}, [buildFilter]);
|
|
103
114
|
|
|
104
115
|
// Fetch logs using cursor-based pagination
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
filter
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
const fetchLogs = useCallback(
|
|
117
|
+
async (lastLog?: IConsoleLog): Promise<IConsoleLog[]> => {
|
|
118
|
+
const table = await ConsoleLogs();
|
|
119
|
+
const base = buildFilter();
|
|
120
|
+
const filter: DataFilter<IConsoleLog> = lastLog
|
|
121
|
+
? { ...base, logId: { $lt: lastLog.logId } }
|
|
122
|
+
: base;
|
|
123
|
+
return table.list(filter, {
|
|
124
|
+
pageSize: batchSize,
|
|
125
|
+
sortBy: ["-timestamp", "-logId"],
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
[buildFilter],
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
const loadMoreLogsRef = useRef<(startLoadId?: string) => Promise<void>>(async () => {});
|
|
114
132
|
|
|
115
133
|
// Load older logs (prepend to list)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
const loadMoreLogs = useCallback(
|
|
135
|
+
async (startLoadId?: string) => {
|
|
136
|
+
if (startLoadId && startLoadId !== loadMoreId()) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const sid = startLoadId ?? loadMoreId();
|
|
140
|
+
const oldestLog = logs()[0];
|
|
141
|
+
const fetchedLogs = await fetchLogs(oldestLog);
|
|
142
|
+
if (loadMoreId() !== sid) {
|
|
143
|
+
await loadMoreLogsRef.current(loadMoreId());
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (fetchedLogs.length === 0) {
|
|
147
|
+
setAllLogsLoaded(true);
|
|
148
|
+
}
|
|
149
|
+
let _logs = sortBy([...logs(), ...fetchedLogs], "timestamp");
|
|
150
|
+
_logs = uniqBy(_logs, (l) => l.logId);
|
|
151
|
+
logs(_logs);
|
|
152
|
+
},
|
|
153
|
+
[fetchLogs, loadMoreId, logs],
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
loadMoreLogsRef.current = loadMoreLogs;
|
|
157
|
+
|
|
158
|
+
const scrollToBottom = useCallback((behavior: "instant" | "smooth", delay = 100) => {
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
logsEndRef.current?.scrollIntoView({ behavior });
|
|
161
|
+
}, delay);
|
|
162
|
+
}, []);
|
|
163
|
+
|
|
164
|
+
const logCount = logs().length;
|
|
134
165
|
|
|
135
166
|
// Initial load and ensure screen is filled
|
|
136
167
|
const minHeightOfLog = 30;
|
|
137
168
|
useEffect(() => {
|
|
138
|
-
if (!allLogsLoaded && (!
|
|
139
|
-
loadMoreLogs();
|
|
169
|
+
if (!allLogsLoaded && (!logCount || logCount * minHeightOfLog < windowHeight())) {
|
|
170
|
+
void loadMoreLogs();
|
|
140
171
|
}
|
|
141
|
-
}, [
|
|
172
|
+
}, [allLogsLoaded, loadMoreLogs, logCount]);
|
|
142
173
|
|
|
143
|
-
// Reset when filters change
|
|
174
|
+
// Reset when filters change (`logs` is a stable observable setter; effect is driven by filter fields and callbacks).
|
|
144
175
|
useEffect(() => {
|
|
145
176
|
loadMoreId(newid());
|
|
146
177
|
logs([]);
|
|
147
|
-
updateLogCount();
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// Subscribe to new logs
|
|
178
|
+
void updateLogCount();
|
|
179
|
+
setAllLogsLoaded(false);
|
|
180
|
+
void loadMoreLogs();
|
|
181
|
+
}, [levelFilter, processFilter, searchQuery, loadMoreId, loadMoreLogs, updateLogCount]);
|
|
182
|
+
|
|
183
|
+
// Subscribe to new logs (`searchText` ref is stable; handler calls searchText() per event for current query).
|
|
155
184
|
useEffect(() => {
|
|
156
|
-
let sub: ISubscriptionResult | undefined
|
|
157
|
-
ConsoleLogs().then(table => {
|
|
158
|
-
sub = table.dataChanged.subscribe(evt => {
|
|
185
|
+
let sub: ISubscriptionResult | undefined;
|
|
186
|
+
ConsoleLogs().then((table) => {
|
|
187
|
+
sub = table.dataChanged.subscribe((evt) => {
|
|
159
188
|
// Update count whenever data changes
|
|
160
|
-
updateLogCount();
|
|
189
|
+
void updateLogCount();
|
|
161
190
|
|
|
162
191
|
const log: IConsoleLog = evt.dataObject;
|
|
163
192
|
|
|
164
193
|
// Check if log matches current filters
|
|
165
|
-
if (levelFilter !==
|
|
166
|
-
if (processFilter !==
|
|
194
|
+
if (levelFilter !== "all" && log.level !== levelFilter) return;
|
|
195
|
+
if (processFilter !== "all" && log.process !== processFilter) return;
|
|
167
196
|
if (searchText()) {
|
|
168
197
|
const logMessage = log.message.toLowerCase();
|
|
169
|
-
const filterOut = searchText()
|
|
198
|
+
const filterOut = searchText()
|
|
199
|
+
.toLowerCase()
|
|
200
|
+
.split(" ")
|
|
201
|
+
.some((word) => !logMessage.includes(word));
|
|
170
202
|
if (filterOut) return;
|
|
171
203
|
}
|
|
172
204
|
|
|
173
205
|
// Don't add we're only showing a limited batch and this is older
|
|
174
|
-
|
|
206
|
+
const timestamps = logs().map((l) => l.timestamp);
|
|
207
|
+
const oldestTs = min(timestamps);
|
|
208
|
+
if (logs().length > batchSize && oldestTs !== undefined && oldestTs > log.timestamp) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
175
211
|
|
|
176
|
-
if (evt.op ===
|
|
177
|
-
let _logs = sortBy([...logs(), log],
|
|
178
|
-
_logs = uniqBy(_logs, l => l.logId);
|
|
212
|
+
if (evt.op === "insert") {
|
|
213
|
+
let _logs = sortBy([...logs(), log], "timestamp");
|
|
214
|
+
_logs = uniqBy(_logs, (l) => l.logId);
|
|
179
215
|
logs(_logs);
|
|
180
|
-
scrollToBottom(
|
|
216
|
+
scrollToBottom("smooth");
|
|
181
217
|
}
|
|
182
218
|
});
|
|
183
219
|
});
|
|
184
220
|
return () => {
|
|
185
221
|
sub?.unsubscribe();
|
|
186
222
|
};
|
|
187
|
-
}, [levelFilter, processFilter]);
|
|
188
|
-
|
|
189
|
-
function scrollToBottom(behavior: 'instant' | 'smooth', delay = 100) {
|
|
190
|
-
setTimeout(() => {
|
|
191
|
-
logsEndRef.current?.scrollIntoView({ behavior });
|
|
192
|
-
}, delay);
|
|
193
|
-
}
|
|
223
|
+
}, [levelFilter, processFilter, logs, scrollToBottom, searchText, updateLogCount]);
|
|
194
224
|
|
|
195
225
|
async function handleClearLogs() {
|
|
196
|
-
if (confirm(
|
|
226
|
+
if (confirm("Are you sure you want to clear all console logs?")) {
|
|
197
227
|
try {
|
|
198
228
|
const table = await ConsoleLogs();
|
|
199
229
|
await table.deleteOldLogs(Date.now());
|
|
200
230
|
logs([]);
|
|
201
231
|
setTotalLogCount(0);
|
|
202
232
|
} catch (err) {
|
|
203
|
-
console.error(
|
|
233
|
+
console.error("Failed to clear logs:", err);
|
|
204
234
|
}
|
|
205
235
|
}
|
|
206
236
|
}
|
|
207
237
|
|
|
208
|
-
const _logs = uniqBy(logs(), l => l.logId);
|
|
238
|
+
const _logs = uniqBy(logs(), (l) => l.logId);
|
|
209
239
|
|
|
210
240
|
return (
|
|
211
|
-
<div
|
|
241
|
+
<div
|
|
242
|
+
className="container-fluid"
|
|
243
|
+
style={{ height: "calc(100vh - 100px)", display: "flex", flexDirection: "column" }}
|
|
244
|
+
>
|
|
212
245
|
<LogFilters
|
|
213
246
|
levelFilter={levelFilter}
|
|
214
247
|
setLevelFilter={setLevelFilter}
|
|
@@ -222,12 +255,12 @@ export const ConsoleLogsList = () => {
|
|
|
222
255
|
ref={containerRef}
|
|
223
256
|
style={{
|
|
224
257
|
flex: 1,
|
|
225
|
-
display:
|
|
226
|
-
flexDirection:
|
|
227
|
-
backgroundColor: _colorMode ===
|
|
228
|
-
borderRadius:
|
|
229
|
-
marginBottom:
|
|
230
|
-
overflow:
|
|
258
|
+
display: "flex",
|
|
259
|
+
flexDirection: "column",
|
|
260
|
+
backgroundColor: _colorMode === "dark" ? "#1a1a1a" : "#f8f9fa",
|
|
261
|
+
borderRadius: "0.25rem",
|
|
262
|
+
marginBottom: "50px",
|
|
263
|
+
overflow: "hidden",
|
|
231
264
|
}}
|
|
232
265
|
>
|
|
233
266
|
{/* Desktop: Resizable table header outside scroll area */}
|
|
@@ -244,27 +277,25 @@ export const ConsoleLogsList = () => {
|
|
|
244
277
|
id="scrollableLogsDiv"
|
|
245
278
|
style={{
|
|
246
279
|
flex: 1,
|
|
247
|
-
overflow:
|
|
248
|
-
display:
|
|
249
|
-
flexDirection:
|
|
280
|
+
overflow: "auto",
|
|
281
|
+
display: "flex",
|
|
282
|
+
flexDirection: "column-reverse",
|
|
250
283
|
}}
|
|
251
284
|
>
|
|
252
285
|
<InfiniteScroll
|
|
253
286
|
dataLength={_logs.length}
|
|
254
287
|
next={loadMoreLogs}
|
|
255
|
-
style={{ display:
|
|
288
|
+
style={{ display: "flex", flexDirection: "column-reverse", overflow: "hidden" }}
|
|
256
289
|
inverse={true}
|
|
257
290
|
hasMore={!allLogsLoaded}
|
|
258
291
|
loader={<LoadingIndicator />}
|
|
259
292
|
scrollableTarget="scrollableLogsDiv"
|
|
260
293
|
endMessage={
|
|
261
|
-
<
|
|
262
|
-
<div className="
|
|
263
|
-
<
|
|
264
|
-
<i>beginning of logs</i>
|
|
265
|
-
</div>
|
|
294
|
+
<div className="d-flex justify-content-center p-3">
|
|
295
|
+
<div className="text-muted">
|
|
296
|
+
<i>beginning of logs</i>
|
|
266
297
|
</div>
|
|
267
|
-
</
|
|
298
|
+
</div>
|
|
268
299
|
}
|
|
269
300
|
>
|
|
270
301
|
<div ref={logsEndRef} />
|
|
@@ -282,7 +313,10 @@ export const ConsoleLogsList = () => {
|
|
|
282
313
|
</div>
|
|
283
314
|
) : (
|
|
284
315
|
/* Desktop: Table layout */
|
|
285
|
-
<table
|
|
316
|
+
<table
|
|
317
|
+
className="table table-sm table-hover mb-0"
|
|
318
|
+
style={{ fontSize: "0.85rem", tableLayout: "fixed", width: "100%" }}
|
|
319
|
+
>
|
|
286
320
|
<tbody>
|
|
287
321
|
{_logs.map((log) => (
|
|
288
322
|
<LogDisplay key={log.logId} log={log} columns={columns} />
|
|
@@ -296,33 +330,30 @@ export const ConsoleLogsList = () => {
|
|
|
296
330
|
|
|
297
331
|
<div
|
|
298
332
|
style={{
|
|
299
|
-
position:
|
|
333
|
+
position: "fixed",
|
|
300
334
|
bottom: 0,
|
|
301
335
|
left: 0,
|
|
302
336
|
right: 0,
|
|
303
|
-
padding:
|
|
304
|
-
backgroundColor: _colorMode ===
|
|
305
|
-
borderTop:
|
|
337
|
+
padding: "0.5rem 1rem",
|
|
338
|
+
backgroundColor: _colorMode === "dark" ? "#2a2a2a" : "#ffffff",
|
|
339
|
+
borderTop: "1px solid #dee2e6",
|
|
306
340
|
zIndex: 1000,
|
|
307
|
-
display:
|
|
308
|
-
justifyContent:
|
|
309
|
-
alignItems:
|
|
341
|
+
display: "flex",
|
|
342
|
+
justifyContent: "space-between",
|
|
343
|
+
alignItems: "center",
|
|
310
344
|
}}
|
|
311
345
|
>
|
|
312
346
|
<div className="text-muted small">
|
|
313
347
|
{totalLogCount > 0 ? (
|
|
314
348
|
<>
|
|
315
349
|
<i className="bi bi-list-ul me-1"></i>
|
|
316
|
-
{totalLogCount} log{totalLogCount !== 1 ?
|
|
350
|
+
{totalLogCount} log{totalLogCount !== 1 ? "s" : ""}
|
|
317
351
|
</>
|
|
318
352
|
) : (
|
|
319
353
|
<span> </span>
|
|
320
354
|
)}
|
|
321
355
|
</div>
|
|
322
|
-
<button
|
|
323
|
-
className="btn btn-sm btn-outline-danger"
|
|
324
|
-
onClick={handleClearLogs}
|
|
325
|
-
>
|
|
356
|
+
<button className="btn btn-sm btn-outline-danger" onClick={handleClearLogs}>
|
|
326
357
|
<i className="bi bi-trash me-1"></i>
|
|
327
358
|
Clear All
|
|
328
359
|
</button>
|
|
@@ -333,9 +364,11 @@ export const ConsoleLogsList = () => {
|
|
|
333
364
|
|
|
334
365
|
registerInternalPeersUI({
|
|
335
366
|
component: ConsoleLogsList,
|
|
336
|
-
routes: [
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
367
|
+
routes: [
|
|
368
|
+
{
|
|
369
|
+
isMatch: (_props, context) => context.path === "console-logs",
|
|
370
|
+
uiCategory: "screen",
|
|
371
|
+
priority: 0,
|
|
372
|
+
},
|
|
373
|
+
],
|
|
341
374
|
});
|