@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,37 +1,52 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { useObservable } from
|
|
1
|
+
import { groupDeviceVar, newid } from "@peers-app/peers-sdk";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { LoadingIndicator } from "../../components/loading-indicator";
|
|
5
|
+
import { isDesktop } from "../../globals";
|
|
6
|
+
import { useObservable } from "../../hooks";
|
|
7
|
+
import { registerInternalPeersUI } from "../../ui-router/ui-loader";
|
|
7
8
|
|
|
8
9
|
interface ISqlQueryResult {
|
|
9
10
|
columns: string[];
|
|
10
|
-
rows:
|
|
11
|
+
rows: unknown[][];
|
|
11
12
|
rowCount: number;
|
|
12
13
|
isWriteOperation?: boolean;
|
|
13
14
|
changesCount?: number;
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
type DataExplorerQueryApi = {
|
|
18
|
+
executeQuery: (query: string, writeEnabled: boolean) => Promise<ISqlQueryResult>;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type WindowWithDataExplorerQuery = Window & {
|
|
22
|
+
electronAPI?: { dataExplorer?: DataExplorerQueryApi };
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
function getDataExplorerQueryApi(): DataExplorerQueryApi | undefined {
|
|
26
|
+
return (window as WindowWithDataExplorerQuery).electronAPI?.dataExplorer;
|
|
27
|
+
}
|
|
28
|
+
|
|
16
29
|
interface IQueryTab {
|
|
17
30
|
id: string;
|
|
18
31
|
name: string;
|
|
19
32
|
query: string;
|
|
20
33
|
}
|
|
21
34
|
|
|
22
|
-
const defaultQuery =
|
|
35
|
+
const defaultQuery = "SELECT * FROM sqlite_master WHERE type='table' LIMIT 10";
|
|
23
36
|
|
|
24
37
|
// Persistent vars at module level
|
|
25
|
-
const queryTabs = groupDeviceVar<IQueryTab[]>(
|
|
26
|
-
defaultValue: [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
const queryTabs = groupDeviceVar<IQueryTab[]>("dataExplorerQueryTabs", {
|
|
39
|
+
defaultValue: [
|
|
40
|
+
{
|
|
41
|
+
id: newid(),
|
|
42
|
+
name: "Query 1",
|
|
43
|
+
query: defaultQuery,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
31
46
|
});
|
|
32
47
|
|
|
33
|
-
const activeQueryTabId = groupDeviceVar<string>(
|
|
34
|
-
defaultValue:
|
|
48
|
+
const activeQueryTabId = groupDeviceVar<string>("dataExplorerActiveQueryTab", {
|
|
49
|
+
defaultValue: "",
|
|
35
50
|
});
|
|
36
51
|
|
|
37
52
|
export function QueryExecutor() {
|
|
@@ -41,30 +56,30 @@ export function QueryExecutor() {
|
|
|
41
56
|
const [errors, setErrors] = useState<{ [tabId: string]: string }>({});
|
|
42
57
|
const [loading, setLoading] = useState<{ [tabId: string]: boolean }>({});
|
|
43
58
|
const [writeEnabled, setWriteEnabled] = useState(false);
|
|
44
|
-
|
|
59
|
+
|
|
45
60
|
// Local state for query input to avoid locking up on fast typing
|
|
46
|
-
const [localQuery, setLocalQuery] = useState<string>(
|
|
61
|
+
const [localQuery, setLocalQuery] = useState<string>("");
|
|
47
62
|
const debounceTimeoutRef = useRef<NodeJS.Timeout>();
|
|
48
|
-
const lastSavedQueryRef = useRef<string>(
|
|
63
|
+
const lastSavedQueryRef = useRef<string>("");
|
|
49
64
|
|
|
50
65
|
const tabs = queryTabs();
|
|
51
66
|
const activeTabId = activeQueryTabId();
|
|
52
|
-
const activeTab = tabs.find(t => t.id === activeTabId);
|
|
53
|
-
|
|
67
|
+
const activeTab = tabs.find((t) => t.id === activeTabId);
|
|
68
|
+
|
|
54
69
|
// Sync local query with persisted query when tab changes
|
|
55
70
|
useEffect(() => {
|
|
56
|
-
const persistedQuery = activeTab?.query ||
|
|
71
|
+
const persistedQuery = activeTab?.query || "";
|
|
57
72
|
setLocalQuery(persistedQuery);
|
|
58
73
|
lastSavedQueryRef.current = persistedQuery;
|
|
59
|
-
}, [
|
|
74
|
+
}, [activeTab?.query]);
|
|
60
75
|
|
|
61
76
|
// Subscribe to tab changes
|
|
62
|
-
useEffect(() => {
|
|
77
|
+
useEffect(() => {
|
|
63
78
|
// Initialize activeTabId if not set
|
|
64
79
|
if (!activeQueryTabId() && queryTabs().length > 0) {
|
|
65
80
|
activeQueryTabId(queryTabs()[0].id);
|
|
66
81
|
}
|
|
67
|
-
}, [
|
|
82
|
+
}, []);
|
|
68
83
|
|
|
69
84
|
const query = localQuery;
|
|
70
85
|
const result = activeTab ? results[activeTab.id] : null;
|
|
@@ -75,23 +90,21 @@ export function QueryExecutor() {
|
|
|
75
90
|
const updatePersistedQuery = (newQuery: string) => {
|
|
76
91
|
if (!activeTab) return;
|
|
77
92
|
if (newQuery === lastSavedQueryRef.current) return; // Skip if unchanged
|
|
78
|
-
|
|
93
|
+
|
|
79
94
|
const currentTabs = queryTabs();
|
|
80
|
-
queryTabs(currentTabs.map(t =>
|
|
81
|
-
t.id === activeTab.id ? { ...t, query: newQuery } : t
|
|
82
|
-
));
|
|
95
|
+
queryTabs(currentTabs.map((t) => (t.id === activeTab.id ? { ...t, query: newQuery } : t)));
|
|
83
96
|
lastSavedQueryRef.current = newQuery;
|
|
84
97
|
};
|
|
85
98
|
|
|
86
99
|
const setQuery = (newQuery: string) => {
|
|
87
100
|
// Update local state immediately for responsive UI
|
|
88
101
|
setLocalQuery(newQuery);
|
|
89
|
-
|
|
102
|
+
|
|
90
103
|
// Clear existing debounce timeout
|
|
91
104
|
if (debounceTimeoutRef.current) {
|
|
92
105
|
clearTimeout(debounceTimeoutRef.current);
|
|
93
106
|
}
|
|
94
|
-
|
|
107
|
+
|
|
95
108
|
// Debounce the persisted update (300ms delay)
|
|
96
109
|
debounceTimeoutRef.current = setTimeout(() => {
|
|
97
110
|
updatePersistedQuery(newQuery);
|
|
@@ -118,7 +131,7 @@ export function QueryExecutor() {
|
|
|
118
131
|
|
|
119
132
|
const setResult = (result: ISqlQueryResult | null) => {
|
|
120
133
|
if (!activeTab) return;
|
|
121
|
-
setResults(prev => {
|
|
134
|
+
setResults((prev) => {
|
|
122
135
|
const newResults = { ...prev };
|
|
123
136
|
if (result === null) {
|
|
124
137
|
delete newResults[activeTab.id];
|
|
@@ -131,7 +144,7 @@ export function QueryExecutor() {
|
|
|
131
144
|
|
|
132
145
|
const setError = (error: string | null) => {
|
|
133
146
|
if (!activeTab) return;
|
|
134
|
-
setErrors(prev => {
|
|
147
|
+
setErrors((prev) => {
|
|
135
148
|
const newErrors = { ...prev };
|
|
136
149
|
if (error === null) {
|
|
137
150
|
delete newErrors[activeTab.id];
|
|
@@ -144,12 +157,12 @@ export function QueryExecutor() {
|
|
|
144
157
|
|
|
145
158
|
const setLoadingState = (isLoading: boolean) => {
|
|
146
159
|
if (!activeTab) return;
|
|
147
|
-
setLoading(prev => ({ ...prev, [activeTab.id]: isLoading }));
|
|
160
|
+
setLoading((prev) => ({ ...prev, [activeTab.id]: isLoading }));
|
|
148
161
|
};
|
|
149
162
|
|
|
150
163
|
const executeQuery = async () => {
|
|
151
164
|
if (!query.trim()) {
|
|
152
|
-
setError(
|
|
165
|
+
setError("Please enter a query");
|
|
153
166
|
return;
|
|
154
167
|
}
|
|
155
168
|
|
|
@@ -165,16 +178,16 @@ export function QueryExecutor() {
|
|
|
165
178
|
setError(null);
|
|
166
179
|
setResult(null);
|
|
167
180
|
|
|
168
|
-
const api = (
|
|
181
|
+
const api = getDataExplorerQueryApi();
|
|
169
182
|
if (!api) {
|
|
170
|
-
setError(
|
|
183
|
+
setError("Data Explorer API not available");
|
|
171
184
|
return;
|
|
172
185
|
}
|
|
173
186
|
|
|
174
187
|
const queryResult = await api.executeQuery(query, writeEnabled);
|
|
175
188
|
setResult(queryResult);
|
|
176
|
-
} catch (err:
|
|
177
|
-
setError(err.message
|
|
189
|
+
} catch (err: unknown) {
|
|
190
|
+
setError(err instanceof Error ? err.message : "Query execution failed");
|
|
178
191
|
} finally {
|
|
179
192
|
setLoadingState(false);
|
|
180
193
|
}
|
|
@@ -185,7 +198,7 @@ export function QueryExecutor() {
|
|
|
185
198
|
const newTab: IQueryTab = {
|
|
186
199
|
id: newid(),
|
|
187
200
|
name: `Query ${currentTabs.length + 1}`,
|
|
188
|
-
query: defaultQuery
|
|
201
|
+
query: defaultQuery,
|
|
189
202
|
};
|
|
190
203
|
queryTabs([...currentTabs, newTab]);
|
|
191
204
|
activeQueryTabId(newTab.id);
|
|
@@ -195,8 +208,8 @@ export function QueryExecutor() {
|
|
|
195
208
|
const currentTabs = queryTabs();
|
|
196
209
|
if (currentTabs.length === 1) return; // Don't close the last tab
|
|
197
210
|
|
|
198
|
-
const tabIndex = currentTabs.findIndex(t => t.id === tabId);
|
|
199
|
-
const newTabs = currentTabs.filter(t => t.id !== tabId);
|
|
211
|
+
const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
|
|
212
|
+
const newTabs = currentTabs.filter((t) => t.id !== tabId);
|
|
200
213
|
|
|
201
214
|
queryTabs(newTabs);
|
|
202
215
|
|
|
@@ -207,28 +220,26 @@ export function QueryExecutor() {
|
|
|
207
220
|
}
|
|
208
221
|
|
|
209
222
|
// Clean up results and errors for closed tab
|
|
210
|
-
setResults(prev => {
|
|
223
|
+
setResults((prev) => {
|
|
211
224
|
const newResults = { ...prev };
|
|
212
225
|
delete newResults[tabId];
|
|
213
226
|
return newResults;
|
|
214
227
|
});
|
|
215
|
-
setErrors(prev => {
|
|
228
|
+
setErrors((prev) => {
|
|
216
229
|
const newErrors = { ...prev };
|
|
217
230
|
delete newErrors[tabId];
|
|
218
231
|
return newErrors;
|
|
219
232
|
});
|
|
220
233
|
};
|
|
221
234
|
|
|
222
|
-
const
|
|
235
|
+
const _renameTab = (tabId: string, newName: string) => {
|
|
223
236
|
const currentTabs = queryTabs();
|
|
224
|
-
queryTabs(currentTabs.map(t =>
|
|
225
|
-
t.id === tabId ? { ...t, name: newName } : t
|
|
226
|
-
));
|
|
237
|
+
queryTabs(currentTabs.map((t) => (t.id === tabId ? { ...t, name: newName } : t)));
|
|
227
238
|
};
|
|
228
239
|
|
|
229
240
|
const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
|
|
230
241
|
// Execute on Cmd/Ctrl + Enter
|
|
231
|
-
if ((e.metaKey || e.ctrlKey) && e.key ===
|
|
242
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
|
|
232
243
|
e.preventDefault();
|
|
233
244
|
executeQuery();
|
|
234
245
|
}
|
|
@@ -268,13 +279,10 @@ export function QueryExecutor() {
|
|
|
268
279
|
{tabs.map((tab) => (
|
|
269
280
|
<li key={tab.id} className="nav-item">
|
|
270
281
|
<div
|
|
271
|
-
className={`nav-link ${tab.id === activeTabId ?
|
|
272
|
-
style={{ cursor:
|
|
282
|
+
className={`nav-link ${tab.id === activeTabId ? "active" : ""}`}
|
|
283
|
+
style={{ cursor: "pointer", display: "flex", alignItems: "center", gap: "8px" }}
|
|
273
284
|
>
|
|
274
|
-
<span
|
|
275
|
-
onClick={() => activeQueryTabId(tab.id)}
|
|
276
|
-
style={{ flex: 1 }}
|
|
277
|
-
>
|
|
285
|
+
<span onClick={() => activeQueryTabId(tab.id)} style={{ flex: 1 }}>
|
|
278
286
|
{tab.name}
|
|
279
287
|
</span>
|
|
280
288
|
{tabs.length > 1 && (
|
|
@@ -285,11 +293,11 @@ export function QueryExecutor() {
|
|
|
285
293
|
closeTab(tab.id);
|
|
286
294
|
}}
|
|
287
295
|
style={{
|
|
288
|
-
border:
|
|
289
|
-
background:
|
|
290
|
-
fontSize:
|
|
296
|
+
border: "none",
|
|
297
|
+
background: "none",
|
|
298
|
+
fontSize: "1.2em",
|
|
291
299
|
lineHeight: 1,
|
|
292
|
-
opacity: 0.6
|
|
300
|
+
opacity: 0.6,
|
|
293
301
|
}}
|
|
294
302
|
title="Close tab"
|
|
295
303
|
>
|
|
@@ -303,7 +311,7 @@ export function QueryExecutor() {
|
|
|
303
311
|
<button
|
|
304
312
|
className="nav-link"
|
|
305
313
|
onClick={addNewTab}
|
|
306
|
-
style={{ border:
|
|
314
|
+
style={{ border: "none", background: "none" }}
|
|
307
315
|
title="New query tab"
|
|
308
316
|
>
|
|
309
317
|
<i className="bi bi-plus-lg"></i>
|
|
@@ -350,7 +358,11 @@ export function QueryExecutor() {
|
|
|
350
358
|
>
|
|
351
359
|
{isLoading ? (
|
|
352
360
|
<>
|
|
353
|
-
<span
|
|
361
|
+
<span
|
|
362
|
+
className="spinner-border spinner-border-sm me-2"
|
|
363
|
+
role="status"
|
|
364
|
+
aria-hidden="true"
|
|
365
|
+
></span>
|
|
354
366
|
Executing...
|
|
355
367
|
</>
|
|
356
368
|
) : (
|
|
@@ -387,19 +399,16 @@ export function QueryExecutor() {
|
|
|
387
399
|
<div className="card-body">
|
|
388
400
|
<div className="d-flex justify-content-between align-items-center mb-3">
|
|
389
401
|
<h5 className="card-title mb-0">
|
|
390
|
-
{result.isWriteOperation ?
|
|
402
|
+
{result.isWriteOperation ? "Write Result" : "Query Results"}
|
|
391
403
|
{result.isWriteOperation ? (
|
|
392
404
|
<span className="badge bg-success ms-2">
|
|
393
|
-
{result.changesCount} row{result.changesCount !== 1 ?
|
|
405
|
+
{result.changesCount} row{result.changesCount !== 1 ? "s" : ""} affected
|
|
394
406
|
</span>
|
|
395
407
|
) : (
|
|
396
408
|
<span className="badge bg-primary ms-2">{result.rowCount} rows</span>
|
|
397
409
|
)}
|
|
398
410
|
</h5>
|
|
399
|
-
<button
|
|
400
|
-
className="btn btn-sm btn-outline-secondary"
|
|
401
|
-
onClick={() => setResult(null)}
|
|
402
|
-
>
|
|
411
|
+
<button className="btn btn-sm btn-outline-secondary" onClick={() => setResult(null)}>
|
|
403
412
|
<i className="bi bi-x"></i> Clear
|
|
404
413
|
</button>
|
|
405
414
|
</div>
|
|
@@ -407,7 +416,8 @@ export function QueryExecutor() {
|
|
|
407
416
|
{result.isWriteOperation ? (
|
|
408
417
|
<div className="alert alert-success mb-0">
|
|
409
418
|
<i className="bi bi-check-circle-fill me-2"></i>
|
|
410
|
-
Query executed successfully. {result.changesCount} row
|
|
419
|
+
Query executed successfully. {result.changesCount} row
|
|
420
|
+
{result.changesCount !== 1 ? "s" : ""} affected.
|
|
411
421
|
</div>
|
|
412
422
|
) : result.rowCount === 0 ? (
|
|
413
423
|
<div className="alert alert-info mb-0">
|
|
@@ -432,8 +442,8 @@ export function QueryExecutor() {
|
|
|
432
442
|
<td key={cellIdx} className="font-monospace small">
|
|
433
443
|
{cell === null ? (
|
|
434
444
|
<span className="text-muted fst-italic">null</span>
|
|
435
|
-
) : typeof cell ===
|
|
436
|
-
<pre className="mb-0" style={{ fontSize:
|
|
445
|
+
) : typeof cell === "object" ? (
|
|
446
|
+
<pre className="mb-0" style={{ fontSize: "0.7rem" }}>
|
|
437
447
|
{JSON.stringify(cell, null, 2)}
|
|
438
448
|
</pre>
|
|
439
449
|
) : (
|
|
@@ -460,7 +470,7 @@ export function QueryExecutor() {
|
|
|
460
470
|
<li className="mb-2">
|
|
461
471
|
<button
|
|
462
472
|
className="btn btn-sm btn-outline-secondary font-monospace"
|
|
463
|
-
onClick={() => setQuery(
|
|
473
|
+
onClick={() => setQuery("SELECT * FROM sqlite_master WHERE type='table'")}
|
|
464
474
|
>
|
|
465
475
|
List all tables
|
|
466
476
|
</button>
|
|
@@ -468,7 +478,7 @@ export function QueryExecutor() {
|
|
|
468
478
|
<li className="mb-2">
|
|
469
479
|
<button
|
|
470
480
|
className="btn btn-sm btn-outline-secondary font-monospace"
|
|
471
|
-
onClick={() => setQuery(
|
|
481
|
+
onClick={() => setQuery("PRAGMA table_info(Users)")}
|
|
472
482
|
>
|
|
473
483
|
Show Users table schema
|
|
474
484
|
</button>
|
|
@@ -476,7 +486,7 @@ export function QueryExecutor() {
|
|
|
476
486
|
<li className="mb-2">
|
|
477
487
|
<button
|
|
478
488
|
className="btn btn-sm btn-outline-secondary font-monospace"
|
|
479
|
-
onClick={() => setQuery(
|
|
489
|
+
onClick={() => setQuery("SELECT name, sql FROM sqlite_master WHERE type='index'")}
|
|
480
490
|
>
|
|
481
491
|
List all indexes
|
|
482
492
|
</button>
|
|
@@ -484,7 +494,7 @@ export function QueryExecutor() {
|
|
|
484
494
|
<li className="mb-2">
|
|
485
495
|
<button
|
|
486
496
|
className="btn btn-sm btn-outline-secondary font-monospace"
|
|
487
|
-
onClick={() => setQuery(
|
|
497
|
+
onClick={() => setQuery("PRAGMA database_list")}
|
|
488
498
|
>
|
|
489
499
|
Show attached databases
|
|
490
500
|
</button>
|
|
@@ -498,13 +508,13 @@ export function QueryExecutor() {
|
|
|
498
508
|
}
|
|
499
509
|
|
|
500
510
|
registerInternalPeersUI({
|
|
501
|
-
peersUIId:
|
|
511
|
+
peersUIId: "data-explorer-query-ui",
|
|
502
512
|
component: QueryExecutor,
|
|
503
513
|
routes: [
|
|
504
514
|
{
|
|
505
|
-
isMatch: (_props, context) => context.path ===
|
|
506
|
-
uiCategory:
|
|
507
|
-
priority: 2
|
|
508
|
-
}
|
|
509
|
-
]
|
|
515
|
+
isMatch: (_props, context) => context.path === "data-explorer/query",
|
|
516
|
+
uiCategory: "screen",
|
|
517
|
+
priority: 2,
|
|
518
|
+
},
|
|
519
|
+
],
|
|
510
520
|
});
|