gloomberb 0.18.2 → 0.18.4
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 +8 -8
- package/README.zh-CN.md +11 -11
- package/bin/{gloomberb → gloom} +3 -1
- package/package.json +6 -2
- package/patches/electrobun@1.18.1.patch +106 -5
- package/src/account/checkout-handoff.tsx +225 -0
- package/src/account/device-signin-dialog.tsx +2 -2
- package/src/account/device-signin.ts +2 -2
- package/src/account/upgrade-dialog.tsx +1 -1
- package/src/api-client/askg.ts +2 -2
- package/src/api-client/auth.ts +2 -2
- package/src/api-client/central-bank-rates.ts +6 -0
- package/src/api-client/collections.ts +5 -1
- package/src/api-client/cot.ts +2 -0
- package/src/api-client/crypto-etf-flows.ts +37 -0
- package/src/api-client/crypto-markets.ts +60 -0
- package/src/api-client/data.ts +99 -5
- package/src/api-client/doe.ts +15 -0
- package/src/api-client/equity-screener.ts +28 -0
- package/src/api-client/exchange-announcements.ts +38 -0
- package/src/api-client/fund-facts.ts +39 -0
- package/src/api-client/futures-curve.ts +9 -1
- package/src/api-client/hiring.ts +301 -0
- package/src/api-client/index.ts +24 -5
- package/src/api-client/market-discovery.ts +14 -0
- package/src/api-client/members.ts +6 -0
- package/src/api-client/mna.ts +6 -0
- package/src/api-client/paths.ts +18 -1
- package/src/api-client/request.ts +26 -7
- package/src/api-client/short-side-publications.ts +37 -0
- package/src/api-client/socket.ts +64 -4
- package/src/api-client/swap-curve.ts +35 -0
- package/src/api-client/telemetry.ts +17 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +90 -2
- package/src/app/global-shortcuts.ts +1 -16
- package/src/app/pane-runtime/plugin-bindings.ts +9 -2
- package/src/app/runtime/desktop-deeplink.ts +5 -5
- package/src/app/runtime/plugin-bindings.ts +2 -2
- package/src/app/runtime/startup.ts +13 -0
- package/src/app/runtime/update.ts +28 -8
- package/src/app/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/pane-tabs-allowlist.json +65 -0
- package/src/architecture/ui-literals-allowlist.json +3 -3
- package/src/architecture/ui-tokens-allowlist.json +1 -1
- package/src/brokers/broker-portfolio-sync.ts +37 -0
- package/src/brokers/directory.ts +11 -0
- package/src/brokers/logos.ts +3 -1
- package/src/brokers/signed-in/adapter.ts +304 -26
- package/src/brokers/signed-in/client.ts +14 -2
- package/src/brokers/signed-in/connect.ts +10 -2
- package/src/brokers/sync-broker-instance.ts +9 -1
- package/src/capabilities/chart-series.ts +22 -6
- package/src/cli/bank-section.ts +1 -1
- package/src/cli/base-converter.ts +23 -14
- package/src/cli/central-bank-events.ts +1 -1
- package/src/cli/command-options.ts +59 -4
- package/src/cli/commands/api.ts +9 -6
- package/src/cli/commands/broker.ts +2 -2
- package/src/cli/commands/command-utils.ts +2 -2
- package/src/cli/commands/crypto-hints.ts +7 -20
- package/src/cli/commands/fred-series.ts +4 -2
- package/src/cli/commands/keybindings.ts +2 -2
- package/src/cli/commands/market.ts +1189 -296
- package/src/cli/commands/news-hints.ts +2 -2
- package/src/cli/commands/news-search.ts +59 -6
- package/src/cli/commands/options-leaps.ts +41 -26
- package/src/cli/commands/overview.ts +121 -48
- package/src/cli/commands/plugins.ts +9 -9
- package/src/cli/commands/remote.ts +13 -10
- package/src/cli/commands/search.ts +64 -44
- package/src/cli/commands/system.ts +27 -19
- package/src/cli/commands/themes.ts +1 -1
- package/src/cli/commands/ticker.ts +272 -70
- package/src/cli/context.ts +3 -2
- package/src/cli/desktop-pane-shot-view.ts +2 -2
- package/src/cli/desktop-pane-shot.ts +1 -1
- package/src/cli/earnings-calendar.ts +4 -4
- package/src/cli/entry.ts +18 -1
- package/src/cli/errors.ts +20 -2
- package/src/cli/exit-codes.ts +1 -1
- package/src/cli/export-source.ts +10 -4
- package/src/cli/freshness.ts +2 -8
- package/src/cli/fx-forward.ts +130 -0
- package/src/cli/fx-pair.ts +10 -9
- package/src/cli/glossary.ts +64 -20
- package/src/cli/help.ts +20 -14
- package/src/cli/history-export.ts +126 -0
- package/src/cli/history-rows.ts +196 -43
- package/src/cli/index-roots.ts +5 -45
- package/src/cli/index.ts +32 -18
- package/src/cli/issuer-membership.ts +103 -0
- package/src/cli/known-gaps.ts +118 -25
- package/src/cli/listing-arg.ts +315 -43
- package/src/cli/name-entries.ts +73 -22
- package/src/cli/native-smoke.ts +2 -0
- package/src/cli/not-a-ticker.ts +19 -9
- package/src/cli/opentui-libc.ts +5 -0
- package/src/cli/options.ts +12 -0
- package/src/cli/pane-functions/capabilities.ts +77 -20
- package/src/cli/pane-functions/catalog.ts +40 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +12 -8
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +174 -23
- package/src/cli/pane-functions/function-help.ts +66 -27
- package/src/cli/pane-functions/headless.ts +48 -16
- package/src/cli/pane-functions/index.ts +82 -21
- package/src/cli/pane-functions/options.ts +22 -2
- package/src/cli/pane-functions/report-notices.ts +12 -4
- package/src/cli/pane-functions/report.ts +5 -5
- package/src/cli/pane-functions/resolver.ts +65 -14
- package/src/cli/pane-functions/screenshot-assessment.ts +322 -0
- package/src/cli/pane-functions/screenshot-bridge.ts +152 -0
- package/src/cli/pane-functions/screenshot-chart-evidence.ts +396 -0
- package/src/cli/pane-functions/screenshot-data-evidence.ts +383 -0
- package/src/cli/pane-functions/screenshot-evidence.ts +1 -1
- package/src/cli/pane-functions/screenshot-payload.ts +453 -0
- package/src/cli/pane-functions/screenshot-render.ts +316 -0
- package/src/cli/pane-functions/screenshot-types.ts +162 -0
- package/src/cli/pane-functions/shot-options.ts +8 -3
- package/src/cli/peso-dollar-rates.ts +79 -0
- package/src/cli/quote-answer.ts +38 -3
- package/src/cli/report-tables.ts +190 -27
- package/src/cli/restore-plugins.ts +29 -14
- package/src/cli/result.ts +122 -25
- package/src/cli/series-search.ts +5 -5
- package/src/cli/statement-filings.ts +19 -0
- package/src/cli/suffixed-listing-rows.ts +49 -0
- package/src/cli/symbol-args.ts +50 -15
- package/src/cli/symbol-cells.ts +120 -0
- package/src/cli/symbol-list.ts +226 -60
- package/src/cli/symbol-rows.ts +131 -25
- package/src/cli/ticker-resolution.ts +108 -11
- package/src/cli/treasury-yields.ts +5 -5
- package/src/cli/types.ts +2 -0
- package/src/cli/uncovered-instrument.ts +3 -3
- package/src/cli/unknown-command.ts +6 -6
- package/src/components/chart/composite/chart-layout.ts +131 -0
- package/src/components/chart/composite/composite-chart.tsx +387 -21
- package/src/components/chart/composite/drawing-store.ts +26 -6
- package/src/components/chart/composite/interactions.ts +9 -3
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +5 -0
- package/src/components/chart/composite/panel-gestures.ts +41 -0
- package/src/components/chart/composite/panel-labels.ts +2 -1
- package/src/components/chart/composite/panel-surface.tsx +316 -11
- package/src/components/chart/composite/price-axis-labels.tsx +27 -3
- package/src/components/chart/composite/rasterizer.ts +44 -19
- package/src/components/chart/composite/scene.ts +16 -4
- package/src/components/chart/composite/text-renderer.ts +48 -21
- package/src/components/chart/composite/toolbar.tsx +52 -5
- package/src/components/chart/composite/types.ts +19 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +120 -13
- package/src/components/chart/composite/use-composite-value-scales.ts +44 -0
- package/src/components/chart/composite/use-composite-viewport.ts +12 -3
- package/src/components/chart/composite/value-scale.ts +149 -0
- package/src/components/chart/composite/volume-profile-paint.ts +6 -3
- package/src/components/chart/core/pointer.ts +2 -0
- package/src/components/chart-table/index.ts +2 -0
- package/src/components/chart-table/read.tsx +74 -0
- package/src/components/command-bar/commands/collection-list.ts +41 -19
- package/src/components/command-bar/commands/collection.ts +9 -3
- package/src/components/command-bar/commands/direct/index.ts +1 -1
- package/src/components/command-bar/commands/direct/runtime.ts +3 -2
- package/src/components/command-bar/pane-templates/items.ts +59 -6
- package/src/components/command-bar/pane-templates/workflow.ts +10 -1
- package/src/components/command-bar/routes/root/command-items.ts +32 -6
- package/src/components/command-bar/routes/root/plugin-install.ts +1 -1
- package/src/components/command-bar/routes/root/provider-search.ts +42 -11
- package/src/components/command-bar/routes/root/results.ts +18 -4
- package/src/components/command-bar/routes/root/runtime.ts +15 -3
- package/src/components/command-bar/routes/root/search-providers.ts +25 -2
- package/src/components/command-bar/routes/root/selection.ts +6 -1
- package/src/components/command-bar/routes/root/shortcut-feedback.ts +4 -1
- package/src/components/command-bar/routes/root/shortcuts.ts +30 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +73 -4
- package/src/components/command-bar/selection-runtime.ts +50 -10
- package/src/components/command-bar/surface/index.tsx +24 -2
- package/src/components/command-bar/view-model.ts +7 -0
- package/src/components/command-bar/workflow/broker.ts +2 -2
- package/src/components/command-bar/workflow/collection-actions.ts +46 -7
- package/src/components/command-bar/workflow/collection-ticker.ts +32 -4
- package/src/components/command-bar/workflow/fields.ts +8 -2
- package/src/components/command-bar/workflow/ops.ts +18 -4
- package/src/components/command-bar/workflow/portfolio-position.ts +53 -4
- package/src/components/command-bar/workflow/submit.ts +3 -2
- package/src/components/command-bar/workflow/tickers.ts +5 -1
- package/src/components/company-logo.tsx +39 -0
- package/src/components/data-table/sections.ts +4 -2
- package/src/components/data-table/view.tsx +23 -3
- package/src/components/form-modal/confirm.tsx +2 -1
- package/src/components/form-modal/request.ts +5 -0
- package/src/components/form-modal/routes.ts +4 -1
- package/src/components/index.ts +13 -6
- package/src/components/layout/detached-pane-shell.tsx +1 -0
- package/src/components/layout/floating-pane.tsx +1 -0
- package/src/components/layout/header.tsx +234 -60
- package/src/components/layout/market-summary.ts +9 -6
- package/src/components/layout/pane/capture-status.ts +1 -1
- package/src/components/layout/pane/footer/model.ts +11 -5
- package/src/components/layout/pane/header.tsx +10 -3
- package/src/components/layout/pane/index.tsx +1 -0
- package/src/components/layout/pane/pane-tabs.tsx +9 -1
- package/src/components/layout/shell/chrome.ts +19 -6
- package/src/components/layout/shell/index.tsx +2 -1
- package/src/components/layout/shell/pane/layers.tsx +19 -1
- package/src/components/layout/status-bar.tsx +2 -2
- package/src/components/market-board/index.tsx +11 -3
- package/src/components/onboarding/onboarding-wizard.tsx +1 -0
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +2 -2
- package/src/components/onboarding/wizard-broker-sync.ts +4 -1
- package/src/components/pane-settings-dialog/desktop.tsx +20 -7
- package/src/components/pane-settings-dialog/tui.tsx +17 -9
- package/src/components/pane-settings-dialog/value.ts +8 -1
- package/src/components/pane-settings-dialog.tsx +44 -13
- package/src/components/sign-in-code-panel.tsx +27 -19
- package/src/components/ui/column-grid.tsx +48 -4
- package/src/components/ui/country-flag-art.tsx +180 -0
- package/src/components/ui/country-flag.tsx +118 -12
- package/src/components/ui/data-table/opentui/index.tsx +61 -2
- package/src/components/ui/data-table/opentui/model.ts +109 -2
- package/src/components/ui/data-table/types.ts +1 -1
- package/src/components/ui/display.tsx +5 -1
- package/src/components/ui/index.ts +3 -1
- package/src/components/ui/logo-mark.tsx +11 -2
- package/src/components/ui/query-bar.tsx +1 -1
- package/src/components/ui/row-notes.ts +79 -0
- package/src/components/ui/stat-grid.tsx +28 -3
- package/src/components/ui/status.tsx +3 -1
- package/src/core/app-services.ts +4 -0
- package/src/core/state/app/layout.ts +4 -4
- package/src/data/cached-query.ts +8 -1
- package/src/data/config/chart-settings.ts +3 -3
- package/src/data/config/home.ts +10 -2
- package/src/data/config/layout.ts +4 -1
- package/src/data/config/store/node.ts +4 -0
- package/src/data/config/store/normalize.ts +13 -3
- package/src/data/config/store/portfolio-as-of-column.ts +2 -2
- package/src/data/json-storage.ts +2 -0
- package/src/data/saved-copies.ts +84 -0
- package/src/docs/snapshot.json +65 -32
- package/src/i18n/es.ts +51 -12
- package/src/i18n/ja.ts +51 -12
- package/src/i18n/ko.ts +51 -12
- package/src/i18n/zh-cn.ts +51 -12
- package/src/i18n/zh-tw.ts +51 -12
- package/src/layout/desks.ts +1 -1
- package/src/layout/launch-layout.ts +1 -1
- package/src/layout/pane-manager/floating-actions.ts +5 -3
- package/src/layout/pane-manager/floating.ts +43 -1
- package/src/layout/pane-manager/index.ts +2 -0
- package/src/layout/selected-ticker.ts +74 -0
- package/src/market-data/depositary-pair.ts +251 -0
- package/src/market-data/futures-board.ts +1 -1
- package/src/market-data/futures-contract.ts +124 -40
- package/src/market-data/fx-closes.ts +17 -2
- package/src/market-data/hooks.tsx +19 -11
- package/src/market-data/market/change-basis.ts +49 -7
- package/src/market-data/market/freshness.ts +34 -5
- package/src/market-data/market/period-return.ts +163 -0
- package/src/market-data/market/trading-sessions.ts +13 -0
- package/src/market-data/market/year-to-date.ts +8 -13
- package/src/market-data/performance.ts +20 -14
- package/src/market-data/perpetual-premium.ts +32 -0
- package/src/market-data/published-apac-sessions.ts +2 -1
- package/src/market-data/published-futures-sessions.ts +69 -0
- package/src/market-data/quotes/contributions.ts +5 -1
- package/src/market-data/quotes/freshness.ts +42 -0
- package/src/market-data/quotes/intraday-bar.ts +37 -0
- package/src/market-data/quotes/regular-session-valuation.ts +13 -8
- package/src/market-data/quotes/resolution.ts +4 -2
- package/src/market-data/tax-equivalent.ts +1 -1
- package/src/market-data/ticker-price-returns.ts +3 -1
- package/src/news/aggregator.ts +5 -1
- package/src/news/news-model.ts +4 -0
- package/src/news/types.ts +11 -0
- package/src/notifications/app-notifier.ts +1 -1
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/pane.tsx +9 -8
- package/src/plugins/builtin/alerts/alert-engine.ts +30 -18
- package/src/plugins/builtin/alerts/calendar-events.ts +378 -0
- package/src/plugins/builtin/alerts/cli.ts +485 -76
- package/src/plugins/builtin/alerts/command.ts +5 -10
- package/src/plugins/builtin/alerts/event-rows.ts +9 -5
- package/src/plugins/builtin/alerts/events-pane.tsx +71 -56
- package/src/plugins/builtin/alerts/events.ts +108 -5
- package/src/plugins/builtin/alerts/fired-log.ts +78 -0
- package/src/plugins/builtin/alerts/format.ts +2 -1
- package/src/plugins/builtin/alerts/headless.ts +100 -39
- package/src/plugins/builtin/alerts/history-pane.tsx +105 -62
- package/src/plugins/builtin/alerts/history-rows.ts +89 -0
- package/src/plugins/builtin/alerts/index.tsx +45 -18
- package/src/plugins/builtin/alerts/iv-level.ts +365 -0
- package/src/plugins/builtin/alerts/levels.ts +3 -3
- package/src/plugins/builtin/alerts/pane.tsx +97 -29
- package/src/plugins/builtin/alerts/price.ts +35 -0
- package/src/plugins/builtin/alerts/quotes.ts +24 -0
- package/src/plugins/builtin/alerts/research-builder.ts +84 -11
- package/src/plugins/builtin/alerts/research-rules.ts +77 -3
- package/src/plugins/builtin/alerts/scheduled-check.ts +206 -32
- package/src/plugins/builtin/alerts/scheduled-sources.ts +26 -3
- package/src/plugins/builtin/alerts/scheduled.ts +188 -29
- package/src/plugins/builtin/alerts/storage.ts +13 -10
- package/src/plugins/builtin/alerts/targets.ts +12 -3
- package/src/plugins/builtin/analytics/index.tsx +8 -2
- package/src/plugins/builtin/analytics/metrics.ts +1 -1
- package/src/plugins/builtin/analytics/risk-book.ts +215 -0
- package/src/plugins/builtin/analytics/risk-client.ts +13 -6
- package/src/plugins/builtin/analytics/risk-headless.ts +55 -21
- package/src/plugins/builtin/analytics/risk-math.ts +6 -3
- package/src/plugins/builtin/analytics/risk-model.ts +297 -104
- package/src/plugins/builtin/analytics/risk-options.ts +17 -2
- package/src/plugins/builtin/analytics/risk-pane.tsx +107 -43
- package/src/plugins/builtin/attention/pane.tsx +22 -16
- package/src/plugins/builtin/awards/headless.ts +7 -3
- package/src/plugins/builtin/awards/model.ts +18 -0
- package/src/plugins/builtin/awards/pane.tsx +12 -9
- package/src/plugins/builtin/backtest/export.ts +1 -1
- package/src/plugins/builtin/backtest/headless.ts +3 -3
- package/src/plugins/builtin/backtest/rules.ts +41 -5
- package/src/plugins/builtin/broker-manager/add-flow.tsx +12 -7
- package/src/plugins/builtin/broker-manager/detail.tsx +47 -19
- package/src/plugins/builtin/broker-manager/footer.ts +27 -11
- package/src/plugins/builtin/broker-manager/index.tsx +21 -12
- package/src/plugins/builtin/broker-manager/keyboard.ts +1 -1
- package/src/plugins/builtin/broker-manager/model.ts +12 -2
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +183 -57
- package/src/plugins/builtin/broker-manager/table.ts +28 -12
- package/src/plugins/builtin/broker-trading/account-picker.tsx +2 -1
- package/src/plugins/builtin/broker-trading/chart-levels.ts +82 -13
- package/src/plugins/builtin/broker-trading/controller.ts +45 -13
- package/src/plugins/builtin/broker-trading/dock.tsx +24 -4
- package/src/plugins/builtin/broker-trading/headless.ts +2 -1
- package/src/plugins/builtin/broker-trading/index.tsx +7 -1
- package/src/plugins/builtin/broker-trading/linked-orders.ts +148 -0
- package/src/plugins/builtin/broker-trading/order-feed.ts +75 -7
- package/src/plugins/builtin/broker-trading/orders.tsx +109 -31
- package/src/plugins/builtin/broker-trading/overview-orders.tsx +9 -3
- package/src/plugins/builtin/broker-trading/pane-model.ts +30 -2
- package/src/plugins/builtin/broker-trading/pane.tsx +115 -26
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +122 -36
- package/src/plugins/builtin/buildout/cells.tsx +4 -0
- package/src/plugins/builtin/buildout/detail/index.tsx +5 -1
- package/src/plugins/builtin/buildout/detail/ui.tsx +7 -4
- package/src/plugins/builtin/buildout/pane/index.tsx +34 -18
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +1 -1
- package/src/plugins/builtin/catalysts/client.ts +2 -2
- package/src/plugins/builtin/catalysts/detail.tsx +3 -2
- package/src/plugins/builtin/catalysts/index.tsx +1 -1
- package/src/plugins/builtin/catalysts/model.ts +49 -4
- package/src/plugins/builtin/catalysts/pane.tsx +9 -11
- package/src/plugins/builtin/central-bank-rates/client.ts +5 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +36 -10
- package/src/plugins/builtin/central-bank-rates/model.ts +33 -8
- package/src/plugins/builtin/changelog/index.tsx +1 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +1 -0
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +2 -1
- package/src/plugins/builtin/chart-composer/chart-spec.ts +7 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +2 -5
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +2 -1
- package/src/plugins/builtin/chart-composer/editor/controller.ts +2 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +4 -1
- package/src/plugins/builtin/chart-composer/headless-schema.ts +28 -26
- package/src/plugins/builtin/chart-composer/headless.ts +253 -35
- package/src/plugins/builtin/chart-composer/index.tsx +12 -2
- package/src/plugins/builtin/chart-composer/leverage-overlay.ts +142 -0
- package/src/plugins/builtin/chart-composer/pane.tsx +128 -28
- package/src/plugins/builtin/chart-composer/series-catalog.ts +1 -0
- package/src/plugins/builtin/chart-composer/series-expression.ts +65 -6
- package/src/plugins/builtin/chart-composer/session-history.ts +15 -21
- package/src/plugins/builtin/chart-composer/session-range.ts +4 -2
- package/src/plugins/builtin/chart-composer/settings.ts +31 -19
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +5 -6
- package/src/plugins/builtin/chart-composer/viewport-labels.ts +18 -8
- package/src/plugins/builtin/chat/attachments/model.ts +3 -1
- package/src/plugins/builtin/chat/content/index.tsx +1 -1
- package/src/plugins/builtin/chat/pane-links/open.ts +1 -1
- package/src/plugins/builtin/chat/people.ts +1 -1
- package/src/plugins/builtin/clinical-trials/client.ts +5 -2
- package/src/plugins/builtin/clinical-trials/model.ts +13 -4
- package/src/plugins/builtin/clinical-trials/pane.tsx +32 -12
- package/src/plugins/builtin/clinical-trials/ticker-sponsor.ts +17 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +1 -1
- package/src/plugins/builtin/cloud/askg/lock-note.ts +1 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +3 -3
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +105 -47
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +42 -4
- package/src/plugins/builtin/cloud/team/pane.tsx +204 -64
- package/src/plugins/builtin/cloud/thesis/store.ts +45 -22
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/commodities-energy/index.tsx +29 -2
- package/src/plugins/builtin/commodities-energy/view-state.ts +2 -0
- package/src/plugins/builtin/commodity-balances/pane.tsx +14 -8
- package/src/plugins/builtin/company-attention/app-rank.tsx +11 -10
- package/src/plugins/builtin/company-attention/building-model.ts +222 -0
- package/src/plugins/builtin/company-attention/building.tsx +172 -0
- package/src/plugins/builtin/company-attention/client.ts +117 -1
- package/src/plugins/builtin/company-attention/evidence.ts +16 -3
- package/src/plugins/builtin/company-attention/headless.ts +101 -5
- package/src/plugins/builtin/company-attention/index.tsx +6 -3
- package/src/plugins/builtin/company-attention/model.ts +33 -7
- package/src/plugins/builtin/company-attention/moves-model.ts +253 -0
- package/src/plugins/builtin/company-attention/moves.tsx +159 -0
- package/src/plugins/builtin/company-attention/pane.tsx +89 -31
- package/src/plugins/builtin/company-attention/signals-model.ts +229 -0
- package/src/plugins/builtin/company-attention/signals.tsx +160 -0
- package/src/plugins/builtin/company-kpis/headless.ts +3 -2
- package/src/plugins/builtin/company-kpis/model.ts +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +5 -4
- package/src/plugins/builtin/composite-plugins.ts +2 -1
- package/src/plugins/builtin/congress-trades/headless.ts +1 -1
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +3 -2
- package/src/plugins/builtin/correlation/headless.ts +7 -4
- package/src/plugins/builtin/correlation/relationship/model.ts +1 -0
- package/src/plugins/builtin/correlation/settings.ts +1 -0
- package/src/plugins/builtin/cot/headless.ts +28 -6
- package/src/plugins/builtin/cot/model.ts +12 -0
- package/src/plugins/builtin/cot/pane.tsx +7 -5
- package/src/plugins/builtin/cpi/headless.ts +5 -1
- package/src/plugins/builtin/cpi/pane.tsx +11 -9
- package/src/plugins/builtin/credit-boards/model.ts +2 -0
- package/src/plugins/builtin/credit-documents/headless.ts +1 -1
- package/src/plugins/builtin/credit-documents/pane.tsx +8 -7
- package/src/plugins/builtin/crypto-board/client.ts +86 -0
- package/src/plugins/builtin/crypto-board/defi-view.tsx +218 -0
- package/src/plugins/builtin/crypto-board/defi.ts +239 -0
- package/src/plugins/builtin/crypto-board/headless.ts +117 -6
- package/src/plugins/builtin/crypto-board/index.tsx +8 -3
- package/src/plugins/builtin/crypto-board/model.ts +40 -8
- package/src/plugins/builtin/crypto-board/pane.tsx +55 -21
- package/src/plugins/builtin/crypto-board/series.ts +19 -1
- package/src/plugins/builtin/crypto-etf-flows/client.ts +60 -0
- package/src/plugins/builtin/crypto-etf-flows/headless.ts +132 -0
- package/src/plugins/builtin/crypto-etf-flows/index.tsx +44 -0
- package/src/plugins/builtin/crypto-etf-flows/model.ts +121 -0
- package/src/plugins/builtin/crypto-etf-flows/pane.tsx +193 -0
- package/src/plugins/builtin/debt-maturities/pane.tsx +4 -3
- package/src/plugins/builtin/debug/index.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/docs/index.tsx +1 -1
- package/src/plugins/builtin/docs/pane.tsx +2 -2
- package/src/plugins/builtin/docs/targets.ts +1 -1
- package/src/plugins/builtin/doe/client.ts +5 -1
- package/src/plugins/builtin/doe/headless.ts +12 -6
- package/src/plugins/builtin/doe/model.ts +43 -6
- package/src/plugins/builtin/doe/pane.tsx +19 -12
- package/src/plugins/builtin/earnings/board-model.ts +13 -6
- package/src/plugins/builtin/earnings/board-table.ts +4 -1
- package/src/plugins/builtin/earnings/board.tsx +253 -50
- package/src/plugins/builtin/earnings/calendar-model.ts +188 -0
- package/src/plugins/builtin/earnings/calendar.tsx +338 -0
- package/src/plugins/builtin/earnings/client.ts +4 -3
- package/src/plugins/builtin/earnings/headless.ts +53 -15
- package/src/plugins/builtin/earnings/history-model.ts +53 -36
- package/src/plugins/builtin/earnings/index.tsx +15 -22
- package/src/plugins/builtin/earnings/model.ts +17 -12
- package/src/plugins/builtin/earnings/scope.ts +89 -0
- package/src/plugins/builtin/earnings-calls/calendar.tsx +310 -0
- package/src/plugins/builtin/earnings-calls/data.ts +146 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +151 -9
- package/src/plugins/builtin/earnings-calls/index.tsx +3 -3
- package/src/plugins/builtin/earnings-calls/lock-note.ts +1 -1
- package/src/plugins/builtin/earnings-calls/pane.tsx +149 -31
- package/src/plugins/builtin/earnings-calls/upcoming.ts +195 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +132 -20
- package/src/plugins/builtin/econ/detail-view.tsx +48 -10
- package/src/plugins/builtin/econ/fred-catalog.ts +23 -6
- package/src/plugins/builtin/econ/fred-series-map.ts +4 -0
- package/src/plugins/builtin/econ/index.tsx +112 -25
- package/src/plugins/builtin/econ/print-watch.ts +2 -1
- package/src/plugins/builtin/econ/types.ts +32 -1
- package/src/plugins/builtin/econ-statistics/client.ts +16 -3
- package/src/plugins/builtin/econ-statistics/defs.ts +4 -0
- package/src/plugins/builtin/econ-statistics/detail.tsx +2 -2
- package/src/plugins/builtin/econ-statistics/headless.ts +13 -2
- package/src/plugins/builtin/econ-statistics/index.tsx +3 -3
- package/src/plugins/builtin/econ-statistics/pane.tsx +2 -1
- package/src/plugins/builtin/econ-statistics/stats.ts +103 -0
- package/src/plugins/builtin/econ-statistics/view.ts +16 -1
- package/src/plugins/builtin/equity-screener/client.ts +21 -3
- package/src/plugins/builtin/equity-screener/headless.ts +77 -5
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +34 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +148 -106
- package/src/plugins/builtin/equity-screener/screen-check.ts +90 -0
- package/src/plugins/builtin/equity-screener/ticker-check.tsx +148 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -1
- package/src/plugins/builtin/estimate-revisions/lock-note.ts +3 -3
- package/src/plugins/builtin/estimate-revisions/model.ts +8 -10
- package/src/plugins/builtin/exposure/headless.ts +51 -6
- package/src/plugins/builtin/exposure/index.tsx +28 -2
- package/src/plugins/builtin/exposure/model.ts +7 -0
- package/src/plugins/builtin/exposure/pane.tsx +16 -10
- package/src/plugins/builtin/fear-greed/index.tsx +1 -1
- package/src/plugins/builtin/filing-events/index.tsx +1 -1
- package/src/plugins/builtin/futures/model.ts +10 -9
- package/src/plugins/builtin/futures/returns.ts +8 -36
- package/src/plugins/builtin/futures/table.tsx +1 -1
- package/src/plugins/builtin/futures-curve/client.ts +40 -9
- package/src/plugins/builtin/futures-curve/headless.ts +39 -17
- package/src/plugins/builtin/futures-curve/model.ts +258 -69
- package/src/plugins/builtin/futures-curve/pane.tsx +46 -17
- package/src/plugins/builtin/fx-matrix/client.ts +15 -8
- package/src/plugins/builtin/fx-matrix/headless.ts +32 -14
- package/src/plugins/builtin/fx-matrix/index.tsx +13 -11
- package/src/plugins/builtin/fx-matrix/live-legs.ts +22 -0
- package/src/plugins/builtin/fx-matrix/settings.ts +2 -1
- package/src/plugins/builtin/gpu/board.tsx +4 -1
- package/src/plugins/builtin/gpu/changes.tsx +10 -10
- package/src/plugins/builtin/gpu/equities.tsx +4 -1
- package/src/plugins/builtin/gpu/headless.ts +9 -4
- package/src/plugins/builtin/gpu/history.tsx +4 -2
- package/src/plugins/builtin/gpu/pane.tsx +5 -3
- package/src/plugins/builtin/help/index.tsx +13 -3
- package/src/plugins/builtin/holders/beneficial-model.ts +8 -11
- package/src/plugins/builtin/holders/beneficial-report.ts +6 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/client.ts +15 -2
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +48 -8
- package/src/plugins/builtin/holders/index-holders.ts +264 -0
- package/src/plugins/builtin/holders/pane.tsx +79 -15
- package/src/plugins/builtin/holders/report-rows.ts +35 -7
- package/src/plugins/builtin/holders/table-model.ts +2 -1
- package/src/plugins/builtin/holders/thirteenf-match.ts +3 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/base-values.ts +11 -7
- package/src/plugins/builtin/insider/client.ts +3 -0
- package/src/plugins/builtin/insider/headless.ts +20 -7
- package/src/plugins/builtin/insider/index.tsx +17 -8
- package/src/plugins/builtin/insider/issuer.ts +34 -4
- package/src/plugins/builtin/insider/signals-client.ts +3 -3
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/insider/table-model.ts +35 -13
- package/src/plugins/builtin/insider/table.tsx +5 -2
- package/src/plugins/builtin/ipo-calendar/pane.tsx +7 -4
- package/src/plugins/builtin/iv-history/client.ts +20 -0
- package/src/plugins/builtin/iv-history/events.ts +145 -0
- package/src/plugins/builtin/iv-history/format.ts +3 -0
- package/src/plugins/builtin/iv-history/headless.ts +91 -7
- package/src/plugins/builtin/iv-history/index.tsx +1 -1
- package/src/plugins/builtin/iv-history/model.ts +13 -4
- package/src/plugins/builtin/iv-history/series.ts +3 -1
- package/src/plugins/builtin/jobs/lock-note.ts +1 -1
- package/src/plugins/builtin/jobs/model.ts +4 -15
- package/src/plugins/builtin/jobs/pane.tsx +7 -5
- package/src/plugins/builtin/jobs/share-bars.tsx +11 -5
- package/src/plugins/builtin/jodi/pane.tsx +14 -8
- package/src/plugins/builtin/layout-manager/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +20 -7
- package/src/plugins/builtin/macro-day/index.tsx +3 -2
- package/src/plugins/builtin/macro-day/model.ts +29 -8
- package/src/plugins/builtin/macro-day/pane.tsx +46 -10
- package/src/plugins/builtin/macro-day/releases.ts +55 -13
- package/src/plugins/builtin/market-heatmap/data.ts +9 -2
- package/src/plugins/builtin/market-heatmap/evidence.ts +1 -1
- package/src/plugins/builtin/market-heatmap/headless.ts +9 -6
- package/src/plugins/builtin/market-heatmap/index.tsx +3 -3
- package/src/plugins/builtin/market-heatmap/model.ts +10 -7
- package/src/plugins/builtin/market-movers/client.ts +36 -21
- package/src/plugins/builtin/market-movers/headless.ts +8 -2
- package/src/plugins/builtin/market-movers/index.tsx +16 -10
- package/src/plugins/builtin/market-movers/screener.ts +33 -11
- package/src/plugins/builtin/market-movers/session-body.tsx +4 -2
- package/src/plugins/builtin/market-movers/session-table.ts +4 -2
- package/src/plugins/builtin/market-movers/table.ts +4 -1
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/view.ts +5 -0
- package/src/plugins/builtin/members/headless.ts +6 -5
- package/src/plugins/builtin/members/pane.tsx +11 -4
- package/src/plugins/builtin/mna/client.ts +1 -0
- package/src/plugins/builtin/mna/detail.tsx +20 -32
- package/src/plugins/builtin/mna/distress/detail.tsx +16 -4
- package/src/plugins/builtin/mna/distress/model.ts +3 -2
- package/src/plugins/builtin/mna/distress/pane.tsx +7 -4
- package/src/plugins/builtin/mna/headless.ts +6 -13
- package/src/plugins/builtin/mna/model.ts +93 -15
- package/src/plugins/builtin/mna/pane.tsx +5 -4
- package/src/plugins/builtin/news/headless.ts +12 -6
- package/src/plugins/builtin/news/index.tsx +10 -1
- package/src/plugins/builtin/news/wire/index.tsx +3 -2
- package/src/plugins/builtin/news/wire/news/command-bar-search.ts +26 -10
- package/src/plugins/builtin/news/wire/news/query-presets.ts +6 -2
- package/src/plugins/builtin/news/wire/rss/cli.ts +3 -3
- package/src/plugins/builtin/notes/cli.ts +50 -15
- package/src/plugins/builtin/notes/export.ts +17 -6
- package/src/plugins/builtin/notes/files.ts +16 -5
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/enrichment-model.ts +10 -9
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/model-spot.ts +70 -4
- package/src/plugins/builtin/options/view.tsx +51 -23
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-calculator/pane.tsx +3 -2
- package/src/plugins/builtin/options-positioning/headless.ts +11 -3
- package/src/plugins/builtin/options-positioning/model.ts +24 -0
- package/src/plugins/builtin/options-positioning/pane.tsx +10 -12
- package/src/plugins/builtin/options-scenario/client.ts +142 -29
- package/src/plugins/builtin/options-scenario/collar.ts +8 -6
- package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +127 -0
- package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +165 -0
- package/src/plugins/builtin/options-scenario/csp-screen.ts +258 -0
- package/src/plugins/builtin/options-scenario/csp.ts +101 -21
- package/src/plugins/builtin/options-scenario/headless.ts +49 -21
- package/src/plugins/builtin/options-scenario/hedge.ts +20 -14
- package/src/plugins/builtin/options-scenario/index.tsx +28 -3
- package/src/plugins/builtin/options-scenario/model.ts +13 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +22 -10
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +8 -5
- package/src/plugins/builtin/perps/headless.ts +3 -1
- package/src/plugins/builtin/perps/list-perpetuals.ts +25 -4
- package/src/plugins/builtin/perps/live-rows.ts +161 -0
- package/src/plugins/builtin/perps/markets-section.tsx +154 -0
- package/src/plugins/builtin/perps/pane.tsx +36 -17
- package/src/plugins/builtin/perps/venue-markets.ts +96 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +2 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +145 -60
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +78 -27
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +49 -20
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +3 -3
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +29 -24
- package/src/plugins/builtin/portfolio-list/headless.ts +6 -3
- package/src/plugins/builtin/portfolio-list/income.ts +13 -2
- package/src/plugins/builtin/portfolio-list/index.tsx +9 -2
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +21 -8
- package/src/plugins/builtin/portfolio-list/pane/purchase-date-fx.ts +46 -0
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +16 -9
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +2 -15
- package/src/plugins/builtin/power/client.ts +6 -3
- package/src/plugins/builtin/power/evidence.ts +22 -7
- package/src/plugins/builtin/power/gas.tsx +5 -1
- package/src/plugins/builtin/power/pane.tsx +44 -32
- package/src/plugins/builtin/power/prices.tsx +10 -3
- package/src/plugins/builtin/research/analyst-headless.ts +25 -8
- package/src/plugins/builtin/research/analyst-model.ts +68 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +63 -14
- package/src/plugins/builtin/research/event-model.ts +3 -1
- package/src/plugins/builtin/research/event-sources.ts +12 -4
- package/src/plugins/builtin/research/index.tsx +2 -1
- package/src/plugins/builtin/research/relative-valuation-basis.ts +58 -0
- package/src/plugins/builtin/research/relative-valuation-columns.ts +31 -2
- package/src/plugins/builtin/research/relative-valuation-currency.ts +12 -5
- package/src/plugins/builtin/research/relative-valuation-headless.ts +84 -26
- package/src/plugins/builtin/research/relative-valuation-model.ts +88 -19
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +76 -9
- package/src/plugins/builtin/research/relative-valuation-peers.ts +1 -1
- package/src/plugins/builtin/reverse-dcf/client.ts +2 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +10 -5
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/seasonality/client.ts +2 -1
- package/src/plugins/builtin/sec/forms.ts +13 -0
- package/src/plugins/builtin/sec/fund-abroad.ts +32 -0
- package/src/plugins/builtin/sec/fund-facts.ts +68 -8
- package/src/plugins/builtin/sec/headless.ts +85 -8
- package/src/plugins/builtin/sec/index.tsx +58 -12
- package/src/plugins/builtin/sectors/client.ts +6 -4
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +2 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-resource.ts +15 -2
- package/src/plugins/builtin/shared/cloud-upgrade.ts +34 -6
- package/src/plugins/builtin/shared/earnings-calendar.ts +375 -0
- package/src/plugins/builtin/{earnings/estimate-basis.ts → shared/earnings-estimate-basis.ts} +1 -1
- package/src/plugins/builtin/shared/earnings-report.ts +3 -3
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +23 -1
- package/src/plugins/builtin/shared/job-posting.ts +129 -0
- package/src/plugins/builtin/shared/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +23 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/series-list-detail.tsx +3 -1
- package/src/plugins/builtin/shared/ticker-surface.ts +2 -1
- package/src/plugins/builtin/shared/volatility/options.ts +2 -1
- package/src/plugins/builtin/short-interest/client.ts +2 -0
- package/src/plugins/builtin/short-interest/headless.ts +41 -12
- package/src/plugins/builtin/short-interest/index.tsx +23 -1
- package/src/plugins/builtin/short-interest/model.ts +70 -19
- package/src/plugins/builtin/short-interest/pane.tsx +19 -2
- package/src/plugins/builtin/short-interest/publications-client.ts +82 -0
- package/src/plugins/builtin/short-interest/publications-headless.ts +29 -0
- package/src/plugins/builtin/short-interest/publications-model.ts +50 -0
- package/src/plugins/builtin/short-interest/publications-pane.tsx +66 -0
- package/src/plugins/builtin/short-interest/schedule.ts +35 -2
- package/src/plugins/builtin/short-interest/surface.tsx +11 -4
- package/src/plugins/builtin/short-interest/types.ts +9 -0
- package/src/plugins/builtin/short-interest/watch-client.ts +14 -8
- package/src/plugins/builtin/short-interest/watch-model.ts +12 -25
- package/src/plugins/builtin/short-interest/watch-pane.tsx +5 -1
- package/src/plugins/builtin/social-mentions/client.ts +2 -1
- package/src/plugins/builtin/supply-chain/flow.tsx +33 -9
- package/src/plugins/builtin/supply-chain/model.ts +51 -3
- package/src/plugins/builtin/supply-chain/pane.tsx +78 -39
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +1 -1
- package/src/plugins/builtin/themes/headless.ts +8 -5
- package/src/plugins/builtin/themes/model.ts +14 -4
- package/src/plugins/builtin/themes/pane.tsx +24 -5
- package/src/plugins/builtin/thirteenf/headless.ts +5 -5
- package/src/plugins/builtin/thirteenf/signals.ts +3 -1
- package/src/plugins/builtin/ticker-detail/adr-pair/headless.ts +123 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/model.ts +132 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/tab.tsx +87 -0
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +40 -26
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +8 -4
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +67 -3
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +112 -5
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +17 -2
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +21 -7
- package/src/plugins/builtin/ticker-detail/financials/model.ts +36 -1
- package/src/plugins/builtin/ticker-detail/financials/offerings.ts +56 -0
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +62 -13
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +30 -4
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +14 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +148 -35
- package/src/plugins/builtin/ticker-detail/index.tsx +37 -5
- package/src/plugins/builtin/ticker-detail/overview/model.ts +65 -10
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +9 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +68 -11
- package/src/plugins/builtin/ticker-detail/pane.tsx +11 -0
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +8 -3
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +11 -0
- package/src/plugins/builtin/vol-surface/client.ts +28 -7
- package/src/plugins/builtin/vol-surface/headless.ts +43 -15
- package/src/plugins/builtin/vol-surface/model.ts +34 -12
- package/src/plugins/builtin/vol-surface/pane.tsx +33 -13
- package/src/plugins/builtin/vol-surface/stored.ts +34 -3
- package/src/plugins/builtin/vol-surface/tables.ts +14 -0
- package/src/plugins/builtin/volatility/model.ts +5 -10
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +4 -3
- package/src/plugins/builtin/world-venue-map/basemap.ts +3 -1
- package/src/plugins/builtin/world-venue-map/chokepoint-chart.ts +40 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +1 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +90 -11
- package/src/plugins/builtin/world-venue-map/headless.ts +1 -1
- package/src/plugins/builtin/world-venue-map/index.ts +3 -26
- package/src/plugins/builtin/world-venue-map/layers.ts +1 -1
- package/src/plugins/builtin/world-venue-map/map.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/pane.tsx +4 -2
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +15 -4
- package/src/plugins/builtin/yield-curve/client.ts +25 -0
- package/src/plugins/builtin/yield-curve/curves.ts +7 -4
- package/src/plugins/builtin/yield-curve/headless.ts +38 -4
- package/src/plugins/builtin/yield-curve/history.ts +4 -3
- package/src/plugins/builtin/yield-curve/index.tsx +12 -6
- package/src/plugins/builtin/yield-curve/swaps-model.ts +93 -0
- package/src/plugins/builtin/yield-curve/swaps.tsx +99 -0
- package/src/plugins/bundle.ts +1 -1
- package/src/plugins/catalog-browser.ts +2 -1
- package/src/plugins/compat.ts +3 -3
- package/src/plugins/dependencies.ts +75 -14
- package/src/plugins/extracted-plugins.ts +132 -34
- package/src/plugins/host-link.ts +149 -34
- package/src/plugins/installer.ts +35 -10
- package/src/plugins/loader.ts +206 -38
- package/src/plugins/manager-node.ts +2 -2
- package/src/plugins/marketplace/deactivation.ts +22 -0
- package/src/plugins/marketplace/model.ts +2 -2
- package/src/plugins/marketplace/packs.ts +1 -1
- package/src/plugins/ownership.ts +1 -1
- package/src/plugins/peer-retry.ts +155 -0
- package/src/plugins/registry/contributions.ts +3 -1
- package/src/plugins/registry/index.ts +4 -3
- package/src/plugins/registry/plugin-state.ts +3 -0
- package/src/plugins/seed-notice.ts +20 -0
- package/src/plugins/shortcut-argument.ts +39 -0
- package/src/portfolio/allocation.ts +1 -1
- package/src/portfolio/collection-name.ts +31 -0
- package/src/portfolio/column-values.ts +10 -8
- package/src/portfolio/cost-fx.ts +296 -19
- package/src/portfolio/manual-lots.ts +75 -0
- package/src/portfolio/mutations.ts +60 -22
- package/src/portfolio/suffixed-listings.ts +209 -0
- package/src/portfolio/totals-currency.ts +24 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +14 -0
- package/src/public/time-series.ts +11 -8
- package/src/remote/schema.ts +1 -1
- package/src/renderers/browser/config-host.ts +3 -0
- package/src/renderers/browser/main.tsx +23 -3
- package/src/renderers/dom/boot-frame-page.ts +187 -0
- package/src/renderers/dom/boot-frame.ts +237 -0
- package/src/renderers/dom/build-assets.ts +46 -8
- package/src/renderers/dom/desktop/controls.tsx +1 -1
- package/src/renderers/dom/desktop/query-bar.tsx +2 -0
- package/src/renderers/dom/dom-ui-host.tsx +4 -29
- package/src/renderers/dom/host/ascii-text.ts +16 -2
- package/src/renderers/dom/host/box.tsx +43 -2
- package/src/renderers/dom/host/chart-surface.tsx +2 -0
- package/src/renderers/dom/host/hls.chunk.ts +3 -0
- package/src/renderers/dom/host/image-surface.tsx +49 -0
- package/src/renderers/dom/host/media-surface.tsx +24 -18
- package/src/renderers/dom/host/mouse.ts +30 -0
- package/src/renderers/dom/host/size-observer.ts +1 -1
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/host/tabs.tsx +16 -5
- package/src/renderers/dom/host/top-surface.ts +127 -0
- package/src/renderers/dom/styles.css +115 -0
- package/src/renderers/dom/test-utils.tsx +2 -1
- package/src/renderers/electrobun/bun/application-menu/index.ts +3 -3
- package/src/renderers/electrobun/bun/core-capabilities.ts +9 -1
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +3 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +56 -3
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/host-requests.ts +9 -3
- package/src/renderers/electrobun/bun/desktop/initialization.ts +81 -18
- package/src/renderers/electrobun/bun/desktop/update.ts +210 -30
- package/src/renderers/electrobun/bun/external-plugins.ts +29 -7
- package/src/renderers/electrobun/bun/index.ts +11 -1
- package/src/renderers/electrobun/bun/window/boot-frame.ts +67 -0
- package/src/renderers/electrobun/bun/window/create.ts +4 -1
- package/src/renderers/electrobun/shared/boot-frame.ts +7 -0
- package/src/renderers/electrobun/shared/protocol.ts +6 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/config-host.ts +3 -0
- package/src/renderers/electrobun/view/fatal-screen.tsx +1 -1
- package/src/renderers/electrobun/view/main.tsx +30 -4
- package/src/renderers/electrobun/view/news-source.ts +9 -7
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +9 -2
- package/src/renderers/electrobun/view/ui-host.tsx +1 -1
- package/src/renderers/opentui/browser-open.ts +88 -0
- package/src/renderers/opentui/host.tsx +5 -14
- package/src/renderers/opentui/image/loader.ts +3 -2
- package/src/renderers/opentui/native-smoke.ts +10 -1
- package/src/renderers/opentui/pane-image/index.ts +2 -1
- package/src/renderers/opentui/render-lib.ts +253 -0
- package/src/renderers/opentui/render-timing-smoke.ts +1 -1
- package/src/renderers/opentui/start.tsx +8 -1
- package/src/renderers/share/layout-view.tsx +2 -2
- package/src/renderers/share/main.tsx +4 -4
- package/src/renderers/share/view.tsx +1 -1
- package/src/series/resolve.ts +22 -6
- package/src/series/standalone.ts +30 -2
- package/src/series/types.ts +8 -1
- package/src/shares/api.ts +4 -1
- package/src/shares/pane.ts +1 -1
- package/src/sources/gloomberb-cloud/fred-series.ts +46 -1
- package/src/sources/gloomberb-cloud/index.ts +39 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +14 -1
- package/src/sources/gloomberb-cloud/perpetuals.ts +49 -1
- package/src/sources/listing-symbols.ts +37 -0
- package/src/sources/provider-errors.ts +16 -2
- package/src/sources/provider-router/financial-routes.ts +21 -3
- package/src/sources/provider-router/financials.ts +15 -2
- package/src/sources/provider-router/history.ts +30 -8
- package/src/sources/provider-router/index.ts +16 -0
- package/src/sources/provider-router/primary.ts +1 -1
- package/src/state/app/bootstrap.ts +23 -0
- package/src/state/hooks/inline-tickers.ts +30 -5
- package/src/sync/controller.ts +1 -1
- package/src/sync/core-contributors.ts +46 -14
- package/src/team/collections-sync.ts +2 -1
- package/src/team/collections.ts +178 -17
- package/src/telemetry/crash-reports.ts +21 -4
- package/src/telemetry/update-failures-node.ts +59 -0
- package/src/telemetry/update-failures.ts +307 -0
- package/src/test-support/builtin-panes.ts +1 -1
- package/src/theme/colors.ts +3 -30
- package/src/theme/ui-tokens.ts +37 -1
- package/src/tickers/company-name-listing.ts +215 -36
- package/src/tickers/company-name.ts +43 -0
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- package/src/tickers/listing-fate.ts +30 -0
- package/src/tickers/metadata.ts +10 -0
- package/src/tickers/perpetual-listing.ts +5 -2
- package/src/tickers/search/home-listing.ts +75 -0
- package/src/tickers/search/index.ts +76 -27
- package/src/tickers/search/ranking.ts +54 -4
- package/src/tickers/search/upsert.ts +29 -0
- package/src/tickers/terminal-codes.ts +416 -40
- package/src/time-series/bar-aggregation.ts +243 -0
- package/src/time-series/base-series.ts +307 -0
- package/src/time-series/chart-bounds.ts +349 -0
- package/src/time-series/chart-seed.ts +142 -0
- package/src/time-series/economic.ts +5 -0
- package/src/time-series/fundamentals.ts +18 -3
- package/src/time-series/history-acquisition.ts +499 -0
- package/src/time-series/leverage.ts +100 -0
- package/src/time-series/market-resolution.ts +4 -2
- package/src/time-series/market.ts +2 -1
- package/src/time-series/price-comparison.ts +175 -30
- package/src/time-series/range.ts +9 -1
- package/src/time-series/resolution.ts +174 -16
- package/src/time-series/resolve-context.ts +157 -0
- package/src/time-series/resolve.ts +126 -1577
- package/src/time-series/series-name.ts +38 -0
- package/src/time-series/series-presentation.ts +208 -0
- package/src/time-series/spec.ts +11 -6
- package/src/time-series/studies.ts +109 -12
- package/src/time-series/tail-reconcile.ts +121 -0
- package/src/time-series/types.ts +29 -2
- package/src/time-series/use-chart-resolution.ts +4 -5
- package/src/types/broker.ts +10 -0
- package/src/types/config.ts +14 -0
- package/src/types/data-provider.ts +20 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +104 -7
- package/src/types/headless.ts +83 -6
- package/src/types/instrument.ts +3 -0
- package/src/types/issuer-listings.ts +28 -0
- package/src/types/plugin.ts +65 -8
- package/src/types/price-history.ts +2 -0
- package/src/types/ticker.ts +13 -0
- package/src/types/trading.ts +59 -1
- package/src/ui/ascii-font.ts +13 -1
- package/src/ui/host.tsx +6 -1
- package/src/updater/command-names.ts +175 -0
- package/src/updater/failure.ts +163 -0
- package/src/updater/index.ts +97 -28
- package/src/utils/calendar-date.ts +32 -15
- package/src/utils/cash-runway.ts +241 -0
- package/src/utils/central-banks.ts +42 -0
- package/src/utils/cli-output.ts +259 -80
- package/src/utils/contract-month.ts +16 -0
- package/src/utils/crypto-pair.ts +61 -3
- package/src/utils/currency-pair.ts +26 -0
- package/src/utils/currency-units.ts +29 -0
- package/src/utils/datetime-format.ts +10 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +39 -6
- package/src/utils/exchange-announcements.ts +71 -0
- package/src/utils/exchange-rate-snapshot.ts +10 -0
- package/src/utils/financial-statements.ts +83 -4
- package/src/utils/format.ts +34 -16
- package/src/utils/fundamentals.ts +150 -34
- package/src/utils/fx-market-hours.ts +10 -1
- package/src/utils/latest-financial-period.ts +8 -0
- package/src/utils/linux-libc.ts +54 -0
- package/src/utils/market-capitalization.ts +111 -15
- package/src/utils/max-drawdown.ts +64 -0
- package/src/utils/network-failure.ts +83 -0
- package/src/utils/option-expiry.ts +139 -7
- package/src/utils/price-earnings.ts +11 -5
- package/src/utils/price-history.ts +18 -8
- package/src/utils/price-window.ts +131 -0
- package/src/utils/release-date.ts +47 -0
- package/src/utils/sec.ts +71 -0
- package/src/utils/throttled-fetch.ts +11 -4
- package/src/utils/trailing-eps.ts +67 -0
- package/src/utils/typed-text.ts +21 -0
- package/src/utils/utc-time.ts +24 -1
- package/src/version.ts +6 -0
- package/src/cli/pane-functions/screenshot.ts +0 -2122
package/src/i18n/zh-cn.ts
CHANGED
|
@@ -40,6 +40,8 @@ export const zhCN: Record<string, string> = {
|
|
|
40
40
|
"Name": "名称",
|
|
41
41
|
"Title": "标题",
|
|
42
42
|
"Source": "来源",
|
|
43
|
+
"Issuer page": "发行人页面",
|
|
44
|
+
"Description from": "描述来源",
|
|
43
45
|
"Headline": "标题",
|
|
44
46
|
"Symbol": "代码",
|
|
45
47
|
"Price": "价格",
|
|
@@ -115,6 +117,7 @@ export const zhCN: Record<string, string> = {
|
|
|
115
117
|
"Current Layout": "当前布局",
|
|
116
118
|
"Danger": "危险操作",
|
|
117
119
|
"Debug": "调试",
|
|
120
|
+
"Did you mean": "您是不是要找",
|
|
118
121
|
"Exact Match": "精确匹配",
|
|
119
122
|
"Focused Pane": "聚焦面板",
|
|
120
123
|
"Funds & Derivatives": "基金与衍生品",
|
|
@@ -427,7 +430,7 @@ export const zhCN: Record<string, string> = {
|
|
|
427
430
|
"Open another watchlist pane": "再开一个自选列表面板",
|
|
428
431
|
"Open another research pane for the selected ticker or current collection": "为所选股票或当前集合再开一个研究面板",
|
|
429
432
|
"Shortcut and layout help": "快捷键与布局帮助",
|
|
430
|
-
"Browse
|
|
433
|
+
"Browse Gloom release notes.": "浏览 Gloom 版本说明。",
|
|
431
434
|
"Browse version history and release notes.": "浏览版本历史与更新说明。",
|
|
432
435
|
"View and export debug logs": "查看并导出调试日志",
|
|
433
436
|
"Open the debug log viewer": "打开调试日志查看器",
|
|
@@ -504,7 +507,7 @@ export const zhCN: Record<string, string> = {
|
|
|
504
507
|
"Pin Ticker": "固定股票",
|
|
505
508
|
|
|
506
509
|
// ── Help pane ────────────────────────────────────────────────
|
|
507
|
-
"How To Use
|
|
510
|
+
"How To Use Gloom": "如何使用 Gloom",
|
|
508
511
|
"Not sure of a code? Click the search bar at the top, or press {key}, and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "不知道代码?点击顶部的搜索栏,或按 {key},用日常语言输入你想要的,比如 \"top news\"。“功能”标签列出了全部功能。",
|
|
509
512
|
"Not sure of a code? Click the search bar at the top and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "不知道代码?点击顶部的搜索栏,用日常语言输入你想要的,比如 \"top news\"。“功能”标签列出了全部功能。",
|
|
510
513
|
"Click anything to use it; the keys shown beside actions are shortcuts.": "点击任意内容即可使用;操作旁显示的按键是快捷键。",
|
|
@@ -576,7 +579,7 @@ export const zhCN: Record<string, string> = {
|
|
|
576
579
|
"Type these in the command bar (": "在命令栏中输入这些(",
|
|
577
580
|
"Everything is searchable, just type what you want.": "一切皆可搜索,想要什么直接输入。",
|
|
578
581
|
"You're all set": "设置完成",
|
|
579
|
-
"Launching
|
|
582
|
+
"Launching Gloom...": "正在启动 Gloom...",
|
|
580
583
|
"Your broker portfolio is ready and will open directly after launch.": "券商组合已就绪,启动后将直接打开。",
|
|
581
584
|
"Broker sync finished. If you expected holdings, check the selected account or connection mode.": "券商同步完成。若未见持仓,请检查所选账户或连接模式。",
|
|
582
585
|
"Search for broker names in the command bar to connect.": "在命令栏搜索券商名称进行连接。",
|
|
@@ -630,9 +633,9 @@ export const zhCN: Record<string, string> = {
|
|
|
630
633
|
"2. Log in with your IBKR credentials": "2. 使用 IBKR 凭证登录",
|
|
631
634
|
"3. In ": "3. 在 ",
|
|
632
635
|
" Enable \"ActiveX and Socket Clients\"": " 启用“ActiveX and Socket Clients”",
|
|
633
|
-
"
|
|
636
|
+
" Gloom can auto-detect local API ports (4001, 4002, 7496, 7497)": " Gloom 可自动检测本地 API 端口(4001、4002、7496、7497)",
|
|
634
637
|
" Use Manual setup only if you need a custom host or exact socket port": " 仅在需要自定义主机或指定套接字端口时使用手动设置",
|
|
635
|
-
"4. Keep it running while using
|
|
638
|
+
"4. Keep it running while using Gloom": "4. 使用 Gloom 时请保持其运行",
|
|
636
639
|
"You'll need your {broker} API credentials.": "你需要准备 {broker} 的 API 凭证。",
|
|
637
640
|
"Connecting to {broker} and importing accounts and positions...": "正在连接 {broker} 并导入账户和持仓...",
|
|
638
641
|
"Unable to sync {broker}.": "无法同步 {broker}。",
|
|
@@ -1020,13 +1023,35 @@ export const zhCN: Record<string, string> = {
|
|
|
1020
1023
|
"Checking for updates...": "正在检查更新...",
|
|
1021
1024
|
"Downloading v{version}: {percent}%": "正在下载 v{version}:{percent}%",
|
|
1022
1025
|
"Update failed: {error}": "更新失败:{error}",
|
|
1026
|
+
"Update failed": "更新失败",
|
|
1027
|
+
"Update check failed: {reason}": "检查更新失败:{reason}",
|
|
1028
|
+
"no connection": "无网络连接",
|
|
1029
|
+
"connection timed out": "连接超时",
|
|
1030
|
+
"GitHub rate limit": "GitHub 请求限制",
|
|
1031
|
+
"release server error": "发布服务器错误",
|
|
1032
|
+
"unreadable release data": "无法读取发布信息",
|
|
1033
|
+
"no build for this system": "没有适用于此系统的版本",
|
|
1034
|
+
"download interrupted": "下载中断",
|
|
1035
|
+
"download corrupted": "下载已损坏",
|
|
1036
|
+
"no permission to replace the app": "没有替换应用的权限",
|
|
1037
|
+
"move the app to Applications": "请将应用移到“应用程序”文件夹",
|
|
1038
|
+
"app and update on different disks": "应用与更新位于不同的磁盘",
|
|
1039
|
+
"install folder is read-only": "安装文件夹为只读",
|
|
1040
|
+
"disk full": "磁盘已满",
|
|
1041
|
+
"app files in use": "应用文件正在使用",
|
|
1042
|
+
"downloaded update missing": "找不到已下载的更新",
|
|
1043
|
+
"check failed": "检查失败",
|
|
1044
|
+
"download failed": "下载失败",
|
|
1045
|
+
"could not verify the download": "无法验证下载",
|
|
1046
|
+
"could not install": "无法安装",
|
|
1047
|
+
"could not restart": "无法重新启动",
|
|
1023
1048
|
"v{version} available — run {command}": "v{version} 可用 — 执行 {command}",
|
|
1024
|
-
"v{version} available, update through the package manager that installed
|
|
1049
|
+
"v{version} available, update through the package manager that installed Gloom": "v{version} 可用,请通过安装 Gloom 的包管理器更新",
|
|
1025
1050
|
"v{version} available — starting download...": "v{version} 可用 — 开始下载...",
|
|
1026
1051
|
"command bar": "命令栏",
|
|
1027
1052
|
"Tidy Windows": "整理窗口",
|
|
1028
1053
|
"Download desktop app": "下载桌面应用",
|
|
1029
|
-
"Get
|
|
1054
|
+
"Get Gloom for Mac or Windows": "获取 Mac 或 Windows 版 Gloom",
|
|
1030
1055
|
"Dismiss": "忽略",
|
|
1031
1056
|
"Minimize": "最小化",
|
|
1032
1057
|
"Maximize": "最大化",
|
|
@@ -1066,6 +1091,10 @@ export const zhCN: Record<string, string> = {
|
|
|
1066
1091
|
"Expense ratio": "费用率",
|
|
1067
1092
|
"Sponsor fee": "发起人费用",
|
|
1068
1093
|
"Net assets": "净资产",
|
|
1094
|
+
"Gold in trust": "信托持有黄金",
|
|
1095
|
+
"Silver in trust": "信托持有白银",
|
|
1096
|
+
"Day change": "日变动",
|
|
1097
|
+
"since {date}": "较 {date}",
|
|
1069
1098
|
"Sponsor": "发起人",
|
|
1070
1099
|
"Inception": "成立日期",
|
|
1071
1100
|
"Benchmark": "基准",
|
|
@@ -1263,8 +1292,8 @@ export const zhCN: Record<string, string> = {
|
|
|
1263
1292
|
"Waiting for approval...": "等待确认...",
|
|
1264
1293
|
"Approved as {email}": "已以 {email} 登录",
|
|
1265
1294
|
"Denied. Press enter to request a new code.": "已拒绝。按 enter 获取新码。",
|
|
1266
|
-
"Contacting
|
|
1267
|
-
"Can't reach
|
|
1295
|
+
"Contacting Gloom Cloud...": "正在连接 Gloom 云...",
|
|
1296
|
+
"Can't reach Gloom Cloud. Retrying...": "无法连接 Gloom 云,正在重试...",
|
|
1268
1297
|
"Connection problem, retrying...": "连接异常,正在重试...",
|
|
1269
1298
|
"No app? {url}": "没有应用?{url}",
|
|
1270
1299
|
"Not enough room to draw the QR code.": "空间不足,无法绘制二维码。",
|
|
@@ -1312,7 +1341,7 @@ export const zhCN: Record<string, string> = {
|
|
|
1312
1341
|
"Keep supported portfolios, watchlists and layouts in sync on desktop and TUI": "在桌面版和 TUI 之间同步支持的投资组合、自选列表和布局",
|
|
1313
1342
|
"Keep Free for now": "暂时继续使用 Free",
|
|
1314
1343
|
"Keep this workspace local for now": "暂时让此工作区保留在本地",
|
|
1315
|
-
"Make
|
|
1344
|
+
"Make Gloom yours": "打造属于你的 Gloom",
|
|
1316
1345
|
"More data and screens": "更多数据和界面",
|
|
1317
1346
|
"More market data": "更多市场数据",
|
|
1318
1347
|
"More tools for company, market and portfolio research.": "更多用于公司、市场和投资组合研究的工具。",
|
|
@@ -1385,7 +1414,7 @@ export const zhCN: Record<string, string> = {
|
|
|
1385
1414
|
"Verify your email to use Cloud features. You can open Pro setup now or continue locally.": "验证你的邮箱以使用 Cloud 功能。你可以现在打开 Pro 设置,或继续在本地使用。",
|
|
1386
1415
|
"WELCOME": "欢迎",
|
|
1387
1416
|
"You added a ticker and opened its research view using the same command bar you will use every day.": "你使用日常都会用到的同一命令栏添加了股票,并打开了它的研究视图。",
|
|
1388
|
-
"You are already inside
|
|
1417
|
+
"You are already inside Gloom. We will set up a portfolio and teach two real commands, then you can decide whether to add Cloud and Pro.": "你已经进入 Gloom。我们会设置一个投资组合并教你两个真实命令,然后你可以决定是否添加 Cloud 和 Pro。",
|
|
1389
1418
|
"Your Home layout starts with Portfolio and Chat.": "你的主页布局以投资组合和聊天开始。",
|
|
1390
1419
|
"Your market workspace is ready": "你的市场工作区已准备就绪",
|
|
1391
1420
|
"Your workspace is yours": "你的工作区由你掌控",
|
|
@@ -1470,10 +1499,20 @@ export const zhCN: Record<string, string> = {
|
|
|
1470
1499
|
"Pro is paused until your open invoice is paid. Pay it with another card and real-time data comes straight back.": "Pro 已暂停,付清未结账单后恢复。换一张卡付款,实时数据立即恢复。",
|
|
1471
1500
|
"Pay with another card": "换一张卡付款",
|
|
1472
1501
|
"Try Pro free for {days} days": "免费试用 Pro {days} 天",
|
|
1473
|
-
"$0 today, then {price} from {date}. Cancel before and you pay nothing.": "今天 $0,{date} 起 {price}
|
|
1502
|
+
"$0 today, then {price} from {date}. Card required. Cancel before and you pay nothing.": "今天 $0,{date} 起 {price}。需要绑卡。在此之前取消则无需付费。",
|
|
1474
1503
|
"Continue to checkout": "前往结账",
|
|
1475
1504
|
"{price}, billed today. Cancel anytime.": "{price},今天扣款。随时取消。",
|
|
1476
1505
|
"{price}. Cancel anytime.": "{price}。随时取消。",
|
|
1506
|
+
// ── Checkout hand-off ─────────────────────────────────────
|
|
1507
|
+
"Finish checkout in your browser": "在浏览器中完成付款",
|
|
1508
|
+
"Pro turns on here as soon as it's done.": "完成后 Pro 会立即在这里开通。",
|
|
1509
|
+
"No browser opens from here. Open the link on any device.": "这里无法打开浏览器。请在任意设备上打开链接。",
|
|
1510
|
+
"No browser opens from here. Paste the copied link in a browser.": "这里无法打开浏览器。请把已复制的链接粘贴到浏览器中。",
|
|
1511
|
+
"Opening checkout...": "正在打开付款页面...",
|
|
1512
|
+
"Waiting for checkout...": "正在等待付款...",
|
|
1513
|
+
"Pro is on.": "Pro 已开通。",
|
|
1514
|
+
"Checkout done. Confirm your email to turn Pro on.": "付款已完成。确认邮箱后即可开通 Pro。",
|
|
1515
|
+
"esc to close": "esc 关闭",
|
|
1477
1516
|
"Start {days}-day free trial": "开始 {days} 天免费试用",
|
|
1478
1517
|
"$0 today, free for {days} days. Card required. Cancel anytime.": "今天 $0,免费 {days} 天。需要绑卡。随时取消。",
|
|
1479
1518
|
"Billed today. Cancel anytime.": "今天扣款。随时取消。",
|
package/src/i18n/zh-tw.ts
CHANGED
|
@@ -40,6 +40,8 @@ export const zhTW: Record<string, string> = {
|
|
|
40
40
|
"Name": "名稱",
|
|
41
41
|
"Title": "標題",
|
|
42
42
|
"Source": "來源",
|
|
43
|
+
"Issuer page": "發行人頁面",
|
|
44
|
+
"Description from": "描述來源",
|
|
43
45
|
"Headline": "標題",
|
|
44
46
|
"Symbol": "代號",
|
|
45
47
|
"Price": "價格",
|
|
@@ -115,6 +117,7 @@ export const zhTW: Record<string, string> = {
|
|
|
115
117
|
"Current Layout": "目前版面設定",
|
|
116
118
|
"Danger": "危險操作",
|
|
117
119
|
"Debug": "除錯",
|
|
120
|
+
"Did you mean": "您是不是要找",
|
|
118
121
|
"Exact Match": "精確符合",
|
|
119
122
|
"Focused Pane": "聚焦面板",
|
|
120
123
|
"Funds & Derivatives": "基金與衍生性商品",
|
|
@@ -427,7 +430,7 @@ export const zhTW: Record<string, string> = {
|
|
|
427
430
|
"Open another watchlist pane": "再開一個自選清單面板",
|
|
428
431
|
"Open another research pane for the selected ticker or current collection": "為所選股票或目前清單再開一個研究面板",
|
|
429
432
|
"Shortcut and layout help": "快速鍵與版面設定說明",
|
|
430
|
-
"Browse
|
|
433
|
+
"Browse Gloom release notes.": "瀏覽 Gloom 版本說明。",
|
|
431
434
|
"Browse version history and release notes.": "瀏覽版本歷史與更新說明。",
|
|
432
435
|
"View and export debug logs": "檢視並匯出除錯日誌",
|
|
433
436
|
"Open the debug log viewer": "開啟除錯日誌檢視器",
|
|
@@ -504,7 +507,7 @@ export const zhTW: Record<string, string> = {
|
|
|
504
507
|
"Pin Ticker": "固定股票",
|
|
505
508
|
|
|
506
509
|
// ── Help pane ────────────────────────────────────────────────
|
|
507
|
-
"How To Use
|
|
510
|
+
"How To Use Gloom": "如何使用 Gloom",
|
|
508
511
|
"Not sure of a code? Click the search bar at the top, or press {key}, and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "不知道代碼?點擊頂部的搜尋列,或按 {key},用日常用語輸入你想要的,例如 \"top news\"。「功能」標籤列出了全部功能。",
|
|
509
512
|
"Not sure of a code? Click the search bar at the top and type what you want in plain words, like \"top news\". The Functions tab lists everything.": "不知道代碼?點擊頂部的搜尋列,用日常用語輸入你想要的,例如 \"top news\"。「功能」標籤列出了全部功能。",
|
|
510
513
|
"Click anything to use it; the keys shown beside actions are shortcuts.": "點擊任何內容即可使用;動作旁顯示的按鍵是快捷鍵。",
|
|
@@ -576,7 +579,7 @@ export const zhTW: Record<string, string> = {
|
|
|
576
579
|
"Type these in the command bar (": "在命令列中輸入這些(",
|
|
577
580
|
"Everything is searchable, just type what you want.": "所有功能都能搜尋,直接輸入想找的內容即可。",
|
|
578
581
|
"You're all set": "設定完成",
|
|
579
|
-
"Launching
|
|
582
|
+
"Launching Gloom...": "正在啟動 Gloom...",
|
|
580
583
|
"Your broker portfolio is ready and will open directly after launch.": "券商投資組合已就緒,啟動後會直接開啟。",
|
|
581
584
|
"Broker sync finished. If you expected holdings, check the selected account or connection mode.": "券商同步完成。若未見持倉,請檢查所選帳戶或連線模式。",
|
|
582
585
|
"Search for broker names in the command bar to connect.": "在命令列搜尋券商名稱進行連線。",
|
|
@@ -630,9 +633,9 @@ export const zhTW: Record<string, string> = {
|
|
|
630
633
|
"2. Log in with your IBKR credentials": "2. 使用 IBKR 憑證登入",
|
|
631
634
|
"3. In ": "3. 在 ",
|
|
632
635
|
" Enable \"ActiveX and Socket Clients\"": " 啟用“ActiveX and Socket Clients”",
|
|
633
|
-
"
|
|
636
|
+
" Gloom can auto-detect local API ports (4001, 4002, 7496, 7497)": " Gloom 可自動偵測本機 API 連接埠(4001、4002、7496、7497)",
|
|
634
637
|
" Use Manual setup only if you need a custom host or exact socket port": " 僅在需要自訂主機或指定 Socket 連接埠時使用手動設定",
|
|
635
|
-
"4. Keep it running while using
|
|
638
|
+
"4. Keep it running while using Gloom": "4. 使用 Gloom 時請讓它保持執行",
|
|
636
639
|
"You'll need your {broker} API credentials.": "你需要準備 {broker} 的 API 憑證。",
|
|
637
640
|
"Connecting to {broker} and importing accounts and positions...": "正在連線 {broker} 並匯入帳戶和持倉...",
|
|
638
641
|
"Unable to sync {broker}.": "無法同步 {broker}。",
|
|
@@ -1020,13 +1023,35 @@ export const zhTW: Record<string, string> = {
|
|
|
1020
1023
|
"Checking for updates...": "正在檢查更新...",
|
|
1021
1024
|
"Downloading v{version}: {percent}%": "正在下載 v{version}:{percent}%",
|
|
1022
1025
|
"Update failed: {error}": "更新失敗:{error}",
|
|
1026
|
+
"Update failed": "更新失敗",
|
|
1027
|
+
"Update check failed: {reason}": "檢查更新失敗:{reason}",
|
|
1028
|
+
"no connection": "無網路連線",
|
|
1029
|
+
"connection timed out": "連線逾時",
|
|
1030
|
+
"GitHub rate limit": "GitHub 請求限制",
|
|
1031
|
+
"release server error": "發布伺服器錯誤",
|
|
1032
|
+
"unreadable release data": "無法讀取發布資訊",
|
|
1033
|
+
"no build for this system": "沒有適用於此系統的版本",
|
|
1034
|
+
"download interrupted": "下載中斷",
|
|
1035
|
+
"download corrupted": "下載已損毀",
|
|
1036
|
+
"no permission to replace the app": "沒有取代應用程式的權限",
|
|
1037
|
+
"move the app to Applications": "請將應用程式移到「應用程式」資料夾",
|
|
1038
|
+
"app and update on different disks": "應用程式與更新位於不同的磁碟",
|
|
1039
|
+
"install folder is read-only": "安裝資料夾為唯讀",
|
|
1040
|
+
"disk full": "磁碟已滿",
|
|
1041
|
+
"app files in use": "應用程式檔案正在使用中",
|
|
1042
|
+
"downloaded update missing": "找不到已下載的更新",
|
|
1043
|
+
"check failed": "檢查失敗",
|
|
1044
|
+
"download failed": "下載失敗",
|
|
1045
|
+
"could not verify the download": "無法驗證下載",
|
|
1046
|
+
"could not install": "無法安裝",
|
|
1047
|
+
"could not restart": "無法重新啟動",
|
|
1023
1048
|
"v{version} available — run {command}": "v{version} 可用 — 執行 {command}",
|
|
1024
|
-
"v{version} available, update through the package manager that installed
|
|
1049
|
+
"v{version} available, update through the package manager that installed Gloom": "v{version} 可用,請透過安裝 Gloom 的套件管理器更新",
|
|
1025
1050
|
"v{version} available — starting download...": "v{version} 可用 — 開始下載...",
|
|
1026
1051
|
"command bar": "命令列",
|
|
1027
1052
|
"Tidy Windows": "整理視窗",
|
|
1028
1053
|
"Download desktop app": "下載桌面應用程式",
|
|
1029
|
-
"Get
|
|
1054
|
+
"Get Gloom for Mac or Windows": "取得 Mac 或 Windows 版 Gloom",
|
|
1030
1055
|
"Dismiss": "忽略",
|
|
1031
1056
|
"Minimize": "最小化",
|
|
1032
1057
|
"Maximize": "最大化",
|
|
@@ -1066,6 +1091,10 @@ export const zhTW: Record<string, string> = {
|
|
|
1066
1091
|
"Expense ratio": "費用率",
|
|
1067
1092
|
"Sponsor fee": "發起人費用",
|
|
1068
1093
|
"Net assets": "淨資產",
|
|
1094
|
+
"Gold in trust": "信託持有黃金",
|
|
1095
|
+
"Silver in trust": "信託持有白銀",
|
|
1096
|
+
"Day change": "日變動",
|
|
1097
|
+
"since {date}": "較 {date}",
|
|
1069
1098
|
"Sponsor": "發起人",
|
|
1070
1099
|
"Inception": "成立日期",
|
|
1071
1100
|
"Benchmark": "基準",
|
|
@@ -1263,8 +1292,8 @@ export const zhTW: Record<string, string> = {
|
|
|
1263
1292
|
"Waiting for approval...": "等待確認...",
|
|
1264
1293
|
"Approved as {email}": "已以 {email} 登入",
|
|
1265
1294
|
"Denied. Press enter to request a new code.": "已拒絕。按 enter 取得新碼。",
|
|
1266
|
-
"Contacting
|
|
1267
|
-
"Can't reach
|
|
1295
|
+
"Contacting Gloom Cloud...": "正在連線 Gloom 雲端...",
|
|
1296
|
+
"Can't reach Gloom Cloud. Retrying...": "無法連線 Gloom 雲端,正在重試...",
|
|
1268
1297
|
"Connection problem, retrying...": "連線異常,正在重試...",
|
|
1269
1298
|
"No app? {url}": "沒有應用程式?{url}",
|
|
1270
1299
|
"Not enough room to draw the QR code.": "空間不足,無法繪製 QR 碼。",
|
|
@@ -1312,7 +1341,7 @@ export const zhTW: Record<string, string> = {
|
|
|
1312
1341
|
"Keep supported portfolios, watchlists and layouts in sync on desktop and TUI": "在桌面版和 TUI 之間同步支援的投資組合、自選清單和版面配置",
|
|
1313
1342
|
"Keep Free for now": "暫時繼續使用 Free",
|
|
1314
1343
|
"Keep this workspace local for now": "暫時將此工作區保留在本機",
|
|
1315
|
-
"Make
|
|
1344
|
+
"Make Gloom yours": "打造屬於你的 Gloom",
|
|
1316
1345
|
"More data and screens": "更多資料和畫面",
|
|
1317
1346
|
"More market data": "更多市場資料",
|
|
1318
1347
|
"More tools for company, market and portfolio research.": "更多用於公司、市場和投資組合研究的工具。",
|
|
@@ -1385,7 +1414,7 @@ export const zhTW: Record<string, string> = {
|
|
|
1385
1414
|
"Verify your email to use Cloud features. You can open Pro setup now or continue locally.": "驗證你的電子郵件以使用 Cloud 功能。你可以現在開啟 Pro 設定,或繼續在本機使用。",
|
|
1386
1415
|
"WELCOME": "歡迎",
|
|
1387
1416
|
"You added a ticker and opened its research view using the same command bar you will use every day.": "你使用每天都會用到的同一個命令列新增了股票,並開啟其研究檢視。",
|
|
1388
|
-
"You are already inside
|
|
1417
|
+
"You are already inside Gloom. We will set up a portfolio and teach two real commands, then you can decide whether to add Cloud and Pro.": "你已進入 Gloom。我們會設定投資組合並教你兩個實際命令,接著你可以決定是否加入 Cloud 和 Pro。",
|
|
1389
1418
|
"Your Home layout starts with Portfolio and Chat.": "你的首頁版面從投資組合和聊天開始。",
|
|
1390
1419
|
"Your market workspace is ready": "你的市場工作區已準備就緒",
|
|
1391
1420
|
"Your workspace is yours": "你的工作區是你的了",
|
|
@@ -1470,10 +1499,20 @@ export const zhTW: Record<string, string> = {
|
|
|
1470
1499
|
"Pro is paused until your open invoice is paid. Pay it with another card and real-time data comes straight back.": "Pro 已暫停,付清未結帳單後恢復。換一張卡付款,即時資料立即恢復。",
|
|
1471
1500
|
"Pay with another card": "換一張卡付款",
|
|
1472
1501
|
"Try Pro free for {days} days": "免費試用 Pro {days} 天",
|
|
1473
|
-
"$0 today, then {price} from {date}. Cancel before and you pay nothing.": "今天 $0,{date} 起 {price}
|
|
1502
|
+
"$0 today, then {price} from {date}. Card required. Cancel before and you pay nothing.": "今天 $0,{date} 起 {price}。需要綁卡。在此之前取消則無需付費。",
|
|
1474
1503
|
"Continue to checkout": "前往結帳",
|
|
1475
1504
|
"{price}, billed today. Cancel anytime.": "{price},今天扣款。隨時取消。",
|
|
1476
1505
|
"{price}. Cancel anytime.": "{price}。隨時取消。",
|
|
1506
|
+
// ── Checkout hand-off ─────────────────────────────────────
|
|
1507
|
+
"Finish checkout in your browser": "在瀏覽器中完成付款",
|
|
1508
|
+
"Pro turns on here as soon as it's done.": "完成後 Pro 會立即在這裡開通。",
|
|
1509
|
+
"No browser opens from here. Open the link on any device.": "這裡無法開啟瀏覽器。請在任意裝置上開啟連結。",
|
|
1510
|
+
"No browser opens from here. Paste the copied link in a browser.": "這裡無法開啟瀏覽器。請把已複製的連結貼到瀏覽器中。",
|
|
1511
|
+
"Opening checkout...": "正在開啟付款頁面...",
|
|
1512
|
+
"Waiting for checkout...": "正在等待付款...",
|
|
1513
|
+
"Pro is on.": "Pro 已開通。",
|
|
1514
|
+
"Checkout done. Confirm your email to turn Pro on.": "付款已完成。確認信箱後即可開通 Pro。",
|
|
1515
|
+
"esc to close": "esc 關閉",
|
|
1477
1516
|
"Start {days}-day free trial": "開始 {days} 天免費試用",
|
|
1478
1517
|
"$0 today, free for {days} days. Card required. Cancel anytime.": "今天 $0,免費 {days} 天。需要綁卡。隨時取消。",
|
|
1479
1518
|
"Billed today. Cancel anytime.": "今天扣款。隨時取消。",
|
package/src/layout/desks.ts
CHANGED
|
@@ -48,7 +48,7 @@ interface DeskPane {
|
|
|
48
48
|
/** The mnemonic as the command bar takes it. */
|
|
49
49
|
fn: string;
|
|
50
50
|
arg?: string;
|
|
51
|
-
/** The function's options, as `
|
|
51
|
+
/** The function's options, as `gloom fn` takes them. */
|
|
52
52
|
options?: Readonly<Record<string, string>>;
|
|
53
53
|
/** The pane (its place in the desk, from 1) whose ticker this one follows. */
|
|
54
54
|
follows?: number;
|
|
@@ -11,7 +11,7 @@ import { addPaneFloating, bringToFront, getDockedPaneIds, isPaneInLayout } from
|
|
|
11
11
|
/**
|
|
12
12
|
* Opening a pane from a CLI command that launches the UI.
|
|
13
13
|
*
|
|
14
|
-
* `
|
|
14
|
+
* `gloom <something> <args>` has to leave the app in the state the
|
|
15
15
|
* arguments describe before the first frame: the pane present, focused, and
|
|
16
16
|
* already holding the query rather than whatever the last session left. That is
|
|
17
17
|
* two writes with different lifetimes — the layout in the config, the pane's
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
clampFloatingRect,
|
|
10
10
|
clampFloatingRectWithinBounds,
|
|
11
11
|
defaultFloatingRect,
|
|
12
|
+
compactFloatingZ,
|
|
12
13
|
maxFloatingZ,
|
|
13
14
|
MIN_FLOAT_HEIGHT,
|
|
14
15
|
MIN_FLOAT_WIDTH,
|
|
@@ -44,7 +45,7 @@ export function floatAtRect(layout: LayoutConfig, instanceId: string, rect: Floa
|
|
|
44
45
|
const base = detachPane(layout, instanceId);
|
|
45
46
|
return finalizeLayout({
|
|
46
47
|
...base,
|
|
47
|
-
floating: [
|
|
48
|
+
floating: compactFloatingZ([
|
|
48
49
|
...base.floating.filter((entry) => entry.instanceId !== instanceId),
|
|
49
50
|
{
|
|
50
51
|
instanceId,
|
|
@@ -54,7 +55,7 @@ export function floatAtRect(layout: LayoutConfig, instanceId: string, rect: Floa
|
|
|
54
55
|
height: rect.height,
|
|
55
56
|
zIndex: rect.zIndex ?? maxFloatingZ(layout) + 1,
|
|
56
57
|
},
|
|
57
|
-
],
|
|
58
|
+
]),
|
|
58
59
|
});
|
|
59
60
|
}
|
|
60
61
|
|
|
@@ -140,7 +141,8 @@ export function addPaneFloating(
|
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
export function bringToFront(layout: LayoutConfig, instanceId: string): LayoutConfig {
|
|
143
|
-
|
|
144
|
+
const raised = updateFloatingPane(layout, instanceId, { zIndex: maxFloatingZ(layout) + 1 });
|
|
145
|
+
return finalizeLayout({ ...raised, floating: compactFloatingZ(raised.floating) });
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
export function getRememberedFloatingRect(
|
|
@@ -65,7 +65,49 @@ export function defaultFloatingRect(termWidth: number, termHeight: number, def?:
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
export function maxFloatingZ(layout: LayoutConfig): number {
|
|
68
|
-
return layout.floating.reduce((highest, entry) => Math.max(highest, entry.zIndex ??
|
|
68
|
+
return layout.floating.reduce((highest, entry) => Math.max(highest, entry.zIndex ?? FLOATING_PANE_BASE_Z), FLOATING_PANE_BASE_Z);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Where floating panes stack from, above the docked panes and the dividers between them. */
|
|
72
|
+
const FLOATING_PANE_BASE_Z = 50;
|
|
73
|
+
|
|
74
|
+
/** The lowest of the shell's fixed overlays over every pane: the drag outline (95; the drop preview is 96). */
|
|
75
|
+
const SHELL_PREVIEW_Z = 95;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* How far above its own z a floating pane draws: its resize edges one level
|
|
79
|
+
* up (shell/pane/layers.tsx), window mode's highlight up to three
|
|
80
|
+
* (shell/window-mode/overlays.tsx).
|
|
81
|
+
*/
|
|
82
|
+
const FLOATING_PANE_CHROME_LAYERS = 3;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The highest z a floating pane holds, 91: with its chrome above it, still
|
|
86
|
+
* under the drag and dock previews, the window-mode status and the pane menu,
|
|
87
|
+
* which the shell draws at fixed levels over every pane, in the terminal's
|
|
88
|
+
* cells, in the kitty images it cuts around them and on the desktop alike.
|
|
89
|
+
* Raising a pane adds one to the top, so a stack that would pass this is
|
|
90
|
+
* renumbered from the base in the same order; a layout saved with a higher
|
|
91
|
+
* stack is renumbered when it loads.
|
|
92
|
+
*/
|
|
93
|
+
export const FLOATING_PANE_MAX_Z = SHELL_PREVIEW_Z - FLOATING_PANE_CHROME_LAYERS - 1;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The entries with the same front-to-back order and no z above
|
|
97
|
+
* `FLOATING_PANE_MAX_Z`: the same array when none is, else every entry
|
|
98
|
+
* renumbered from the base (equal z keep their array order, as they draw).
|
|
99
|
+
* Past 42 floating panes the numbers cannot fit and the top ones run over.
|
|
100
|
+
*/
|
|
101
|
+
export function compactFloatingZ(entries: FloatingPaneEntry[]): FloatingPaneEntry[] {
|
|
102
|
+
if (entries.every((entry) => (entry.zIndex ?? FLOATING_PANE_BASE_Z) <= FLOATING_PANE_MAX_Z)) return entries;
|
|
103
|
+
const order = entries
|
|
104
|
+
.map((entry, index) => ({ index, z: entry.zIndex ?? FLOATING_PANE_BASE_Z }))
|
|
105
|
+
.sort((left, right) => left.z - right.z || left.index - right.index);
|
|
106
|
+
const next = [...entries];
|
|
107
|
+
order.forEach(({ index }, rank) => {
|
|
108
|
+
next[index] = { ...entries[index]!, zIndex: FLOATING_PANE_BASE_Z + rank };
|
|
109
|
+
});
|
|
110
|
+
return next;
|
|
69
111
|
}
|
|
70
112
|
|
|
71
113
|
export function updateFloatingPane(
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { resolveTickerForPane } from "../core/state/app/layout";
|
|
2
|
+
import type { AppState } from "../core/state/app/types";
|
|
3
|
+
import { isPaneInLayout } from "./pane-manager";
|
|
4
|
+
import { findPaneInstance, type PaneInstanceConfig } from "../types/config";
|
|
5
|
+
|
|
6
|
+
export interface SelectedLayoutTicker {
|
|
7
|
+
rootInstanceId: string;
|
|
8
|
+
symbol: string;
|
|
9
|
+
/** Visible panes that show this symbol, including the root. */
|
|
10
|
+
memberCount: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The instrument the command prompt is offering. The focused pane's ticker
|
|
15
|
+
* when it has one, otherwise the linked desk, so a command that needs a
|
|
16
|
+
* ticker can use the symbol already on screen.
|
|
17
|
+
*/
|
|
18
|
+
export function commandPromptTicker(state: AppState): { symbol: string; rootInstanceId: string } | null {
|
|
19
|
+
const selection = selectedLayoutTicker(state);
|
|
20
|
+
if (!selection) return null;
|
|
21
|
+
return { symbol: selection.symbol, rootInstanceId: selection.rootInstanceId };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The ticker a layout is on. The focused pane's group wins. Otherwise the
|
|
26
|
+
* largest group of two or more visible panes. A lone pane counts only while
|
|
27
|
+
* it is focused, so a news pane does not hide a linked desk, and an unlinked
|
|
28
|
+
* desk does not invent a group.
|
|
29
|
+
*/
|
|
30
|
+
export function selectedLayoutTicker(state: AppState): SelectedLayoutTicker | null {
|
|
31
|
+
const groups = new Map<string, { symbol: string; count: number; order: number }>();
|
|
32
|
+
state.config.layout.instances.forEach((instance, order) => {
|
|
33
|
+
const rootId = tickerRootId(state, instance.instanceId);
|
|
34
|
+
if (!rootId) return;
|
|
35
|
+
const symbol = resolveTickerForPane(state, rootId);
|
|
36
|
+
if (!symbol) return;
|
|
37
|
+
const group = groups.get(rootId);
|
|
38
|
+
if (group) group.count += 1;
|
|
39
|
+
else groups.set(rootId, { symbol, count: 1, order });
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const focusedRoot = state.focusedPaneId ? tickerRootId(state, state.focusedPaneId) : null;
|
|
43
|
+
const focused = focusedRoot ? groups.get(focusedRoot) : undefined;
|
|
44
|
+
if (focusedRoot && focused) {
|
|
45
|
+
return { rootInstanceId: focusedRoot, symbol: focused.symbol, memberCount: focused.count };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let best: SelectedLayoutTicker & { order: number } | null = null;
|
|
49
|
+
for (const [rootInstanceId, group] of groups) {
|
|
50
|
+
if (group.count < 2) continue;
|
|
51
|
+
if (
|
|
52
|
+
!best
|
|
53
|
+
|| group.count > best.memberCount
|
|
54
|
+
|| (group.count === best.memberCount && group.order < best.order)
|
|
55
|
+
) {
|
|
56
|
+
best = { rootInstanceId, symbol: group.symbol, memberCount: group.count, order: group.order };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return best
|
|
60
|
+
? { rootInstanceId: best.rootInstanceId, symbol: best.symbol, memberCount: best.memberCount }
|
|
61
|
+
: null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The pane whose symbol the others follow. A cycle or a hidden pane has none. */
|
|
65
|
+
function tickerRootId(state: AppState, paneId: string, seen = new Set<string>()): string | null {
|
|
66
|
+
if (seen.has(paneId)) return null;
|
|
67
|
+
seen.add(paneId);
|
|
68
|
+
const layout = state.config.layout;
|
|
69
|
+
if (!isPaneInLayout(layout, paneId)) return null;
|
|
70
|
+
const instance: PaneInstanceConfig | undefined = findPaneInstance(layout, paneId);
|
|
71
|
+
if (!instance) return null;
|
|
72
|
+
if (instance.binding?.kind === "follow") return tickerRootId(state, instance.binding.sourceInstanceId, seen);
|
|
73
|
+
return resolveTickerForPane(state, paneId) ? paneId : null;
|
|
74
|
+
}
|