@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,56 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.QueryExecutor = QueryExecutor;
|
|
37
|
-
const
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
6
|
+
const react_1 = require("react");
|
|
38
7
|
const loading_indicator_1 = require("../../components/loading-indicator");
|
|
39
|
-
const ui_loader_1 = require("../../ui-router/ui-loader");
|
|
40
8
|
const globals_1 = require("../../globals");
|
|
41
|
-
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
42
9
|
const hooks_1 = require("../../hooks");
|
|
43
|
-
const
|
|
10
|
+
const ui_loader_1 = require("../../ui-router/ui-loader");
|
|
11
|
+
function getDataExplorerQueryApi() {
|
|
12
|
+
return window.electronAPI?.dataExplorer;
|
|
13
|
+
}
|
|
14
|
+
const defaultQuery = "SELECT * FROM sqlite_master WHERE type='table' LIMIT 10";
|
|
44
15
|
// Persistent vars at module level
|
|
45
|
-
const queryTabs = (0, peers_sdk_1.groupDeviceVar)(
|
|
46
|
-
defaultValue: [
|
|
16
|
+
const queryTabs = (0, peers_sdk_1.groupDeviceVar)("dataExplorerQueryTabs", {
|
|
17
|
+
defaultValue: [
|
|
18
|
+
{
|
|
47
19
|
id: (0, peers_sdk_1.newid)(),
|
|
48
|
-
name:
|
|
49
|
-
query: defaultQuery
|
|
50
|
-
}
|
|
20
|
+
name: "Query 1",
|
|
21
|
+
query: defaultQuery,
|
|
22
|
+
},
|
|
23
|
+
],
|
|
51
24
|
});
|
|
52
|
-
const activeQueryTabId = (0, peers_sdk_1.groupDeviceVar)(
|
|
53
|
-
defaultValue:
|
|
25
|
+
const activeQueryTabId = (0, peers_sdk_1.groupDeviceVar)("dataExplorerActiveQueryTab", {
|
|
26
|
+
defaultValue: "",
|
|
54
27
|
});
|
|
55
28
|
function QueryExecutor() {
|
|
56
29
|
(0, hooks_1.useObservable)(queryTabs);
|
|
@@ -60,25 +33,25 @@ function QueryExecutor() {
|
|
|
60
33
|
const [loading, setLoading] = (0, react_1.useState)({});
|
|
61
34
|
const [writeEnabled, setWriteEnabled] = (0, react_1.useState)(false);
|
|
62
35
|
// Local state for query input to avoid locking up on fast typing
|
|
63
|
-
const [localQuery, setLocalQuery] = (0, react_1.useState)(
|
|
36
|
+
const [localQuery, setLocalQuery] = (0, react_1.useState)("");
|
|
64
37
|
const debounceTimeoutRef = (0, react_1.useRef)();
|
|
65
|
-
const lastSavedQueryRef = (0, react_1.useRef)(
|
|
38
|
+
const lastSavedQueryRef = (0, react_1.useRef)("");
|
|
66
39
|
const tabs = queryTabs();
|
|
67
40
|
const activeTabId = activeQueryTabId();
|
|
68
|
-
const activeTab = tabs.find(t => t.id === activeTabId);
|
|
41
|
+
const activeTab = tabs.find((t) => t.id === activeTabId);
|
|
69
42
|
// Sync local query with persisted query when tab changes
|
|
70
43
|
(0, react_1.useEffect)(() => {
|
|
71
|
-
const persistedQuery = activeTab?.query ||
|
|
44
|
+
const persistedQuery = activeTab?.query || "";
|
|
72
45
|
setLocalQuery(persistedQuery);
|
|
73
46
|
lastSavedQueryRef.current = persistedQuery;
|
|
74
|
-
}, [
|
|
47
|
+
}, [activeTab?.query]);
|
|
75
48
|
// Subscribe to tab changes
|
|
76
49
|
(0, react_1.useEffect)(() => {
|
|
77
50
|
// Initialize activeTabId if not set
|
|
78
51
|
if (!activeQueryTabId() && queryTabs().length > 0) {
|
|
79
52
|
activeQueryTabId(queryTabs()[0].id);
|
|
80
53
|
}
|
|
81
|
-
}, [
|
|
54
|
+
}, []);
|
|
82
55
|
const query = localQuery;
|
|
83
56
|
const result = activeTab ? results[activeTab.id] : null;
|
|
84
57
|
const error = activeTab ? errors[activeTab.id] : null;
|
|
@@ -90,7 +63,7 @@ function QueryExecutor() {
|
|
|
90
63
|
if (newQuery === lastSavedQueryRef.current)
|
|
91
64
|
return; // Skip if unchanged
|
|
92
65
|
const currentTabs = queryTabs();
|
|
93
|
-
queryTabs(currentTabs.map(t => t.id === activeTab.id ? { ...t, query: newQuery } : t));
|
|
66
|
+
queryTabs(currentTabs.map((t) => (t.id === activeTab.id ? { ...t, query: newQuery } : t)));
|
|
94
67
|
lastSavedQueryRef.current = newQuery;
|
|
95
68
|
};
|
|
96
69
|
const setQuery = (newQuery) => {
|
|
@@ -124,7 +97,7 @@ function QueryExecutor() {
|
|
|
124
97
|
const setResult = (result) => {
|
|
125
98
|
if (!activeTab)
|
|
126
99
|
return;
|
|
127
|
-
setResults(prev => {
|
|
100
|
+
setResults((prev) => {
|
|
128
101
|
const newResults = { ...prev };
|
|
129
102
|
if (result === null) {
|
|
130
103
|
delete newResults[activeTab.id];
|
|
@@ -138,7 +111,7 @@ function QueryExecutor() {
|
|
|
138
111
|
const setError = (error) => {
|
|
139
112
|
if (!activeTab)
|
|
140
113
|
return;
|
|
141
|
-
setErrors(prev => {
|
|
114
|
+
setErrors((prev) => {
|
|
142
115
|
const newErrors = { ...prev };
|
|
143
116
|
if (error === null) {
|
|
144
117
|
delete newErrors[activeTab.id];
|
|
@@ -152,11 +125,11 @@ function QueryExecutor() {
|
|
|
152
125
|
const setLoadingState = (isLoading) => {
|
|
153
126
|
if (!activeTab)
|
|
154
127
|
return;
|
|
155
|
-
setLoading(prev => ({ ...prev, [activeTab.id]: isLoading }));
|
|
128
|
+
setLoading((prev) => ({ ...prev, [activeTab.id]: isLoading }));
|
|
156
129
|
};
|
|
157
130
|
const executeQuery = async () => {
|
|
158
131
|
if (!query.trim()) {
|
|
159
|
-
setError(
|
|
132
|
+
setError("Please enter a query");
|
|
160
133
|
return;
|
|
161
134
|
}
|
|
162
135
|
// Save the current query immediately before execution (in case debounce hasn't fired yet)
|
|
@@ -169,16 +142,16 @@ function QueryExecutor() {
|
|
|
169
142
|
setLoadingState(true);
|
|
170
143
|
setError(null);
|
|
171
144
|
setResult(null);
|
|
172
|
-
const api =
|
|
145
|
+
const api = getDataExplorerQueryApi();
|
|
173
146
|
if (!api) {
|
|
174
|
-
setError(
|
|
147
|
+
setError("Data Explorer API not available");
|
|
175
148
|
return;
|
|
176
149
|
}
|
|
177
150
|
const queryResult = await api.executeQuery(query, writeEnabled);
|
|
178
151
|
setResult(queryResult);
|
|
179
152
|
}
|
|
180
153
|
catch (err) {
|
|
181
|
-
setError(err.message
|
|
154
|
+
setError(err instanceof Error ? err.message : "Query execution failed");
|
|
182
155
|
}
|
|
183
156
|
finally {
|
|
184
157
|
setLoadingState(false);
|
|
@@ -189,7 +162,7 @@ function QueryExecutor() {
|
|
|
189
162
|
const newTab = {
|
|
190
163
|
id: (0, peers_sdk_1.newid)(),
|
|
191
164
|
name: `Query ${currentTabs.length + 1}`,
|
|
192
|
-
query: defaultQuery
|
|
165
|
+
query: defaultQuery,
|
|
193
166
|
};
|
|
194
167
|
queryTabs([...currentTabs, newTab]);
|
|
195
168
|
activeQueryTabId(newTab.id);
|
|
@@ -198,8 +171,8 @@ function QueryExecutor() {
|
|
|
198
171
|
const currentTabs = queryTabs();
|
|
199
172
|
if (currentTabs.length === 1)
|
|
200
173
|
return; // Don't close the last tab
|
|
201
|
-
const tabIndex = currentTabs.findIndex(t => t.id === tabId);
|
|
202
|
-
const newTabs = currentTabs.filter(t => t.id !== tabId);
|
|
174
|
+
const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
|
|
175
|
+
const newTabs = currentTabs.filter((t) => t.id !== tabId);
|
|
203
176
|
queryTabs(newTabs);
|
|
204
177
|
// If we're closing the active tab, switch to another one
|
|
205
178
|
if (tabId === activeQueryTabId()) {
|
|
@@ -207,133 +180,50 @@ function QueryExecutor() {
|
|
|
207
180
|
activeQueryTabId(newTabs[newIndex].id);
|
|
208
181
|
}
|
|
209
182
|
// Clean up results and errors for closed tab
|
|
210
|
-
setResults(prev => {
|
|
183
|
+
setResults((prev) => {
|
|
211
184
|
const newResults = { ...prev };
|
|
212
185
|
delete newResults[tabId];
|
|
213
186
|
return newResults;
|
|
214
187
|
});
|
|
215
|
-
setErrors(prev => {
|
|
188
|
+
setErrors((prev) => {
|
|
216
189
|
const newErrors = { ...prev };
|
|
217
190
|
delete newErrors[tabId];
|
|
218
191
|
return newErrors;
|
|
219
192
|
});
|
|
220
193
|
};
|
|
221
|
-
const
|
|
194
|
+
const _renameTab = (tabId, newName) => {
|
|
222
195
|
const currentTabs = queryTabs();
|
|
223
|
-
queryTabs(currentTabs.map(t => t.id === tabId ? { ...t, name: newName } : t));
|
|
196
|
+
queryTabs(currentTabs.map((t) => (t.id === tabId ? { ...t, name: newName } : t)));
|
|
224
197
|
};
|
|
225
198
|
const handleKeyDown = (e) => {
|
|
226
199
|
// Execute on Cmd/Ctrl + Enter
|
|
227
|
-
if ((e.metaKey || e.ctrlKey) && e.key ===
|
|
200
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
|
|
228
201
|
e.preventDefault();
|
|
229
202
|
executeQuery();
|
|
230
203
|
}
|
|
231
204
|
};
|
|
232
205
|
if (!(0, globals_1.isDesktop)()) {
|
|
233
|
-
return (
|
|
234
|
-
react_1.default.createElement("div", { className: "alert alert-info" }, "Query Executor is only available in the desktop application.")));
|
|
206
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "container-fluid p-4", children: (0, jsx_runtime_1.jsx)("div", { className: "alert alert-info", children: "Query Executor is only available in the desktop application." }) }));
|
|
235
207
|
}
|
|
236
|
-
return (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
react_1.default.createElement("h2", { className: "mb-3" }, "SQL Query Executor"),
|
|
247
|
-
react_1.default.createElement("div", { className: "mb-3" },
|
|
248
|
-
react_1.default.createElement("ul", { className: "nav nav-tabs" },
|
|
249
|
-
tabs.map((tab) => (react_1.default.createElement("li", { key: tab.id, className: "nav-item" },
|
|
250
|
-
react_1.default.createElement("div", { className: `nav-link ${tab.id === activeTabId ? 'active' : ''}`, style: { cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '8px' } },
|
|
251
|
-
react_1.default.createElement("span", { onClick: () => activeQueryTabId(tab.id), style: { flex: 1 } }, tab.name),
|
|
252
|
-
tabs.length > 1 && (react_1.default.createElement("button", { className: "btn btn-sm p-0", onClick: (e) => {
|
|
253
|
-
e.stopPropagation();
|
|
254
|
-
closeTab(tab.id);
|
|
255
|
-
}, style: {
|
|
256
|
-
border: 'none',
|
|
257
|
-
background: 'none',
|
|
258
|
-
fontSize: '1.2em',
|
|
259
|
-
lineHeight: 1,
|
|
260
|
-
opacity: 0.6
|
|
261
|
-
}, title: "Close tab" }, "\u00D7")))))),
|
|
262
|
-
react_1.default.createElement("li", { className: "nav-item" },
|
|
263
|
-
react_1.default.createElement("button", { className: "nav-link", onClick: addNewTab, style: { border: 'none', background: 'none' }, title: "New query tab" },
|
|
264
|
-
react_1.default.createElement("i", { className: "bi bi-plus-lg" }))))),
|
|
265
|
-
react_1.default.createElement("div", { className: "card mb-4" },
|
|
266
|
-
react_1.default.createElement("div", { className: "card-body" },
|
|
267
|
-
react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center" },
|
|
268
|
-
react_1.default.createElement("label", { htmlFor: "query-input", className: "form-label mb-0" },
|
|
269
|
-
react_1.default.createElement("strong", null, "SQL Query")),
|
|
270
|
-
react_1.default.createElement("div", { className: "form-check form-switch" },
|
|
271
|
-
react_1.default.createElement("input", { className: "form-check-input", type: "checkbox", id: "enable-writes", checked: writeEnabled, onChange: (e) => setWriteEnabled(e.target.checked) }),
|
|
272
|
-
react_1.default.createElement("label", { className: "form-check-label small", htmlFor: "enable-writes" }, "Enable Writes"))),
|
|
273
|
-
react_1.default.createElement("textarea", { id: "query-input", className: "form-control font-monospace", rows: 6, value: query, onChange: (e) => setQuery(e.target.value), onBlur: handleBlur, onKeyDown: handleKeyDown, placeholder: "Enter your SQL query here..." }),
|
|
274
|
-
react_1.default.createElement("div", { className: "mt-3 d-flex justify-content-between align-items-center" },
|
|
275
|
-
react_1.default.createElement("button", { className: "btn btn-primary", onClick: executeQuery, disabled: isLoading || !query.trim() }, isLoading ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
276
|
-
react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-2", role: "status", "aria-hidden": "true" }),
|
|
277
|
-
"Executing...")) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
278
|
-
react_1.default.createElement("i", { className: "bi bi-play-fill" }),
|
|
279
|
-
" Execute Query"))),
|
|
280
|
-
react_1.default.createElement("small", { className: "text-muted" },
|
|
281
|
-
react_1.default.createElement("i", { className: "bi bi-info-circle" }),
|
|
282
|
-
" Press Cmd/Ctrl + Enter to execute")))),
|
|
283
|
-
error && (react_1.default.createElement("div", { className: "alert alert-danger", role: "alert" },
|
|
284
|
-
react_1.default.createElement("i", { className: "bi bi-exclamation-triangle-fill me-2" }),
|
|
285
|
-
react_1.default.createElement("strong", null, "Error:"),
|
|
286
|
-
" ",
|
|
287
|
-
error)),
|
|
288
|
-
isLoading && (react_1.default.createElement("div", { className: "text-center py-5" },
|
|
289
|
-
react_1.default.createElement(loading_indicator_1.LoadingIndicator, null))),
|
|
290
|
-
result && !isLoading && (react_1.default.createElement("div", { className: "card" },
|
|
291
|
-
react_1.default.createElement("div", { className: "card-body" },
|
|
292
|
-
react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center mb-3" },
|
|
293
|
-
react_1.default.createElement("h5", { className: "card-title mb-0" },
|
|
294
|
-
result.isWriteOperation ? 'Write Result' : 'Query Results',
|
|
295
|
-
result.isWriteOperation ? (react_1.default.createElement("span", { className: "badge bg-success ms-2" },
|
|
296
|
-
result.changesCount,
|
|
297
|
-
" row",
|
|
298
|
-
result.changesCount !== 1 ? 's' : '',
|
|
299
|
-
" affected")) : (react_1.default.createElement("span", { className: "badge bg-primary ms-2" },
|
|
300
|
-
result.rowCount,
|
|
301
|
-
" rows"))),
|
|
302
|
-
react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary", onClick: () => setResult(null) },
|
|
303
|
-
react_1.default.createElement("i", { className: "bi bi-x" }),
|
|
304
|
-
" Clear")),
|
|
305
|
-
result.isWriteOperation ? (react_1.default.createElement("div", { className: "alert alert-success mb-0" },
|
|
306
|
-
react_1.default.createElement("i", { className: "bi bi-check-circle-fill me-2" }),
|
|
307
|
-
"Query executed successfully. ",
|
|
308
|
-
result.changesCount,
|
|
309
|
-
" row",
|
|
310
|
-
result.changesCount !== 1 ? 's' : '',
|
|
311
|
-
" affected.")) : result.rowCount === 0 ? (react_1.default.createElement("div", { className: "alert alert-info mb-0" }, "Query executed successfully but returned no rows.")) : (react_1.default.createElement("div", { className: "table-responsive" },
|
|
312
|
-
react_1.default.createElement("table", { className: "table table-sm table-hover table-bordered" },
|
|
313
|
-
react_1.default.createElement("thead", { className: "table-light" },
|
|
314
|
-
react_1.default.createElement("tr", null, result.columns.map((col, idx) => (react_1.default.createElement("th", { key: idx, className: "font-monospace small" }, col))))),
|
|
315
|
-
react_1.default.createElement("tbody", null, result.rows.map((row, rowIdx) => (react_1.default.createElement("tr", { key: rowIdx }, row.map((cell, cellIdx) => (react_1.default.createElement("td", { key: cellIdx, className: "font-monospace small" }, cell === null ? (react_1.default.createElement("span", { className: "text-muted fst-italic" }, "null")) : typeof cell === 'object' ? (react_1.default.createElement("pre", { className: "mb-0", style: { fontSize: '0.7rem' } }, JSON.stringify(cell, null, 2))) : (String(cell))))))))))))))),
|
|
316
|
-
!result && !isLoading && !error && (react_1.default.createElement("div", { className: "card" },
|
|
317
|
-
react_1.default.createElement("div", { className: "card-body" },
|
|
318
|
-
react_1.default.createElement("h5", { className: "card-title" }, "Example Queries"),
|
|
319
|
-
react_1.default.createElement("ul", { className: "list-unstyled mb-0" },
|
|
320
|
-
react_1.default.createElement("li", { className: "mb-2" },
|
|
321
|
-
react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('SELECT * FROM sqlite_master WHERE type=\'table\'') }, "List all tables")),
|
|
322
|
-
react_1.default.createElement("li", { className: "mb-2" },
|
|
323
|
-
react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('PRAGMA table_info(Users)') }, "Show Users table schema")),
|
|
324
|
-
react_1.default.createElement("li", { className: "mb-2" },
|
|
325
|
-
react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('SELECT name, sql FROM sqlite_master WHERE type=\'index\'') }, "List all indexes")),
|
|
326
|
-
react_1.default.createElement("li", { className: "mb-2" },
|
|
327
|
-
react_1.default.createElement("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery('PRAGMA database_list') }, "Show attached databases"))))))));
|
|
208
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid p-4", children: [(0, jsx_runtime_1.jsxs)("ul", { className: "nav nav-tabs mb-4", children: [(0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("a", { className: "nav-link", href: "#/data-explorer", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-table" }), " Tables"] }) }), (0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("a", { className: "nav-link active", href: "#/data-explorer/query", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-terminal" }), " Query"] }) })] }), (0, jsx_runtime_1.jsx)("h2", { className: "mb-3", children: "SQL Query Executor" }), (0, jsx_runtime_1.jsx)("div", { className: "mb-3", children: (0, jsx_runtime_1.jsxs)("ul", { className: "nav nav-tabs", children: [tabs.map((tab) => ((0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsxs)("div", { className: `nav-link ${tab.id === activeTabId ? "active" : ""}`, style: { cursor: "pointer", display: "flex", alignItems: "center", gap: "8px" }, children: [(0, jsx_runtime_1.jsx)("span", { onClick: () => activeQueryTabId(tab.id), style: { flex: 1 }, children: tab.name }), tabs.length > 1 && ((0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm p-0", onClick: (e) => {
|
|
209
|
+
e.stopPropagation();
|
|
210
|
+
closeTab(tab.id);
|
|
211
|
+
}, style: {
|
|
212
|
+
border: "none",
|
|
213
|
+
background: "none",
|
|
214
|
+
fontSize: "1.2em",
|
|
215
|
+
lineHeight: 1,
|
|
216
|
+
opacity: 0.6,
|
|
217
|
+
}, title: "Close tab", children: "\u00D7" }))] }) }, tab.id))), (0, jsx_runtime_1.jsx)("li", { className: "nav-item", children: (0, jsx_runtime_1.jsx)("button", { className: "nav-link", onClick: addNewTab, style: { border: "none", background: "none" }, title: "New query tab", children: (0, jsx_runtime_1.jsx)("i", { className: "bi bi-plus-lg" }) }) })] }) }), (0, jsx_runtime_1.jsx)("div", { className: "card mb-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "query-input", className: "form-label mb-0", children: (0, jsx_runtime_1.jsx)("strong", { children: "SQL Query" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "form-check form-switch", children: [(0, jsx_runtime_1.jsx)("input", { className: "form-check-input", type: "checkbox", id: "enable-writes", checked: writeEnabled, onChange: (e) => setWriteEnabled(e.target.checked) }), (0, jsx_runtime_1.jsx)("label", { className: "form-check-label small", htmlFor: "enable-writes", children: "Enable Writes" })] })] }), (0, jsx_runtime_1.jsx)("textarea", { id: "query-input", className: "form-control font-monospace", rows: 6, value: query, onChange: (e) => setQuery(e.target.value), onBlur: handleBlur, onKeyDown: handleKeyDown, placeholder: "Enter your SQL query here..." }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-3 d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary", onClick: executeQuery, disabled: isLoading || !query.trim(), children: isLoading ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-2", role: "status", "aria-hidden": "true" }), "Executing..."] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-play-fill" }), " Execute Query"] })) }), (0, jsx_runtime_1.jsxs)("small", { className: "text-muted", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-info-circle" }), " Press Cmd/Ctrl + Enter to execute"] })] })] }) }), error && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-danger", role: "alert", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-exclamation-triangle-fill me-2" }), (0, jsx_runtime_1.jsx)("strong", { children: "Error:" }), " ", error] })), isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "text-center py-5", children: (0, jsx_runtime_1.jsx)(loading_indicator_1.LoadingIndicator, {}) })), result && !isLoading && ((0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex justify-content-between align-items-center mb-3", children: [(0, jsx_runtime_1.jsxs)("h5", { className: "card-title mb-0", children: [result.isWriteOperation ? "Write Result" : "Query Results", result.isWriteOperation ? ((0, jsx_runtime_1.jsxs)("span", { className: "badge bg-success ms-2", children: [result.changesCount, " row", result.changesCount !== 1 ? "s" : "", " affected"] })) : ((0, jsx_runtime_1.jsxs)("span", { className: "badge bg-primary ms-2", children: [result.rowCount, " rows"] }))] }), (0, jsx_runtime_1.jsxs)("button", { className: "btn btn-sm btn-outline-secondary", onClick: () => setResult(null), children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-x" }), " Clear"] })] }), result.isWriteOperation ? ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-success mb-0", children: [(0, jsx_runtime_1.jsx)("i", { className: "bi bi-check-circle-fill me-2" }), "Query executed successfully. ", result.changesCount, " row", result.changesCount !== 1 ? "s" : "", " affected."] })) : result.rowCount === 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "alert alert-info mb-0", children: "Query executed successfully but returned no rows." })) : ((0, jsx_runtime_1.jsx)("div", { className: "table-responsive", children: (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm table-hover table-bordered", children: [(0, jsx_runtime_1.jsx)("thead", { className: "table-light", children: (0, jsx_runtime_1.jsx)("tr", { children: result.columns.map((col, idx) => ((0, jsx_runtime_1.jsx)("th", { className: "font-monospace small", children: col }, idx))) }) }), (0, jsx_runtime_1.jsx)("tbody", { children: result.rows.map((row, rowIdx) => ((0, jsx_runtime_1.jsx)("tr", { children: row.map((cell, cellIdx) => ((0, jsx_runtime_1.jsx)("td", { className: "font-monospace small", children: cell === null ? ((0, jsx_runtime_1.jsx)("span", { className: "text-muted fst-italic", children: "null" })) : typeof cell === "object" ? ((0, jsx_runtime_1.jsx)("pre", { className: "mb-0", style: { fontSize: "0.7rem" }, children: JSON.stringify(cell, null, 2) })) : (String(cell)) }, cellIdx))) }, rowIdx))) })] }) }))] }) })), !result && !isLoading && !error && ((0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsx)("h5", { className: "card-title", children: "Example Queries" }), (0, jsx_runtime_1.jsxs)("ul", { className: "list-unstyled mb-0", children: [(0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("SELECT * FROM sqlite_master WHERE type='table'"), children: "List all tables" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("PRAGMA table_info(Users)"), children: "Show Users table schema" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("SELECT name, sql FROM sqlite_master WHERE type='index'"), children: "List all indexes" }) }), (0, jsx_runtime_1.jsx)("li", { className: "mb-2", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-sm btn-outline-secondary font-monospace", onClick: () => setQuery("PRAGMA database_list"), children: "Show attached databases" }) })] })] }) }))] }));
|
|
328
218
|
}
|
|
329
219
|
(0, ui_loader_1.registerInternalPeersUI)({
|
|
330
|
-
peersUIId:
|
|
220
|
+
peersUIId: "data-explorer-query-ui",
|
|
331
221
|
component: QueryExecutor,
|
|
332
222
|
routes: [
|
|
333
223
|
{
|
|
334
|
-
isMatch: (_props, context) => context.path ===
|
|
335
|
-
uiCategory:
|
|
336
|
-
priority: 2
|
|
337
|
-
}
|
|
338
|
-
]
|
|
224
|
+
isMatch: (_props, context) => context.path === "data-explorer/query",
|
|
225
|
+
uiCategory: "screen",
|
|
226
|
+
priority: 2,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
339
229
|
});
|
|
@@ -1,41 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.GroupDetails = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
37
5
|
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
38
|
-
const react_1 =
|
|
6
|
+
const react_1 = require("react");
|
|
39
7
|
const checkbox_1 = require("../../components/checkbox");
|
|
40
8
|
const input_1 = require("../../components/input");
|
|
41
9
|
const loading_indicator_1 = require("../../components/loading-indicator");
|
|
@@ -52,7 +20,7 @@ const GroupDetails = (props) => {
|
|
|
52
20
|
const userGroupTable = (0, peers_sdk_1.Groups)(userContext.userDataContext);
|
|
53
21
|
const group = await userGroupTable.get(props.groupId);
|
|
54
22
|
if (!group) {
|
|
55
|
-
throw new Error(
|
|
23
|
+
throw new Error("Group not found");
|
|
56
24
|
}
|
|
57
25
|
(0, tabs_state_1.updateActiveTabTitle)(group.name || "Group");
|
|
58
26
|
const groupDoc = userGroupTable.initDoc(group);
|
|
@@ -77,48 +45,24 @@ const GroupDetails = (props) => {
|
|
|
77
45
|
return groupDoc;
|
|
78
46
|
}, undefined, [props.groupId]);
|
|
79
47
|
if (!group) {
|
|
80
|
-
return
|
|
48
|
+
return (0, jsx_runtime_1.jsx)(loading_indicator_1.LoadingIndicator, {});
|
|
81
49
|
}
|
|
82
|
-
return (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
react_1.default.createElement(save_button_1.SaveButton, { key: group.groupId, doc: group }))),
|
|
93
|
-
react_1.default.createElement(tabs_1.Tabs, { key: group.groupId, tabs: [
|
|
94
|
-
{
|
|
95
|
-
name: 'Info', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
96
|
-
react_1.default.createElement(GroupInfo, { group: group }))
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: 'Members', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
100
|
-
react_1.default.createElement(GroupMembersWrapper, { groupId: props.groupId }))
|
|
101
|
-
},
|
|
102
|
-
] })));
|
|
50
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "container-fluid p-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex", children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("h4", { children: (0, jsx_runtime_1.jsx)("i", { className: `${(0, peers_sdk_1.getIconClassName)((0, peers_sdk_1.Groups)())} me-2` }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "flex-grow-1", children: (0, jsx_runtime_1.jsx)("h4", { children: (0, jsx_runtime_1.jsx)(input_1.Input, { className: "border border-0", style: { width: "100%", outline: "none", backgroundColor: "transparent" }, value: group.qs.name }, group.groupId) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex gap-2", children: [(0, jsx_runtime_1.jsx)(ShareButton, { groupId: props.groupId }), (0, jsx_runtime_1.jsx)(save_button_1.SaveButton, { doc: group }, group.groupId)] })] }), (0, jsx_runtime_1.jsx)(tabs_1.Tabs, { tabs: [
|
|
51
|
+
{
|
|
52
|
+
name: "Info",
|
|
53
|
+
content: ((0, jsx_runtime_1.jsx)(tabs_1.ScreenTabBody, { children: (0, jsx_runtime_1.jsx)(GroupInfo, { group: group }) })),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "Members",
|
|
57
|
+
content: ((0, jsx_runtime_1.jsx)(tabs_1.ScreenTabBody, { children: (0, jsx_runtime_1.jsx)(GroupMembersWrapper, { groupId: props.groupId }) })),
|
|
58
|
+
},
|
|
59
|
+
] }, group.groupId)] }));
|
|
103
60
|
};
|
|
104
61
|
exports.GroupDetails = GroupDetails;
|
|
105
62
|
const GroupInfo = (props) => {
|
|
106
63
|
const { group } = props;
|
|
107
|
-
group.description = group.description ||
|
|
108
|
-
return (
|
|
109
|
-
react_1.default.createElement("small", null, "Name:"),
|
|
110
|
-
react_1.default.createElement(input_1.Input, { value: group.qs.name, className: "form-control mb-3 p-0 ps-2", placeholder: "Group name", title: "Group name" }),
|
|
111
|
-
react_1.default.createElement("small", null, "Icon Class Name:"),
|
|
112
|
-
react_1.default.createElement(input_1.Input, { value: group.qs.iconClassName, className: "form-control mb-3 p-0 ps-2", placeholder: "bi-people-fill", title: "Icon class name (e.g., bi-people-fill, bi-house-fill, bi-star-fill)" }),
|
|
113
|
-
react_1.default.createElement("small", null, "Group ID:"),
|
|
114
|
-
react_1.default.createElement("div", { className: "form-control mb-3 p-2 bg-body-secondary text-body-secondary", style: { fontFamily: 'monospace', fontSize: '0.9em' } }, group.groupId),
|
|
115
|
-
react_1.default.createElement("div", { className: "d-flex flex-row" },
|
|
116
|
-
react_1.default.createElement("div", { className: "ms-2" },
|
|
117
|
-
react_1.default.createElement("label", { className: "form-label small mt-2 me-2" }, "Disabled:"),
|
|
118
|
-
react_1.default.createElement(checkbox_1.Checkbox, { className: "form-check-input mt-2", checked: group.qs.disabled }))),
|
|
119
|
-
react_1.default.createElement("br", null),
|
|
120
|
-
react_1.default.createElement("small", { className: "mt-2" }, "Description:"),
|
|
121
|
-
react_1.default.createElement(editor_inline_1.MarkdownEditorInline, { value: group.qs.description })));
|
|
64
|
+
group.description = group.description || "";
|
|
65
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("small", { children: "Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: group.qs.name, className: "form-control mb-3 p-0 ps-2", placeholder: "Group name", title: "Group name" }), (0, jsx_runtime_1.jsx)("small", { children: "Icon Class Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: group.qs.iconClassName, className: "form-control mb-3 p-0 ps-2", placeholder: "bi-people-fill", title: "Icon class name (e.g., bi-people-fill, bi-house-fill, bi-star-fill)" }), (0, jsx_runtime_1.jsx)("small", { children: "Group ID:" }), (0, jsx_runtime_1.jsx)("div", { className: "form-control mb-3 p-2 bg-body-secondary text-body-secondary", style: { fontFamily: "monospace", fontSize: "0.9em" }, children: group.groupId }), (0, jsx_runtime_1.jsx)("div", { className: "d-flex flex-row", children: (0, jsx_runtime_1.jsxs)("div", { className: "ms-2", children: [(0, jsx_runtime_1.jsx)("label", { className: "form-label small mt-2 me-2", children: "Disabled:" }), (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { className: "form-check-input mt-2", checked: group.qs.disabled })] }) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("small", { className: "mt-2", children: "Description:" }), (0, jsx_runtime_1.jsx)(editor_inline_1.MarkdownEditorInline, { value: group.qs.description })] }));
|
|
122
66
|
};
|
|
123
67
|
const ShareButton = ({ groupId }) => {
|
|
124
68
|
const [isSharing, setIsSharing] = (0, react_1.useState)(false);
|
|
@@ -139,76 +83,37 @@ const ShareButton = ({ groupId }) => {
|
|
|
139
83
|
setShareResult({
|
|
140
84
|
success: true,
|
|
141
85
|
message: `Group share data copied to clipboard! (${qrInfo.size} chars, ${qrInfo.memberCount} admin members)`,
|
|
142
|
-
qrInfo
|
|
86
|
+
qrInfo,
|
|
143
87
|
});
|
|
144
88
|
}
|
|
145
89
|
else {
|
|
146
90
|
setShareResult({
|
|
147
91
|
success: false,
|
|
148
|
-
message:
|
|
149
|
-
qrInfo
|
|
92
|
+
message: "Failed to copy to clipboard. Please copy manually from the modal.",
|
|
93
|
+
qrInfo,
|
|
150
94
|
});
|
|
151
95
|
}
|
|
152
96
|
}
|
|
153
97
|
catch (error) {
|
|
154
98
|
setShareResult({
|
|
155
99
|
success: false,
|
|
156
|
-
message: `Error generating share: ${error.message}`,
|
|
100
|
+
message: `Error generating share: ${error instanceof Error ? error.message : String(error)}`,
|
|
157
101
|
});
|
|
158
102
|
}
|
|
159
103
|
finally {
|
|
160
104
|
setIsSharing(false);
|
|
161
105
|
}
|
|
162
106
|
};
|
|
163
|
-
return (
|
|
164
|
-
react_1.default.createElement("button", { className: "btn btn-secondary btn-sm", onClick: handleShare, disabled: isSharing, title: "Share group with admin members" }, isSharing ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
165
|
-
react_1.default.createElement("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }),
|
|
166
|
-
"Sharing...")) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
167
|
-
react_1.default.createElement("i", { className: "bi-share me-1" }),
|
|
168
|
-
"Share"))),
|
|
169
|
-
shareResult && (react_1.default.createElement("div", { className: "position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center", style: { backgroundColor: 'rgba(0,0,0,0.5)', zIndex: 1050 } },
|
|
170
|
-
react_1.default.createElement("div", { className: "card", style: { maxWidth: '500px', width: '90%' } },
|
|
171
|
-
react_1.default.createElement("div", { className: "card-header d-flex justify-content-between align-items-center" },
|
|
172
|
-
react_1.default.createElement("h6", { className: "mb-0" },
|
|
173
|
-
react_1.default.createElement("i", { className: `bi-${shareResult.success ? 'check-circle text-success' : 'exclamation-triangle text-warning'} me-2` }),
|
|
174
|
-
"Group Share ",
|
|
175
|
-
shareResult.success ? 'Ready' : 'Error'),
|
|
176
|
-
react_1.default.createElement("button", { className: "btn-close", onClick: () => setShareResult(null), "aria-label": "Close" })),
|
|
177
|
-
react_1.default.createElement("div", { className: "card-body" },
|
|
178
|
-
react_1.default.createElement("p", { className: "mb-3" }, shareResult.message),
|
|
179
|
-
shareResult.qrInfo && (react_1.default.createElement("div", { className: "mb-3" },
|
|
180
|
-
react_1.default.createElement("h6", null, "QR Code Compatibility"),
|
|
181
|
-
react_1.default.createElement("div", { className: "row g-2" },
|
|
182
|
-
react_1.default.createElement("div", { className: "col-6" },
|
|
183
|
-
react_1.default.createElement("small", { className: "text-muted" }, "Size:"),
|
|
184
|
-
react_1.default.createElement("br", null),
|
|
185
|
-
react_1.default.createElement("strong", null,
|
|
186
|
-
shareResult.qrInfo.size,
|
|
187
|
-
" chars")),
|
|
188
|
-
react_1.default.createElement("div", { className: "col-6" },
|
|
189
|
-
react_1.default.createElement("small", { className: "text-muted" }, "QR Version 20:"),
|
|
190
|
-
react_1.default.createElement("br", null),
|
|
191
|
-
react_1.default.createElement("span", { className: `badge bg-${shareResult.qrInfo.fits ? 'success' : 'warning'}` },
|
|
192
|
-
shareResult.qrInfo.fits ? '✓ Fits' : '⚠ Too Large',
|
|
193
|
-
" (",
|
|
194
|
-
shareResult.qrInfo.usagePercent,
|
|
195
|
-
"%)"))),
|
|
196
|
-
!shareResult.qrInfo.fits && (react_1.default.createElement("div", { className: "alert alert-warning mt-2 mb-0" },
|
|
197
|
-
react_1.default.createElement("small", null,
|
|
198
|
-
react_1.default.createElement("i", { className: "bi-exclamation-triangle me-1" }),
|
|
199
|
-
"Data may be too large for standard QR codes. Consider reducing admin members or use text sharing."))))),
|
|
200
|
-
react_1.default.createElement("div", { className: "text-end" },
|
|
201
|
-
react_1.default.createElement("button", { className: "btn btn-secondary me-2", onClick: () => setShareResult(null) }, "Close"),
|
|
202
|
-
shareResult.success && (react_1.default.createElement("button", { className: "btn btn-primary", onClick: handleShare }, "Copy Again")))))))));
|
|
107
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary btn-sm", onClick: handleShare, disabled: isSharing, title: "Share group with admin members", children: isSharing ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "spinner-border spinner-border-sm me-1", role: "status", "aria-hidden": "true" }), "Sharing..."] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-share me-1" }), "Share"] })) }), shareResult && ((0, jsx_runtime_1.jsx)("div", { className: "position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center", style: { backgroundColor: "rgba(0,0,0,0.5)", zIndex: 1050 }, children: (0, jsx_runtime_1.jsxs)("div", { className: "card", style: { maxWidth: "500px", width: "90%" }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "card-header d-flex justify-content-between align-items-center", children: [(0, jsx_runtime_1.jsxs)("h6", { className: "mb-0", children: [(0, jsx_runtime_1.jsx)("i", { className: `bi-${shareResult.success ? "check-circle text-success" : "exclamation-triangle text-warning"} me-2` }), "Group Share ", shareResult.success ? "Ready" : "Error"] }), (0, jsx_runtime_1.jsx)("button", { className: "btn-close", onClick: () => setShareResult(null), "aria-label": "Close" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "card-body", children: [(0, jsx_runtime_1.jsx)("p", { className: "mb-3", children: shareResult.message }), shareResult.qrInfo && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("h6", { children: "QR Code Compatibility" }), (0, jsx_runtime_1.jsxs)("div", { className: "row g-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "col-6", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "Size:" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("strong", { children: [shareResult.qrInfo.size, " chars"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-6", children: [(0, jsx_runtime_1.jsx)("small", { className: "text-muted", children: "QR Version 20:" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("span", { className: `badge bg-${shareResult.qrInfo.fits ? "success" : "warning"}`, children: [shareResult.qrInfo.fits ? "✓ Fits" : "⚠ Too Large", " (", shareResult.qrInfo.usagePercent, "%)"] })] })] }), !shareResult.qrInfo.fits && ((0, jsx_runtime_1.jsx)("div", { className: "alert alert-warning mt-2 mb-0", children: (0, jsx_runtime_1.jsxs)("small", { children: [(0, jsx_runtime_1.jsx)("i", { className: "bi-exclamation-triangle me-1" }), "Data may be too large for standard QR codes. Consider reducing admin members or use text sharing."] }) }))] })), (0, jsx_runtime_1.jsxs)("div", { className: "text-end", children: [(0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary me-2", onClick: () => setShareResult(null), children: "Close" }), shareResult.success && ((0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary", onClick: handleShare, children: "Copy Again" }))] })] })] }) }))] }));
|
|
203
108
|
};
|
|
204
109
|
const GroupMembersWrapper = (props) => {
|
|
205
110
|
const userContext = (0, hooks_1.usePromise)(() => (0, peers_sdk_1.getUserContext)());
|
|
206
111
|
if (!userContext)
|
|
207
112
|
return null;
|
|
208
|
-
return
|
|
113
|
+
return (0, jsx_runtime_1.jsx)(group_members_1.GroupMembersUI, { groupId: props.groupId, userContext: userContext });
|
|
209
114
|
};
|
|
210
115
|
(0, ui_loader_1.registerInternalPeersUI)({
|
|
211
|
-
peersUIId:
|
|
116
|
+
peersUIId: "00group00details00component",
|
|
212
117
|
component: exports.GroupDetails,
|
|
213
118
|
routes: [
|
|
214
119
|
{
|
|
@@ -220,8 +125,8 @@ const GroupMembersWrapper = (props) => {
|
|
|
220
125
|
}
|
|
221
126
|
return false;
|
|
222
127
|
},
|
|
223
|
-
uiCategory:
|
|
224
|
-
priority: 2
|
|
225
|
-
}
|
|
226
|
-
]
|
|
128
|
+
uiCategory: "screen",
|
|
129
|
+
priority: 2,
|
|
130
|
+
},
|
|
131
|
+
],
|
|
227
132
|
});
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Communicates with device layer through pvars (not direct imports).
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
9
|
-
import { UserContext } from "@peers-app/peers-sdk";
|
|
8
|
+
import { type UserContext } from "@peers-app/peers-sdk";
|
|
10
9
|
interface GroupInviteListenerProps {
|
|
11
10
|
groupId: string;
|
|
12
11
|
userContext: UserContext;
|
|
13
12
|
}
|
|
14
|
-
export declare const GroupInviteListener: (props: GroupInviteListenerProps) =>
|
|
13
|
+
export declare const GroupInviteListener: (props: GroupInviteListenerProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
14
|
export {};
|