gloomberb 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/README.md +6 -0
- package/package.json +2 -1
- package/src/api-client/askg.ts +121 -0
- package/src/api-client/central-bank-rates.ts +37 -0
- package/src/api-client/cot.ts +72 -0
- package/src/api-client/crypto-markets.ts +49 -0
- package/src/api-client/data.ts +78 -0
- package/src/api-client/debt-maturities.ts +92 -0
- package/src/api-client/equity-screener.ts +149 -0
- package/src/api-client/errors.test.ts +11 -0
- package/src/api-client/errors.ts +11 -1
- package/src/api-client/estimate-revisions.ts +113 -0
- package/src/api-client/feedback.ts +35 -0
- package/src/api-client/futures-curve.ts +53 -0
- package/src/api-client/index.ts +22 -0
- package/src/api-client/money-markets.ts +57 -0
- package/src/api-client/paths.ts +16 -1
- package/src/api-client/rates.ts +56 -0
- package/src/api-client/request.test.ts +45 -2
- package/src/api-client/request.ts +9 -0
- package/src/api-client/short-volume.ts +55 -0
- package/src/api-client/socket-protocol.test.ts +90 -0
- package/src/api-client/socket.ts +96 -21
- package/src/api-client/tape-socket.test.ts +44 -0
- package/src/api-client/tape.ts +44 -0
- package/src/api-client/types.ts +78 -4
- package/src/app/global-shortcuts.test.tsx +120 -2
- package/src/app/global-shortcuts.ts +134 -38
- package/src/app/keybindings/actions.ts +253 -0
- package/src/app/keybindings/capture-request.ts +36 -0
- package/src/app/keybindings/chord.test.ts +131 -0
- package/src/app/keybindings/chord.ts +304 -0
- package/src/app/keybindings/config.ts +83 -0
- package/src/app/keybindings/index.ts +62 -0
- package/src/app/keybindings/labels.ts +87 -0
- package/src/app/keybindings/react.tsx +35 -0
- package/src/app/keybindings/resolve.test.ts +103 -0
- package/src/app/keybindings/resolve.ts +288 -0
- package/src/app/pane-runtime/plugin-bindings.ts +2 -2
- package/src/app/runtime/layout-warmup.ts +7 -1
- package/src/app/runtime/startup.ts +9 -0
- package/src/app/runtime/ticker-refresh.test.tsx +1 -1
- package/src/app/runtime/ticker-refresh.ts +5 -4
- package/src/app.tsx +31 -20
- package/src/brokers/remote-broker-adapter.ts +10 -3
- package/src/capabilities/factories.ts +6 -0
- package/src/cli/commands/api.ts +30 -7
- package/src/cli/commands/automation.ts +26 -11
- package/src/cli/commands/keybindings.test.ts +48 -0
- package/src/cli/commands/keybindings.ts +102 -0
- package/src/cli/commands/market-fx.test.ts +28 -10
- package/src/cli/commands/market-options.test.ts +44 -0
- package/src/cli/commands/market.ts +480 -102
- package/src/cli/commands/overview.ts +159 -41
- package/src/cli/commands/plugins.test.ts +29 -0
- package/src/cli/commands/plugins.ts +123 -27
- package/src/cli/commands/quote-price-basis.test.ts +8 -2
- package/src/cli/commands/remote.ts +17 -8
- package/src/cli/commands/system.ts +299 -68
- package/src/cli/commands/ticker-financial-units.test.ts +37 -2
- package/src/cli/commands/ticker.ts +135 -56
- package/src/cli/context.ts +3 -0
- package/src/cli/desktop-pane-shot.ts +22 -4
- package/src/cli/entry.test.ts +7 -4
- package/src/cli/entry.ts +5 -4
- package/src/cli/errors.ts +34 -2
- package/src/cli/help.ts +196 -0
- package/src/cli/helpers.ts +80 -10
- package/src/cli/history-rows.test.ts +47 -0
- package/src/cli/history-rows.ts +102 -0
- package/src/cli/index.ts +173 -57
- package/src/cli/options.test.ts +9 -2
- package/src/cli/options.ts +12 -1
- package/src/cli/pane-functions/capabilities.ts +0 -8
- package/src/cli/pane-functions/catalog.ts +126 -57
- package/src/cli/pane-functions/data.ts +7 -1
- package/src/cli/pane-functions/dom.test.ts +28 -0
- package/src/cli/pane-functions/dom.ts +31 -6
- package/src/cli/pane-functions/headless.test.ts +6 -6
- package/src/cli/pane-functions/headless.ts +80 -12
- package/src/cli/pane-functions/index.ts +30 -21
- package/src/cli/pane-functions/intraday-shot.test.ts +31 -3
- package/src/cli/pane-functions/screenshot.test.ts +348 -2
- package/src/cli/pane-functions/screenshot.ts +361 -13
- package/src/cli/registry.test.ts +15 -5
- package/src/cli/registry.ts +2 -51
- package/src/cli/restore-plugins.ts +2 -1
- package/src/cli/result.test.ts +33 -0
- package/src/cli/result.ts +240 -7
- package/src/cli/ticker-resolution.test.ts +39 -0
- package/src/cli/ticker-resolution.ts +32 -2
- package/src/cli/types.ts +2 -0
- package/src/cli/visible-key-values.test.ts +23 -0
- package/src/cli/visible-key-values.ts +29 -0
- package/src/cli.test.ts +7 -4
- package/src/components/chart/composite/axis-overlays.test.tsx +15 -1
- package/src/components/chart/composite/axis-overlays.tsx +50 -14
- package/src/components/chart/composite/composite-chart.test.tsx +108 -8
- package/src/components/chart/composite/composite-chart.tsx +487 -108
- package/src/components/chart/composite/format.test.ts +11 -11
- package/src/components/chart/composite/format.ts +153 -16
- package/src/components/chart/composite/fx-precision.test.ts +2 -1
- package/src/components/chart/composite/price-axis-labels.test.ts +22 -1
- package/src/components/chart/composite/price-axis-labels.tsx +93 -4
- package/src/components/chart/composite/rasterizer.ts +9 -2
- package/src/components/chart/composite/scene.test.ts +53 -0
- package/src/components/chart/composite/scene.ts +41 -10
- package/src/components/chart/composite/text-renderer.ts +20 -9
- package/src/components/chart/composite/time-axis.test.ts +29 -0
- package/src/components/chart/composite/time-axis.ts +32 -5
- package/src/components/chart/composite/tools.ts +47 -4
- package/src/components/chart/composite/types.ts +11 -1
- package/src/components/chart/curve/curve-surface.test.tsx +53 -0
- package/src/components/chart/curve/curve-surface.tsx +148 -0
- package/src/components/chart/curve/index.ts +3 -0
- package/src/components/chart/curve/model.test.ts +115 -0
- package/src/components/chart/curve/model.ts +182 -0
- package/src/components/chart/static/chart-surface.tsx +9 -2
- package/src/components/chart/static/multi-line-chart-surface.tsx +4 -0
- package/src/components/chart/static/trail-chart-model.test.ts +36 -0
- package/src/components/chart/static/trail-chart-model.ts +105 -0
- package/src/components/chart/static/trail-chart-surface.tsx +94 -0
- package/src/components/chart/surface3d/chart.tsx +104 -0
- package/src/components/chart/surface3d/model.test.ts +117 -0
- package/src/components/chart/surface3d/model.ts +426 -0
- package/src/components/chart/surface3d/software.test.ts +32 -0
- package/src/components/chart/surface3d/software.ts +359 -0
- package/src/components/command-bar/action-runtime.ts +4 -4
- package/src/components/command-bar/assist/inventory.ts +1 -1
- package/src/components/command-bar/commands/direct/index.ts +13 -0
- package/src/components/command-bar/commands/direct/runtime.ts +6 -0
- package/src/components/command-bar/commands/registry.ts +24 -0
- package/src/components/command-bar/keyboard-handlers.ts +46 -11
- package/src/components/command-bar/keyboard-shortcuts.ts +55 -14
- package/src/components/command-bar/layout-items/current-layout.test.ts +52 -2
- package/src/components/command-bar/layout-items/current-layout.ts +40 -0
- package/src/components/command-bar/layout-items/focused-pane.ts +11 -0
- package/src/components/command-bar/list/model.test.ts +26 -0
- package/src/components/command-bar/list/model.ts +29 -0
- package/src/components/command-bar/pane-templates/items.ts +14 -4
- package/src/components/command-bar/panel/index.tsx +11 -13
- package/src/components/command-bar/panel/runtime.ts +31 -8
- package/src/components/command-bar/panel/types.ts +2 -2
- package/src/components/command-bar/routes/root/results.ts +33 -0
- package/src/components/command-bar/routes/root/runtime.ts +4 -0
- package/src/components/command-bar/routes/root/shortcuts.test.ts +23 -0
- package/src/components/command-bar/routes/root/shortcuts.ts +4 -4
- package/src/components/command-bar/routes/ticker-search/results.ts +3 -2
- package/src/components/command-bar/routing/launch-request.ts +3 -0
- package/src/components/command-bar/surface/environment.ts +9 -4
- package/src/components/command-bar/surface/index.test.tsx +109 -0
- package/src/components/command-bar/surface/index.tsx +26 -4
- package/src/components/command-bar/theme-picker.tsx +19 -1
- package/src/components/command-bar/workflow/body.tsx +15 -5
- package/src/components/command-bar/workflow/field-row.tsx +11 -19
- package/src/components/command-bar/workflow/fields.ts +3 -4
- package/src/components/command-bar/workflow/ops.test.ts +92 -2
- package/src/components/command-bar/workflow/ops.ts +14 -6
- package/src/components/command-bar/workflow/route-actions.ts +4 -4
- package/src/components/command-bar/workflow/runtime.ts +9 -9
- package/src/components/data-table/horizontal-navigation.test.tsx +30 -3
- package/src/components/data-table/sections.ts +55 -0
- package/src/components/data-table/sort-menu.tsx +75 -0
- package/src/components/data-table/stack-view.tsx +1 -1
- package/src/components/data-table/view.tsx +97 -23
- package/src/components/feed-data-table/stack-view.test.tsx +1 -1
- package/src/components/feed-data-table/stack-view.tsx +34 -11
- package/src/components/feedback-dialog.tsx +352 -0
- package/src/components/index.ts +24 -2
- package/src/components/input-search-bar.tsx +14 -7
- package/src/components/layout/detached-pane-shell.tsx +211 -149
- package/src/components/layout/floating-pane.tsx +6 -1
- package/src/components/layout/header.tsx +24 -37
- package/src/components/layout/market-summary.ts +35 -8
- package/src/components/layout/pane/content.tsx +28 -22
- package/src/components/layout/pane/footer/index.tsx +53 -41
- package/src/components/layout/pane/footer/keyboard.test.ts +57 -0
- package/src/components/layout/pane/footer/keyboard.ts +96 -0
- package/src/components/layout/pane/footer/model.ts +64 -4
- package/src/components/layout/pane/footer/notice.desktop.test.tsx +2 -1
- package/src/components/layout/pane/footer/registration.tsx +96 -2
- package/src/components/layout/pane/header-tabs.tsx +120 -0
- package/src/components/layout/pane/header.tsx +132 -105
- package/src/components/layout/pane/index.tsx +11 -3
- package/src/components/layout/pane/sidebar-metrics.ts +65 -0
- package/src/components/layout/pane/sidebar.test.tsx +87 -0
- package/src/components/layout/pane/sidebar.tsx +139 -27
- package/src/components/layout/pane/sizing.test.ts +3 -1
- package/src/components/layout/pane/sizing.ts +16 -3
- package/src/components/layout/shell/action-menu-overlay.tsx +83 -8
- package/src/components/layout/shell/drag/index.ts +1 -1
- package/src/components/layout/shell/index.test.tsx +2 -2
- package/src/components/layout/shell/index.tsx +193 -23
- package/src/components/layout/shell/menu.ts +95 -17
- package/src/components/layout/shell/native/surfaces.ts +2 -1
- package/src/components/layout/shell/pane/actions.ts +10 -2
- package/src/components/layout/shell/pane/layers.tsx +17 -9
- package/src/components/layout/shell/pane/management-shortcuts.ts +28 -4
- package/src/components/layout/shell/shortcuts.ts +71 -35
- package/src/components/layout/shell/window-mode/index.ts +24 -12
- package/src/components/layout/shell/window-mode/overlays.tsx +3 -2
- package/src/components/layout/status-bar.test.tsx +6 -5
- package/src/components/layout/status-bar.tsx +117 -29
- package/src/components/layout/transient-layout.tsx +3 -0
- package/src/components/layout/window-controls.tsx +3 -1
- package/src/components/layout/window-edit/mode.test.ts +42 -1
- package/src/components/layout/window-edit/mode.ts +42 -0
- package/src/components/layout/window-edit/presentation.ts +19 -5
- package/src/components/layout/window-edit/status.tsx +38 -12
- package/src/components/markdown-text.tsx +3 -4
- package/src/components/market-board/index.tsx +155 -0
- package/src/components/metric-treemap/index.tsx +41 -9
- package/src/components/metric-treemap/surface.test.tsx +62 -0
- package/src/components/onboarding/account-step/qr-panel.tsx +9 -8
- package/src/components/onboarding/onboarding-frame.tsx +9 -2
- package/src/components/onboarding/onboarding-wizard.test.tsx +94 -1
- package/src/components/onboarding/onboarding-wizard.tsx +279 -111
- package/src/components/onboarding/portfolio-step/broker-fields-panel.tsx +2 -2
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +34 -5
- package/src/components/onboarding/portfolio-step/index.tsx +1 -1
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +81 -21
- package/src/components/onboarding/portfolio-step/types.ts +2 -0
- package/src/components/pane-settings-dialog/desktop.tsx +53 -102
- package/src/components/pane-settings-dialog/field-dialogs.tsx +7 -6
- package/src/components/pane-settings-dialog/tui.tsx +43 -5
- package/src/components/pane-settings-dialog/value.ts +22 -0
- package/src/components/pane-settings-dialog.test.tsx +43 -0
- package/src/components/pane-settings-dialog.tsx +41 -20
- package/src/components/pane-template-wizard.tsx +8 -18
- package/src/components/price-selector-dialog.tsx +4 -0
- package/src/components/price-sparkline/model.test.ts +27 -0
- package/src/components/price-sparkline/model.ts +31 -1
- package/src/components/price-sparkline/view.tsx +9 -2
- package/src/components/quote-flash.test.ts +30 -0
- package/src/components/quote-flash.ts +127 -62
- package/src/components/sign-in-gate.tsx +57 -23
- package/src/components/ticker/badge/index.tsx +32 -2
- package/src/components/ticker/badge/text.tsx +6 -4
- package/src/components/ticker/list-table-view.tsx +114 -20
- package/src/components/ticker/list-table.test.tsx +111 -3
- package/src/components/toggle-list.tsx +1 -0
- package/src/components/ui/action-row.tsx +4 -8
- package/src/components/ui/action-scope.tsx +96 -0
- package/src/components/ui/button.tsx +15 -0
- package/src/components/ui/checkbox.tsx +2 -1
- package/src/components/ui/choice-dialog.tsx +4 -14
- package/src/components/ui/data-table/index.tsx +14 -4
- package/src/components/ui/data-table/opentui/index.tsx +35 -12
- package/src/components/ui/data-table/types.ts +16 -1
- package/src/components/ui/disclosure-marker.tsx +38 -0
- package/src/components/ui/display.tsx +2 -1
- package/src/components/ui/external-link.test.tsx +31 -2
- package/src/components/ui/external-link.tsx +59 -0
- package/src/components/ui/field-grid.tsx +449 -0
- package/src/components/ui/frame.tsx +7 -2
- package/src/components/ui/header-case.ts +8 -0
- package/src/components/ui/icon.tsx +162 -0
- package/src/components/ui/index.ts +14 -1
- package/src/components/ui/inline-quick-add.tsx +62 -25
- package/src/components/ui/list-view.tsx +65 -0
- package/src/components/ui/menu.tsx +152 -0
- package/src/components/ui/multi-select/dialog.tsx +59 -46
- package/src/components/ui/prose.desktop.test.tsx +50 -0
- package/src/components/ui/prose.test.ts +22 -0
- package/src/components/ui/prose.tsx +53 -7
- package/src/components/ui/query-bar-keys.tsx +166 -0
- package/src/components/ui/query-bar.tsx +470 -0
- package/src/components/ui/select-button.tsx +12 -5
- package/src/components/ui/select-field.tsx +54 -0
- package/src/components/ui/stat-grid.tsx +149 -0
- package/src/components/ui/status.tsx +2 -1
- package/src/components/ui/table-layout.test.ts +20 -3
- package/src/components/ui/table-layout.ts +51 -8
- package/src/components/ui/tabs.test.tsx +114 -0
- package/src/components/ui/tabs.tsx +85 -9
- package/src/components/ui/toggle.tsx +3 -1
- package/src/components/use-external-link-footer.ts +3 -2
- package/src/core/app-runtime.test.ts +31 -0
- package/src/core/app-runtime.ts +32 -2
- package/src/core/app-service-ports.ts +8 -0
- package/src/core/app-services.ts +2 -2
- package/src/core/state/app/state.ts +4 -0
- package/src/core/state/app/types.ts +23 -3
- package/src/data/config/home.test.ts +70 -0
- package/src/data/config/home.ts +41 -0
- package/src/data/config/store/index.test.ts +25 -0
- package/src/data/config/store/node.ts +21 -19
- package/src/data/config/store/normalize.ts +41 -0
- package/src/data/fred-series.ts +47 -3
- package/src/data/resource-store.ts +60 -58
- package/src/data/sqlite/cache.test.ts +75 -0
- package/src/data/sqlite/database.ts +12 -0
- package/src/data/sqlite/retry.test.ts +21 -0
- package/src/data/sqlite/retry.ts +24 -1
- package/src/feedback/diagnostics.test.ts +30 -0
- package/src/feedback/diagnostics.ts +156 -0
- package/src/feedback/redact.test.ts +50 -0
- package/src/feedback/redact.ts +54 -0
- package/src/feedback/screenshot.test.ts +22 -0
- package/src/feedback/screenshot.ts +45 -0
- package/src/feedback/types.ts +60 -0
- package/src/i18n/es.ts +31 -10
- package/src/i18n/ja.ts +31 -10
- package/src/i18n/ko.ts +31 -10
- package/src/i18n/zh-cn.ts +31 -10
- package/src/i18n/zh-tw.ts +31 -10
- package/src/layout-marketplace/gallery-desktop.test.tsx +72 -63
- package/src/layout-marketplace/gallery-desktop.tsx +210 -175
- package/src/layout-marketplace/gallery-terminal.tsx +52 -165
- package/src/layout-marketplace/gallery.test.tsx +3 -2
- package/src/layout-marketplace/gallery.tsx +229 -6
- package/src/layout-marketplace/model.ts +12 -0
- package/src/market-data/coordinator/chart-session.test.ts +152 -0
- package/src/market-data/coordinator/chart.ts +31 -18
- package/src/market-data/coordinator/entries.ts +25 -2
- package/src/market-data/coordinator/events.test.ts +23 -34
- package/src/market-data/coordinator/events.ts +19 -57
- package/src/market-data/coordinator/financials.ts +9 -4
- package/src/market-data/coordinator/fx-legs.ts +71 -0
- package/src/market-data/coordinator/fx-refresh.test.ts +139 -1
- package/src/market-data/coordinator/index.test.ts +74 -4
- package/src/market-data/coordinator/index.ts +283 -66
- package/src/market-data/coordinator/options-sharing.test.ts +79 -0
- package/src/market-data/coordinator/quotes.ts +82 -81
- package/src/market-data/coordinator/subscriptions.test.ts +130 -33
- package/src/market-data/frame-scheduler.test.ts +82 -0
- package/src/market-data/frame-scheduler.ts +335 -0
- package/src/market-data/history-session.test.ts +151 -0
- package/src/market-data/history-session.ts +106 -0
- package/src/market-data/hooks.tsx +25 -7
- package/src/market-data/market/format.test.ts +38 -0
- package/src/market-data/market/format.ts +78 -11
- package/src/market-data/market/freshness.ts +146 -11
- package/src/market-data/performance.test.ts +30 -1
- package/src/market-data/performance.ts +2 -7
- package/src/market-data/portfolio-financials.ts +14 -4
- package/src/market-data/published-jpx-sessions.ts +22 -0
- package/src/market-data/published-us-sessions.test.ts +65 -0
- package/src/market-data/published-us-sessions.ts +87 -0
- package/src/market-data/query-store.ts +11 -3
- package/src/market-data/quote-subscription-target.test.ts +19 -0
- package/src/market-data/quote-subscription-target.ts +19 -0
- package/src/market-data/quotes/clock.ts +56 -0
- package/src/market-data/quotes/contributions.ts +41 -1
- package/src/market-data/quotes/day-range.ts +19 -2
- package/src/market-data/quotes/freshness.ts +18 -5
- package/src/market-data/quotes/observation-time.test.ts +27 -3
- package/src/market-data/quotes/resolution.test.ts +13 -0
- package/src/market-data/quotes/resolution.ts +19 -8
- package/src/market-data/quotes/time.test.ts +7 -0
- package/src/market-data/quotes/time.ts +11 -3
- package/src/market-data/result-types.ts +2 -0
- package/src/market-data/snapshot-provider.test.ts +159 -1
- package/src/market-data/snapshot-provider.ts +139 -19
- package/src/news/aggregator.ts +42 -4
- package/src/plugins/builtin/account-management/form-components.tsx +26 -4
- package/src/plugins/builtin/account-management/keyboard.ts +17 -4
- package/src/plugins/builtin/account-management/pane.tsx +185 -262
- package/src/plugins/builtin/account-management/password-dialog.tsx +12 -14
- package/src/plugins/builtin/alerts/events-pane.tsx +224 -0
- package/src/plugins/builtin/alerts/events.test.ts +28 -0
- package/src/plugins/builtin/alerts/events.ts +130 -0
- package/src/plugins/builtin/alerts/history-pane.tsx +152 -0
- package/src/plugins/builtin/alerts/history.ts +86 -0
- package/src/plugins/builtin/alerts/index.test.tsx +80 -11
- package/src/plugins/builtin/alerts/index.tsx +130 -20
- package/src/plugins/builtin/alerts/live.ts +136 -0
- package/src/plugins/builtin/alerts/pane.tsx +120 -37
- package/src/plugins/builtin/alerts/research-builder.ts +75 -0
- package/src/plugins/builtin/alerts/research-rules.ts +207 -0
- package/src/plugins/builtin/alerts/research.test.ts +75 -0
- package/src/plugins/builtin/analytics/index.test.tsx +5 -5
- package/src/plugins/builtin/analytics/index.tsx +75 -32
- package/src/plugins/builtin/analytics/pane-model.ts +13 -9
- package/src/plugins/builtin/analytics/risk-client.test.ts +100 -0
- package/src/plugins/builtin/analytics/risk-client.ts +402 -0
- package/src/plugins/builtin/analytics/risk-evidence.test.ts +123 -0
- package/src/plugins/builtin/analytics/risk-evidence.ts +455 -0
- package/src/plugins/builtin/analytics/risk-headless.test.ts +27 -0
- package/src/plugins/builtin/analytics/risk-headless.ts +172 -0
- package/src/plugins/builtin/analytics/risk-math.test.ts +95 -0
- package/src/plugins/builtin/analytics/risk-math.ts +319 -0
- package/src/plugins/builtin/analytics/risk-model.test.ts +265 -0
- package/src/plugins/builtin/analytics/risk-model.ts +549 -0
- package/src/plugins/builtin/analytics/risk-options.ts +250 -0
- package/src/plugins/builtin/analytics/risk-pane.tsx +720 -0
- package/src/plugins/builtin/analytics/risk-test-data.ts +52 -0
- package/src/plugins/builtin/analytics/sharpe-cadence.test.ts +5 -5
- package/src/plugins/builtin/analytics/sharpe-cadence.ts +24 -49
- package/src/plugins/builtin/backtest/client.ts +60 -0
- package/src/plugins/builtin/backtest/engine.test.ts +72 -0
- package/src/plugins/builtin/backtest/engine.ts +176 -0
- package/src/plugins/builtin/backtest/format.ts +36 -0
- package/src/plugins/builtin/backtest/headless.ts +61 -0
- package/src/plugins/builtin/backtest/index.tsx +30 -0
- package/src/plugins/builtin/backtest/pane.tsx +266 -0
- package/src/plugins/builtin/backtest/presets.ts +34 -0
- package/src/plugins/builtin/backtest/rules.ts +179 -0
- package/src/plugins/builtin/bond-calculator/client.ts +28 -0
- package/src/plugins/builtin/bond-calculator/headless.ts +54 -0
- package/src/plugins/builtin/bond-calculator/index.tsx +12 -0
- package/src/plugins/builtin/bond-calculator/math.test.ts +97 -0
- package/src/plugins/builtin/bond-calculator/math.ts +164 -0
- package/src/plugins/builtin/bond-calculator/model.test.ts +56 -0
- package/src/plugins/builtin/bond-calculator/model.ts +64 -0
- package/src/plugins/builtin/bond-calculator/pane.test.tsx +84 -0
- package/src/plugins/builtin/bond-calculator/pane.tsx +166 -0
- package/src/plugins/builtin/broker-manager/detail.tsx +96 -53
- package/src/plugins/builtin/broker-manager/footer.ts +17 -2
- package/src/plugins/builtin/broker-manager/index.test.tsx +63 -23
- package/src/plugins/builtin/broker-manager/index.tsx +60 -78
- package/src/plugins/builtin/broker-manager/keyboard.ts +56 -78
- package/src/plugins/builtin/broker-manager/table.ts +13 -30
- package/src/plugins/builtin/buildout/data-runtime.ts +9 -4
- package/src/plugins/builtin/buildout/detail/company.tsx +93 -19
- package/src/plugins/builtin/buildout/detail/index.tsx +0 -25
- package/src/plugins/builtin/buildout/detail/site.tsx +3 -10
- package/src/plugins/builtin/buildout/detail/ui.tsx +3 -76
- package/src/plugins/builtin/buildout/format.ts +36 -0
- package/src/plugins/builtin/buildout/model/types.ts +4 -0
- package/src/plugins/builtin/buildout/pane/header.tsx +5 -23
- package/src/plugins/builtin/buildout/pane/index.tsx +182 -114
- package/src/plugins/builtin/buildout/pane/status.tsx +36 -14
- package/src/plugins/builtin/buildout/table-model.ts +70 -6
- package/src/plugins/builtin/cds/model.ts +3 -3
- package/src/plugins/builtin/cds/pane.test.tsx +16 -9
- package/src/plugins/builtin/cds/pane.tsx +33 -25
- package/src/plugins/builtin/central-bank-rates/client.ts +68 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +24 -0
- package/src/plugins/builtin/central-bank-rates/index.tsx +18 -0
- package/src/plugins/builtin/central-bank-rates/model.test.ts +69 -0
- package/src/plugins/builtin/central-bank-rates/model.ts +27 -0
- package/src/plugins/builtin/central-bank-rates/pane.tsx +78 -0
- package/src/plugins/builtin/changelog/index.tsx +9 -13
- package/src/plugins/builtin/chart-composer/catalog-inventory.test.ts +6 -15
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +25 -61
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +53 -78
- package/src/plugins/builtin/chart-composer/editor/controller.ts +7 -2
- package/src/plugins/builtin/chart-composer/editor/desktop-view.tsx +6 -4
- package/src/plugins/builtin/chart-composer/editor/model.ts +3 -0
- package/src/plugins/builtin/chart-composer/editor/opentui-view.tsx +2 -1
- package/src/plugins/builtin/chart-composer/editor.tsx +33 -8
- package/src/plugins/builtin/chart-composer/follow-binding.test.tsx +253 -0
- package/src/plugins/builtin/chart-composer/follow-binding.ts +73 -0
- package/src/plugins/builtin/chart-composer/headless.ts +76 -16
- package/src/plugins/builtin/chart-composer/loading.test.tsx +1 -1
- package/src/plugins/builtin/chart-composer/pane.tsx +105 -70
- package/src/plugins/builtin/chart-composer/presets.ts +18 -10
- package/src/plugins/builtin/chart-composer/quick-add.tsx +59 -29
- package/src/plugins/builtin/chart-composer/served-cadence-snapshot.test.ts +161 -0
- package/src/plugins/builtin/chart-composer/settings.test.ts +30 -23
- package/src/plugins/builtin/chart-composer/settings.ts +48 -10
- package/src/plugins/builtin/chart-composer/viewport-labels.test.ts +13 -0
- package/src/plugins/builtin/chart-composer/viewport-labels.ts +80 -0
- package/src/plugins/builtin/chat/channels.ts +4 -10
- package/src/plugins/builtin/chat/chat.test.tsx +7 -7
- package/src/plugins/builtin/chat/content/channel-navigation.ts +124 -40
- package/src/plugins/builtin/chat/content/composer-runtime.ts +5 -5
- package/src/plugins/builtin/chat/content/composer.tsx +2 -1
- package/src/plugins/builtin/chat/content/footer.tsx +238 -0
- package/src/plugins/builtin/chat/content/index.tsx +75 -13
- package/src/plugins/builtin/chat/content/layout-metrics.ts +4 -1
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +95 -80
- package/src/plugins/builtin/chat/content/open-targets.ts +30 -0
- package/src/plugins/builtin/chat/content/shortcuts.ts +30 -13
- package/src/plugins/builtin/chat/content/snapshot.ts +0 -3
- package/src/plugins/builtin/chat/layout.ts +37 -13
- package/src/plugins/builtin/chat/message/desktop.tsx +10 -12
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +7 -5
- package/src/plugins/builtin/chat/message/profile-popover.tsx +51 -22
- package/src/plugins/builtin/chat/sidebar-rows.ts +96 -0
- package/src/plugins/builtin/chat/sidebar-store.ts +100 -0
- package/src/plugins/builtin/chat/sidebar.test.tsx +60 -19
- package/src/plugins/builtin/chat/sidebar.tsx +126 -150
- package/src/plugins/builtin/chat/status-widget.tsx +3 -10
- package/src/plugins/builtin/chat/test-harness.tsx +3 -0
- package/src/plugins/builtin/cloud/askg/controller.test.ts +250 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +42 -1
- package/src/plugins/builtin/cloud/askg/conversation-store.test.ts +230 -0
- package/src/plugins/builtin/cloud/askg/conversation-store.ts +222 -0
- package/src/plugins/builtin/cloud/askg/model.test.ts +127 -0
- package/src/plugins/builtin/cloud/askg/model.ts +121 -2
- package/src/plugins/builtin/cloud/askg/pane.test.tsx +356 -0
- package/src/plugins/builtin/cloud/askg/pane.tsx +526 -70
- package/src/plugins/builtin/cloud/askg/protocol.ts +9 -0
- package/src/plugins/builtin/cloud/askg/sidebar.tsx +184 -0
- package/src/plugins/builtin/cloud/auth-actions.tsx +35 -8
- package/src/plugins/builtin/cloud/auth-form.tsx +72 -8
- package/src/plugins/builtin/cloud/device-signin-dialog.tsx +7 -1
- package/src/plugins/builtin/cloud/plugin.tsx +19 -6
- package/src/plugins/builtin/cloud/reveal-in-scroll-box.ts +34 -0
- package/src/plugins/builtin/cloud/team/acm-tab.tsx +11 -11
- package/src/plugins/builtin/cloud/team/module.tsx +1 -1
- package/src/plugins/builtin/cloud/team/pane-model.test.ts +15 -1
- package/src/plugins/builtin/cloud/team/pane-model.ts +38 -2
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +5 -12
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +47 -39
- package/src/plugins/builtin/cloud/team/pane.test.tsx +48 -10
- package/src/plugins/builtin/cloud/team/pane.tsx +203 -107
- package/src/plugins/builtin/cloud/team/status-widget.tsx +4 -1
- package/src/plugins/builtin/cloud/thesis/board-pane.test.tsx +7 -5
- package/src/plugins/builtin/cloud/thesis/board-pane.tsx +68 -37
- package/src/plugins/builtin/cloud/thesis/detail.tsx +45 -31
- package/src/plugins/builtin/cloud/thesis/exposure.ts +14 -4
- package/src/plugins/builtin/cloud/thesis/module.tsx +1 -1
- package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +25 -16
- package/src/plugins/builtin/cloud/upgrade-status-widget.tsx +7 -1
- package/src/plugins/builtin/cloud/verification-panel.tsx +18 -11
- package/src/plugins/builtin/cloud/verification-status-widget.tsx +4 -0
- package/src/plugins/builtin/cloud-tweets/footer.ts +21 -2
- package/src/plugins/builtin/cloud-tweets/keyboard.ts +11 -11
- package/src/plugins/builtin/cloud-tweets/model.ts +14 -0
- package/src/plugins/builtin/cloud-tweets/pane.tsx +54 -25
- package/src/plugins/builtin/cloud-tweets/search-bar.tsx +14 -13
- package/src/plugins/builtin/cloud-tweets/table.tsx +198 -67
- package/src/plugins/builtin/composite-plugins.ts +18 -0
- package/src/plugins/builtin/congress-trades/aggregates.test.ts +27 -0
- package/src/plugins/builtin/congress-trades/aggregates.ts +69 -0
- package/src/plugins/builtin/congress-trades/client.ts +3 -1
- package/src/plugins/builtin/congress-trades/detail.tsx +60 -39
- package/src/plugins/builtin/congress-trades/filters.tsx +36 -0
- package/src/plugins/builtin/congress-trades/footer.ts +13 -7
- package/src/plugins/builtin/congress-trades/headless.test.ts +15 -0
- package/src/plugins/builtin/congress-trades/headless.ts +74 -6
- package/src/plugins/builtin/congress-trades/index.tsx +26 -0
- package/src/plugins/builtin/congress-trades/keyboard.ts +25 -13
- package/src/plugins/builtin/congress-trades/model.test.ts +31 -6
- package/src/plugins/builtin/congress-trades/model.ts +111 -30
- package/src/plugins/builtin/congress-trades/pane.tsx +202 -40
- package/src/plugins/builtin/congress-trades/table.tsx +20 -5
- package/src/plugins/builtin/connections/pane.test.tsx +23 -14
- package/src/plugins/builtin/connections/pane.tsx +18 -25
- package/src/plugins/builtin/correlation/headless.ts +5 -2
- package/src/plugins/builtin/correlation/index.test.tsx +41 -10
- package/src/plugins/builtin/correlation/index.tsx +168 -128
- package/src/plugins/builtin/correlation/matrix/model.ts +2 -1
- package/src/plugins/builtin/correlation/matrix/symbol-cell.tsx +1 -0
- package/src/plugins/builtin/correlation/relationship/layout.test.ts +17 -0
- package/src/plugins/builtin/correlation/relationship/model.ts +2 -2
- package/src/plugins/builtin/correlation/relationship/pane.tsx +196 -205
- package/src/plugins/builtin/correlation/relationship/view-model.ts +12 -13
- package/src/plugins/builtin/cot/client.ts +102 -0
- package/src/plugins/builtin/cot/headless.ts +63 -0
- package/src/plugins/builtin/cot/index.tsx +25 -0
- package/src/plugins/builtin/cot/model.test.ts +80 -0
- package/src/plugins/builtin/cot/model.ts +115 -0
- package/src/plugins/builtin/cot/pane.tsx +167 -0
- package/src/plugins/builtin/credit-conditions/client.test.ts +6 -6
- package/src/plugins/builtin/credit-conditions/client.ts +2 -1
- package/src/plugins/builtin/credit-conditions/headless.test.ts +4 -0
- package/src/plugins/builtin/credit-conditions/headless.ts +2 -1
- package/src/plugins/builtin/credit-conditions/index.test.tsx +34 -36
- package/src/plugins/builtin/credit-conditions/index.tsx +77 -106
- package/src/plugins/builtin/credit-conditions/model.test.ts +18 -6
- package/src/plugins/builtin/credit-conditions/model.ts +22 -1
- package/src/plugins/builtin/crypto-board/client.test.ts +51 -0
- package/src/plugins/builtin/crypto-board/client.ts +124 -0
- package/src/plugins/builtin/crypto-board/headless.ts +69 -0
- package/src/plugins/builtin/crypto-board/index.tsx +40 -0
- package/src/plugins/builtin/crypto-board/model.test.ts +102 -0
- package/src/plugins/builtin/crypto-board/model.ts +249 -0
- package/src/plugins/builtin/crypto-board/pane.test.tsx +130 -0
- package/src/plugins/builtin/crypto-board/pane.tsx +265 -0
- package/src/plugins/builtin/crypto-board/test-fixture.ts +80 -0
- package/src/plugins/builtin/custom-view/live-quotes.test.ts +48 -0
- package/src/plugins/builtin/custom-view/live-quotes.ts +117 -0
- package/src/plugins/builtin/custom-view/pane.tsx +121 -38
- package/src/plugins/builtin/custom-view/view-spec.test.ts +9 -0
- package/src/plugins/builtin/custom-view/view-spec.ts +41 -4
- package/src/plugins/builtin/debt-maturities/client.ts +371 -0
- package/src/plugins/builtin/debt-maturities/debt-maturities.test.ts +309 -0
- package/src/plugins/builtin/debt-maturities/headless.ts +88 -0
- package/src/plugins/builtin/debt-maturities/index.tsx +42 -0
- package/src/plugins/builtin/debt-maturities/model.ts +136 -0
- package/src/plugins/builtin/debt-maturities/pane.tsx +689 -0
- package/src/plugins/builtin/debug/index.tsx +188 -212
- package/src/plugins/builtin/dividend-yield/client.ts +20 -31
- package/src/plugins/builtin/dividend-yield/dividend-source-integrity.test.ts +5 -4
- package/src/plugins/builtin/dividend-yield/headless.test.ts +2 -1
- package/src/plugins/builtin/dividend-yield/headless.ts +13 -5
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/dividend-yield/model.ts +5 -8
- package/src/plugins/builtin/dividend-yield/pane.test.tsx +8 -6
- package/src/plugins/builtin/dividend-yield/pane.tsx +68 -53
- package/src/plugins/builtin/dividend-yield/trailing-cash.ts +83 -0
- package/src/plugins/builtin/dividend-yield/types.ts +3 -1
- package/src/plugins/builtin/dividend-yield/view.test.ts +28 -5
- package/src/plugins/builtin/dividend-yield/view.ts +20 -8
- package/src/plugins/builtin/earnings/detail-view.tsx +36 -31
- package/src/plugins/builtin/earnings/estimate-basis.test.ts +28 -2
- package/src/plugins/builtin/earnings/headless.ts +23 -15
- package/src/plugins/builtin/earnings/index.tsx +14 -17
- package/src/plugins/builtin/earnings/table.test.ts +17 -1
- package/src/plugins/builtin/earnings/table.ts +68 -38
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -1
- package/src/plugins/builtin/earnings-calls/pane.test.tsx +47 -7
- package/src/plugins/builtin/earnings-calls/pane.tsx +94 -74
- package/src/plugins/builtin/earnings-calls/transcript-view.tsx +47 -24
- package/src/plugins/builtin/econ/calendar-model.ts +9 -0
- package/src/plugins/builtin/econ/detail-view.tsx +156 -140
- package/src/plugins/builtin/econ/fred-cache.test.ts +40 -1
- package/src/plugins/builtin/econ/index.test.tsx +37 -0
- package/src/plugins/builtin/econ/index.tsx +80 -75
- package/src/plugins/builtin/econ-statistics/cache.ts +6 -2
- package/src/plugins/builtin/econ-statistics/client.test.ts +14 -0
- package/src/plugins/builtin/econ-statistics/client.ts +19 -1
- package/src/plugins/builtin/econ-statistics/defs.ts +10 -1
- package/src/plugins/builtin/econ-statistics/detail.tsx +31 -37
- package/src/plugins/builtin/econ-statistics/pane.test.tsx +2 -2
- package/src/plugins/builtin/econ-statistics/pane.tsx +56 -47
- package/src/plugins/builtin/econ-statistics/stats.ts +6 -11
- package/src/plugins/builtin/econ-statistics/view.ts +24 -7
- package/src/plugins/builtin/equity-screener/client.ts +83 -0
- package/src/plugins/builtin/equity-screener/criterion-editor.tsx +174 -0
- package/src/plugins/builtin/equity-screener/headless.ts +94 -0
- package/src/plugins/builtin/equity-screener/index.tsx +38 -0
- package/src/plugins/builtin/equity-screener/live.ts +74 -0
- package/src/plugins/builtin/equity-screener/model.test.ts +116 -0
- package/src/plugins/builtin/equity-screener/model.ts +349 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +992 -0
- package/src/plugins/builtin/equity-screener/results.test.tsx +44 -0
- package/src/plugins/builtin/equity-screener/results.ts +137 -0
- package/src/plugins/builtin/equity-screener/test-fixture.ts +63 -0
- package/src/plugins/builtin/estimate-revisions/client.ts +300 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +96 -0
- package/src/plugins/builtin/estimate-revisions/index.tsx +87 -0
- package/src/plugins/builtin/estimate-revisions/model.test.ts +246 -0
- package/src/plugins/builtin/estimate-revisions/model.ts +115 -0
- package/src/plugins/builtin/estimate-revisions/pane.tsx +629 -0
- package/src/plugins/builtin/estimate-revisions/sorting.test.ts +91 -0
- package/src/plugins/builtin/estimate-revisions/sorting.ts +111 -0
- package/src/plugins/builtin/executives/index.tsx +5 -3
- package/src/plugins/builtin/executives/pane.test.tsx +6 -2
- package/src/plugins/builtin/executives/pane.tsx +175 -87
- package/src/plugins/builtin/filing-events/feed.test.ts +2 -5
- package/src/plugins/builtin/filing-events/feed.ts +6 -16
- package/src/plugins/builtin/filing-events/index.tsx +3 -1
- package/src/plugins/builtin/filing-events/pane.test.tsx +19 -1
- package/src/plugins/builtin/filing-events/pane.tsx +51 -13
- package/src/plugins/builtin/futures/index.tsx +56 -25
- package/src/plugins/builtin/futures/model.test.ts +13 -16
- package/src/plugins/builtin/futures/model.ts +14 -4
- package/src/plugins/builtin/futures/pane.test.tsx +4 -4
- package/src/plugins/builtin/futures/table.tsx +6 -6
- package/src/plugins/builtin/futures-curve/client.ts +71 -0
- package/src/plugins/builtin/futures-curve/headless.ts +29 -0
- package/src/plugins/builtin/futures-curve/index.tsx +32 -0
- package/src/plugins/builtin/futures-curve/model.test.ts +88 -0
- package/src/plugins/builtin/futures-curve/model.ts +121 -0
- package/src/plugins/builtin/futures-curve/pane.tsx +118 -0
- package/src/plugins/builtin/fx-matrix/export.test.ts +6 -6
- package/src/plugins/builtin/fx-matrix/export.ts +3 -3
- package/src/plugins/builtin/fx-matrix/index.tsx +46 -5
- package/src/plugins/builtin/fx-matrix/live-legs.ts +70 -0
- package/src/plugins/builtin/fx-matrix/pane.test.tsx +4 -1
- package/src/plugins/builtin/help/feedback-tab.tsx +98 -0
- package/src/plugins/builtin/help/functions-table.tsx +205 -0
- package/src/plugins/builtin/help/index.tsx +235 -343
- package/src/plugins/builtin/help/keybindings-editor.test.tsx +164 -0
- package/src/plugins/builtin/help/keybindings-editor.tsx +433 -0
- package/src/plugins/builtin/help/shortcut-model.ts +1 -35
- package/src/plugins/builtin/help/shortcut-table.tsx +115 -0
- package/src/plugins/builtin/help/table-cells.tsx +66 -0
- package/src/plugins/builtin/holders/headless.ts +2 -2
- package/src/plugins/builtin/holders/index.tsx +1 -1
- package/src/plugins/builtin/holders/pane.tsx +63 -23
- package/src/plugins/builtin/holders/table-model.ts +2 -2
- package/src/plugins/builtin/holders/thirteenf-match.test.ts +30 -0
- package/src/plugins/builtin/holders/thirteenf-match.ts +23 -12
- package/src/plugins/builtin/insider/headless.ts +7 -3
- package/src/plugins/builtin/insider/index.tsx +104 -27
- package/src/plugins/builtin/insider/insider-data.test.ts +8 -0
- package/src/plugins/builtin/insider/insider-data.ts +20 -1
- package/src/plugins/builtin/insider/model.ts +44 -8
- package/src/plugins/builtin/insider/pane.test.tsx +4 -3
- package/src/plugins/builtin/iv-history/charts.tsx +50 -0
- package/src/plugins/builtin/iv-history/client.test.ts +18 -0
- package/src/plugins/builtin/iv-history/client.ts +130 -0
- package/src/plugins/builtin/iv-history/format.ts +18 -0
- package/src/plugins/builtin/iv-history/headless.ts +93 -0
- package/src/plugins/builtin/iv-history/index.tsx +44 -0
- package/src/plugins/builtin/iv-history/model.test.ts +87 -0
- package/src/plugins/builtin/iv-history/model.ts +202 -0
- package/src/plugins/builtin/iv-history/pane.tsx +126 -0
- package/src/plugins/builtin/iv-history/rank.ts +17 -0
- package/src/plugins/builtin/iv-history/screen-pane.tsx +143 -0
- package/src/plugins/builtin/iv-history/universe.ts +40 -0
- package/src/plugins/builtin/jobs/headless.ts +13 -0
- package/src/plugins/builtin/jobs/index.tsx +1 -1
- package/src/plugins/builtin/jobs/model.ts +2 -1
- package/src/plugins/builtin/jobs/pane.tsx +108 -85
- package/src/plugins/builtin/kelly-sizer/fields.ts +5 -24
- package/src/plugins/builtin/kelly-sizer/index.test.tsx +37 -6
- package/src/plugins/builtin/kelly-sizer/pane.tsx +223 -189
- package/src/plugins/builtin/kelly-sizer/sections.tsx +149 -92
- package/src/plugins/builtin/kelly-sizer/view.test.tsx +3 -3
- package/src/plugins/builtin/kelly-sizer/view.tsx +1 -323
- package/src/plugins/builtin/market-movers/headless.ts +4 -3
- package/src/plugins/builtin/market-movers/index.tsx +25 -22
- package/src/plugins/builtin/market-movers/model.ts +31 -9
- package/src/plugins/builtin/market-movers/pane-research.test.tsx +1 -1
- package/src/plugins/builtin/market-movers/screener.test.ts +28 -0
- package/src/plugins/builtin/market-movers/screener.ts +26 -5
- package/src/plugins/builtin/market-movers/table.ts +2 -2
- package/src/plugins/builtin/market-valuation/align.ts +13 -1
- package/src/plugins/builtin/market-valuation/detail.tsx +53 -49
- package/src/plugins/builtin/market-valuation/index.tsx +25 -16
- package/src/plugins/builtin/market-valuation/indicators.ts +3 -1
- package/src/plugins/builtin/market-valuation/model.test.ts +19 -0
- package/src/plugins/builtin/market-valuation/pane.test.tsx +3 -9
- package/src/plugins/builtin/market-valuation/pane.tsx +59 -56
- package/src/plugins/builtin/market-valuation/zone-scale/desktop.tsx +4 -4
- package/src/plugins/builtin/market-valuation/zone-scale/model.ts +11 -4
- package/src/plugins/builtin/market-valuation/zone-scale/terminal.tsx +6 -6
- package/src/plugins/builtin/money-markets/client.ts +65 -0
- package/src/plugins/builtin/money-markets/headless.ts +27 -0
- package/src/plugins/builtin/money-markets/index.tsx +18 -0
- package/src/plugins/builtin/money-markets/model.test.ts +61 -0
- package/src/plugins/builtin/money-markets/model.ts +35 -0
- package/src/plugins/builtin/money-markets/pane.tsx +110 -0
- package/src/plugins/builtin/news/headless.test.ts +11 -0
- package/src/plugins/builtin/news/headless.ts +25 -3
- package/src/plugins/builtin/news/index.tsx +2 -2
- package/src/plugins/builtin/news/wire/breaking/notifications.ts +41 -15
- package/src/plugins/builtin/news/wire/breaking/pane.tsx +6 -2
- package/src/plugins/builtin/news/wire/index.tsx +5 -1
- package/src/plugins/builtin/news/wire/industry-pane.tsx +12 -18
- package/src/plugins/builtin/news/wire/news/detail-view.test.tsx +1 -1
- package/src/plugins/builtin/news/wire/news/detail-view.tsx +60 -19
- package/src/plugins/builtin/news/wire/news/table.test.tsx +15 -3
- package/src/plugins/builtin/news/wire/news/table.tsx +91 -43
- package/src/plugins/builtin/notes/owner.tsx +17 -17
- package/src/plugins/builtin/notes/quick-notes-pane.test.tsx +22 -3
- package/src/plugins/builtin/notes/quick-notes-pane.tsx +76 -58
- package/src/plugins/builtin/notes/ticker-notes-tab.tsx +14 -10
- package/src/plugins/builtin/options/analytics-as-of.tsx +41 -0
- package/src/plugins/builtin/options/analytics.test.ts +101 -15
- package/src/plugins/builtin/options/analytics.ts +112 -49
- package/src/plugins/builtin/options/calc-seed.test.ts +1 -1
- package/src/plugins/builtin/options/calc-seed.ts +1 -1
- package/src/plugins/builtin/options/chain-integrity.test.tsx +42 -9
- package/src/plugins/builtin/options/enrichment-client.ts +79 -0
- package/src/plugins/builtin/options/enrichment-hook.test.tsx +149 -0
- package/src/plugins/builtin/options/enrichment-model.ts +168 -0
- package/src/plugins/builtin/options/enrichment.test.ts +257 -0
- package/src/plugins/builtin/options/enrichment.ts +127 -0
- package/src/plugins/builtin/options/expiry-selection.test.tsx +65 -12
- package/src/plugins/builtin/options/footer.ts +3 -2
- package/src/plugins/builtin/options/index.tsx +21 -3
- package/src/plugins/builtin/options/live-quotes.test.ts +69 -3
- package/src/plugins/builtin/options/live-quotes.ts +87 -18
- package/src/plugins/builtin/options/market-reference.ts +10 -0
- package/src/plugins/builtin/options/table.ts +15 -7
- package/src/plugins/builtin/options/types.ts +10 -1
- package/src/plugins/builtin/options/view.test.tsx +47 -54
- package/src/plugins/builtin/options/view.tsx +324 -218
- package/src/plugins/builtin/options-calculator/binomial.test.ts +264 -0
- package/src/plugins/builtin/options-calculator/binomial.ts +331 -0
- package/src/plugins/builtin/options-calculator/boundary-integrity.test.tsx +5 -3
- package/src/plugins/builtin/options-calculator/evidence.test.ts +138 -0
- package/src/plugins/builtin/options-calculator/evidence.ts +162 -0
- package/src/plugins/builtin/options-calculator/headless.test.ts +39 -0
- package/src/plugins/builtin/options-calculator/headless.ts +95 -0
- package/src/plugins/builtin/options-calculator/index.tsx +5 -3
- package/src/plugins/builtin/options-calculator/inputs.test.ts +24 -0
- package/src/plugins/builtin/options-calculator/inputs.ts +78 -0
- package/src/plugins/builtin/options-calculator/model.ts +5 -0
- package/src/plugins/builtin/options-calculator/pane.test.tsx +150 -15
- package/src/plugins/builtin/options-calculator/pane.tsx +277 -107
- package/src/plugins/builtin/options-calculator/surface.test.ts +149 -0
- package/src/plugins/builtin/options-calculator/surface.ts +197 -0
- package/src/plugins/builtin/options-scenario/charts.tsx +38 -0
- package/src/plugins/builtin/options-scenario/client.test.ts +143 -0
- package/src/plugins/builtin/options-scenario/client.ts +239 -0
- package/src/plugins/builtin/options-scenario/editor.tsx +139 -0
- package/src/plugins/builtin/options-scenario/evidence.test.ts +34 -0
- package/src/plugins/builtin/options-scenario/evidence.ts +68 -0
- package/src/plugins/builtin/options-scenario/headless.ts +81 -0
- package/src/plugins/builtin/options-scenario/index.tsx +28 -0
- package/src/plugins/builtin/options-scenario/live.test.ts +34 -0
- package/src/plugins/builtin/options-scenario/live.ts +50 -0
- package/src/plugins/builtin/options-scenario/model.test.ts +222 -0
- package/src/plugins/builtin/options-scenario/model.ts +319 -0
- package/src/plugins/builtin/options-scenario/pane.test.tsx +195 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +351 -0
- package/src/plugins/builtin/options-scenario/state.test.ts +62 -0
- package/src/plugins/builtin/options-scenario/state.ts +71 -0
- package/src/plugins/builtin/plugin-marketplace/model.test.ts +74 -0
- package/src/plugins/builtin/plugin-marketplace/model.ts +45 -8
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +129 -53
- package/src/plugins/builtin/plugin-marketplace/store.ts +8 -0
- package/src/plugins/builtin/portfolio-list/account-metrics.test.ts +128 -2
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +127 -5
- package/src/plugins/builtin/portfolio-list/cell-version.test.ts +89 -0
- package/src/plugins/builtin/portfolio-list/cell-version.ts +48 -0
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +31 -28
- package/src/plugins/builtin/portfolio-list/cli/render.ts +14 -5
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +17 -22
- package/src/plugins/builtin/portfolio-list/column-values.ts +66 -41
- package/src/plugins/builtin/portfolio-list/grid.tsx +129 -42
- package/src/plugins/builtin/portfolio-list/header.tsx +23 -105
- package/src/plugins/builtin/portfolio-list/index.test.ts +28 -31
- package/src/plugins/builtin/portfolio-list/index.tsx +0 -3
- package/src/plugins/builtin/portfolio-list/live-valuation.test.ts +94 -0
- package/src/plugins/builtin/portfolio-list/live-valuation.ts +148 -0
- package/src/plugins/builtin/portfolio-list/metrics.test.ts +32 -4
- package/src/plugins/builtin/portfolio-list/pane/data.ts +6 -21
- package/src/plugins/builtin/portfolio-list/pane/index.test.tsx +65 -10
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +193 -113
- package/src/plugins/builtin/portfolio-list/pane/streaming.ts +140 -109
- package/src/plugins/builtin/portfolio-list/position-cost-integrity.test.ts +1 -1
- package/src/plugins/builtin/portfolio-list/position-metrics.ts +50 -3
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +9 -1
- package/src/plugins/builtin/portfolio-list/row-actions.ts +8 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +140 -190
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.test.tsx +90 -0
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +115 -0
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +40 -1
- package/src/plugins/builtin/portfolio-list/table.tsx +81 -33
- package/src/plugins/builtin/portfolio-list/use-column-clock.ts +41 -0
- package/src/plugins/builtin/portfolio-list/use-throttled-memo.ts +59 -0
- package/src/plugins/builtin/rate-path/client.ts +60 -0
- package/src/plugins/builtin/rate-path/headless.ts +59 -0
- package/src/plugins/builtin/rate-path/index.tsx +18 -0
- package/src/plugins/builtin/rate-path/model.test.ts +50 -0
- package/src/plugins/builtin/rate-path/model.ts +70 -0
- package/src/plugins/builtin/rate-path/pane.tsx +149 -0
- package/src/plugins/builtin/realized-vol/chart-model.test.ts +24 -0
- package/src/plugins/builtin/realized-vol/chart-model.ts +46 -0
- package/src/plugins/builtin/realized-vol/charts.tsx +38 -0
- package/src/plugins/builtin/realized-vol/client.test.ts +186 -0
- package/src/plugins/builtin/realized-vol/client.ts +118 -0
- package/src/plugins/builtin/realized-vol/evidence.ts +78 -0
- package/src/plugins/builtin/realized-vol/headless.ts +74 -0
- package/src/plugins/builtin/realized-vol/index.tsx +34 -0
- package/src/plugins/builtin/realized-vol/model.test.ts +143 -0
- package/src/plugins/builtin/realized-vol/model.ts +130 -0
- package/src/plugins/builtin/realized-vol/pane.tsx +197 -0
- package/src/plugins/builtin/realized-vol/settings.ts +16 -0
- package/src/plugins/builtin/relative-rotation/client.ts +215 -0
- package/src/plugins/builtin/relative-rotation/headless.ts +93 -0
- package/src/plugins/builtin/relative-rotation/index.tsx +88 -0
- package/src/plugins/builtin/relative-rotation/model.test.ts +194 -0
- package/src/plugins/builtin/relative-rotation/model.ts +325 -0
- package/src/plugins/builtin/relative-rotation/pane.tsx +404 -0
- package/src/plugins/builtin/research/analyst-model.test.ts +91 -2
- package/src/plugins/builtin/research/analyst-model.ts +246 -28
- package/src/plugins/builtin/research/analyst-pane.test.tsx +56 -14
- package/src/plugins/builtin/research/analyst-pane.tsx +198 -48
- package/src/plugins/builtin/research/corporate-actions-pane.test.tsx +18 -9
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +204 -110
- package/src/plugins/builtin/research/equity-diagnostic-pane.test.tsx +7 -4
- package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +149 -113
- package/src/plugins/builtin/research/event-model.test.ts +31 -3
- package/src/plugins/builtin/research/event-model.ts +76 -13
- package/src/plugins/builtin/research/headless.test.ts +1 -1
- package/src/plugins/builtin/research/headless.ts +1 -1
- package/src/plugins/builtin/research/index.test.ts +57 -47
- package/src/plugins/builtin/research/index.tsx +3 -3
- package/src/plugins/builtin/research/relative-valuation-headless.ts +3 -3
- package/src/plugins/builtin/research/relative-valuation-model.test.ts +49 -0
- package/src/plugins/builtin/research/relative-valuation-model.ts +49 -1
- package/src/plugins/builtin/research/relative-valuation-pane.test.tsx +3 -2
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +76 -25
- package/src/plugins/builtin/research-search/document-view.tsx +22 -1
- package/src/plugins/builtin/research-search/pane.test.tsx +28 -4
- package/src/plugins/builtin/research-search/pane.tsx +152 -89
- package/src/plugins/builtin/research-search/saved-view.tsx +9 -5
- package/src/plugins/builtin/risk-factors/data.test.ts +3 -0
- package/src/plugins/builtin/risk-factors/data.ts +3 -1
- package/src/plugins/builtin/risk-factors/index.tsx +5 -3
- package/src/plugins/builtin/risk-factors/pane.test.tsx +4 -3
- package/src/plugins/builtin/risk-factors/pane.tsx +91 -33
- package/src/plugins/builtin/scanner/denied.tsx +11 -12
- package/src/plugins/builtin/scanner/feed.ts +25 -9
- package/src/plugins/builtin/scanner/flow-history.test.tsx +138 -0
- package/src/plugins/builtin/scanner/flow-history.ts +109 -0
- package/src/plugins/builtin/scanner/flow-model.test.ts +86 -1
- package/src/plugins/builtin/scanner/flow-model.ts +114 -3
- package/src/plugins/builtin/scanner/flow-pane.test.tsx +159 -0
- package/src/plugins/builtin/scanner/flow-pane.tsx +104 -107
- package/src/plugins/builtin/scanner/headless.test.ts +64 -2
- package/src/plugins/builtin/scanner/headless.ts +163 -12
- package/src/plugins/builtin/scanner/hilo-bars.tsx +17 -30
- package/src/plugins/builtin/scanner/hilo-model.ts +6 -0
- package/src/plugins/builtin/scanner/hilo-pane.tsx +62 -20
- package/src/plugins/builtin/scanner/index.ts +5 -2
- package/src/plugins/builtin/sec/filing-display.tsx +1 -1
- package/src/plugins/builtin/sec/index.tsx +18 -10
- package/src/plugins/builtin/sec/model.ts +2 -1
- package/src/plugins/builtin/sectors/client.test.ts +17 -0
- package/src/plugins/builtin/sectors/client.ts +29 -10
- package/src/plugins/builtin/sectors/index.tsx +119 -37
- package/src/plugins/builtin/sectors/sector-model.test.ts +62 -2
- package/src/plugins/builtin/sectors/sector-model.ts +149 -5
- package/src/plugins/builtin/shared/auto-refresh.test.tsx +95 -0
- package/src/plugins/builtin/shared/auto-refresh.ts +67 -21
- package/src/plugins/builtin/shared/cloud-upgrade.ts +21 -22
- package/src/plugins/builtin/shared/futures-session.ts +34 -0
- package/src/plugins/builtin/shared/mine-tickers.ts +19 -0
- package/src/plugins/builtin/shared/research-cloud-session.test.tsx +2 -2
- package/src/plugins/builtin/shared/research-cloud-session.ts +3 -1
- package/src/plugins/builtin/shared/screener-live-quotes.test.ts +7 -0
- package/src/plugins/builtin/shared/screener-live-quotes.ts +30 -15
- package/src/plugins/builtin/shared/table-pane.ts +3 -1
- package/src/plugins/builtin/shared/ticker-choice.tsx +34 -0
- package/src/plugins/builtin/shared/ticker-request.test.ts +18 -0
- package/src/plugins/builtin/shared/ticker-request.test.tsx +3 -3
- package/src/plugins/builtin/shared/ticker-request.ts +19 -2
- package/src/plugins/builtin/shared/ticker-surface.ts +3 -0
- package/src/plugins/builtin/shared/use-quote-board.test.tsx +50 -3
- package/src/plugins/builtin/shared/use-quote-board.ts +233 -38
- package/src/plugins/builtin/shared/volatility/index.ts +3 -0
- package/src/plugins/builtin/shared/volatility/live-session.test.ts +91 -0
- package/src/plugins/builtin/shared/volatility/live-session.ts +151 -0
- package/src/plugins/builtin/shared/volatility/options.test.ts +127 -0
- package/src/plugins/builtin/shared/volatility/options.ts +253 -0
- package/src/plugins/builtin/shared/volatility/realized.test.ts +201 -0
- package/src/plugins/builtin/shared/volatility/realized.ts +292 -0
- package/src/plugins/builtin/shared/volatility/smile.test.ts +209 -0
- package/src/plugins/builtin/shared/volatility/smile.ts +413 -0
- package/src/plugins/builtin/short-interest/client.test.ts +9 -1
- package/src/plugins/builtin/short-interest/client.ts +31 -6
- package/src/plugins/builtin/short-interest/headless.ts +15 -5
- package/src/plugins/builtin/short-interest/index.tsx +8 -4
- package/src/plugins/builtin/short-interest/pane.tsx +25 -24
- package/src/plugins/builtin/short-interest/surface.tsx +42 -0
- package/src/plugins/builtin/short-volume/client.ts +94 -0
- package/src/plugins/builtin/short-volume/headless.ts +29 -0
- package/src/plugins/builtin/short-volume/index.tsx +22 -0
- package/src/plugins/builtin/short-volume/model.test.ts +39 -0
- package/src/plugins/builtin/short-volume/model.ts +53 -0
- package/src/plugins/builtin/short-volume/pane.tsx +110 -0
- package/src/plugins/builtin/thirteenf/data.test.ts +20 -0
- package/src/plugins/builtin/thirteenf/data.ts +10 -1
- package/src/plugins/builtin/thirteenf/format.ts +8 -2
- package/src/plugins/builtin/thirteenf/headless.test.ts +35 -1
- package/src/plugins/builtin/thirteenf/headless.ts +74 -6
- package/src/plugins/builtin/thirteenf/index.tsx +12 -1
- package/src/plugins/builtin/thirteenf/model.test.ts +8 -0
- package/src/plugins/builtin/thirteenf/model.ts +25 -14
- package/src/plugins/builtin/thirteenf/overlap-pane.tsx +108 -0
- package/src/plugins/builtin/thirteenf/overlap.test.ts +17 -0
- package/src/plugins/builtin/thirteenf/overlap.ts +20 -0
- package/src/plugins/builtin/thirteenf/pane.test.tsx +119 -2
- package/src/plugins/builtin/thirteenf/pane.tsx +187 -99
- package/src/plugins/builtin/thirteenf/signals-pane.tsx +174 -0
- package/src/plugins/builtin/thirteenf/signals.test.ts +16 -0
- package/src/plugins/builtin/thirteenf/signals.ts +72 -0
- package/src/plugins/builtin/thirteenf/table.ts +8 -2
- package/src/plugins/builtin/thirteenf/types.ts +6 -2
- package/src/plugins/builtin/ticker-detail/chart-tab-switch.test.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.test.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +108 -37
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +6 -2
- package/src/plugins/builtin/ticker-detail/financials/model.test.ts +40 -0
- package/src/plugins/builtin/ticker-detail/financials/model.ts +68 -8
- package/src/plugins/builtin/ticker-detail/financials/pane.tsx +4 -2
- package/src/plugins/builtin/ticker-detail/financials/period-integrity.test.tsx +8 -7
- package/src/plugins/builtin/ticker-detail/financials/schema.ts +4 -6
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +56 -40
- package/src/plugins/builtin/ticker-detail/headless.ts +27 -15
- package/src/plugins/builtin/ticker-detail/index.test.tsx +42 -8
- package/src/plugins/builtin/ticker-detail/index.tsx +4 -1
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +23 -13
- package/src/plugins/builtin/ticker-detail/overview/model.test.ts +5 -5
- package/src/plugins/builtin/ticker-detail/overview/model.ts +24 -16
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +20 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +53 -39
- package/src/plugins/builtin/ticker-detail/pane.tsx +79 -31
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +29 -14
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.test.tsx +12 -6
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +90 -13
- package/src/plugins/builtin/ticker-detail/quote-status.test.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/research-tab-keys.tsx +58 -0
- package/src/plugins/builtin/ticker-detail/settings.ts +6 -2
- package/src/plugins/builtin/ticker-research-plugin.ts +20 -0
- package/src/plugins/builtin/time-sales/client.ts +81 -0
- package/src/plugins/builtin/time-sales/headless.ts +41 -0
- package/src/plugins/builtin/time-sales/index.tsx +17 -0
- package/src/plugins/builtin/time-sales/model.test.ts +67 -0
- package/src/plugins/builtin/time-sales/model.ts +50 -0
- package/src/plugins/builtin/time-sales/pane.tsx +144 -0
- package/src/plugins/builtin/time-sales/snapshot-client.test.ts +31 -0
- package/src/plugins/builtin/time-sales/snapshot-client.ts +28 -0
- package/src/plugins/builtin/time-sales/test-fixture.ts +12 -0
- package/src/plugins/builtin/time-sales/use-tape.test.tsx +115 -0
- package/src/plugins/builtin/time-sales/use-tape.ts +58 -0
- package/src/plugins/builtin/treasury-auctions/client.test.ts +8 -0
- package/src/plugins/builtin/treasury-auctions/client.ts +7 -1
- package/src/plugins/builtin/treasury-auctions/headless.test.ts +1 -1
- package/src/plugins/builtin/treasury-auctions/headless.ts +3 -1
- package/src/plugins/builtin/treasury-auctions/index.tsx +1 -1
- package/src/plugins/builtin/treasury-auctions/model.test.ts +26 -8
- package/src/plugins/builtin/treasury-auctions/model.ts +29 -13
- package/src/plugins/builtin/treasury-auctions/pane.test.tsx +35 -16
- package/src/plugins/builtin/treasury-auctions/pane.tsx +61 -42
- package/src/plugins/builtin/treasury-auctions/types.ts +6 -1
- package/src/plugins/builtin/vol-surface/charts.tsx +113 -0
- package/src/plugins/builtin/vol-surface/client.test.ts +179 -0
- package/src/plugins/builtin/vol-surface/client.ts +254 -0
- package/src/plugins/builtin/vol-surface/evidence.test.ts +73 -0
- package/src/plugins/builtin/vol-surface/evidence.ts +168 -0
- package/src/plugins/builtin/vol-surface/headless.ts +70 -0
- package/src/plugins/builtin/vol-surface/index.tsx +47 -0
- package/src/plugins/builtin/vol-surface/live.test.ts +95 -0
- package/src/plugins/builtin/vol-surface/live.ts +60 -0
- package/src/plugins/builtin/vol-surface/model.test.ts +241 -0
- package/src/plugins/builtin/vol-surface/model.ts +570 -0
- package/src/plugins/builtin/vol-surface/pane.test.tsx +265 -0
- package/src/plugins/builtin/vol-surface/pane.tsx +484 -0
- package/src/plugins/builtin/vol-surface/raster.test.ts +28 -0
- package/src/plugins/builtin/vol-surface/raster.ts +121 -0
- package/src/plugins/builtin/vol-surface/stored.test.ts +62 -0
- package/src/plugins/builtin/vol-surface/stored.ts +83 -0
- package/src/plugins/builtin/vol-surface/surface.tsx +30 -0
- package/src/plugins/builtin/volatility/chart-model.test.ts +61 -0
- package/src/plugins/builtin/volatility/chart-model.ts +126 -0
- package/src/plugins/builtin/volatility/charts.tsx +57 -0
- package/src/plugins/builtin/volatility/client.test.ts +202 -0
- package/src/plugins/builtin/volatility/client.ts +171 -79
- package/src/plugins/builtin/volatility/evidence.test.ts +49 -0
- package/src/plugins/builtin/volatility/evidence.ts +129 -0
- package/src/plugins/builtin/volatility/headless.test.ts +43 -26
- package/src/plugins/builtin/volatility/headless.ts +54 -62
- package/src/plugins/builtin/volatility/index.tsx +16 -157
- package/src/plugins/builtin/volatility/model.test.ts +136 -54
- package/src/plugins/builtin/volatility/model.ts +294 -79
- package/src/plugins/builtin/volatility/pane.tsx +202 -0
- package/src/plugins/builtin/world-indices/headless.ts +11 -2
- package/src/plugins/builtin/world-indices/index.tsx +23 -10
- package/src/plugins/builtin/world-indices/table.tsx +18 -7
- package/src/plugins/builtin/world-venue-map/map.tsx +52 -12
- package/src/plugins/builtin/world-venue-map/pane.tsx +75 -43
- package/src/plugins/builtin/yield-curve/chart.test.ts +19 -28
- package/src/plugins/builtin/yield-curve/chart.ts +10 -32
- package/src/plugins/builtin/yield-curve/headless.test.ts +2 -2
- package/src/plugins/builtin/yield-curve/history.test.ts +4 -4
- package/src/plugins/builtin/yield-curve/index.tsx +71 -101
- package/src/plugins/builtin/yield-curve/pane.test.tsx +23 -20
- package/src/plugins/builtin/yield-curve/treasury-data.ts +3 -2
- package/src/plugins/bundle.ts +8 -1
- package/src/plugins/catalog-backend.ts +12 -2
- package/src/plugins/catalog-browser.ts +36 -0
- package/src/plugins/catalog-manifest.ts +1 -1
- package/src/plugins/loader.ts +3 -3
- package/src/plugins/manager-node.ts +4 -0
- package/src/plugins/ownership.ts +3 -12
- package/src/plugins/registry/index.ts +3 -1
- package/src/plugins/registry/pane-settings.test.ts +45 -0
- package/src/public/pane-hooks.ts +8 -0
- package/src/public/react.ts +23 -4
- package/src/react/async-resource.test.tsx +18 -0
- package/src/react/async-resource.ts +5 -2
- package/src/react/input.test.ts +30 -0
- package/src/react/input.ts +11 -2
- package/src/renderers/browser/app-services.ts +2 -2
- package/src/renderers/browser/main.tsx +2 -0
- package/src/renderers/electrobun/bun/application-menu/click.test.ts +22 -26
- package/src/renderers/electrobun/bun/application-menu/click.ts +1 -0
- package/src/renderers/electrobun/bun/application-menu/index.ts +14 -7
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/capability-bridge.test.ts +48 -0
- package/src/renderers/electrobun/bun/desktop/capability-bridge.ts +28 -13
- package/src/renderers/electrobun/bun/desktop/http-fetch.ts +33 -21
- package/src/renderers/electrobun/bun/desktop/http-stream.test.ts +200 -0
- package/src/renderers/electrobun/bun/desktop/http-stream.ts +189 -0
- package/src/renderers/electrobun/bun/desktop/initialization.ts +3 -4
- package/src/renderers/electrobun/bun/desktop/workspace/index.test.ts +37 -16
- package/src/renderers/electrobun/bun/desktop/workspace/index.ts +51 -12
- package/src/renderers/electrobun/bun/external-plugins.ts +6 -0
- package/src/renderers/electrobun/bun/index.ts +24 -1
- package/src/renderers/electrobun/shared/protocol.ts +46 -0
- package/src/renderers/electrobun/shared/quote-event-batch.ts +103 -0
- package/src/renderers/electrobun/view/app-services.ts +5 -2
- package/src/renderers/electrobun/view/backend-rpc.ts +19 -0
- package/src/renderers/electrobun/view/broker-remote-client.ts +4 -3
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +47 -26
- package/src/renderers/electrobun/view/cli-pane-shot-frame.test.tsx +18 -9
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +4 -3
- package/src/renderers/electrobun/view/data-frames.ts +24 -0
- package/src/renderers/electrobun/view/data-table/dom.ts +10 -0
- package/src/renderers/electrobun/view/data-table/horizontal-navigation.test.tsx +5 -0
- package/src/renderers/electrobun/view/data-table/index.test.tsx +4 -2
- package/src/renderers/electrobun/view/data-table/index.tsx +79 -26
- package/src/renderers/electrobun/view/data-table/row.tsx +67 -34
- package/src/renderers/electrobun/view/desktop/controls.tsx +123 -89
- package/src/renderers/electrobun/view/desktop/icons.tsx +172 -0
- package/src/renderers/electrobun/view/desktop/list-view.test.tsx +37 -0
- package/src/renderers/electrobun/view/desktop/list-view.tsx +26 -3
- package/src/renderers/electrobun/view/desktop/menu.tsx +106 -0
- package/src/renderers/electrobun/view/desktop/popover.tsx +17 -3
- package/src/renderers/electrobun/view/desktop/query-bar.tsx +317 -0
- package/src/renderers/electrobun/view/desktop/select-field.tsx +150 -0
- package/src/renderers/electrobun/view/desktop/stack-header.ts +19 -0
- package/src/renderers/electrobun/view/dialog-host.tsx +89 -49
- package/src/renderers/electrobun/view/dialog-stack.test.tsx +73 -0
- package/src/renderers/electrobun/view/dom-ui-host.tsx +11 -0
- package/src/renderers/electrobun/view/history-metadata-rpc.test.ts +62 -0
- package/src/renderers/electrobun/view/host/focus-scope.ts +40 -1
- package/src/renderers/electrobun/view/host/input.tsx +10 -0
- package/src/renderers/electrobun/view/host/media-surface.tsx +29 -0
- package/src/renderers/electrobun/view/host/overflow-fade.ts +76 -0
- package/src/renderers/electrobun/view/host/scroll-box.desktop.test.tsx +20 -0
- package/src/renderers/electrobun/view/host/scroll-box.tsx +30 -1
- package/src/renderers/electrobun/view/host/style.test.ts +15 -0
- package/src/renderers/electrobun/view/host/style.ts +5 -1
- package/src/renderers/electrobun/view/host/surface-3d.test.ts +33 -0
- package/src/renderers/electrobun/view/host/surface-3d.tsx +691 -0
- package/src/renderers/electrobun/view/host/tabs.tsx +116 -34
- package/src/renderers/electrobun/view/host/top-surface.ts +119 -0
- package/src/renderers/electrobun/view/http-fetch.ts +127 -4
- package/src/renderers/electrobun/view/input-host.tsx +27 -1
- package/src/renderers/electrobun/view/key-event.ts +52 -1
- package/src/renderers/electrobun/view/main.tsx +3 -0
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +22 -33
- package/src/renderers/electrobun/view/remote/backend-quote-subscription.test.ts +87 -0
- package/src/renderers/electrobun/view/remote/backend-quote-subscription.ts +131 -0
- package/src/renderers/electrobun/view/rpc-codec.test.ts +48 -0
- package/src/renderers/electrobun/view/rpc-codec.ts +12 -0
- package/src/renderers/electrobun/view/styles.css +504 -58
- package/src/renderers/electrobun/view/test-utils.tsx +17 -8
- package/src/renderers/electrobun/view/toast-host.test.tsx +1 -1
- package/src/renderers/electrobun/view/toast-host.tsx +97 -78
- package/src/renderers/opentui/host.tsx +30 -15
- package/src/renderers/opentui/start.tsx +2 -5
- package/src/renderers/opentui/terminal-media.test.ts +78 -7
- package/src/renderers/opentui/terminal-media.ts +123 -31
- package/src/renderers/opentui/test-utils.tsx +0 -6
- package/src/renderers/opentui/toast-host.tsx +30 -4
- package/src/sources/asml-earnings.test.ts +197 -0
- package/src/sources/fixtures/sec-operating-expenses.json +163 -0
- package/src/sources/fixtures/shop-20251231-quarterly-summary.html +1 -0
- package/src/sources/fixtures/shop-20260630-quarterly-summary.html +1 -0
- package/src/sources/fixtures/shop-operating-provider.json +141 -0
- package/src/sources/fixtures/shop-quarterly-summary-provenance.json +24 -0
- package/src/sources/fixtures/shop-submissions-20260922.json +31 -0
- package/src/sources/gloomberb-cloud/history-retention.test.ts +207 -0
- package/src/sources/gloomberb-cloud/history-session.test.ts +76 -0
- package/src/sources/gloomberb-cloud/index.ts +91 -6
- package/src/sources/gloomberb-cloud/news.ts +4 -1
- package/src/sources/gloomberb-cloud/normalizers.test.ts +76 -1
- package/src/sources/gloomberb-cloud/normalizers.ts +58 -45
- package/src/sources/history-result.ts +76 -0
- package/src/sources/history-retention.ts +152 -0
- package/src/sources/provider-router/asml-earnings-cache.test.ts +158 -0
- package/src/sources/provider-router/cache.test.ts +2 -2
- package/src/sources/provider-router/cache.ts +59 -2
- package/src/sources/provider-router/cached-listing-identity.test.ts +159 -0
- package/src/sources/provider-router/cached-routes.test.ts +20 -0
- package/src/sources/provider-router/financials.test.ts +50 -0
- package/src/sources/provider-router/financials.ts +34 -6
- package/src/sources/provider-router/fixtures/shop-nasdaqgs.json +137 -0
- package/src/sources/provider-router/history-boundary-cache.test.ts +1 -1
- package/src/sources/provider-router/history-calendar-cache.test.ts +301 -0
- package/src/sources/provider-router/history-exact-window.test.ts +187 -0
- package/src/sources/provider-router/history-retention.test.ts +239 -0
- package/src/sources/provider-router/history-session.test.ts +138 -0
- package/src/sources/provider-router/history.test.ts +67 -2
- package/src/sources/provider-router/history.ts +399 -110
- package/src/sources/provider-router/index.ts +58 -10
- package/src/sources/provider-router/nasdaqgs-listing.test.ts +78 -0
- package/src/sources/provider-router/operating-result-cache.test.ts +44 -0
- package/src/sources/provider-router/operating-result-retry.test.ts +221 -0
- package/src/sources/provider-router/primary.ts +2 -0
- package/src/sources/provider-router/quote-route.test.ts +255 -0
- package/src/sources/provider-router/quote-route.ts +68 -0
- package/src/sources/provider-router/realtime-access.test.ts +22 -0
- package/src/sources/provider-router/realtime-access.ts +83 -0
- package/src/sources/provider-router/search.ts +4 -1
- package/src/sources/provider-router/statement-observations.test.ts +36 -0
- package/src/sources/provider-router/streaming.ts +314 -55
- package/src/sources/provider-router/valuation-retractions.test.ts +2 -2
- package/src/sources/reported-operating-results.test.ts +286 -0
- package/src/sources/sec-bank-revenue.test.ts +79 -0
- package/src/sources/sec-edgar.ts +193 -7
- package/src/sources/sec-operating-expenses.test.ts +42 -0
- package/src/sources/yahoo-finance/chart-period.ts +138 -0
- package/src/sources/yahoo-finance/financials.ts +9 -0
- package/src/sources/yahoo-finance/fixtures/aapl-final-observation.json +20 -0
- package/src/sources/yahoo-finance/history-session.test.ts +120 -0
- package/src/sources/yahoo-finance/history.ts +85 -6
- package/src/sources/yahoo-finance/mappers.test.ts +54 -1
- package/src/sources/yahoo-finance/mappers.ts +113 -15
- package/src/sources/yahoo-finance/names.ts +28 -0
- package/src/sources/yahoo-finance/options.test.ts +17 -7
- package/src/sources/yahoo-finance/options.ts +14 -2
- package/src/sources/yahoo-finance/quote-summary.ts +5 -4
- package/src/sources/yahoo-finance/requests.test.ts +83 -1
- package/src/sources/yahoo-finance/requests.ts +62 -27
- package/src/sources/yahoo-finance/snapshots.test.ts +86 -1
- package/src/sources/yahoo-finance/snapshots.ts +94 -21
- package/src/sources/yahoo-finance/types.ts +4 -0
- package/src/sources/yahoo-finance.test.ts +16 -0
- package/src/sources/yahoo-finance.ts +49 -12
- package/src/state/app/activity.test.ts +14 -1
- package/src/state/app/activity.ts +98 -1
- package/src/state/app/bootstrap.test.ts +42 -0
- package/src/state/app/bootstrap.ts +8 -0
- package/src/state/app/context/index.tsx +14 -1
- package/src/state/hooks/inline-tickers.test.tsx +96 -2
- package/src/state/hooks/inline-tickers.ts +109 -8
- package/src/state/hooks/live-ticker-financials.test.tsx +120 -0
- package/src/state/hooks/live-ticker-financials.ts +171 -0
- package/src/state/hooks/pane-ticker.ts +58 -0
- package/src/state/hooks/quote-streaming.test.tsx +99 -0
- package/src/state/hooks/quote-streaming.ts +52 -14
- package/src/state/pane-scroll-registry.tsx +5 -1
- package/src/sync/controller.test.ts +88 -0
- package/src/sync/core-contributors.test.ts +58 -28
- package/src/sync/core-contributors.ts +49 -17
- package/src/test-support/fixtures/asml-earnings.json +993 -0
- package/src/theme/font-scale.ts +11 -0
- package/src/tickers/instrument-kind.test.ts +21 -0
- package/src/tickers/instrument-kind.ts +99 -0
- package/src/tickers/instrument-label.test.ts +13 -0
- package/src/tickers/instrument-label.ts +3 -2
- package/src/tickers/search/index.test.ts +108 -0
- package/src/tickers/search/index.ts +38 -10
- package/src/tickers/search/ranking.ts +105 -9
- package/src/tickers/search/types.ts +1 -0
- package/src/tickers/search-issuer-grouping.test.ts +74 -0
- package/src/tickers/search-listing-ranking.test.tsx +122 -0
- package/src/time-series/alignment.ts +14 -1
- package/src/time-series/calendar-month-end-resolution.test.ts +106 -0
- package/src/time-series/calendar-window-resolution.test.ts +133 -0
- package/src/time-series/chart-data.test.ts +40 -0
- package/src/time-series/chart-data.ts +91 -31
- package/src/time-series/date-window.test.ts +113 -0
- package/src/time-series/date-window.ts +11 -14
- package/src/time-series/fixtures/quote-store.ts +55 -0
- package/src/time-series/fundamentals.ts +71 -5
- package/src/time-series/history-retention.test.ts +141 -0
- package/src/time-series/history-session-cache.test.ts +250 -0
- package/src/time-series/legacy-contract-live.test.ts +7 -8
- package/src/time-series/live-bars.test.ts +290 -0
- package/src/time-series/live-bars.ts +411 -0
- package/src/time-series/live-quotes.test.ts +79 -93
- package/src/time-series/live-quotes.ts +138 -78
- package/src/time-series/market.ts +14 -0
- package/src/time-series/parsed-history-cache.ts +25 -9
- package/src/time-series/parsed-history-identity.test.tsx +142 -0
- package/src/time-series/price-comparison.ts +1 -1
- package/src/time-series/realized-vol-study.test.ts +189 -0
- package/src/time-series/resolution.ts +28 -0
- package/src/time-series/resolve.test.ts +175 -1
- package/src/time-series/resolve.ts +613 -155
- package/src/time-series/seed-cadence.test.tsx +219 -0
- package/src/time-series/served-cadence-consumers.test.ts +52 -0
- package/src/time-series/session-history.ts +26 -31
- package/src/time-series/spec-studies.test.ts +6 -0
- package/src/time-series/spec.ts +17 -4
- package/src/time-series/studies.ts +94 -7
- package/src/time-series/transforms.ts +2 -15
- package/src/time-series/types.ts +8 -1
- package/src/time-series/use-chart-resolution.test.tsx +72 -7
- package/src/time-series/use-chart-resolution.ts +321 -104
- package/src/time-series/valuation-live-status.test.ts +17 -16
- package/src/time-series/valuation-price.test.ts +12 -9
- package/src/types/broker.ts +11 -0
- package/src/types/config.ts +22 -0
- package/src/types/data-provider.ts +28 -0
- package/src/types/financials.ts +83 -1
- package/src/types/headless.ts +4 -0
- package/src/types/instrument.ts +20 -0
- package/src/types/plugin.ts +27 -1
- package/src/types/price-history.ts +27 -0
- package/src/ui/context-menu.tsx +28 -9
- package/src/ui/dialog.tsx +5 -0
- package/src/ui/host.tsx +161 -5
- package/src/ui/index.tsx +3 -0
- package/src/ui/toast.tsx +4 -0
- package/src/updater.test.ts +46 -0
- package/src/updater.ts +42 -5
- package/src/utils/calendar-date.test.ts +18 -0
- package/src/utils/calendar-date.ts +11 -0
- package/src/utils/cli-output.test.ts +43 -0
- package/src/utils/cli-output.ts +263 -19
- package/src/utils/dom-screenshot.ts +82 -7
- package/src/utils/double-escape-close.ts +30 -0
- package/src/utils/earnings-result.ts +35 -0
- package/src/utils/exchanges.ts +3 -0
- package/src/utils/financial-statements.ts +20 -3
- package/src/utils/format.ts +29 -7
- package/src/utils/fx-status.test.ts +2 -2
- package/src/utils/fx-status.ts +1 -5
- package/src/utils/main-thread-stall.test.ts +59 -0
- package/src/utils/main-thread-stall.ts +64 -0
- package/src/utils/object-version.ts +17 -0
- package/src/utils/operating-result-aggregation.ts +106 -0
- package/src/utils/operating-result-consumers.test.ts +212 -0
- package/src/utils/operating-result.ts +100 -0
- package/src/utils/perf-marks.ts +16 -0
- package/src/utils/price-history.test.ts +121 -1
- package/src/utils/price-history.ts +120 -3
- package/src/utils/reported-earnings-result.ts +336 -0
- package/src/utils/reported-operating-result.ts +271 -0
- package/src/utils/sec.test.ts +10 -1
- package/src/utils/sec.ts +56 -0
- package/src/utils/shop-operating-table.ts +230 -0
- package/src/utils/shortcut-labels.ts +0 -14
- package/src/utils/statement-observations.ts +13 -5
- package/src/components/ui/native-select.tsx +0 -141
- package/src/market-data/quotes/cadence.ts +0 -2
- package/src/plugins/builtin/correlation/relationship/controls.tsx +0 -29
- package/src/plugins/builtin/research-search/filter-bar.tsx +0 -62
- package/src/plugins/builtin/volatility/index.test.tsx +0 -107
|
@@ -17,14 +17,32 @@ import {
|
|
|
17
17
|
type OnboardingStage,
|
|
18
18
|
} from "../../types/config";
|
|
19
19
|
import { resolveBrokerConfigFields, type BrokerConfigField } from "../../types/broker";
|
|
20
|
-
import { useShortcut, useViewport } from "../../react/input";
|
|
20
|
+
import { useShortcut, useViewport, type KeyEventLike } from "../../react/input";
|
|
21
|
+
import {
|
|
22
|
+
matchKeybinding,
|
|
23
|
+
matchesKeybindingAction,
|
|
24
|
+
useKeybindings,
|
|
25
|
+
type ResolvedKeybindings,
|
|
26
|
+
} from "../../app/keybindings";
|
|
21
27
|
import {
|
|
22
28
|
useAppDispatch,
|
|
23
29
|
useAppSelector,
|
|
24
30
|
useAppStateRef,
|
|
25
31
|
} from "../../state/app/context";
|
|
26
32
|
import { useAppActive } from "../../state/app/activity";
|
|
27
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
Box,
|
|
35
|
+
Text,
|
|
36
|
+
TextAttributes,
|
|
37
|
+
useActionShortcut,
|
|
38
|
+
useCommandBarShortcut,
|
|
39
|
+
useRendererHost,
|
|
40
|
+
useUiHost,
|
|
41
|
+
type InputRenderable,
|
|
42
|
+
} from "../../ui";
|
|
43
|
+
import { useDialogState } from "../../ui/dialog";
|
|
44
|
+
import { isPlainKey } from "../../utils/keyboard";
|
|
45
|
+
import { isCopyShortcut, isPasteShortcut } from "../../utils/selection-clipboard";
|
|
28
46
|
import { useThemeColors } from "../../theme/theme-context";
|
|
29
47
|
import { t, tf } from "../../i18n";
|
|
30
48
|
import { useAppLanguage } from "../../i18n/react";
|
|
@@ -39,6 +57,8 @@ import { useCloudUpgradeAction } from "../../plugins/builtin/shared/cloud-upgrad
|
|
|
39
57
|
import { usePlanAccess } from "../../plugins/builtin/shared/plan-access";
|
|
40
58
|
import { Button, SegmentedControl, type ListViewItem } from "../ui";
|
|
41
59
|
import { AccountStep, PortfolioStep, type PortfolioSub } from "./onboarding-steps";
|
|
60
|
+
import { BROKER_GUIDE_KEY, brokerSetupGuideUrl } from "./portfolio-step/broker-setup-panel";
|
|
61
|
+
import { REMOVE_POSITION_KEY } from "./portfolio-step/positions-panel";
|
|
42
62
|
import {
|
|
43
63
|
ONBOARDING_DESKTOP,
|
|
44
64
|
OnboardingActions,
|
|
@@ -80,11 +100,50 @@ const STAGE_ACTIVITY: Partial<Record<OnboardingStage, ResearchActivity>> = {
|
|
|
80
100
|
upgrade: "onboarding_pro_viewed",
|
|
81
101
|
};
|
|
82
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Card keys, shown on the buttons they press. Letters only act while no field
|
|
105
|
+
* is being typed in (Esc leaves the field first); F10, the old skip key, still
|
|
106
|
+
* works everywhere.
|
|
107
|
+
*/
|
|
108
|
+
const SKIP_SETUP_KEY = "s";
|
|
109
|
+
const KEEP_FREE_KEY = "f";
|
|
110
|
+
const CONNECT_BROKER_KEY = "b";
|
|
111
|
+
const BROWSER_SIGN_IN_KEY = "b";
|
|
112
|
+
|
|
113
|
+
/** Digits jump straight to a section the header would let you click. */
|
|
114
|
+
const SECTION_DIGITS: Record<string, OnboardingSectionId> = { "1": "portfolio", "2": "cloud", "3": "pro" };
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Whether a key the onboarding card did not use may still reach the app
|
|
118
|
+
* behind it. Toasts float above the card, copy and paste work anywhere, and
|
|
119
|
+
* Help is the way out (the card steps aside while Help has focus). A field
|
|
120
|
+
* keeps its typing and editing keys; of the chords that reach app shortcuts
|
|
121
|
+
* while typing, only the ones the app binds are held back. Everything else
|
|
122
|
+
* would act on a pane hidden behind the scrim.
|
|
123
|
+
*/
|
|
124
|
+
function keyReachesPastOnboardingModal(event: KeyEventLike, keybindings: ResolvedKeybindings): boolean {
|
|
125
|
+
if (isCopyShortcut(event) || isPasteShortcut(event)) return true;
|
|
126
|
+
const match = matchKeybinding(keybindings, event);
|
|
127
|
+
const action = match?.kind === "action" ? match.id : null;
|
|
128
|
+
if (action === "notification-action" || action === "notification-dismiss") return true;
|
|
129
|
+
if (event.targetEditable) {
|
|
130
|
+
const chord = event.ctrl || event.meta || event.super === true;
|
|
131
|
+
return !chord || !match;
|
|
132
|
+
}
|
|
133
|
+
return action === "help";
|
|
134
|
+
}
|
|
135
|
+
|
|
83
136
|
export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComplete }: OnboardingWizardProps) {
|
|
84
137
|
const language = useAppLanguage();
|
|
85
138
|
const colors = useThemeColors();
|
|
86
139
|
const desktop = useUiHost().kind === "desktop-web";
|
|
140
|
+
const rendererHost = useRendererHost();
|
|
87
141
|
const commandBarShortcut = useCommandBarShortcut();
|
|
142
|
+
const notificationActionShortcut = useActionShortcut("notification-action");
|
|
143
|
+
const notificationDismissShortcut = useActionShortcut("notification-dismiss");
|
|
144
|
+
const keybindings = useKeybindings();
|
|
145
|
+
const dialogOpen = useDialogState((dialog) => dialog.isOpen);
|
|
146
|
+
const commandBarOpen = useAppSelector((state) => state.commandBarOpen);
|
|
88
147
|
const { height: viewportHeight } = useViewport();
|
|
89
148
|
const dispatch = useAppDispatch();
|
|
90
149
|
const stateRef = useAppStateRef();
|
|
@@ -104,6 +163,8 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
104
163
|
const [brokerFieldIdx, setBrokerFieldIdx] = useState(0);
|
|
105
164
|
const [brokerSelectIdx, setBrokerSelectIdx] = useState(0);
|
|
106
165
|
const [editingField, setEditingField] = useState(false);
|
|
166
|
+
/** The added position the keyboard acts on once no field is being typed in. */
|
|
167
|
+
const [positionCursorSymbol, setPositionCursorSymbol] = useState<string | null>(null);
|
|
107
168
|
const inputRef = useRef<InputRenderable>(null);
|
|
108
169
|
const progressSaveQueueRef = useRef<Promise<void>>(Promise.resolve());
|
|
109
170
|
const finishingRef = useRef(false);
|
|
@@ -176,6 +237,13 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
176
237
|
|
|
177
238
|
const positions = useOnboardingPositions({ pluginRegistry, onFieldEditing: setEditingField });
|
|
178
239
|
const positionCount = positions.positions.length;
|
|
240
|
+
// The cursor rests on the newest row until the keyboard moves it; it only
|
|
241
|
+
// shows once the fields let go of the keyboard.
|
|
242
|
+
const cursorMatch = positions.positions.findIndex((row) => row.symbol === positionCursorSymbol);
|
|
243
|
+
const positionCursorIndex = cursorMatch >= 0 ? cursorMatch : positionCount - 1;
|
|
244
|
+
const selectedPositionSymbol = !editingField && positionCursorIndex >= 0
|
|
245
|
+
? positions.positions[positionCursorIndex]!.symbol
|
|
246
|
+
: null;
|
|
179
247
|
|
|
180
248
|
useEffect(() => {
|
|
181
249
|
const activity = STAGE_ACTIVITY[stage];
|
|
@@ -528,6 +596,25 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
528
596
|
setEditingField(false);
|
|
529
597
|
}, [portfolioSub, resetBrokerSync]);
|
|
530
598
|
|
|
599
|
+
const movePositionCursor = useCallback((delta: number) => {
|
|
600
|
+
if (positionCursorIndex < 0) return;
|
|
601
|
+
const next = Math.max(0, Math.min(positionCount - 1, positionCursorIndex + delta));
|
|
602
|
+
setPositionCursorSymbol(positions.positions[next]?.symbol ?? null);
|
|
603
|
+
}, [positionCount, positionCursorIndex, positions.positions]);
|
|
604
|
+
|
|
605
|
+
/** Removes the row under the cursor; the cursor moves to the row that takes its place. */
|
|
606
|
+
const removePositionAtCursor = useCallback(() => {
|
|
607
|
+
if (!selectedPositionSymbol) return;
|
|
608
|
+
const neighbour = positions.positions[positionCursorIndex + 1] ?? positions.positions[positionCursorIndex - 1];
|
|
609
|
+
setPositionCursorSymbol(neighbour?.symbol ?? null);
|
|
610
|
+
void positions.removePosition(selectedPositionSymbol);
|
|
611
|
+
}, [positionCursorIndex, positions, selectedPositionSymbol]);
|
|
612
|
+
|
|
613
|
+
const openBrokerGuide = useCallback(() => {
|
|
614
|
+
const url = selectedBrokerId ? brokerSetupGuideUrl(selectedBrokerId, brokerValues) : null;
|
|
615
|
+
if (url) void rendererHost.openExternal(url).catch(() => {});
|
|
616
|
+
}, [brokerValues, rendererHost, selectedBrokerId]);
|
|
617
|
+
|
|
531
618
|
const submitAccountField = useCallback(() => {
|
|
532
619
|
setEditingField(false);
|
|
533
620
|
account.submitAccountField();
|
|
@@ -601,129 +688,193 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
601
688
|
),
|
|
602
689
|
};
|
|
603
690
|
|
|
691
|
+
const activeSection: OnboardingSectionId = stage === "portfolio"
|
|
692
|
+
? "portfolio"
|
|
693
|
+
: stage === "upgrade" || (stage === "ready" && progress.accountStatus === "signed-in")
|
|
694
|
+
? "pro"
|
|
695
|
+
: "cloud";
|
|
696
|
+
const accountForm = account.accountSub === "signup" || account.accountSub === "login";
|
|
697
|
+
const modalShown = !helpFocused && stage !== "research";
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* The card's keys. The card is modal: whatever it does not use stops here,
|
|
701
|
+
* so nothing reaches the workspace behind the scrim. The scope carries the
|
|
702
|
+
* stage so each step registers afresh and runs ahead of any pane that
|
|
703
|
+
* mounted since (the first-run workspace mounts after the wizard).
|
|
704
|
+
*/
|
|
604
705
|
useShortcut((event) => {
|
|
605
|
-
if (helpFocused) return;
|
|
606
706
|
const name = event.name ?? event.key ?? "";
|
|
607
|
-
const
|
|
608
|
-
const
|
|
609
|
-
const
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
707
|
+
const chord = event.ctrl || event.meta || event.super === true || event.alt;
|
|
708
|
+
const enter = !chord && (name === "enter" || name === "return");
|
|
709
|
+
const escape = !chord && (name === "escape" || name === "backspace");
|
|
710
|
+
const letter = (key: string) => !chord && !event.shift && name === key;
|
|
711
|
+
const tab = !chord && name === "tab";
|
|
712
|
+
const sectionDigit = !chord && !editingField && !event.targetEditable ? SECTION_DIGITS[name] : undefined;
|
|
613
713
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
if (!isBrokerCommitting) {
|
|
714
|
+
const handled = ((): boolean => {
|
|
715
|
+
if (isPlainKey(event, "f10")) {
|
|
716
|
+
if (stage === "portfolio" || isBrokerCommitting) return true;
|
|
618
717
|
if (stage === "upgrade" && !planAccess.hasProAccess) continueFree();
|
|
619
718
|
else void finish(true);
|
|
719
|
+
return true;
|
|
620
720
|
}
|
|
621
|
-
return;
|
|
622
|
-
}
|
|
623
721
|
|
|
624
|
-
|
|
625
|
-
|
|
722
|
+
if (sectionDigit) {
|
|
723
|
+
if (sectionDigit !== activeSection && sectionAvailability[sectionDigit]) goToSection(sectionDigit);
|
|
724
|
+
return true;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if (stage === "portfolio" && portfolioSub === "positions") {
|
|
728
|
+
if (editingField) {
|
|
729
|
+
if (enter) {
|
|
730
|
+
positions.submitField();
|
|
731
|
+
} else if (tab) {
|
|
732
|
+
positions.setFieldIdx((index) => (
|
|
733
|
+
event.shift ? Math.max(0, index - 1) : Math.min(POSITION_FIELDS.length - 1, index + 1)
|
|
734
|
+
));
|
|
735
|
+
} else if (!chord && name === "escape") {
|
|
736
|
+
setEditingField(false);
|
|
737
|
+
} else {
|
|
738
|
+
return false;
|
|
739
|
+
}
|
|
740
|
+
return true;
|
|
741
|
+
}
|
|
626
742
|
if (enter) {
|
|
627
|
-
|
|
628
|
-
positions.
|
|
629
|
-
} else if (
|
|
630
|
-
|
|
631
|
-
positions.
|
|
632
|
-
|
|
633
|
-
)
|
|
634
|
-
} else if (name === "
|
|
635
|
-
|
|
636
|
-
|
|
743
|
+
if (positionCount > 0) continueFromPositions();
|
|
744
|
+
else positions.focusField(0);
|
|
745
|
+
} else if (letter("a") || tab) {
|
|
746
|
+
// Tab from the list goes back into the form, at its far end for Shift+Tab.
|
|
747
|
+
positions.focusField(tab && event.shift ? POSITION_FIELDS.length - 1 : 0);
|
|
748
|
+
} else if (letter(CONNECT_BROKER_KEY) && positionCount > 0) {
|
|
749
|
+
openBrokerConnect();
|
|
750
|
+
} else if (!chord && (name === "up" || name === "k")) {
|
|
751
|
+
movePositionCursor(-1);
|
|
752
|
+
} else if (!chord && (name === "down" || name === "j")) {
|
|
753
|
+
movePositionCursor(1);
|
|
754
|
+
} else if (letter(REMOVE_POSITION_KEY) || (!chord && name === "delete")) {
|
|
755
|
+
removePositionAtCursor();
|
|
756
|
+
} else {
|
|
757
|
+
return false;
|
|
637
758
|
}
|
|
638
|
-
return;
|
|
759
|
+
return true;
|
|
639
760
|
}
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
if (
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
761
|
+
|
|
762
|
+
if (editingField && (stage === "portfolio" || (stage === "account" && accountForm))) {
|
|
763
|
+
if (enter) {
|
|
764
|
+
if (stage === "portfolio") submitBrokerField();
|
|
765
|
+
else submitAccountField();
|
|
766
|
+
} else if (!chord && name === "escape") {
|
|
767
|
+
setEditingField(false);
|
|
768
|
+
if (stage === "portfolio") backPortfolio();
|
|
769
|
+
} else if (stage === "account" && tab) {
|
|
770
|
+
account.focusAccountField(event.shift ? 0 : 1);
|
|
771
|
+
} else {
|
|
772
|
+
return false;
|
|
773
|
+
}
|
|
774
|
+
return true;
|
|
650
775
|
}
|
|
651
|
-
return;
|
|
652
|
-
}
|
|
653
776
|
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
if (
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
if (
|
|
777
|
+
if (stage === "portfolio") {
|
|
778
|
+
if (enter) {
|
|
779
|
+
continuePortfolio();
|
|
780
|
+
} else if (escape) {
|
|
781
|
+
backPortfolio();
|
|
782
|
+
} else if (!chord && (name === "up" || name === "k")) {
|
|
783
|
+
if (portfolioSub === "choose") setPortfolioOptionIdx((index) => Math.max(0, index - 1));
|
|
784
|
+
else if (activeBrokerFields[brokerFieldIdx]?.type === "select") setBrokerSelectIdx((index) => Math.max(0, index - 1));
|
|
785
|
+
} else if (!chord && (name === "down" || name === "j")) {
|
|
786
|
+
if (portfolioSub === "choose") setPortfolioOptionIdx((index) => Math.min(brokerChoices.length - 1, index + 1));
|
|
787
|
+
else if (activeBrokerFields[brokerFieldIdx]?.type === "select") {
|
|
788
|
+
const optionCount = activeBrokerFields[brokerFieldIdx]?.options?.length ?? 0;
|
|
789
|
+
setBrokerSelectIdx((index) => Math.min(Math.max(0, optionCount - 1), index + 1));
|
|
790
|
+
}
|
|
791
|
+
} else if (portfolioSub === "broker-setup" && letter(BROKER_GUIDE_KEY)) {
|
|
792
|
+
openBrokerGuide();
|
|
793
|
+
} else {
|
|
794
|
+
return false;
|
|
795
|
+
}
|
|
796
|
+
return true;
|
|
663
797
|
}
|
|
664
|
-
return;
|
|
665
|
-
}
|
|
666
798
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
else if (
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
else if (activeBrokerFields[brokerFieldIdx]?.type === "select") {
|
|
682
|
-
const optionCount = activeBrokerFields[brokerFieldIdx]?.options?.length ?? 0;
|
|
683
|
-
setBrokerSelectIdx((index) => Math.min(Math.max(0, optionCount - 1), index + 1));
|
|
799
|
+
if (stage === "account") {
|
|
800
|
+
if (enter) {
|
|
801
|
+
continueAccount();
|
|
802
|
+
} else if (escape) {
|
|
803
|
+
if (account.accountSub === "qr" || account.accountSub === "login") account.returnToAccountForm();
|
|
804
|
+
else goToSection("portfolio");
|
|
805
|
+
} else if (letter(BROWSER_SIGN_IN_KEY) && accountForm) {
|
|
806
|
+
account.beginQrSignIn();
|
|
807
|
+
} else if (letter(SKIP_SETUP_KEY)) {
|
|
808
|
+
skipSetup();
|
|
809
|
+
} else if (tab && accountForm) {
|
|
810
|
+
account.focusAccountField(account.accountFieldIdx > 0 ? 1 : 0);
|
|
811
|
+
} else {
|
|
812
|
+
return false;
|
|
684
813
|
}
|
|
814
|
+
return true;
|
|
685
815
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
consume();
|
|
703
|
-
account.beginQrSignIn();
|
|
816
|
+
|
|
817
|
+
if (stage === "upgrade") {
|
|
818
|
+
if (enter) {
|
|
819
|
+
primaryUpgradeAction();
|
|
820
|
+
} else if (escape) {
|
|
821
|
+
goToSection("cloud");
|
|
822
|
+
} else if (!planAccess.hasProAccess && letter(KEEP_FREE_KEY)) {
|
|
823
|
+
continueFree();
|
|
824
|
+
} else if (!planAccess.hasProAccess && (isPlainKey(event, "left") || letter("h"))) {
|
|
825
|
+
setBillingInterval("month");
|
|
826
|
+
} else if (!planAccess.hasProAccess && (isPlainKey(event, "right") || letter("l"))) {
|
|
827
|
+
setBillingInterval("year");
|
|
828
|
+
} else {
|
|
829
|
+
return false;
|
|
830
|
+
}
|
|
831
|
+
return true;
|
|
704
832
|
}
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
} else if (escape) {
|
|
712
|
-
consume();
|
|
713
|
-
goToSection("cloud");
|
|
833
|
+
|
|
834
|
+
if (stage === "ready") {
|
|
835
|
+
if (enter) void finish();
|
|
836
|
+
else if (escape) goToSection(progress.accountStatus === "signed-in" ? "pro" : "cloud");
|
|
837
|
+
else return false;
|
|
838
|
+
return true;
|
|
714
839
|
}
|
|
840
|
+
return false;
|
|
841
|
+
})();
|
|
842
|
+
|
|
843
|
+
if (handled) {
|
|
844
|
+
event.preventDefault();
|
|
845
|
+
event.stopPropagation();
|
|
715
846
|
return;
|
|
716
847
|
}
|
|
717
|
-
if (
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
}
|
|
726
|
-
|
|
848
|
+
if (keyReachesPastOnboardingModal(event, keybindings)) return;
|
|
849
|
+
// An app chord held here still must not fall through to the browser's own
|
|
850
|
+
// meaning for it (Cmd+digit switches tabs in a web host).
|
|
851
|
+
if (matchKeybinding(keybindings, event)) event.preventDefault();
|
|
852
|
+
event.stopPropagation();
|
|
853
|
+
}, {
|
|
854
|
+
phase: "before",
|
|
855
|
+
allowEditable: true,
|
|
856
|
+
scope: `onboarding:${stage}`,
|
|
857
|
+
enabled: modalShown && !dialogOpen && !commandBarOpen,
|
|
858
|
+
});
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* The research coach floats over a live workspace, so it takes no key a pane
|
|
862
|
+
* could want. It answers the notification keys, like a toast that stays up,
|
|
863
|
+
* and only when nothing else used them.
|
|
864
|
+
*/
|
|
865
|
+
useShortcut((event) => {
|
|
866
|
+
if (event.targetEditable) return;
|
|
867
|
+
const connect = matchesKeybindingAction(keybindings, "notification-action", event);
|
|
868
|
+
const dismiss = matchesKeybindingAction(keybindings, "notification-dismiss", event) || isPlainKey(event, "f10");
|
|
869
|
+
if (!connect && !dismiss) return;
|
|
870
|
+
event.preventDefault();
|
|
871
|
+
event.stopPropagation();
|
|
872
|
+
if (connect) saveProgressInBackground({ stage: "account" });
|
|
873
|
+
else void finish();
|
|
874
|
+
}, {
|
|
875
|
+
phase: "after",
|
|
876
|
+
enabled: stage === "research" && !helpFocused && !dialogOpen && !commandBarOpen,
|
|
877
|
+
});
|
|
727
878
|
|
|
728
879
|
if (helpFocused) {
|
|
729
880
|
return null;
|
|
@@ -733,8 +884,22 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
733
884
|
const ticker = progress.tickerSymbol ?? t("your company");
|
|
734
885
|
return <OnboardingCoach step={t("YOUR WORKSPACE")}
|
|
735
886
|
title={tf("Built around {ticker}", { ticker })}
|
|
736
|
-
actions={
|
|
737
|
-
|
|
887
|
+
actions={<>
|
|
888
|
+
{/* The card has no room for both keys: like a toast, the dismiss key
|
|
889
|
+
is in the desktop tooltip. F10 also dismisses it. */}
|
|
890
|
+
<OnboardingButton
|
|
891
|
+
label="Keep exploring"
|
|
892
|
+
variant="ghost"
|
|
893
|
+
title={notificationDismissShortcut ? `${t("Keep exploring")} (${notificationDismissShortcut})` : undefined}
|
|
894
|
+
onPress={() => { void finish(); }}
|
|
895
|
+
/>
|
|
896
|
+
<OnboardingButton
|
|
897
|
+
label="Connect free Cloud"
|
|
898
|
+
variant="primary"
|
|
899
|
+
shortcut={notificationActionShortcut || undefined}
|
|
900
|
+
onPress={() => saveProgressInBackground({ stage: "account" })}
|
|
901
|
+
/>
|
|
902
|
+
</>}>
|
|
738
903
|
<Text fg={colors.textDim} wrapText>{tf("Your holdings as a heatmap, a watchlist, and {ticker} charted. Every pane moves; {shortcut} adds more.", {
|
|
739
904
|
ticker,
|
|
740
905
|
shortcut: commandBarShortcut,
|
|
@@ -789,6 +954,7 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
789
954
|
positions={positions}
|
|
790
955
|
positionsInputRef={inputRef}
|
|
791
956
|
positionsEditing={editingField}
|
|
957
|
+
selectedPositionSymbol={selectedPositionSymbol}
|
|
792
958
|
commandBarShortcut={commandBarShortcut}
|
|
793
959
|
choices={brokerChoices}
|
|
794
960
|
optionIdx={portfolioOptionIdx}
|
|
@@ -816,7 +982,7 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
816
982
|
{portfolioSub === "positions" ? (
|
|
817
983
|
<>
|
|
818
984
|
{brokerOptions.length > 0 && positionCount > 0 ? (
|
|
819
|
-
<OnboardingButton label="Connect a broker" variant="ghost" onPress={openBrokerConnect} />
|
|
985
|
+
<OnboardingButton label="Connect a broker" variant="ghost" shortcut={CONNECT_BROKER_KEY} onPress={openBrokerConnect} />
|
|
820
986
|
) : null}
|
|
821
987
|
<OnboardingButton
|
|
822
988
|
label="Continue"
|
|
@@ -887,6 +1053,7 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
887
1053
|
available={sectionAvailability}
|
|
888
1054
|
onNavigate={goToSection}
|
|
889
1055
|
onDismiss={skipSetup}
|
|
1056
|
+
dismissShortcut={SKIP_SETUP_KEY}
|
|
890
1057
|
dismissing={isFinishing}
|
|
891
1058
|
/>
|
|
892
1059
|
<OnboardingTitle
|
|
@@ -925,7 +1092,7 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
925
1092
|
) : null}
|
|
926
1093
|
<OnboardingActions
|
|
927
1094
|
hint={desktop && browserSignIn ? (
|
|
928
|
-
<Button label="Sign in with the browser instead" variant="plain" compact onPress={account.beginQrSignIn} />
|
|
1095
|
+
<Button label="Sign in with the browser instead" variant="plain" compact shortcut={BROWSER_SIGN_IN_KEY} onPress={account.beginQrSignIn} />
|
|
929
1096
|
) : undefined}
|
|
930
1097
|
>
|
|
931
1098
|
<OnboardingButton
|
|
@@ -986,7 +1153,8 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
986
1153
|
]}
|
|
987
1154
|
value={billingInterval}
|
|
988
1155
|
onChange={(value) => setBillingInterval(value === "year" ? "year" : "month")}
|
|
989
|
-
|
|
1156
|
+
// The card's Left and Right move it on both hosts.
|
|
1157
|
+
focused
|
|
990
1158
|
/>
|
|
991
1159
|
</Box>
|
|
992
1160
|
) : null}
|
|
@@ -1027,7 +1195,7 @@ export function OnboardingWizard({ pluginRegistry, importBrokerPositions, onComp
|
|
|
1027
1195
|
<OnboardingButton
|
|
1028
1196
|
label="Keep Free for now"
|
|
1029
1197
|
variant="secondary"
|
|
1030
|
-
shortcut={
|
|
1198
|
+
shortcut={KEEP_FREE_KEY}
|
|
1031
1199
|
onPress={continueFree}
|
|
1032
1200
|
/>
|
|
1033
1201
|
) : null}
|
|
@@ -4,7 +4,7 @@ import { colors } from "../../../theme/colors";
|
|
|
4
4
|
import { t, tf } from "../../../i18n";
|
|
5
5
|
import type { BrokerConfigField } from "../../../types/broker";
|
|
6
6
|
import { TextField, type ListViewItem } from "../../ui";
|
|
7
|
-
import {
|
|
7
|
+
import { SelectField } from "../../ui/select-field";
|
|
8
8
|
import { formatBrokerFieldValue } from "./utils";
|
|
9
9
|
|
|
10
10
|
export function BrokerFieldsPanel({
|
|
@@ -96,7 +96,7 @@ export function BrokerFieldsPanel({
|
|
|
96
96
|
)}
|
|
97
97
|
{field.type === "select" && desktop ? (
|
|
98
98
|
<Box style={{ marginTop: 8 }}>
|
|
99
|
-
<
|
|
99
|
+
<SelectField
|
|
100
100
|
value={activeSelectValue}
|
|
101
101
|
width="100%"
|
|
102
102
|
height={32}
|
|
@@ -4,6 +4,35 @@ import { t, tf } from "../../../i18n";
|
|
|
4
4
|
import { ExternalLink, type ListViewItem } from "../../ui";
|
|
5
5
|
import { getBrokerLabel } from "./utils";
|
|
6
6
|
|
|
7
|
+
/** Opens the setup link below the steps; the wizard binds it. */
|
|
8
|
+
export const BROKER_GUIDE_KEY = "o";
|
|
9
|
+
|
|
10
|
+
const IBKR_FLEX_GUIDE_URL = "https://www.ibkrguides.com/clientportal/performanceandstatements/flex.htm";
|
|
11
|
+
const IBKR_GATEWAY_DOWNLOAD_URL = "https://www.interactivebrokers.com/en/trading/ibgateway-stable.php";
|
|
12
|
+
|
|
13
|
+
/** The link the setup step shows for this broker and connection mode, if any. */
|
|
14
|
+
export function brokerSetupGuideUrl(
|
|
15
|
+
brokerId: string,
|
|
16
|
+
brokerValues: Record<string, Record<string, string>>,
|
|
17
|
+
): string | null {
|
|
18
|
+
if (brokerId !== "ibkr") return null;
|
|
19
|
+
return brokerValues[brokerId]?.connectionMode === "gateway" ? IBKR_GATEWAY_DOWNLOAD_URL : IBKR_FLEX_GUIDE_URL;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** The link with its key after it, the way a button shows its shortcut. */
|
|
23
|
+
function GuideLink({ url }: { url: string }) {
|
|
24
|
+
return (
|
|
25
|
+
<Box flexDirection="row" minWidth={0}>
|
|
26
|
+
<Box flexShrink={1} minWidth={0} overflow="hidden">
|
|
27
|
+
<ExternalLink url={url} />
|
|
28
|
+
</Box>
|
|
29
|
+
<Box flexShrink={0} height={1}>
|
|
30
|
+
<Text fg={colors.textMuted}>{` ${BROKER_GUIDE_KEY}`}</Text>
|
|
31
|
+
</Box>
|
|
32
|
+
</Box>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
7
36
|
export function BrokerSetupPanel({
|
|
8
37
|
choices,
|
|
9
38
|
selectedBrokerId,
|
|
@@ -27,19 +56,19 @@ export function BrokerSetupPanel({
|
|
|
27
56
|
</Box>
|
|
28
57
|
<Box height={desktop ? 2 : 1} />
|
|
29
58
|
<Box height={1}>
|
|
30
|
-
<Text fg={colors.textDim}>{t("1. Go to ")}<Underline><Span fg={colors.text}>{t("Reports > Flex Queries")}</Span></Underline></Text>
|
|
59
|
+
<Text fg={colors.textDim}>{t("1. Go to ")}<Underline><Span fg={colors.text}>{t("Performance & Reports > Flex Queries")}</Span></Underline></Text>
|
|
31
60
|
</Box>
|
|
32
61
|
<Box height={1} overflow="hidden">
|
|
33
|
-
<Text fg={colors.textDim}>{t("2. Create
|
|
62
|
+
<Text fg={colors.textDim}>{t("2. Create an Activity Flex Query: Open Positions, Select All")}</Text>
|
|
34
63
|
</Box>
|
|
35
64
|
<Box height={1}>
|
|
36
65
|
<Text fg={colors.textDim}>{t("3. Note the ")}<Strong><Span fg={colors.text}>{t("Query ID")}</Span></Strong>{t(" (numeric)")}</Text>
|
|
37
66
|
</Box>
|
|
38
67
|
<Box height={desktop ? 1 : 2} overflow="hidden">
|
|
39
|
-
<Text fg={colors.textDim}>{t("4.
|
|
68
|
+
<Text fg={colors.textDim}>{t("4. Click the gear by ")}<Underline><Span fg={colors.text}>{t("Flex Web Service")}</Span></Underline>{t(" for a ")}<Strong><Span fg={colors.text}>{t("Flex Web Service Token")}</Span></Strong></Text>
|
|
40
69
|
</Box>
|
|
41
70
|
<Box height={desktop ? 2 : 1} />
|
|
42
|
-
<
|
|
71
|
+
<GuideLink url={IBKR_FLEX_GUIDE_URL} />
|
|
43
72
|
</>
|
|
44
73
|
)}
|
|
45
74
|
|
|
@@ -71,7 +100,7 @@ export function BrokerSetupPanel({
|
|
|
71
100
|
<Text fg={colors.textDim}>{t("4. Keep it running while using Gloomberb")}</Text>
|
|
72
101
|
</Box>
|
|
73
102
|
<Box height={desktop ? 2 : 1} />
|
|
74
|
-
<
|
|
103
|
+
<GuideLink url={IBKR_GATEWAY_DOWNLOAD_URL} />
|
|
75
104
|
</>
|
|
76
105
|
)}
|
|
77
106
|
|
|
@@ -14,8 +14,8 @@ export function PortfolioStep(props: PortfolioStepProps) {
|
|
|
14
14
|
state={props.positions}
|
|
15
15
|
inputRef={props.positionsInputRef}
|
|
16
16
|
editing={props.positionsEditing}
|
|
17
|
+
selectedSymbol={props.selectedPositionSymbol}
|
|
17
18
|
shortcut={props.commandBarShortcut}
|
|
18
|
-
hasBrokers={props.choices.length > 0}
|
|
19
19
|
/>
|
|
20
20
|
);
|
|
21
21
|
}
|