@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,69 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.ColorModeDropdown = exports.colorModePreference = exports.colorMode = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
5
|
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
8
|
-
const react_1 = __importDefault(require("react"));
|
|
9
6
|
const hooks_1 = require("../../hooks");
|
|
10
|
-
exports.colorMode = (0, peers_sdk_1.deviceVar)(
|
|
11
|
-
defaultValue:
|
|
7
|
+
exports.colorMode = (0, peers_sdk_1.deviceVar)("colorMode", {
|
|
8
|
+
defaultValue: "dark",
|
|
12
9
|
});
|
|
13
|
-
exports.colorModePreference = (0, peers_sdk_1.deviceVar)(
|
|
14
|
-
defaultValue:
|
|
10
|
+
exports.colorModePreference = (0, peers_sdk_1.deviceVar)("colorModePreference", {
|
|
11
|
+
defaultValue: "dark",
|
|
15
12
|
});
|
|
16
13
|
function applyColorMode(modePreference) {
|
|
17
14
|
if (!modePreference) {
|
|
18
|
-
modePreference = (0, exports.colorModePreference)() ||
|
|
15
|
+
modePreference = (0, exports.colorModePreference)() || "dark";
|
|
19
16
|
}
|
|
20
17
|
else {
|
|
21
18
|
(0, exports.colorModePreference)(modePreference);
|
|
22
19
|
}
|
|
23
20
|
let mode = (0, exports.colorMode)();
|
|
24
|
-
if (modePreference ===
|
|
25
|
-
const isDarkMode = window.matchMedia
|
|
26
|
-
mode = isDarkMode ?
|
|
21
|
+
if (modePreference === "auto") {
|
|
22
|
+
const isDarkMode = window.matchMedia?.("(prefers-color-scheme: dark)").matches;
|
|
23
|
+
mode = isDarkMode ? "dark" : "light";
|
|
27
24
|
}
|
|
28
25
|
else {
|
|
29
26
|
mode = modePreference;
|
|
30
27
|
}
|
|
31
|
-
document.documentElement.setAttribute(
|
|
32
|
-
if (mode ===
|
|
33
|
-
document.documentElement.style.backgroundColor =
|
|
34
|
-
document.body.style.backgroundColor =
|
|
28
|
+
document.documentElement.setAttribute("data-bs-theme", mode);
|
|
29
|
+
if (mode === "light") {
|
|
30
|
+
document.documentElement.style.backgroundColor = "";
|
|
31
|
+
document.body.style.backgroundColor = "initial";
|
|
35
32
|
}
|
|
36
33
|
else {
|
|
37
|
-
document.documentElement.style.backgroundColor =
|
|
38
|
-
document.body.style.backgroundColor =
|
|
34
|
+
document.documentElement.style.backgroundColor = "rgb(33, 37, 41)";
|
|
35
|
+
document.body.style.backgroundColor = "rgb(33, 37, 41)";
|
|
39
36
|
}
|
|
40
37
|
const themeMeta = document.querySelector('meta[name="theme-color"]');
|
|
41
38
|
if (themeMeta) {
|
|
42
|
-
themeMeta.setAttribute(
|
|
39
|
+
themeMeta.setAttribute("content", mode === "light" ? "#ffffff" : "#212529");
|
|
43
40
|
}
|
|
44
41
|
(0, exports.colorMode)(mode);
|
|
45
42
|
exports.colorMode.notifySubscribers();
|
|
46
43
|
return mode;
|
|
47
44
|
}
|
|
48
|
-
exports.colorModePreference.subscribe(newValue => applyColorMode(newValue));
|
|
45
|
+
exports.colorModePreference.subscribe((newValue) => applyColorMode(newValue));
|
|
49
46
|
const ColorModeDropdown = () => {
|
|
50
47
|
const [modePreference] = (0, hooks_1.useObservable)(exports.colorModePreference);
|
|
51
|
-
return (
|
|
52
|
-
react_1.default.createElement("button", { className: "btn btn-secondary dropdown-toggle", type: "button", id: "colorModeDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false" },
|
|
53
|
-
"Color Mode: ",
|
|
54
|
-
(0, peers_sdk_1.camelCaseToSpaces)(modePreference)),
|
|
55
|
-
react_1.default.createElement("ul", { className: "dropdown-menu", "aria-labelledby": "colorModeDropdown" },
|
|
56
|
-
react_1.default.createElement("li", null,
|
|
57
|
-
react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('auto') },
|
|
58
|
-
"Auto ",
|
|
59
|
-
modePreference === 'auto' && '✓')),
|
|
60
|
-
react_1.default.createElement("li", null,
|
|
61
|
-
react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('light') },
|
|
62
|
-
"Light ",
|
|
63
|
-
modePreference === 'light' && '✓')),
|
|
64
|
-
react_1.default.createElement("li", null,
|
|
65
|
-
react_1.default.createElement("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)('dark') },
|
|
66
|
-
"Dark ",
|
|
67
|
-
modePreference === 'dark' && '✓')))));
|
|
48
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "dropdown", children: [(0, jsx_runtime_1.jsxs)("button", { className: "btn btn-secondary dropdown-toggle", type: "button", id: "colorModeDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false", children: ["Color Mode: ", (0, peers_sdk_1.camelCaseToSpaces)(modePreference)] }), (0, jsx_runtime_1.jsxs)("ul", { className: "dropdown-menu", "aria-labelledby": "colorModeDropdown", children: [(0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("auto"), children: ["Auto ", modePreference === "auto" && "✓"] }) }), (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("light"), children: ["Light ", modePreference === "light" && "✓"] }) }), (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { className: "dropdown-item", onClick: () => (0, exports.colorModePreference)("dark"), children: ["Dark ", modePreference === "dark" && "✓"] }) })] })] }));
|
|
68
49
|
};
|
|
69
50
|
exports.ColorModeDropdown = ColorModeDropdown;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from
|
|
1
|
+
import type React from "react";
|
|
2
2
|
export declare const SettingsPage: React.FC;
|
|
@@ -34,62 +34,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.SettingsPage = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
37
38
|
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
38
|
-
const react_1 =
|
|
39
|
+
const react_1 = require("react");
|
|
39
40
|
const input_1 = require("../../components/input");
|
|
40
|
-
const tooltip_1 = require("../../components/tooltip");
|
|
41
41
|
const tabs_1 = require("../../components/tabs");
|
|
42
|
+
const tooltip_1 = require("../../components/tooltip");
|
|
42
43
|
const globals = __importStar(require("../../globals"));
|
|
43
44
|
const hooks_1 = require("../../hooks");
|
|
44
45
|
const color_mode_dropdown_1 = require("./color-mode-dropdown");
|
|
45
46
|
const voice_settings_1 = require("./voice-settings");
|
|
46
47
|
const SettingsPage = () => {
|
|
47
|
-
return (
|
|
48
|
-
react_1.default.createElement(tabs_1.Tabs, { tabs: [
|
|
48
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "container-fluid", children: (0, jsx_runtime_1.jsx)(tabs_1.Tabs, { tabs: [
|
|
49
49
|
{
|
|
50
|
-
name:
|
|
51
|
-
content:
|
|
50
|
+
name: "User",
|
|
51
|
+
content: (0, jsx_runtime_1.jsx)(UserSettingsTab, {}),
|
|
52
52
|
active: true,
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
name:
|
|
56
|
-
content:
|
|
55
|
+
name: "Appearance",
|
|
56
|
+
content: (0, jsx_runtime_1.jsx)(AppearanceSettingsTab, {}),
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
name:
|
|
60
|
-
content:
|
|
59
|
+
name: "Voice",
|
|
60
|
+
content: (0, jsx_runtime_1.jsx)(voice_settings_1.VoiceSettings, {}),
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
|
-
name:
|
|
64
|
-
content:
|
|
63
|
+
name: "Advanced",
|
|
64
|
+
content: (0, jsx_runtime_1.jsx)(AdvancedSettingsTab, {}),
|
|
65
65
|
},
|
|
66
|
-
] })));
|
|
66
|
+
] }) }));
|
|
67
67
|
};
|
|
68
68
|
exports.SettingsPage = SettingsPage;
|
|
69
69
|
const UserSettingsTab = () => {
|
|
70
|
-
return (
|
|
71
|
-
react_1.default.createElement(ProfileSection, null),
|
|
72
|
-
react_1.default.createElement(LogoutSection, null)));
|
|
70
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ProfileSection, {}), (0, jsx_runtime_1.jsx)(LogoutSection, {})] }));
|
|
73
71
|
};
|
|
74
72
|
const AppearanceSettingsTab = () => {
|
|
75
|
-
return (
|
|
76
|
-
react_1.default.createElement("h5", { className: "mb-3" }, "Appearance"),
|
|
77
|
-
react_1.default.createElement(color_mode_dropdown_1.ColorModeDropdown, null)));
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-3", children: "Appearance" }), (0, jsx_runtime_1.jsx)(color_mode_dropdown_1.ColorModeDropdown, {})] }));
|
|
78
74
|
};
|
|
79
75
|
const AdvancedSettingsTab = () => {
|
|
80
|
-
return (
|
|
81
|
-
react_1.default.createElement("h5", { className: "mb-3" }, "Advanced Settings"),
|
|
82
|
-
react_1.default.createElement(PackagesRootDirectory, null),
|
|
83
|
-
react_1.default.createElement(ReloadPackagesOnPageRefresh, null),
|
|
84
|
-
react_1.default.createElement(AutoUpdatePeersCore, null),
|
|
85
|
-
react_1.default.createElement(ResetDeviceSyncInfos, null),
|
|
86
|
-
react_1.default.createElement(DeleteLocalDatabase, null),
|
|
87
|
-
react_1.default.createElement(ImportOldPeersData, null)));
|
|
76
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-3", children: "Advanced Settings" }), (0, jsx_runtime_1.jsx)(PackagesRootDirectory, {}), (0, jsx_runtime_1.jsx)(ReloadPackagesOnPageRefresh, {}), (0, jsx_runtime_1.jsx)(AutoUpdatePeersCore, {}), (0, jsx_runtime_1.jsx)(ResetDeviceSyncInfos, {}), (0, jsx_runtime_1.jsx)(DeleteLocalDatabase, {}), (0, jsx_runtime_1.jsx)(ImportOldPeersData, {}), (0, jsx_runtime_1.jsx)(ResetChangeTracking, {})] }));
|
|
88
77
|
};
|
|
89
78
|
const ProfileSection = () => {
|
|
90
79
|
const [deviceId] = (0, hooks_1.useObservable)(peers_sdk_1.thisDeviceId);
|
|
91
|
-
const deviceName = (0, hooks_1.useObservableState)(
|
|
92
|
-
const savedDeviceName = (0, hooks_1.useObservableState)(
|
|
80
|
+
const deviceName = (0, hooks_1.useObservableState)("");
|
|
81
|
+
const savedDeviceName = (0, hooks_1.useObservableState)("");
|
|
93
82
|
const me = (0, hooks_1.usePromise)(async () => {
|
|
94
83
|
const userContext = await (0, peers_sdk_1.getUserContext)();
|
|
95
84
|
return (0, peers_sdk_1.Users)(userContext.userDataContext).initDoc(globals.me);
|
|
@@ -102,15 +91,15 @@ const ProfileSection = () => {
|
|
|
102
91
|
try {
|
|
103
92
|
const userContext = await (0, peers_sdk_1.getUserContext)();
|
|
104
93
|
const device = await (0, peers_sdk_1.Devices)(userContext.userDataContext).get(deviceId);
|
|
105
|
-
deviceName(device?.name ||
|
|
106
|
-
savedDeviceName(device?.name ||
|
|
94
|
+
deviceName(device?.name || "");
|
|
95
|
+
savedDeviceName(device?.name || "");
|
|
107
96
|
}
|
|
108
97
|
catch (err) {
|
|
109
|
-
console.error(
|
|
98
|
+
console.error("Error loading device name:", err);
|
|
110
99
|
}
|
|
111
100
|
};
|
|
112
101
|
loadDevice();
|
|
113
|
-
}, [deviceId]);
|
|
102
|
+
}, [deviceId, deviceName, savedDeviceName]);
|
|
114
103
|
const handleSave = async () => {
|
|
115
104
|
try {
|
|
116
105
|
// Save user profile
|
|
@@ -123,7 +112,7 @@ const ProfileSection = () => {
|
|
|
123
112
|
if (deviceId && deviceName() !== savedDeviceName()) {
|
|
124
113
|
const userContext = await (0, peers_sdk_1.getUserContext)();
|
|
125
114
|
const devicesTable = (0, peers_sdk_1.Devices)(userContext.userDataContext);
|
|
126
|
-
const device = await devicesTable.get(deviceId) || {
|
|
115
|
+
const device = (await devicesTable.get(deviceId)) || {
|
|
127
116
|
deviceId,
|
|
128
117
|
userId: userContext.userId,
|
|
129
118
|
firstSeen: new Date(),
|
|
@@ -136,8 +125,8 @@ const ProfileSection = () => {
|
|
|
136
125
|
}
|
|
137
126
|
}
|
|
138
127
|
catch (err) {
|
|
139
|
-
console.error(
|
|
140
|
-
alert(
|
|
128
|
+
console.error("Error saving profile:", err);
|
|
129
|
+
alert(`Failed to save: ${err.message}`);
|
|
141
130
|
}
|
|
142
131
|
};
|
|
143
132
|
// Subscribe to changes
|
|
@@ -147,104 +136,81 @@ const ProfileSection = () => {
|
|
|
147
136
|
return null;
|
|
148
137
|
}
|
|
149
138
|
const hasChanges = !!me.q() || deviceName() !== savedDeviceName();
|
|
150
|
-
return (
|
|
151
|
-
react_1.default.createElement("div", { className: "d-flex align-items-center mb-3" },
|
|
152
|
-
react_1.default.createElement("h5", { className: "mb-0 me-auto" }, "Settings"),
|
|
153
|
-
react_1.default.createElement("button", { className: "btn btn-primary btn-sm", onClick: handleSave, disabled: !hasChanges }, "Save")),
|
|
154
|
-
react_1.default.createElement("div", { className: "mb-3" },
|
|
155
|
-
react_1.default.createElement("small", { className: "form-label" }, "Display Name:"),
|
|
156
|
-
react_1.default.createElement(input_1.Input, { value: me.qs.name, className: "form-control", placeholder: "Enter your name" })),
|
|
157
|
-
react_1.default.createElement("div", { className: "mb-3" },
|
|
158
|
-
react_1.default.createElement("small", { className: "form-label" },
|
|
159
|
-
"Device Name:",
|
|
160
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "Give this device a friendly name to identify it in your network." })),
|
|
161
|
-
react_1.default.createElement(input_1.Input, { value: deviceName, className: "form-control", placeholder: "e.g., My Laptop" })),
|
|
162
|
-
react_1.default.createElement("div", { className: "mb-3" },
|
|
163
|
-
react_1.default.createElement("small", { className: "form-label" },
|
|
164
|
-
"User ID:",
|
|
165
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." })),
|
|
166
|
-
react_1.default.createElement(input_1.Input, { value: me.userId, className: "form-control", disabled: true })),
|
|
167
|
-
react_1.default.createElement("div", { className: "row" },
|
|
168
|
-
react_1.default.createElement("div", { className: "col-md-6 mb-3" },
|
|
169
|
-
react_1.default.createElement("small", { className: "form-label" },
|
|
170
|
-
"Public Key:",
|
|
171
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This is your public key that other users will use to verify your signatures." })),
|
|
172
|
-
react_1.default.createElement(input_1.Input, { value: me.publicKey, className: "form-control form-control-sm", disabled: true })),
|
|
173
|
-
react_1.default.createElement("div", { className: "col-md-6 mb-3" },
|
|
174
|
-
react_1.default.createElement("small", { className: "form-label" },
|
|
175
|
-
"Public Box Key:",
|
|
176
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This is the public key that other users can use to encrypt data so that only you can open it." })),
|
|
177
|
-
react_1.default.createElement(input_1.Input, { value: me.publicBoxKey, className: "form-control form-control-sm", disabled: true }))),
|
|
178
|
-
react_1.default.createElement("div", { className: "mb-3" },
|
|
179
|
-
react_1.default.createElement("small", { className: "form-label" },
|
|
180
|
-
"Device ID:",
|
|
181
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies this device on Peers networks." })),
|
|
182
|
-
react_1.default.createElement(input_1.Input, { value: deviceId || '', className: "form-control form-control-sm", disabled: true }))));
|
|
139
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center mb-3", children: [(0, jsx_runtime_1.jsx)("h5", { className: "mb-0 me-auto", children: "Settings" }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-primary btn-sm", onClick: handleSave, disabled: !hasChanges, children: "Save" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsx)("small", { className: "form-label", children: "Display Name:" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.qs.name, className: "form-control", placeholder: "Enter your name" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Device Name:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "Give this device a friendly name to identify it in your network." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: deviceName, className: "form-control", placeholder: "e.g., My Laptop" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["User ID:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies you to all other users." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.userId, className: "form-control", disabled: true })] }), (0, jsx_runtime_1.jsxs)("div", { className: "row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "col-md-6 mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Public Key:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This is your public key that other users will use to verify your signatures." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.publicKey, className: "form-control form-control-sm", disabled: true })] }), (0, jsx_runtime_1.jsxs)("div", { className: "col-md-6 mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Public Box Key:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This is the public key that other users can use to encrypt data so that only you can open it." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: me.publicBoxKey, className: "form-control form-control-sm", disabled: true })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-3", children: [(0, jsx_runtime_1.jsxs)("small", { className: "form-label", children: ["Device ID:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: "This uniquely identifies this device on Peers networks." })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: deviceId || "", className: "form-control form-control-sm", disabled: true })] })] }));
|
|
183
140
|
};
|
|
184
141
|
const PackagesRootDirectory = () => {
|
|
185
|
-
return (
|
|
186
|
-
react_1.default.createElement("small", null,
|
|
187
|
-
"Packages Directory:",
|
|
188
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })),
|
|
189
|
-
react_1.default.createElement(input_1.Input, { value: peers_sdk_1.packagesRootDir, className: 'form-control' })));
|
|
142
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-3", children: [(0, jsx_runtime_1.jsxs)("small", { children: ["Packages Directory:", (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Changing this will not effect existing packages.` })] }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: peers_sdk_1.packagesRootDir, className: "form-control" })] }));
|
|
190
143
|
};
|
|
191
144
|
const ReloadPackagesOnPageRefresh = () => {
|
|
192
145
|
(0, hooks_1.useObservable)(peers_sdk_1.reloadPackagesOnPageRefresh);
|
|
193
|
-
return (
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
(0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
|
|
198
|
-
} }),
|
|
199
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })));
|
|
146
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "isPrimary", className: "form-label small mt-2 me-2", children: "Reload Packages on Page Load:" }), (0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: (0, peers_sdk_1.reloadPackagesOnPageRefresh)(), onChange: (e) => {
|
|
147
|
+
const checked = e.target.checked;
|
|
148
|
+
(0, peers_sdk_1.reloadPackagesOnPageRefresh)(checked);
|
|
149
|
+
} }), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `Checking this will reload all packages very time the page is loaded. Particularly useful while developing packages.` })] }));
|
|
200
150
|
};
|
|
201
151
|
const AutoUpdatePeersCore = () => {
|
|
202
152
|
(0, hooks_1.useObservable)(peers_sdk_1.autoUpdatePeersCore);
|
|
203
|
-
return (
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
(0, peers_sdk_1.autoUpdatePeersCore)(checked);
|
|
208
|
-
} }),
|
|
209
|
-
react_1.default.createElement(tooltip_1.Tooltip, { markdownContent: `When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.` })));
|
|
153
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "autoUpdatePeersCore", className: "form-label small mt-2 me-2", children: "Auto-update peers-core on startup:" }), (0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: (0, peers_sdk_1.autoUpdatePeersCore)(), onChange: (e) => {
|
|
154
|
+
const checked = e.target.checked;
|
|
155
|
+
(0, peers_sdk_1.autoUpdatePeersCore)(checked);
|
|
156
|
+
} }), (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { markdownContent: `When enabled, the peers-core system package is automatically updated from the bundled version on every app startup. Disable this if you want to manage peers-core manually.` })] }));
|
|
210
157
|
};
|
|
211
158
|
const ResetDeviceSyncInfos = () => {
|
|
212
|
-
return (
|
|
213
|
-
react_1.default.createElement("button", { className: 'btn btn-secondary btn-sm ms-2', onClick: async () => {
|
|
159
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "mt-3", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-secondary btn-sm ms-2", onClick: async () => {
|
|
214
160
|
try {
|
|
215
161
|
await peers_sdk_1.rpcServerCalls.resetAllDeviceSyncInfo();
|
|
216
|
-
alert(
|
|
162
|
+
alert("All device sync info has been reset. Syncing in progress...");
|
|
217
163
|
}
|
|
218
164
|
catch (err) {
|
|
219
|
-
console.error(
|
|
165
|
+
console.error("Error while resetting all device sync info", err);
|
|
220
166
|
}
|
|
221
|
-
}
|
|
167
|
+
}, children: "Reset All Device Sync Info" }) }));
|
|
222
168
|
};
|
|
223
169
|
const DeleteLocalDatabase = () => {
|
|
224
|
-
return (
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
'This will remove all local data. You will need to restart the app and re-sync from other devices.');
|
|
170
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "mt-3", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-danger btn-sm ms-2", onClick: async () => {
|
|
171
|
+
const confirmed = confirm("Are you sure you want to delete the local database for the current group? " +
|
|
172
|
+
"This will remove all local data. You will need to restart the app and re-sync from other devices.");
|
|
228
173
|
if (!confirmed)
|
|
229
174
|
return;
|
|
230
175
|
try {
|
|
231
176
|
await peers_sdk_1.rpcServerCalls.deleteLocalDatabase();
|
|
232
|
-
alert(
|
|
177
|
+
alert("Local database has been deleted. Please restart the app.");
|
|
233
178
|
}
|
|
234
179
|
catch (err) {
|
|
235
|
-
console.error(
|
|
236
|
-
alert(
|
|
180
|
+
console.error("Error while deleting local database", err);
|
|
181
|
+
alert(`Failed to delete local database: ${err.message}`);
|
|
237
182
|
}
|
|
238
|
-
}
|
|
183
|
+
}, children: "Delete Local Database" }) }));
|
|
184
|
+
};
|
|
185
|
+
const ResetChangeTracking = () => {
|
|
186
|
+
const [busy, setBusy] = (0, react_1.useState)(false);
|
|
187
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 pt-3 border-top", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-2", children: "Change tracking" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted d-block mb-2", children: "Clears all change history for the current group and rebuilds it from your current database rows. Device sync cursors are cleared; a full resync with peers may follow. Use when debugging sync issues." }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-warning btn-sm", disabled: busy, onClick: async () => {
|
|
188
|
+
const confirmed = window.confirm("Reset Change Tracking will clear all change history and rebuild it from scratch. This may take a while. Continue?");
|
|
189
|
+
if (!confirmed)
|
|
190
|
+
return;
|
|
191
|
+
setBusy(true);
|
|
192
|
+
try {
|
|
193
|
+
await peers_sdk_1.rpcServerCalls.resetChangeTracking();
|
|
194
|
+
await peers_sdk_1.rpcServerCalls.flushDatabases();
|
|
195
|
+
alert("Change tracking reset successfully.");
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
console.error("Error while resetting change tracking", err);
|
|
199
|
+
alert(`Failed to reset change tracking: ${err.message || String(err)}`);
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
setBusy(false);
|
|
203
|
+
}
|
|
204
|
+
}, children: busy ? "Resetting…" : "Reset Change Tracking" })] }));
|
|
239
205
|
};
|
|
240
|
-
const IMPORT_TOOL_ID =
|
|
206
|
+
const IMPORT_TOOL_ID = "00mh0wlipkdbeaw8imptsk001";
|
|
241
207
|
const ImportOldPeersData = () => {
|
|
242
208
|
const fileInputRef = (0, react_1.useRef)(null);
|
|
243
|
-
const [filePath, setFilePath] = (0, react_1.useState)(
|
|
244
|
-
const [
|
|
209
|
+
const [filePath, setFilePath] = (0, react_1.useState)("");
|
|
210
|
+
const [_fileName, setFileName] = (0, react_1.useState)("");
|
|
245
211
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
246
212
|
const [result, setResult] = (0, react_1.useState)(null);
|
|
247
|
-
const [error, setError] = (0, react_1.useState)(
|
|
213
|
+
const [error, setError] = (0, react_1.useState)("");
|
|
248
214
|
const handleFileSelect = (e) => {
|
|
249
215
|
const file = e.target.files?.[0];
|
|
250
216
|
if (!file)
|
|
@@ -257,17 +223,17 @@ const ImportOldPeersData = () => {
|
|
|
257
223
|
}
|
|
258
224
|
else {
|
|
259
225
|
setFileName(file.name);
|
|
260
|
-
setFilePath(
|
|
261
|
-
setError(
|
|
226
|
+
setFilePath("");
|
|
227
|
+
setError("File path not available. This feature requires the Electron desktop app.");
|
|
262
228
|
}
|
|
263
229
|
setResult(null);
|
|
264
|
-
setError(
|
|
230
|
+
setError("");
|
|
265
231
|
};
|
|
266
232
|
const handleDryRun = async () => {
|
|
267
233
|
if (!filePath)
|
|
268
234
|
return;
|
|
269
235
|
setLoading(true);
|
|
270
|
-
setError(
|
|
236
|
+
setError("");
|
|
271
237
|
setResult(null);
|
|
272
238
|
try {
|
|
273
239
|
const response = await peers_sdk_1.rpcServerCalls.runTool(IMPORT_TOOL_ID, {
|
|
@@ -278,127 +244,34 @@ const ImportOldPeersData = () => {
|
|
|
278
244
|
setResult(response.result);
|
|
279
245
|
}
|
|
280
246
|
else {
|
|
281
|
-
setError(
|
|
247
|
+
setError("Unexpected response from import tool");
|
|
282
248
|
}
|
|
283
249
|
}
|
|
284
250
|
catch (err) {
|
|
285
|
-
setError(err.message ||
|
|
251
|
+
setError(err.message || "Failed to run dry run");
|
|
286
252
|
}
|
|
287
253
|
finally {
|
|
288
254
|
setLoading(false);
|
|
289
255
|
}
|
|
290
256
|
};
|
|
291
|
-
return (
|
|
292
|
-
react_1.default.createElement("h6", { className: "mb-2" }, "Import Old Peers Data"),
|
|
293
|
-
react_1.default.createElement("small", { className: "text-muted d-block mb-2" }, "Import tasks and log entries from an old peers JSON export file."),
|
|
294
|
-
react_1.default.createElement("div", { className: "d-flex align-items-center gap-2 mb-2" },
|
|
295
|
-
react_1.default.createElement("input", { ref: fileInputRef, type: "file", accept: ".json", className: "form-control form-control-sm", style: { maxWidth: 350 }, onChange: handleFileSelect }),
|
|
296
|
-
react_1.default.createElement("button", { className: "btn btn-outline-primary btn-sm", onClick: handleDryRun, disabled: !filePath || loading }, loading ? 'Analyzing...' : 'Dry Run')),
|
|
297
|
-
error && (react_1.default.createElement("div", { className: "alert alert-danger py-1 px-2 small mt-2" }, error)),
|
|
298
|
-
result && react_1.default.createElement(DryRunResults, { result: result })));
|
|
257
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4 pt-3 border-top", children: [(0, jsx_runtime_1.jsx)("h6", { className: "mb-2", children: "Import Old Peers Data" }), (0, jsx_runtime_1.jsx)("small", { className: "text-muted d-block mb-2", children: "Import tasks and log entries from an old peers JSON export file." }), (0, jsx_runtime_1.jsxs)("div", { className: "d-flex align-items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", accept: ".json", className: "form-control form-control-sm", style: { maxWidth: 350 }, onChange: handleFileSelect }), (0, jsx_runtime_1.jsx)("button", { className: "btn btn-outline-primary btn-sm", onClick: handleDryRun, disabled: !filePath || loading, children: loading ? "Analyzing..." : "Dry Run" })] }), error && (0, jsx_runtime_1.jsx)("div", { className: "alert alert-danger py-1 px-2 small mt-2", children: error }), result && (0, jsx_runtime_1.jsx)(DryRunResults, { result: result })] }));
|
|
299
258
|
};
|
|
300
259
|
const DryRunResults = ({ result }) => {
|
|
301
260
|
const sm = result.statusMapping;
|
|
302
261
|
const um = result.userMapping;
|
|
303
|
-
return (
|
|
304
|
-
react_1.default.createElement("div", { className: "alert alert-info py-2 px-3 small" },
|
|
305
|
-
react_1.default.createElement("strong", null, "Summary:"),
|
|
306
|
-
" ",
|
|
307
|
-
result.totalTasks.toLocaleString(),
|
|
308
|
-
" tasks and ",
|
|
309
|
-
result.totalLogEntries.toLocaleString(),
|
|
310
|
-
" log entries across ",
|
|
311
|
-
result.groups.length,
|
|
312
|
-
" groups (",
|
|
313
|
-
result.totalRecords.toLocaleString(),
|
|
314
|
-
" total records in file)"),
|
|
315
|
-
result.warnings.length > 0 && (react_1.default.createElement("div", { className: "alert alert-warning py-2 px-3 small" },
|
|
316
|
-
react_1.default.createElement("strong", null, "Warnings:"),
|
|
317
|
-
react_1.default.createElement("ul", { className: "mb-0 ps-3" }, result.warnings.map((w, i) => react_1.default.createElement("li", { key: i }, w))))),
|
|
318
|
-
react_1.default.createElement("details", { className: "mb-2" },
|
|
319
|
-
react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "Status Mapping"),
|
|
320
|
-
react_1.default.createElement("table", { className: "table table-sm small mt-1" },
|
|
321
|
-
react_1.default.createElement("thead", null,
|
|
322
|
-
react_1.default.createElement("tr", null,
|
|
323
|
-
react_1.default.createElement("th", null, "Mapping"),
|
|
324
|
-
react_1.default.createElement("th", { className: "text-end" }, "Count"))),
|
|
325
|
-
react_1.default.createElement("tbody", null,
|
|
326
|
-
react_1.default.createElement("tr", null,
|
|
327
|
-
react_1.default.createElement("td", null, "In-Progress \u2192 Done"),
|
|
328
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.inProgressToDone.toLocaleString())),
|
|
329
|
-
react_1.default.createElement("tr", null,
|
|
330
|
-
react_1.default.createElement("td", null, "In-Progress \u2192 In-Progress"),
|
|
331
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.inProgressKeep.toLocaleString())),
|
|
332
|
-
react_1.default.createElement("tr", null,
|
|
333
|
-
react_1.default.createElement("td", null, "Queued \u2192 Done"),
|
|
334
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.queuedToDone.toLocaleString())),
|
|
335
|
-
react_1.default.createElement("tr", null,
|
|
336
|
-
react_1.default.createElement("td", null, "Queued \u2192 Queued"),
|
|
337
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.queuedKeep.toLocaleString())),
|
|
338
|
-
react_1.default.createElement("tr", null,
|
|
339
|
-
react_1.default.createElement("td", null, "Backlog \u2192 Done"),
|
|
340
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.backlogToDone.toLocaleString())),
|
|
341
|
-
react_1.default.createElement("tr", null,
|
|
342
|
-
react_1.default.createElement("td", null, "Backlog \u2192 Backlog"),
|
|
343
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.backlogKeep.toLocaleString())),
|
|
344
|
-
react_1.default.createElement("tr", null,
|
|
345
|
-
react_1.default.createElement("td", null, "No status \u2192 Done"),
|
|
346
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToDone.toLocaleString())),
|
|
347
|
-
react_1.default.createElement("tr", null,
|
|
348
|
-
react_1.default.createElement("td", null, "No status \u2192 Backlog"),
|
|
349
|
-
react_1.default.createElement("td", { className: "text-end" }, sm.noStatusToBacklog.toLocaleString()))))),
|
|
350
|
-
react_1.default.createElement("details", { className: "mb-2" },
|
|
351
|
-
react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } }, "User Mapping"),
|
|
352
|
-
react_1.default.createElement("table", { className: "table table-sm small mt-1" },
|
|
353
|
-
react_1.default.createElement("thead", null,
|
|
354
|
-
react_1.default.createElement("tr", null,
|
|
355
|
-
react_1.default.createElement("th", null, "User"),
|
|
356
|
-
react_1.default.createElement("th", { className: "text-end" }, "Tasks"))),
|
|
357
|
-
react_1.default.createElement("tbody", null,
|
|
358
|
-
react_1.default.createElement("tr", null,
|
|
359
|
-
react_1.default.createElement("td", null, "Mark"),
|
|
360
|
-
react_1.default.createElement("td", { className: "text-end" }, um.mark.toLocaleString())),
|
|
361
|
-
react_1.default.createElement("tr", null,
|
|
362
|
-
react_1.default.createElement("td", null, "Blair"),
|
|
363
|
-
react_1.default.createElement("td", { className: "text-end" }, um.blair.toLocaleString())),
|
|
364
|
-
react_1.default.createElement("tr", null,
|
|
365
|
-
react_1.default.createElement("td", null, "Other \u2192 Mark"),
|
|
366
|
-
react_1.default.createElement("td", { className: "text-end" }, um.other.toLocaleString()))))),
|
|
367
|
-
react_1.default.createElement("details", { open: true, className: "mb-2" },
|
|
368
|
-
react_1.default.createElement("summary", { className: "small fw-bold", style: { cursor: 'pointer' } },
|
|
369
|
-
"Groups (",
|
|
370
|
-
result.groups.length,
|
|
371
|
-
")"),
|
|
372
|
-
react_1.default.createElement("table", { className: "table table-sm small mt-1" },
|
|
373
|
-
react_1.default.createElement("thead", null,
|
|
374
|
-
react_1.default.createElement("tr", null,
|
|
375
|
-
react_1.default.createElement("th", null, "Group"),
|
|
376
|
-
react_1.default.createElement("th", null, "Route"),
|
|
377
|
-
react_1.default.createElement("th", { className: "text-end" }, "Tasks"),
|
|
378
|
-
react_1.default.createElement("th", { className: "text-end" }, "Active"),
|
|
379
|
-
react_1.default.createElement("th", { className: "text-end" }, "Done"),
|
|
380
|
-
react_1.default.createElement("th", { className: "text-end" }, "Logs"))),
|
|
381
|
-
react_1.default.createElement("tbody", null, result.groups.map(g => (react_1.default.createElement("tr", { key: g.groupId },
|
|
382
|
-
react_1.default.createElement("td", null, g.groupName),
|
|
383
|
-
react_1.default.createElement("td", null,
|
|
384
|
-
react_1.default.createElement("span", { className: `badge bg-${g.context === 'home' ? 'success' : 'secondary'}` }, g.context)),
|
|
385
|
-
react_1.default.createElement("td", { className: "text-end" }, g.taskCount.toLocaleString()),
|
|
386
|
-
react_1.default.createElement("td", { className: "text-end" }, g.activeCount.toLocaleString()),
|
|
387
|
-
react_1.default.createElement("td", { className: "text-end" }, g.doneCount.toLocaleString()),
|
|
388
|
-
react_1.default.createElement("td", { className: "text-end" }, g.logEntryCount.toLocaleString())))))))));
|
|
262
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "mt-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "alert alert-info py-2 px-3 small", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Summary:" }), " ", result.totalTasks.toLocaleString(), " tasks and", " ", result.totalLogEntries.toLocaleString(), " log entries across ", result.groups.length, " groups (", result.totalRecords.toLocaleString(), " total records in file)"] }), result.warnings.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "alert alert-warning py-2 px-3 small", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Warnings:" }), (0, jsx_runtime_1.jsx)("ul", { className: "mb-0 ps-3", children: result.warnings.map((w, i) => ((0, jsx_runtime_1.jsx)("li", { children: w }, i))) })] })), (0, jsx_runtime_1.jsxs)("details", { className: "mb-2", children: [(0, jsx_runtime_1.jsx)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: "Status Mapping" }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Mapping" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Count" })] }) }), (0, jsx_runtime_1.jsxs)("tbody", { children: [(0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "In-Progress \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.inProgressToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "In-Progress \u2192 In-Progress" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.inProgressKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Queued \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.queuedToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Queued \u2192 Queued" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.queuedKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Backlog \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.backlogToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Backlog \u2192 Backlog" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.backlogKeep.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "No status \u2192 Done" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.noStatusToDone.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "No status \u2192 Backlog" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: sm.noStatusToBacklog.toLocaleString() })] })] })] })] }), (0, jsx_runtime_1.jsxs)("details", { className: "mb-2", children: [(0, jsx_runtime_1.jsx)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: "User Mapping" }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "User" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Tasks" })] }) }), (0, jsx_runtime_1.jsxs)("tbody", { children: [(0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Mark" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.mark.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Blair" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.blair.toLocaleString() })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: "Other \u2192 Mark" }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: um.other.toLocaleString() })] })] })] })] }), (0, jsx_runtime_1.jsxs)("details", { open: true, className: "mb-2", children: [(0, jsx_runtime_1.jsxs)("summary", { className: "small fw-bold", style: { cursor: "pointer" }, children: ["Groups (", result.groups.length, ")"] }), (0, jsx_runtime_1.jsxs)("table", { className: "table table-sm small mt-1", children: [(0, jsx_runtime_1.jsx)("thead", { children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { children: "Group" }), (0, jsx_runtime_1.jsx)("th", { children: "Route" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Tasks" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Active" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Done" }), (0, jsx_runtime_1.jsx)("th", { className: "text-end", children: "Logs" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { children: result.groups.map((g) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { children: g.groupName }), (0, jsx_runtime_1.jsx)("td", { children: (0, jsx_runtime_1.jsx)("span", { className: `badge bg-${g.context === "home" ? "success" : "secondary"}`, children: g.context }) }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.taskCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.activeCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.doneCount.toLocaleString() }), (0, jsx_runtime_1.jsx)("td", { className: "text-end", children: g.logEntryCount.toLocaleString() })] }, g.groupId))) })] })] })] }));
|
|
389
263
|
};
|
|
390
|
-
const showLogoutInSettings = typeof window !==
|
|
391
|
-
|
|
392
|
-
|
|
264
|
+
const showLogoutInSettings = typeof window !== "undefined" &&
|
|
265
|
+
!window.electronAPI &&
|
|
266
|
+
!window.ReactNativeWebView;
|
|
393
267
|
const LogoutSection = () => {
|
|
394
268
|
if (!showLogoutInSettings)
|
|
395
269
|
return null;
|
|
396
|
-
return (
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
'Make sure you have your User ID and Secret Key saved securely, or you will lose access to your account.');
|
|
270
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "mt-4 pt-3 border-top", children: (0, jsx_runtime_1.jsx)("button", { className: "btn btn-outline-danger btn-sm", onClick: async () => {
|
|
271
|
+
const confirmed = confirm("Are you sure you want to logout? This will clear your credentials from this browser. " +
|
|
272
|
+
"Make sure you have your User ID and Secret Key saved securely, or you will lose access to your account.");
|
|
400
273
|
if (!confirmed)
|
|
401
274
|
return;
|
|
402
275
|
await peers_sdk_1.rpcServerCalls.logout();
|
|
403
|
-
}
|
|
276
|
+
}, children: "Logout" }) }));
|
|
404
277
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React from
|
|
1
|
+
import type React from "react";
|
|
2
2
|
export declare const VoiceSettingsAgent: React.FC;
|