gloomberb 0.16.4 → 0.16.6
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 +14 -91
- package/package.json +5 -1
- package/src/{plugins/builtin/cloud → account}/auth-form.tsx +9 -9
- package/src/{plugins/builtin/cloud → account}/auth-model.ts +4 -4
- package/src/account/billing.ts +57 -0
- package/src/{plugins/builtin/cloud → account}/device-signin-dialog.tsx +18 -12
- package/src/{plugins/builtin/cloud → account}/device-signin.ts +2 -2
- package/src/{plugins/builtin/cloud → account}/email-auth-attempt.ts +2 -2
- package/src/account/session.ts +16 -0
- package/src/{plugins/builtin/cloud → account}/upgrade-dialog.tsx +16 -15
- package/src/{plugins/builtin/cloud → account}/upgrade-personalization.ts +7 -7
- package/src/{plugins/builtin/cloud → account}/upgrade-tickers.ts +6 -6
- package/src/{plugins/builtin/cloud → account}/verification-panel.tsx +6 -6
- package/src/api-client/central-bank-rates.ts +6 -1
- package/src/api-client/chat.ts +26 -0
- package/src/api-client/credit-boards.ts +2 -0
- package/src/api-client/data.ts +73 -3
- package/src/api-client/earnings.ts +6 -0
- package/src/api-client/europe-energy.ts +106 -0
- package/src/api-client/futures-curve.ts +56 -0
- package/src/api-client/index.ts +13 -1
- package/src/api-client/market-discovery.ts +13 -1
- package/src/api-client/normalizers.ts +32 -0
- package/src/api-client/paths.ts +7 -0
- package/src/api-client/perps.ts +8 -0
- package/src/api-client/request.ts +9 -2
- package/src/api-client/research-activity.ts +15 -10
- package/src/api-client/socket.ts +29 -0
- package/src/api-client/themes.ts +22 -1
- package/src/api-client/types.ts +78 -2
- package/src/api-client/yield-curves.ts +8 -0
- package/src/app/global-shortcuts.ts +50 -2
- package/src/app/keybindings/actions.ts +12 -1
- package/src/app/pane-runtime/plugin-bindings.ts +2 -2
- package/src/app/pane-runtime/ticker-open-runtime.ts +16 -6
- package/src/app/runtime/desktop-deeplink.ts +10 -5
- package/src/app/runtime/startup.ts +1 -1
- package/src/app.tsx +6 -0
- package/src/architecture/core-builtin-allowlist.json +8 -26
- package/src/ask-gloom/pane-context.ts +114 -0
- package/src/ask-gloom/pane-request.ts +70 -0
- package/src/ask-gloom/pane-text.ts +201 -0
- package/src/brokers/signed-in/sign-in-dialog.tsx +11 -5
- package/src/capabilities/chart-series.ts +19 -2
- package/src/capabilities/factories.ts +1 -0
- package/src/cli/central-bank-events.ts +23 -0
- package/src/cli/command-options.ts +17 -5
- package/src/cli/commands/crypto-hints.ts +35 -2
- package/src/cli/commands/fred-series.ts +146 -0
- package/src/cli/commands/market.ts +501 -115
- package/src/cli/commands/news-hints.ts +62 -0
- package/src/cli/commands/news-search.ts +53 -0
- package/src/cli/commands/options-leaps.ts +5 -2
- package/src/cli/commands/overview.ts +132 -26
- package/src/cli/commands/remote.ts +2 -1
- package/src/cli/commands/search.ts +317 -13
- package/src/cli/commands/system.ts +55 -8
- package/src/cli/commands/ticker.ts +155 -18
- package/src/cli/context.ts +45 -14
- package/src/cli/desktop-pane-shot.ts +76 -7
- package/src/cli/earnings-calendar.ts +71 -0
- package/src/cli/errors.ts +7 -5
- package/src/cli/exit-codes.ts +8 -0
- package/src/cli/export-source.ts +58 -0
- package/src/cli/freshness.ts +18 -7
- package/src/cli/glossary.ts +483 -0
- package/src/cli/help.ts +10 -0
- package/src/cli/helpers.ts +2 -5
- package/src/cli/history-rows.ts +118 -7
- package/src/cli/index-roots.ts +7 -0
- package/src/cli/index.ts +29 -9
- package/src/cli/known-gaps.ts +84 -0
- package/src/cli/listing-arg.ts +551 -97
- package/src/cli/not-a-ticker.ts +24 -9
- package/src/cli/pane-functions/access-gate.ts +13 -2
- package/src/cli/pane-functions/capabilities.ts +4 -3
- package/src/cli/pane-functions/catalog.ts +214 -40
- package/src/cli/pane-functions/data.ts +42 -8
- package/src/cli/pane-functions/discovery.ts +1 -0
- package/src/cli/pane-functions/dom.ts +37 -8
- package/src/cli/pane-functions/freshness.ts +393 -49
- package/src/cli/pane-functions/function-help.ts +31 -15
- package/src/cli/pane-functions/headless.ts +98 -30
- package/src/cli/pane-functions/index.ts +101 -19
- package/src/cli/pane-functions/market-session.ts +22 -8
- package/src/cli/pane-functions/options.ts +71 -22
- package/src/cli/pane-functions/report-notices.ts +25 -7
- package/src/cli/pane-functions/report.ts +15 -8
- package/src/cli/pane-functions/resolver.ts +74 -19
- package/src/cli/pane-functions/screenshot.ts +250 -27
- package/src/cli/perpetual-contract.ts +60 -0
- package/src/cli/registry.ts +3 -1
- package/src/cli/report-tables.ts +26 -7
- package/src/cli/result.ts +45 -11
- package/src/cli/series-search.ts +111 -0
- package/src/cli/staged-tickers.ts +52 -0
- package/src/cli/symbol-args.ts +27 -0
- package/src/cli/symbol-list.ts +154 -0
- package/src/cli/symbol-rows.ts +154 -0
- package/src/cli/ticker-resolution.ts +311 -27
- package/src/cli/types.ts +5 -0
- package/src/components/chart/composite/axis-overlays.tsx +14 -3
- package/src/components/chart/composite/composite-chart.tsx +71 -11
- package/src/components/chart/composite/crosshair-readout.tsx +150 -0
- package/src/components/chart/composite/downsample.ts +1 -1
- package/src/components/chart/composite/format.ts +29 -0
- package/src/components/chart/composite/interactions.ts +9 -2
- package/src/components/chart/composite/legend.tsx +100 -33
- package/src/components/chart/composite/panel-bitmap.ts +70 -35
- package/src/components/chart/composite/panel-labels.ts +18 -17
- package/src/components/chart/composite/panel-series.ts +1 -0
- package/src/components/chart/composite/panel-surface.tsx +46 -21
- package/src/components/chart/composite/price-axis-labels.tsx +3 -1
- package/src/components/chart/composite/rasterizer.ts +50 -8
- package/src/components/chart/composite/scene.ts +2 -1
- package/src/components/chart/composite/time-scale.ts +26 -9
- package/src/components/chart/composite/types.ts +18 -0
- package/src/components/chart/composite/use-composite-viewport.ts +30 -2
- package/src/components/chart/native/raster/crosshair.ts +8 -3
- package/src/components/chart/native/raster/primitives.ts +85 -21
- package/src/components/chart/native/surface/manager.ts +33 -8
- package/src/components/chart/surface3d/chart.tsx +1 -1
- package/src/components/command-bar/action-runtime.ts +1 -1
- package/src/components/command-bar/commands/collection-list.ts +210 -0
- package/src/components/command-bar/commands/collection.ts +40 -1
- package/src/components/command-bar/commands/direct/index.ts +4 -0
- package/src/components/command-bar/commands/registry.ts +8 -0
- package/src/components/command-bar/panel/index.tsx +11 -3
- package/src/components/command-bar/panel/runtime.ts +3 -0
- package/src/components/command-bar/panel/types.ts +2 -0
- package/src/components/command-bar/routes/root/plugin-install.ts +4 -4
- package/src/components/command-bar/routes/root/provider-search.ts +4 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +12 -11
- package/src/components/command-bar/routes/ticker-search/route.ts +4 -3
- package/src/components/command-bar/routing/actions.ts +1 -1
- package/src/components/command-bar/workflow/tickers.ts +42 -17
- package/src/components/layout/detached-pane-shell.tsx +68 -39
- package/src/components/layout/floating-pane.tsx +10 -1
- package/src/components/layout/header.tsx +25 -5
- package/src/components/layout/missing-pane.tsx +3 -3
- package/src/components/layout/pane/capture-stamp.ts +41 -0
- package/src/components/layout/pane/capture-status.ts +12 -0
- package/src/components/layout/pane/content.tsx +7 -13
- package/src/components/layout/pane/footer/index.tsx +6 -2
- package/src/components/layout/pane/footer/keyboard.ts +3 -0
- package/src/components/layout/pane/footer/model.ts +41 -1
- package/src/components/layout/pane/header.tsx +50 -1
- package/src/components/layout/pane/index.tsx +21 -3
- package/src/components/layout/pane/sidebar.tsx +88 -21
- package/src/components/layout/shell/active-drag.ts +21 -5
- package/src/components/layout/shell/cursor-occlusion.ts +2 -1
- package/src/components/layout/shell/drag/index.ts +39 -9
- package/src/components/layout/shell/drag/live.ts +61 -51
- package/src/components/layout/shell/drag/runtime.ts +54 -12
- package/src/components/layout/shell/index.tsx +84 -65
- package/src/components/layout/shell/menu.ts +14 -1
- package/src/components/layout/shell/native/pointer-runtime.ts +3 -1
- package/src/components/layout/shell/pane/actions.ts +32 -10
- package/src/components/layout/shell/pane/ask.ts +131 -0
- package/src/components/layout/shell/pane/capture.ts +162 -0
- package/src/components/layout/shell/pane/layers.tsx +218 -50
- package/src/components/layout/shell/pane/management-shortcuts.ts +46 -1
- package/src/components/layout/shell/shortcuts.ts +21 -4
- package/src/components/layout/shell/terminal-pointer-runtime.ts +24 -0
- package/src/components/markdown-text.tsx +62 -20
- package/src/components/metric-treemap/heat-surface.tsx +8 -1
- package/src/components/onboarding/account-step/form-panel.tsx +1 -1
- package/src/components/onboarding/account-step/index.tsx +1 -1
- package/src/components/onboarding/account-step/qr-panel.tsx +1 -1
- package/src/components/onboarding/account-step/signed-in-panel.tsx +1 -1
- package/src/components/onboarding/onboarding-keyboard.ts +1 -1
- package/src/components/onboarding/onboarding-wizard.tsx +2 -2
- package/src/components/onboarding/use-onboarding-upgrade.ts +3 -3
- package/src/components/onboarding/wizard-account.ts +2 -2
- package/src/components/pane-template-wizard.tsx +9 -1
- package/src/components/price-selector-dialog.tsx +11 -2
- package/src/components/reader/article-reader.tsx +642 -0
- package/src/components/reader/article-text.ts +527 -0
- package/src/components/sign-in-gate.tsx +3 -3
- package/src/components/ticker/list-table-view.tsx +43 -2
- package/src/components/ui/action-row.tsx +2 -1
- package/src/components/ui/button.tsx +7 -1
- package/src/components/ui/choice-dialog.tsx +6 -4
- package/src/components/ui/confirm-dialog.tsx +28 -18
- package/src/components/ui/data-table/index.tsx +18 -6
- package/src/components/ui/data-table/opentui/index.tsx +37 -6
- package/src/components/ui/data-table/types.ts +12 -0
- package/src/components/ui/dialog-actions.tsx +64 -0
- package/src/components/ui/display.tsx +17 -3
- package/src/components/ui/frame.tsx +35 -2
- package/src/components/ui/icon.tsx +6 -1
- package/src/components/ui/query-bar.tsx +10 -1
- package/src/components/ui/text-prompt-dialog.tsx +11 -9
- package/src/data/cached-query.ts +2 -0
- package/src/data/config/store/migrations.ts +7 -0
- package/src/data/config/store/normalize.ts +7 -2
- package/src/data/config/store/portfolio-as-of-column.ts +57 -0
- package/src/data/ticker-repository.ts +5 -0
- package/src/data/ticker-store.ts +15 -0
- package/src/docs/content.ts +215 -0
- package/src/docs/load.ts +139 -0
- package/src/docs/requests.ts +39 -0
- package/src/docs/snapshot.chunk.ts +8 -0
- package/src/docs/snapshot.json +7555 -0
- package/src/docs/topics.ts +216 -0
- package/src/i18n/es.ts +65 -5
- package/src/i18n/ja.ts +65 -5
- package/src/i18n/ko.ts +65 -5
- package/src/i18n/zh-cn.ts +65 -5
- package/src/i18n/zh-tw.ts +65 -5
- package/src/layout/desks.ts +1 -1
- package/src/layout/pane-manager/dock-tree.ts +18 -0
- package/src/layout/pane-manager/index.ts +1 -0
- package/src/layout-marketplace/gallery.tsx +1 -1
- package/src/market-data/coordinator/chart.ts +10 -4
- package/src/market-data/coordinator/index.ts +6 -3
- package/src/{plugins/builtin/futures/contracts.ts → market-data/futures-board.ts} +81 -28
- package/src/market-data/futures-contract.ts +151 -0
- package/src/market-data/hooks.tsx +10 -2
- package/src/market-data/market/format.ts +39 -21
- package/src/market-data/market/freshness.ts +84 -20
- package/src/market-data/market/session-close-note.ts +3 -2
- package/src/market-data/market/status.ts +19 -23
- package/src/market-data/published-apac-sessions.ts +23 -1
- package/src/market-data/quotes/contributions.ts +5 -0
- package/src/market-data/quotes/metadata.ts +19 -24
- package/src/market-data/quotes/resolution.ts +5 -0
- package/src/market-data/quotes/screener-live-quotes.ts +5 -4
- package/src/market-data/result-types.ts +2 -0
- package/src/notifications/app-notifier.ts +17 -1
- package/src/notifications/notification-log.ts +180 -0
- package/src/plugins/auto-update-node.ts +2 -2
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/model.ts +1 -56
- package/src/plugins/builtin/account-management/pane.tsx +6 -4
- package/src/plugins/builtin/account-management/password-dialog.tsx +1 -1
- package/src/plugins/builtin/alerts/catalysts.ts +1 -1
- package/src/plugins/builtin/alerts/cli.ts +313 -47
- package/src/plugins/builtin/alerts/events-pane.tsx +45 -7
- package/src/plugins/builtin/alerts/events.ts +23 -2
- package/src/plugins/builtin/alerts/focus.ts +27 -0
- package/src/plugins/builtin/alerts/history-pane.tsx +7 -2
- package/src/plugins/builtin/alerts/history.ts +2 -0
- package/src/plugins/builtin/alerts/index.tsx +47 -11
- package/src/plugins/builtin/alerts/pane.tsx +27 -1
- package/src/plugins/builtin/alerts/research-builder.ts +8 -3
- package/src/plugins/builtin/alerts/research-rules.ts +18 -2
- package/src/plugins/builtin/alerts/scheduled-check.ts +122 -0
- package/src/plugins/builtin/alerts/scheduled-sources.ts +25 -0
- package/src/plugins/builtin/alerts/scheduled.ts +254 -0
- package/src/plugins/builtin/alerts/targets.ts +92 -0
- package/src/plugins/builtin/analytics/index.tsx +8 -3
- package/src/plugins/builtin/analytics/risk-headless.ts +60 -27
- package/src/plugins/builtin/analytics/risk-math.ts +91 -27
- package/src/plugins/builtin/analytics/risk-model.ts +35 -5
- package/src/plugins/builtin/analytics/risk-pane.tsx +15 -8
- package/src/plugins/builtin/attention/headless.ts +1 -1
- package/src/plugins/builtin/attention/index.tsx +2 -0
- package/src/plugins/builtin/attention/pane.tsx +3 -1
- package/src/plugins/builtin/attention/series.ts +26 -0
- package/src/plugins/builtin/awards/headless.ts +88 -18
- package/src/plugins/builtin/awards/index.tsx +2 -0
- package/src/plugins/builtin/awards/model.ts +41 -1
- package/src/plugins/builtin/awards/pane.tsx +22 -13
- package/src/plugins/builtin/awards/series.ts +29 -0
- package/src/plugins/builtin/backtest/headless.ts +2 -2
- package/src/plugins/builtin/bond-calculator/model.ts +2 -1
- package/src/plugins/builtin/broker-manager/index.tsx +1 -0
- package/src/plugins/builtin/catalysts/headless.ts +1 -1
- package/src/plugins/builtin/catalysts/pane.tsx +3 -1
- package/src/plugins/builtin/cds/client.ts +49 -12
- package/src/plugins/builtin/cds/headless.ts +119 -19
- package/src/plugins/builtin/cds/index.tsx +3 -1
- package/src/plugins/builtin/cds/model.ts +214 -32
- package/src/plugins/builtin/cds/pane.tsx +58 -14
- package/src/plugins/builtin/cds/series.ts +19 -0
- package/src/plugins/builtin/central-bank-rates/client.ts +4 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +46 -16
- package/src/plugins/builtin/central-bank-rates/index.tsx +3 -1
- package/src/plugins/builtin/central-bank-rates/model.ts +99 -0
- package/src/plugins/builtin/central-bank-rates/pane.tsx +1 -1
- package/src/plugins/builtin/central-bank-rates/series.ts +36 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +193 -255
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +84 -46
- package/src/plugins/builtin/chart-composer/editor.tsx +5 -4
- package/src/plugins/builtin/chart-composer/field-series.ts +40 -0
- package/src/plugins/builtin/chart-composer/headless-schema.ts +1 -1
- package/src/plugins/builtin/chart-composer/headless.ts +70 -5
- package/src/plugins/builtin/chart-composer/index.tsx +15 -3
- package/src/plugins/builtin/chart-composer/pane.tsx +81 -38
- package/src/plugins/builtin/chart-composer/series-catalog.ts +58 -50
- package/src/plugins/builtin/chart-composer/series-expression.ts +18 -10
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +59 -3
- package/src/plugins/builtin/chart-composer/user-series.ts +84 -0
- package/src/plugins/builtin/chat/content/composer-runtime.ts +6 -1
- package/src/plugins/builtin/chat/content/composer.tsx +5 -1
- package/src/plugins/builtin/chat/content/footer.tsx +12 -0
- package/src/plugins/builtin/chat/content/index.tsx +89 -5
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +10 -2
- package/src/plugins/builtin/chat/content/new-messages.tsx +89 -0
- package/src/plugins/builtin/chat/content/row-activity.ts +132 -0
- package/src/plugins/builtin/chat/content/scroll.ts +127 -27
- package/src/plugins/builtin/chat/content/shortcuts.ts +2 -2
- package/src/plugins/builtin/chat/content/transcript.tsx +145 -78
- package/src/plugins/builtin/chat/content/types.ts +1 -0
- package/src/plugins/builtin/chat/controller/fetch.ts +8 -2
- package/src/plugins/builtin/chat/controller/index.ts +123 -1
- package/src/plugins/builtin/chat/controller/message-loading.ts +3 -0
- package/src/plugins/builtin/chat/controller/messages.ts +7 -2
- package/src/plugins/builtin/chat/controller/realtime.ts +10 -1
- package/src/plugins/builtin/chat/controller/send.ts +61 -1
- package/src/plugins/builtin/chat/controller/state.ts +8 -0
- package/src/plugins/builtin/chat/ghost-user.ts +20 -0
- package/src/plugins/builtin/chat/index.tsx +23 -5
- package/src/plugins/builtin/chat/layout.ts +78 -5
- package/src/plugins/builtin/chat/message/ai-badge.tsx +18 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +55 -6
- package/src/plugins/builtin/chat/message/header.tsx +16 -4
- package/src/plugins/builtin/chat/message/profile-popover.tsx +5 -1
- package/src/plugins/builtin/chat/message/reactions.tsx +210 -0
- package/src/plugins/builtin/chat/message/render-state.ts +18 -2
- package/src/plugins/builtin/chat/message/terminal.tsx +43 -4
- package/src/plugins/builtin/chat/message/types.ts +12 -0
- package/src/plugins/builtin/chat/reactions.ts +197 -0
- package/src/plugins/builtin/chat/share/flow.tsx +87 -0
- package/src/plugins/builtin/chat/share/targets.ts +27 -0
- package/src/plugins/builtin/chat/status-widget.tsx +6 -3
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +148 -27
- package/src/plugins/builtin/chat/unread-inbox.ts +22 -0
- package/src/plugins/builtin/cloud/askg/attached-pane.tsx +69 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +111 -19
- package/src/plugins/builtin/cloud/askg/executor.ts +57 -3
- package/src/plugins/builtin/cloud/askg/manifest.ts +32 -7
- package/src/plugins/builtin/cloud/askg/model.ts +27 -8
- package/src/plugins/builtin/cloud/askg/pane-attachment.ts +94 -0
- package/src/plugins/builtin/cloud/askg/pane.tsx +141 -12
- package/src/plugins/builtin/cloud/askg/pending-question.ts +11 -0
- package/src/plugins/builtin/cloud/askg/protocol.ts +10 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +3 -0
- package/src/plugins/builtin/cloud/askg/undo.ts +2 -0
- package/src/plugins/builtin/cloud/auth-actions.tsx +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +1 -1
- package/src/plugins/builtin/cloud/auth-dialog.tsx +3 -3
- package/src/plugins/builtin/cloud/company-picker.tsx +1 -1
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +3 -0
- package/src/plugins/builtin/cloud/plugin.tsx +19 -2
- package/src/plugins/builtin/cloud/team/model.ts +5 -0
- package/src/plugins/builtin/cloud/team/module.tsx +1 -0
- package/src/plugins/builtin/cloud/team/store.ts +8 -3
- package/src/plugins/builtin/cloud/terminal-relay/engine.ts +77 -9
- package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +6 -1
- package/src/plugins/builtin/cloud/terminal-relay/policy.ts +9 -0
- package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +35 -11
- package/src/plugins/builtin/cloud/thesis/exposure.ts +1 -1
- package/src/plugins/builtin/cloud/thesis/module.tsx +1 -0
- package/src/plugins/builtin/cloud/thesis/prompts.tsx +2 -1
- package/src/plugins/builtin/company-attention/app-rank.tsx +1 -1
- package/src/plugins/builtin/company-attention/headless.ts +21 -7
- package/src/plugins/builtin/company-attention/index.tsx +2 -0
- package/src/plugins/builtin/company-attention/model.ts +26 -7
- package/src/plugins/builtin/company-attention/pane.tsx +12 -9
- package/src/plugins/builtin/company-attention/series.ts +52 -0
- package/src/plugins/builtin/company-kpis/headless.ts +97 -10
- package/src/plugins/builtin/company-kpis/model.ts +24 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +17 -16
- package/src/plugins/builtin/composite-plugins.ts +19 -13
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/cot/headless.ts +1 -1
- package/src/plugins/builtin/cot/index.tsx +3 -1
- package/src/plugins/builtin/cot/model.ts +40 -11
- package/src/plugins/builtin/cot/series.ts +27 -0
- package/src/plugins/builtin/cpi/headless.ts +3 -3
- package/src/plugins/builtin/credit-boards/cdx-pane.tsx +10 -1
- package/src/plugins/builtin/credit-boards/client.ts +6 -2
- package/src/plugins/builtin/credit-boards/headless.ts +108 -31
- package/src/plugins/builtin/credit-boards/index.tsx +2 -0
- package/src/plugins/builtin/credit-boards/model.ts +11 -1
- package/src/plugins/builtin/credit-boards/series.ts +66 -0
- package/src/plugins/builtin/credit-conditions/client.ts +12 -9
- package/src/plugins/builtin/credit-conditions/headless.ts +13 -2
- package/src/plugins/builtin/credit-conditions/index.tsx +18 -9
- package/src/plugins/builtin/credit-conditions/model.ts +19 -11
- package/src/plugins/builtin/credit-conditions/series.ts +16 -0
- package/src/plugins/builtin/credit-documents/headless.ts +33 -3
- package/src/plugins/builtin/credit-documents/pane.tsx +3 -1
- package/src/plugins/builtin/crypto-board/headless.ts +2 -3
- package/src/plugins/builtin/crypto-board/index.tsx +2 -0
- package/src/plugins/builtin/crypto-board/model.ts +12 -0
- package/src/plugins/builtin/crypto-board/pane.tsx +19 -12
- package/src/plugins/builtin/crypto-board/series.ts +48 -0
- package/src/plugins/builtin/custom-view/live-quotes.ts +2 -2
- package/src/plugins/builtin/debt-maturities/headless.ts +17 -11
- package/src/plugins/builtin/debt-maturities/index.tsx +2 -0
- package/src/plugins/builtin/debt-maturities/series.ts +45 -0
- package/src/plugins/builtin/dividend-yield/client.ts +3 -0
- package/src/plugins/builtin/dividend-yield/headless.ts +7 -4
- package/src/plugins/builtin/dividend-yield/index.tsx +3 -1
- package/src/plugins/builtin/dividend-yield/pane.tsx +3 -1
- package/src/plugins/builtin/dividend-yield/series.ts +20 -0
- package/src/plugins/builtin/dividend-yield/types.ts +2 -0
- package/src/plugins/builtin/docs/blocks.tsx +181 -0
- package/src/plugins/builtin/docs/index.tsx +68 -0
- package/src/plugins/builtin/docs/pane.tsx +426 -0
- package/src/plugins/builtin/docs/targets.ts +72 -0
- package/src/plugins/builtin/docs/use-docs.ts +60 -0
- package/src/plugins/builtin/doe/headless.ts +12 -8
- package/src/plugins/builtin/doe/index.tsx +2 -0
- package/src/plugins/builtin/doe/series.ts +62 -0
- package/src/plugins/builtin/earnings/client.ts +3 -2
- package/src/plugins/builtin/earnings/format.ts +1 -5
- package/src/plugins/builtin/earnings/headless.ts +58 -6
- package/src/plugins/builtin/earnings/history-model.ts +15 -1
- package/src/plugins/builtin/earnings/history-table.ts +13 -2
- package/src/plugins/builtin/earnings/history.tsx +7 -3
- package/src/plugins/builtin/earnings/index.tsx +9 -0
- package/src/plugins/builtin/earnings-calls/headless.ts +28 -2
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -1
- package/src/plugins/builtin/earnings-ripple/index.tsx +2 -0
- package/src/plugins/builtin/econ/fred-catalog.ts +198 -0
- package/src/plugins/builtin/econ/fred-series-map.ts +0 -46
- package/src/plugins/builtin/econ/index.tsx +2 -0
- package/src/plugins/builtin/econ-statistics/defs.ts +5 -0
- package/src/plugins/builtin/econ-statistics/headless.ts +19 -4
- package/src/plugins/builtin/econ-statistics/stats.ts +1 -0
- package/src/plugins/builtin/equity-screener/headless.ts +3 -3
- package/src/plugins/builtin/equity-screener/pane.tsx +4 -11
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -3
- package/src/plugins/builtin/exposure/drivers.ts +13 -0
- package/src/plugins/builtin/exposure/headless.ts +205 -13
- package/src/plugins/builtin/exposure/holdings.ts +1 -1
- package/src/plugins/builtin/exposure/index.tsx +1 -0
- package/src/plugins/builtin/exposure/model.ts +23 -3
- package/src/plugins/builtin/exposure/pane.tsx +14 -12
- package/src/plugins/builtin/fear-greed/index.tsx +18 -10
- package/src/plugins/builtin/fear-greed/series.ts +52 -0
- package/src/plugins/builtin/futures/index.tsx +43 -3
- package/src/plugins/builtin/futures/model.ts +1 -1
- package/src/plugins/builtin/futures/returns.ts +1 -1
- package/src/plugins/builtin/futures/series.ts +13 -0
- package/src/plugins/builtin/futures/table.tsx +1 -1
- package/src/plugins/builtin/futures/use-front-returns.ts +1 -1
- package/src/plugins/builtin/futures-curve/client.ts +12 -3
- package/src/plugins/builtin/futures-curve/headless.ts +71 -10
- package/src/plugins/builtin/futures-curve/index.tsx +1 -1
- package/src/plugins/builtin/futures-curve/model.ts +66 -11
- package/src/plugins/builtin/futures-curve/pane.tsx +52 -18
- package/src/plugins/builtin/fx-matrix/client.ts +63 -0
- package/src/plugins/builtin/fx-matrix/export.ts +2 -1
- package/src/plugins/builtin/fx-matrix/headless.ts +154 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +4 -4
- package/src/plugins/builtin/gpu/board.tsx +13 -10
- package/src/plugins/builtin/gpu/changes.tsx +4 -4
- package/src/plugins/builtin/gpu/client.ts +19 -1
- package/src/plugins/builtin/gpu/equities.tsx +14 -10
- package/src/plugins/builtin/gpu/headless.ts +58 -27
- package/src/plugins/builtin/gpu/history.tsx +3 -3
- package/src/plugins/builtin/gpu/index.tsx +2 -0
- package/src/plugins/builtin/gpu/model.ts +101 -16
- package/src/plugins/builtin/gpu/pane.tsx +28 -12
- package/src/plugins/builtin/gpu/series.ts +38 -0
- package/src/plugins/builtin/help/function-card.tsx +25 -6
- package/src/plugins/builtin/help/function-index.ts +2 -0
- package/src/plugins/builtin/help/index.tsx +31 -9
- package/src/plugins/builtin/holders/beneficial-model.ts +90 -3
- package/src/plugins/builtin/holders/beneficial-report.ts +57 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +55 -11
- package/src/plugins/builtin/holders/client.ts +22 -3
- package/src/plugins/builtin/holders/format.ts +18 -3
- package/src/plugins/builtin/holders/headless.ts +36 -133
- package/src/plugins/builtin/holders/pane.tsx +11 -4
- package/src/plugins/builtin/holders/report-header.ts +40 -5
- package/src/plugins/builtin/holders/report-rows.ts +240 -0
- package/src/plugins/builtin/insider/client.ts +35 -20
- package/src/plugins/builtin/insider/headless.ts +41 -11
- package/src/plugins/builtin/insider/index.tsx +26 -9
- package/src/plugins/builtin/insider/insider-data.ts +10 -0
- package/src/plugins/builtin/insider/issuer.ts +49 -0
- package/src/plugins/builtin/insider/model.ts +3 -0
- package/src/plugins/builtin/ipo-calendar/headless.ts +1 -1
- package/src/plugins/builtin/iv-history/client.ts +20 -6
- package/src/plugins/builtin/iv-history/format.ts +9 -0
- package/src/plugins/builtin/iv-history/headless.ts +56 -21
- package/src/plugins/builtin/iv-history/index.tsx +2 -0
- package/src/plugins/builtin/iv-history/model.ts +143 -8
- package/src/plugins/builtin/iv-history/screen-pane.tsx +5 -9
- package/src/plugins/builtin/iv-history/series.ts +29 -0
- package/src/plugins/builtin/jobs/headless.ts +26 -3
- package/src/plugins/builtin/jobs/index.tsx +3 -1
- package/src/plugins/builtin/jobs/series.ts +19 -0
- package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +2 -1
- package/src/plugins/builtin/kelly-sizer/portfolio.ts +0 -39
- package/src/plugins/builtin/macro-day/client.ts +44 -3
- package/src/plugins/builtin/macro-day/headless.ts +13 -10
- package/src/plugins/builtin/macro-day/model.ts +56 -10
- package/src/plugins/builtin/macro-day/pane.tsx +30 -20
- package/src/plugins/builtin/market-heatmap/headless.ts +20 -5
- package/src/plugins/builtin/market-heatmap/index.tsx +6 -0
- package/src/plugins/builtin/market-heatmap/model.ts +19 -11
- package/src/plugins/builtin/market-heatmap/portfolio.ts +2 -2
- package/src/plugins/builtin/market-movers/client.ts +7 -5
- package/src/plugins/builtin/market-movers/index.tsx +3 -2
- package/src/plugins/builtin/market-movers/model.ts +30 -0
- package/src/plugins/builtin/market-movers/screener.ts +31 -0
- package/src/plugins/builtin/market-valuation/chart-series.ts +29 -69
- package/src/plugins/builtin/market-valuation/index.tsx +3 -3
- package/src/plugins/builtin/market-valuation/indicators.ts +0 -5
- package/src/plugins/builtin/members/headless.ts +8 -3
- package/src/plugins/builtin/members/model.ts +31 -3
- package/src/plugins/builtin/members/pane.tsx +6 -8
- package/src/plugins/builtin/mna/distress/headless.ts +4 -4
- package/src/plugins/builtin/mna/headless.ts +18 -6
- package/src/plugins/builtin/money-markets/headless.ts +5 -4
- package/src/plugins/builtin/money-markets/index.tsx +2 -0
- package/src/plugins/builtin/money-markets/series.ts +41 -0
- package/src/plugins/builtin/news/index.tsx +0 -2
- package/src/plugins/builtin/news/wire/news/detail-view.tsx +53 -104
- package/src/plugins/builtin/news/wire/news/footer.ts +2 -25
- package/src/plugins/builtin/news/wire/news/preset-pane.tsx +0 -2
- package/src/plugins/builtin/notes/cli.ts +12 -7
- package/src/plugins/builtin/notes/index.tsx +1 -0
- package/src/plugins/builtin/options/index.tsx +3 -0
- package/src/plugins/builtin/options/view.tsx +1 -1
- package/src/plugins/builtin/options-calculator/inputs.ts +2 -1
- package/src/plugins/builtin/options-positioning/client.ts +7 -3
- package/src/plugins/builtin/options-positioning/headless.ts +4 -3
- package/src/plugins/builtin/options-positioning/pane.tsx +2 -2
- package/src/plugins/builtin/options-scenario/client.ts +2 -1
- package/src/plugins/builtin/options-scenario/headless.ts +1 -0
- package/src/plugins/builtin/options-scenario/hedge.ts +2 -1
- package/src/plugins/builtin/perps/client.ts +90 -16
- package/src/plugins/builtin/perps/equity-row.tsx +52 -17
- package/src/plugins/builtin/perps/freshness.ts +66 -0
- package/src/plugins/builtin/perps/headless.ts +47 -32
- package/src/plugins/builtin/perps/index.tsx +23 -4
- package/src/plugins/builtin/perps/list-perpetuals.ts +118 -0
- package/src/plugins/builtin/perps/model.ts +20 -5
- package/src/plugins/builtin/perps/open-market.ts +15 -0
- package/src/plugins/builtin/perps/pane.tsx +76 -20
- package/src/plugins/builtin/perps/series.ts +76 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +1 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +73 -67
- package/src/plugins/builtin/plugin-module.ts +3 -0
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +1 -1
- package/src/plugins/builtin/portfolio-list/allocation.ts +5 -4
- package/src/plugins/builtin/portfolio-list/cell-version.ts +8 -1
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +161 -0
- package/src/plugins/builtin/portfolio-list/cli/import-13f.ts +109 -0
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +384 -74
- package/src/plugins/builtin/portfolio-list/cli/render.ts +437 -71
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +21 -4
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +121 -47
- package/src/plugins/builtin/portfolio-list/column-values.ts +104 -26
- package/src/plugins/builtin/portfolio-list/grid.tsx +1 -1
- package/src/plugins/builtin/portfolio-list/headless.ts +84 -18
- package/src/plugins/builtin/portfolio-list/imported-from.ts +8 -0
- package/src/plugins/builtin/portfolio-list/index.tsx +5 -1
- package/src/plugins/builtin/portfolio-list/live-valuation.ts +6 -2
- package/src/plugins/builtin/portfolio-list/mutations.ts +2 -9
- package/src/plugins/builtin/portfolio-list/pane/data.ts +5 -1
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +52 -9
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +33 -11
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +21 -1
- package/src/plugins/builtin/portfolio-list/settings.ts +17 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +12 -0
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +9 -4
- package/src/plugins/builtin/portfolio-list/table.tsx +37 -7
- package/src/plugins/builtin/power/client.ts +16 -0
- package/src/plugins/builtin/power/evidence.ts +63 -10
- package/src/plugins/builtin/power/headless.ts +77 -9
- package/src/plugins/builtin/power/index.tsx +28 -3
- package/src/plugins/builtin/power/model.ts +73 -2
- package/src/plugins/builtin/power/pane.tsx +37 -9
- package/src/plugins/builtin/power/prices-client.ts +139 -0
- package/src/plugins/builtin/power/prices-headless.ts +137 -0
- package/src/plugins/builtin/power/prices-model.ts +103 -0
- package/src/plugins/builtin/power/prices.tsx +179 -0
- package/src/plugins/builtin/rate-path/headless.ts +46 -18
- package/src/plugins/builtin/realized-vol/headless.ts +5 -0
- package/src/plugins/builtin/relative-rotation/headless.ts +3 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +5 -2
- package/src/plugins/builtin/research/event-model.ts +68 -24
- package/src/plugins/builtin/research/events-headless.ts +2 -1
- package/src/plugins/builtin/research/headless.ts +2 -1
- package/src/plugins/builtin/research/index.tsx +2 -0
- package/src/plugins/builtin/research-search/article.ts +65 -0
- package/src/plugins/builtin/research-search/document-view.tsx +33 -215
- package/src/plugins/builtin/research-search/model.ts +0 -9
- package/src/plugins/builtin/research-search/pane.tsx +41 -30
- package/src/plugins/builtin/research-search/snippet.ts +0 -29
- package/src/plugins/builtin/revenue-breakdown/headless.ts +18 -6
- package/src/plugins/builtin/seasonality/client.ts +15 -7
- package/src/plugins/builtin/seasonality/headless.ts +36 -12
- package/src/plugins/builtin/seasonality/index.tsx +2 -2
- package/src/plugins/builtin/seasonality/model.ts +119 -0
- package/src/plugins/builtin/seasonality/pane.tsx +108 -37
- package/src/plugins/builtin/sec/headless.ts +25 -3
- package/src/plugins/builtin/sec/index.tsx +2 -1
- package/src/plugins/builtin/series-inventory.ts +93 -0
- package/src/plugins/builtin/shared/cloud-denied.ts +15 -0
- package/src/plugins/builtin/shared/cloud-upgrade.ts +1 -1
- package/src/plugins/builtin/shared/command-tab.ts +30 -12
- package/src/plugins/builtin/shared/earnings-report.ts +55 -0
- package/src/plugins/builtin/shared/fred-points.ts +20 -0
- package/src/plugins/builtin/shared/free-preview.ts +47 -0
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +101 -0
- package/src/plugins/builtin/shared/open-description.ts +29 -0
- package/src/plugins/builtin/shared/report-freshness.ts +12 -1
- package/src/plugins/builtin/shared/series-warning.ts +5 -0
- package/src/plugins/builtin/shared/volatility/options.ts +4 -1
- package/src/plugins/builtin/short-interest/headless.ts +1 -0
- package/src/plugins/builtin/short-interest/index.tsx +2 -0
- package/src/plugins/builtin/short-interest/series.ts +36 -0
- package/src/plugins/builtin/short-interest/watch-headless.ts +3 -2
- package/src/plugins/builtin/short-interest/watch-model.ts +9 -5
- package/src/plugins/builtin/short-volume/headless.ts +2 -1
- package/src/plugins/builtin/short-volume/index.tsx +2 -0
- package/src/plugins/builtin/short-volume/series.ts +23 -0
- package/src/plugins/builtin/social-mentions/headless.ts +1 -1
- package/src/plugins/builtin/social-mentions/index.tsx +2 -0
- package/src/plugins/builtin/social-mentions/series.ts +23 -0
- package/src/plugins/builtin/supply-chain/graph-pane.tsx +3 -2
- package/src/plugins/builtin/supply-chain/headless.ts +43 -11
- package/src/plugins/builtin/supply-chain/model.ts +13 -0
- package/src/plugins/builtin/supply-chain/pane.tsx +8 -6
- package/src/plugins/builtin/themes/headless.ts +74 -10
- package/src/plugins/builtin/themes/model.ts +71 -4
- package/src/plugins/builtin/themes/pane.tsx +22 -5
- package/src/plugins/builtin/thirteenf/api.ts +1 -0
- package/src/plugins/builtin/thirteenf/data.ts +6 -4
- package/src/plugins/builtin/thirteenf/headless.ts +217 -36
- package/src/plugins/builtin/thirteenf/model.ts +39 -1
- package/src/plugins/builtin/thirteenf/overlap.ts +75 -0
- package/src/plugins/builtin/thirteenf/pane.tsx +10 -1
- package/src/plugins/builtin/thirteenf/report-notes.ts +103 -1
- package/src/plugins/builtin/thirteenf/types.ts +2 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +114 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +57 -2
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +19 -55
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +30 -0
- package/src/plugins/builtin/ticker-detail/headless.ts +86 -0
- package/src/plugins/builtin/ticker-detail/index.tsx +26 -11
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/overview/futures-contract.ts +31 -0
- package/src/plugins/builtin/ticker-detail/overview/model.ts +3 -3
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +2 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +49 -5
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +13 -3
- package/src/plugins/builtin/time-sales/headless.ts +2 -1
- package/src/plugins/builtin/time-sales/index.tsx +2 -1
- package/src/plugins/builtin/treasury-auctions/headless.ts +16 -2
- package/src/plugins/builtin/treasury-auctions/index.tsx +1 -0
- package/src/plugins/builtin/treasury-auctions/model.ts +8 -0
- package/src/plugins/builtin/vol-surface/evidence.ts +7 -1
- package/src/plugins/builtin/vol-surface/headless.ts +51 -17
- package/src/plugins/builtin/vol-surface/heat-grid.tsx +113 -0
- package/src/plugins/builtin/vol-surface/model.ts +39 -6
- package/src/plugins/builtin/vol-surface/pane.tsx +14 -13
- package/src/plugins/builtin/vol-surface/stored.ts +63 -3
- package/src/plugins/builtin/vol-surface/surface.tsx +30 -2
- package/src/plugins/builtin/volatility/index.tsx +2 -0
- package/src/plugins/builtin/volatility/series.ts +84 -0
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +6 -5
- package/src/plugins/builtin/world-venue-map/basemap.ts +6 -3
- package/src/plugins/builtin/world-venue-map/geo-draw.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +26 -1
- package/src/plugins/builtin/world-venue-map/geo-svg.tsx +6 -6
- package/src/plugins/builtin/world-venue-map/headless.ts +4 -1
- package/src/plugins/builtin/world-venue-map/index.ts +2 -1
- package/src/plugins/builtin/world-venue-map/layered-pane.tsx +24 -13
- package/src/plugins/builtin/world-venue-map/layers.ts +29 -0
- package/src/plugins/builtin/world-venue-map/map.tsx +144 -13
- package/src/plugins/builtin/world-venue-map/model.ts +56 -19
- package/src/plugins/builtin/world-venue-map/pane.tsx +5 -2
- package/src/plugins/builtin/yield-curve/chart.ts +2 -2
- package/src/plugins/builtin/yield-curve/curves.ts +21 -8
- package/src/plugins/builtin/yield-curve/headless.ts +71 -18
- package/src/plugins/builtin/yield-curve/index.tsx +4 -2
- package/src/plugins/builtin/yield-curve/series.ts +86 -0
- package/src/plugins/catalog-browser.ts +2 -1
- package/src/plugins/installer.ts +2 -2
- package/src/plugins/loader.ts +15 -0
- package/src/plugins/manager-node.ts +1 -1
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/feed.ts +2 -2
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/model.ts +6 -6
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/store.ts +1 -1
- package/src/plugins/registry/host-actions.ts +11 -0
- package/src/plugins/registry/index.ts +89 -4
- package/src/portfolio/collection-name.ts +31 -0
- package/src/{plugins/builtin/portfolio-list → portfolio}/position-metrics.ts +6 -6
- package/src/portfolio/position-value.ts +40 -0
- package/src/portfolio/valuation-basis.ts +79 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +7 -0
- package/src/public/time-series.ts +17 -0
- package/src/react/auto-refresh.ts +13 -3
- package/src/react/input.ts +33 -1
- package/src/react/key-repeat.ts +86 -0
- package/src/remote/app-host.tsx +20 -4
- package/src/remote/confirm-change.tsx +85 -0
- package/src/remote/controller-utils.ts +8 -1
- package/src/remote/controller.ts +144 -7
- package/src/remote/pane-screenshot.ts +47 -0
- package/src/remote/schema.ts +65 -2
- package/src/remote/types.ts +30 -0
- package/src/remote/watchlist.ts +306 -0
- package/src/renderers/browser/main.tsx +4 -3
- package/src/renderers/browser/research-entry.ts +4 -2
- package/src/renderers/cloudflare/worker.ts +1 -1
- package/src/renderers/dom/data-table/frozen-column.ts +3 -1
- package/src/renderers/dom/data-table/index.tsx +33 -6
- package/src/renderers/dom/data-table/row.tsx +30 -1
- package/src/renderers/dom/desktop/control-styles.ts +63 -1
- package/src/renderers/dom/desktop/controls.tsx +30 -23
- package/src/renderers/dom/desktop/dialog-actions.tsx +170 -0
- package/src/renderers/dom/desktop/icons.tsx +16 -0
- package/src/renderers/dom/dom-ui-host.tsx +3 -0
- package/src/renderers/dom/host/block-glyph-canvas.tsx +6 -3
- package/src/renderers/dom/host/box.tsx +8 -0
- package/src/renderers/dom/host/chart-surface.tsx +33 -2
- package/src/renderers/dom/host/live-frame.ts +6 -2
- package/src/renderers/dom/host/overflow-fade.ts +14 -1
- package/src/renderers/dom/host/scroll-box.tsx +32 -0
- package/src/renderers/dom/host/size-observer.ts +41 -0
- package/src/renderers/dom/host/sticky-scroll.ts +128 -0
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/host/surface-3d.tsx +19 -7
- package/src/renderers/dom/host/surface-fit.ts +406 -0
- package/src/renderers/dom/host/text.tsx +1 -1
- package/src/renderers/dom/input-host.tsx +1 -0
- package/src/renderers/dom/styles.css +102 -5
- package/src/renderers/electrobun/bun/application-menu/click.ts +18 -0
- package/src/renderers/electrobun/bun/index.ts +3 -2
- package/src/renderers/electrobun/shared/protocol.ts +1 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +29 -2
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +63 -20
- package/src/renderers/electrobun/view/cli-pane-shot-health.ts +10 -26
- package/src/renderers/electrobun/view/main.tsx +5 -3
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +2 -0
- package/src/renderers/opentui/chart-surface.tsx +1 -0
- package/src/renderers/opentui/frame-capture.ts +33 -0
- package/src/renderers/opentui/host.tsx +10 -13
- package/src/renderers/opentui/pane-image/glyphs-license.txt +107 -0
- package/src/renderers/opentui/pane-image/glyphs.json +1 -0
- package/src/renderers/opentui/pane-image/index.ts +107 -0
- package/src/renderers/opentui/pane-image/raster.ts +428 -0
- package/src/renderers/opentui/start.tsx +3 -3
- package/src/renderers/opentui/test-utils.tsx +3 -0
- package/src/renderers/opentui/ui-host.tsx +29 -1
- package/src/series/capability.ts +75 -0
- package/src/series/csv.ts +160 -0
- package/src/series/files.ts +107 -0
- package/src/series/registry.ts +198 -0
- package/src/series/resolve.ts +108 -0
- package/src/series/standalone.ts +48 -0
- package/src/series/types.ts +153 -0
- package/src/series/validate.ts +171 -0
- package/src/shares/chat.ts +34 -0
- package/src/shares/dialog.tsx +295 -0
- package/src/shares/flow.tsx +56 -0
- package/src/shares/live.ts +14 -22
- package/src/shares/pane-image.ts +152 -0
- package/src/shares/personal-pane.ts +64 -0
- package/src/shares/portable-layout.ts +4 -2
- package/src/shares/prepare.ts +20 -0
- package/src/sources/gloomberb-cloud/index.ts +109 -10
- package/src/sources/gloomberb-cloud/normalizers.ts +3 -0
- package/src/sources/gloomberb-cloud/perpetuals.ts +249 -0
- package/src/sources/history-result.ts +1 -0
- package/src/sources/history-retention.ts +11 -0
- package/src/sources/listing-symbols.ts +4 -1
- package/src/sources/listing-target.ts +4 -0
- package/src/sources/provider-router/batches.ts +4 -1
- package/src/sources/provider-router/cache.ts +4 -2
- package/src/sources/provider-router/cached-routes.ts +1 -1
- package/src/sources/provider-router/financial-routes.ts +1 -0
- package/src/sources/provider-router/financials.ts +13 -0
- package/src/sources/provider-router/history.ts +43 -25
- package/src/sources/provider-router/index.ts +14 -0
- package/src/sources/provider-router/search.ts +1 -0
- package/src/state/hooks/inline-tickers.ts +49 -11
- package/src/sync/core-contributors.ts +1 -0
- package/src/test-support/shell-pane-keys.tsx +1 -0
- package/src/theme/theme-context.tsx +15 -1
- package/src/tickers/company-name.ts +75 -0
- package/src/tickers/instrument-kind.ts +34 -1
- package/src/tickers/listing-name.ts +34 -0
- package/src/tickers/listing-venues.ts +132 -0
- package/src/tickers/open-target.ts +13 -4
- package/src/tickers/perpetual-listing.ts +151 -0
- package/src/tickers/prediction-listing.ts +26 -0
- package/src/tickers/search/index.ts +72 -11
- package/src/tickers/search/ranking.ts +98 -20
- package/src/tickers/search/types.ts +7 -1
- package/src/tickers/ticker-changes.ts +213 -0
- package/src/tickers/us-listing.ts +34 -0
- package/src/time-series/economic.ts +2 -6
- package/src/time-series/hooks.ts +9 -0
- package/src/time-series/ice-credit.ts +39 -0
- package/src/time-series/resolve.ts +211 -29
- package/src/time-series/studies.ts +1 -0
- package/src/time-series/types.ts +12 -2
- package/src/time-series/use-chart-resolution.ts +32 -0
- package/src/types/config.ts +10 -2
- package/src/types/data-provider.ts +11 -0
- package/src/types/financials.ts +62 -1
- package/src/types/headless.ts +113 -0
- package/src/types/instrument.ts +4 -0
- package/src/types/plugin.ts +52 -2
- package/src/types/price-history.ts +7 -0
- package/src/types/ticker-changes.ts +26 -0
- package/src/types/ticker.ts +14 -0
- package/src/ui/context-menu.tsx +13 -1
- package/src/ui/host.tsx +57 -3
- package/src/ui/live-resize.ts +91 -0
- package/src/ui/live-stretch.ts +153 -0
- package/src/ui/measured-cells.ts +58 -0
- package/src/ui/sticky-scroll.ts +7 -0
- package/src/utils/basis-points.ts +17 -0
- package/src/utils/central-banks.ts +76 -0
- package/src/utils/cli-output.ts +131 -15
- package/src/utils/concurrency.ts +25 -0
- package/src/utils/crypto-pair.ts +20 -0
- package/src/utils/currency-pair.ts +19 -0
- package/src/utils/currency-units.ts +11 -0
- package/src/utils/datetime-format.ts +27 -6
- package/src/utils/decimal-comma.ts +19 -0
- package/src/utils/dom-screenshot-css.ts +265 -0
- package/src/utils/dom-screenshot-rasters.ts +276 -0
- package/src/utils/dom-screenshot.ts +439 -52
- package/src/utils/double-escape-close.ts +15 -1
- package/src/utils/exchange-rate-snapshot.ts +6 -2
- package/src/utils/exchanges.ts +143 -1
- package/src/utils/format.ts +35 -5
- package/src/utils/forward-dividend.ts +14 -0
- package/src/utils/fundamentals.ts +66 -0
- package/src/utils/futures-generic.ts +6 -12
- package/src/utils/fx-market-hours.ts +15 -5
- package/src/utils/fx-status.ts +6 -1
- package/src/utils/inline-content-tokenizer.ts +22 -3
- package/src/utils/market-capitalization.ts +8 -0
- package/src/utils/one-shot.ts +73 -0
- package/src/utils/options.ts +37 -8
- package/src/utils/price-history.ts +99 -42
- package/src/utils/sec-eps-basis.ts +24 -11
- package/src/utils/sec.ts +61 -7
- package/src/utils/utc-time.ts +63 -4
- package/src/plugins/builtin/fx-matrix/freshness.ts +0 -65
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/activation.ts +0 -0
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/ids.ts +0 -0
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/packs.ts +0 -0
- /package/src/{plugins/builtin/cloud → tickers}/starter-symbols.ts +0 -0
package/src/i18n/zh-cn.ts
CHANGED
|
@@ -269,8 +269,6 @@ export const zhCN: Record<string, string> = {
|
|
|
269
269
|
"Upcoming earnings, with the move options imply.": "即将发布的财报,以及期权隐含的波动。",
|
|
270
270
|
"The economic calendar.": "经济日历。",
|
|
271
271
|
"Ask Gloom: answers that cite filings, calls and news.": "Ask Gloom:引用文件、电话会议和新闻的回答。",
|
|
272
|
-
"Not sure of a code? Press {key} and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代码?按 {key},用日常语言输入你想要的,比如 \"apple earnings\"。“功能”标签列出了全部功能。",
|
|
273
|
-
"Not sure of a code? Type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代码?用日常语言输入你想要的,比如 \"apple earnings\"。“功能”标签列出了全部功能。",
|
|
274
272
|
"Command Bar": "命令栏",
|
|
275
273
|
"Manage Plugins...": "管理插件...",
|
|
276
274
|
"Change Theme...": "更换主题...",
|
|
@@ -420,7 +418,7 @@ export const zhCN: Record<string, string> = {
|
|
|
420
418
|
"Open a historical OHLCV table for a ticker.": "打开股票的历史 OHLCV 表格。",
|
|
421
419
|
"Open financial statements for a ticker.": "打开股票的财务报表。",
|
|
422
420
|
"Open a compact quote monitor for one or more tickers": "为一只或多只股票打开紧凑行情监控",
|
|
423
|
-
"
|
|
421
|
+
"Holdings, weights and P&L of a portfolio or watchlist; set target weights to see drift and the trades that rebalance": "组合或自选列表的持仓、权重与盈亏;设置目标权重,即可看到偏离与再平衡所需的交易",
|
|
424
422
|
"Open another portfolio list pane": "再开一个组合列表面板",
|
|
425
423
|
"Open another watchlist pane": "再开一个自选列表面板",
|
|
426
424
|
"Open another research pane for the selected ticker or current collection": "为所选股票或当前集合再开一个研究面板",
|
|
@@ -504,7 +502,10 @@ export const zhCN: Record<string, string> = {
|
|
|
504
502
|
// ── Help pane ────────────────────────────────────────────────
|
|
505
503
|
"How To Use Gloomberb": "如何使用 Gloomberb",
|
|
506
504
|
"Gloomberb is command-bar first.": "Gloomberb 以命令栏为核心。",
|
|
507
|
-
"
|
|
505
|
+
"Not sure of a code? Click the search bar at the top, or press {key}, and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代码?点击顶部的搜索栏,或按 {key},用日常语言输入你想要的,比如 \"apple earnings\"。“功能”标签列出了全部功能。",
|
|
506
|
+
"Not sure of a code? Click the search bar at the top and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代码?点击顶部的搜索栏,用日常语言输入你想要的,比如 \"apple earnings\"。“功能”标签列出了全部功能。",
|
|
507
|
+
"Click anything to use it; the keys shown beside actions are shortcuts.": "点击任意内容即可使用;操作旁显示的按键是快捷键。",
|
|
508
|
+
"Open Help": "打开帮助",
|
|
508
509
|
"Command Prefixes": "命令前缀",
|
|
509
510
|
"Window Templates": "窗口模板",
|
|
510
511
|
"No shortcut window templates are currently registered.": "当前没有已注册的快捷窗口模板。",
|
|
@@ -589,7 +590,6 @@ export const zhCN: Record<string, string> = {
|
|
|
589
590
|
"Open the help window": "打开帮助窗口",
|
|
590
591
|
"Set up a portfolio": "设置投资组合",
|
|
591
592
|
"How would you like to get started?": "你想如何开始?",
|
|
592
|
-
"{shortcut} to get started.": "按 {shortcut} 开始。",
|
|
593
593
|
"Edits later from the command bar.": "之后可在命令栏中修改。",
|
|
594
594
|
"Create Manual Portfolio": "创建手动组合",
|
|
595
595
|
"Add tickers and positions by hand": "手动添加股票与持仓",
|
|
@@ -839,6 +839,9 @@ export const zhCN: Record<string, string> = {
|
|
|
839
839
|
"Reply to @{username}...": "回复 @{username}...",
|
|
840
840
|
"Type a message...": "输入消息...",
|
|
841
841
|
"Loading earlier messages...": "正在加载更早的消息...",
|
|
842
|
+
"1 new message": "1 条新消息",
|
|
843
|
+
"{count} new messages": "{count} 条新消息",
|
|
844
|
+
"Jump to the newest message": "跳到最新消息",
|
|
842
845
|
"No messages yet. Be the first to say something!": "还没有消息。来发第一条吧!",
|
|
843
846
|
"New DM": "新私信",
|
|
844
847
|
"Recent users": "最近联系人",
|
|
@@ -1097,6 +1100,8 @@ export const zhCN: Record<string, string> = {
|
|
|
1097
1100
|
"No tickers in {name}.": "{name} 中暂无股票。",
|
|
1098
1101
|
"this collection": "此集合",
|
|
1099
1102
|
"Press {shortcut} to add one.": "按 {shortcut} 添加。",
|
|
1103
|
+
"Click {button} to add one, or press {shortcut}.": "点击 {button} 或按 {shortcut} 添加。",
|
|
1104
|
+
"Add ticker": "添加代码",
|
|
1100
1105
|
"PRE-MKT": "盘前",
|
|
1101
1106
|
"OPEN": "盘中",
|
|
1102
1107
|
"AFTER-HRS": "盘后",
|
|
@@ -1377,6 +1382,10 @@ export const zhCN: Record<string, string> = {
|
|
|
1377
1382
|
"Continue to checkout": "前往结账",
|
|
1378
1383
|
"{price}, billed today. Cancel anytime.": "{price},今天扣款。随时取消。",
|
|
1379
1384
|
"{price}. Cancel anytime.": "{price}。随时取消。",
|
|
1385
|
+
"Start {days}-day free trial": "开始 {days} 天免费试用",
|
|
1386
|
+
"$0 today, free for {days} days. Card required. Cancel anytime.": "今天 $0,免费 {days} 天。需要绑卡。随时取消。",
|
|
1387
|
+
"Billed today. Cancel anytime.": "今天扣款。随时取消。",
|
|
1388
|
+
"Card required. Cancel anytime.": "需要绑卡。随时取消。",
|
|
1380
1389
|
"Real-time data": "实时数据",
|
|
1381
1390
|
"Ask Gloom, MCP": "Ask Gloom、MCP",
|
|
1382
1391
|
"Flow and X": "期权流与 X",
|
|
@@ -1465,4 +1474,55 @@ export const zhCN: Record<string, string> = {
|
|
|
1465
1474
|
"Picked": "已选",
|
|
1466
1475
|
"Follow {count} companies": "关注 {count} 家公司",
|
|
1467
1476
|
"Following {count} companies. Alerts and your Monday brief will cover them.": "已关注 {count} 家公司。提醒和周一简报将涵盖它们。",
|
|
1477
|
+
|
|
1478
|
+
// ── Dialog keys on the desktop ───────────────────────────────
|
|
1479
|
+
"newline": "换行",
|
|
1480
|
+
"Denied in {seconds} s": "{seconds} 秒后拒绝",
|
|
1481
|
+
"choose": "选择",
|
|
1482
|
+
"select": "选定",
|
|
1483
|
+
"confirm": "确认",
|
|
1484
|
+
"presets": "预设",
|
|
1485
|
+
"add": "添加",
|
|
1486
|
+
"source": "来源",
|
|
1487
|
+
"panel": "面板",
|
|
1488
|
+
"log scale": "对数刻度",
|
|
1489
|
+
"use {value}": "使用 {value}",
|
|
1490
|
+
"keep the default": "保留默认值",
|
|
1491
|
+
"continue": "继续",
|
|
1492
|
+
"new code": "新代码",
|
|
1493
|
+
|
|
1494
|
+
// ── Plugins pane: starter packs ─────────────────────────────
|
|
1495
|
+
"Apply a starter pack": "应用入门套装",
|
|
1496
|
+
"{name} pack": "{name} 套装",
|
|
1497
|
+
"Custom set": "自定义组合",
|
|
1498
|
+
"{count} on": "开启 {count} 个",
|
|
1499
|
+
"{count} off": "关闭 {count} 个",
|
|
1500
|
+
"{count} back on": "重新开启 {count} 个",
|
|
1501
|
+
"Turn off": "关闭",
|
|
1502
|
+
"Turn on": "开启",
|
|
1503
|
+
"Keep": "保留",
|
|
1504
|
+
"Panes are hidden, not closed. Undo brings them back.": "面板只是隐藏,不会关闭。撤销即可恢复。",
|
|
1505
|
+
"Apply {name}?": "应用 {name}?",
|
|
1506
|
+
"{name} applied: {changes}.": "已应用 {name}:{changes}。",
|
|
1507
|
+
"{name} is already what you have on.": "当前已经是 {name}。",
|
|
1508
|
+
"Undo": "撤销",
|
|
1509
|
+
// ── Docs (DOCS, the ? on a pane) ─────────────────────────────
|
|
1510
|
+
"Docs for this pane": "本面板的文档",
|
|
1511
|
+
"Docs": "文档",
|
|
1512
|
+
"Open Docs": "打开文档",
|
|
1513
|
+
"Read in Docs": "在文档中阅读",
|
|
1514
|
+
"Read the docs and Academy lessons in the app. The ? on a pane opens its entry.": "在应用内阅读文档和学院课程。面板上的 ? 打开对应条目。",
|
|
1515
|
+
"Open the focused pane's help card; Enter reads its docs.": "打开当前面板的帮助卡;按 Enter 阅读其文档。",
|
|
1516
|
+
"function, page or lesson": "功能、页面或课程",
|
|
1517
|
+
"Guides": "指南",
|
|
1518
|
+
"Academy": "学院",
|
|
1519
|
+
"offline, saved copy": "离线,已保存的副本",
|
|
1520
|
+
"Open in Browser": "在浏览器中打开",
|
|
1521
|
+
"No docs match \"{query}\".": "没有与“{query}”匹配的文档。",
|
|
1522
|
+
"No docs for {name} yet.": "{name} 暂无文档。",
|
|
1523
|
+
"Search the Docs": "搜索文档",
|
|
1524
|
+
"This lesson is not saved for offline reading.": "此课程未保存以供离线阅读。",
|
|
1525
|
+
"It is kept once it has been read with a connection.": "联网阅读过一次后即会保存。",
|
|
1526
|
+
"Academy: {title}": "学院:{title}",
|
|
1527
|
+
"{minutes} min": "{minutes} 分钟",
|
|
1468
1528
|
};
|
package/src/i18n/zh-tw.ts
CHANGED
|
@@ -269,8 +269,6 @@ export const zhTW: Record<string, string> = {
|
|
|
269
269
|
"Upcoming earnings, with the move options imply.": "即將公布的財報,以及選擇權隱含的波動。",
|
|
270
270
|
"The economic calendar.": "經濟日曆。",
|
|
271
271
|
"Ask Gloom: answers that cite filings, calls and news.": "Ask Gloom:引用文件、法說會和新聞的回答。",
|
|
272
|
-
"Not sure of a code? Press {key} and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代碼?按 {key},用日常用語輸入你想要的,例如 \"apple earnings\"。「功能」標籤列出了全部功能。",
|
|
273
|
-
"Not sure of a code? Type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代碼?用日常用語輸入你想要的,例如 \"apple earnings\"。「功能」標籤列出了全部功能。",
|
|
274
272
|
"Command Bar": "命令列",
|
|
275
273
|
"Manage Plugins...": "管理外掛...",
|
|
276
274
|
"Change Theme...": "更換主題...",
|
|
@@ -420,7 +418,7 @@ export const zhTW: Record<string, string> = {
|
|
|
420
418
|
"Open a historical OHLCV table for a ticker.": "開啟股票的歷史 OHLCV 表格。",
|
|
421
419
|
"Open financial statements for a ticker.": "開啟股票的財務報表。",
|
|
422
420
|
"Open a compact quote monitor for one or more tickers": "為一檔或多檔股票開啟精簡行情監控",
|
|
423
|
-
"
|
|
421
|
+
"Holdings, weights and P&L of a portfolio or watchlist; set target weights to see drift and the trades that rebalance": "組合或自選清單的持倉、權重與損益;設定目標權重,即可看到偏離與再平衡所需的交易",
|
|
424
422
|
"Open another portfolio list pane": "再開一個投資組合清單面板",
|
|
425
423
|
"Open another watchlist pane": "再開一個自選清單面板",
|
|
426
424
|
"Open another research pane for the selected ticker or current collection": "為所選股票或目前清單再開一個研究面板",
|
|
@@ -504,7 +502,10 @@ export const zhTW: Record<string, string> = {
|
|
|
504
502
|
// ── Help pane ────────────────────────────────────────────────
|
|
505
503
|
"How To Use Gloomberb": "如何使用 Gloomberb",
|
|
506
504
|
"Gloomberb is command-bar first.": "Gloomberb 以命令列為核心。",
|
|
507
|
-
"
|
|
505
|
+
"Not sure of a code? Click the search bar at the top, or press {key}, and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代碼?點擊頂部的搜尋列,或按 {key},用日常用語輸入你想要的,例如 \"apple earnings\"。「功能」標籤列出了全部功能。",
|
|
506
|
+
"Not sure of a code? Click the search bar at the top and type what you want in plain words, like \"apple earnings\". The Functions tab lists everything.": "不知道代碼?點擊頂部的搜尋列,用日常用語輸入你想要的,例如 \"apple earnings\"。「功能」標籤列出了全部功能。",
|
|
507
|
+
"Click anything to use it; the keys shown beside actions are shortcuts.": "點擊任何內容即可使用;動作旁顯示的按鍵是快捷鍵。",
|
|
508
|
+
"Open Help": "開啟說明",
|
|
508
509
|
"Command Prefixes": "命令字首",
|
|
509
510
|
"Window Templates": "視窗範本",
|
|
510
511
|
"No shortcut window templates are currently registered.": "目前沒有已註冊的快速視窗範本。",
|
|
@@ -589,7 +590,6 @@ export const zhTW: Record<string, string> = {
|
|
|
589
590
|
"Open the help window": "開啟說明視窗",
|
|
590
591
|
"Set up a portfolio": "設定投資組合",
|
|
591
592
|
"How would you like to get started?": "你想如何開始?",
|
|
592
|
-
"{shortcut} to get started.": "按 {shortcut} 開始。",
|
|
593
593
|
"Edits later from the command bar.": "之後可在命令列中修改。",
|
|
594
594
|
"Create Manual Portfolio": "建立手動投資組合",
|
|
595
595
|
"Add tickers and positions by hand": "手動新增股票與持倉",
|
|
@@ -839,6 +839,9 @@ export const zhTW: Record<string, string> = {
|
|
|
839
839
|
"Reply to @{username}...": "回覆 @{username}...",
|
|
840
840
|
"Type a message...": "輸入訊息...",
|
|
841
841
|
"Loading earlier messages...": "正在載入更早的訊息...",
|
|
842
|
+
"1 new message": "1 則新訊息",
|
|
843
|
+
"{count} new messages": "{count} 則新訊息",
|
|
844
|
+
"Jump to the newest message": "跳到最新訊息",
|
|
842
845
|
"No messages yet. Be the first to say something!": "還沒有訊息。來發第一條吧!",
|
|
843
846
|
"New DM": "新私訊",
|
|
844
847
|
"Recent users": "最近聯絡人",
|
|
@@ -1097,6 +1100,8 @@ export const zhTW: Record<string, string> = {
|
|
|
1097
1100
|
"No tickers in {name}.": "{name} 中暫無股票。",
|
|
1098
1101
|
"this collection": "此清單",
|
|
1099
1102
|
"Press {shortcut} to add one.": "按 {shortcut} 新增。",
|
|
1103
|
+
"Click {button} to add one, or press {shortcut}.": "點擊 {button} 或按 {shortcut} 新增。",
|
|
1104
|
+
"Add ticker": "新增代號",
|
|
1100
1105
|
"PRE-MKT": "盤前",
|
|
1101
1106
|
"OPEN": "盤中",
|
|
1102
1107
|
"AFTER-HRS": "盤後",
|
|
@@ -1377,6 +1382,10 @@ export const zhTW: Record<string, string> = {
|
|
|
1377
1382
|
"Continue to checkout": "前往結帳",
|
|
1378
1383
|
"{price}, billed today. Cancel anytime.": "{price},今天扣款。隨時取消。",
|
|
1379
1384
|
"{price}. Cancel anytime.": "{price}。隨時取消。",
|
|
1385
|
+
"Start {days}-day free trial": "開始 {days} 天免費試用",
|
|
1386
|
+
"$0 today, free for {days} days. Card required. Cancel anytime.": "今天 $0,免費 {days} 天。需要綁卡。隨時取消。",
|
|
1387
|
+
"Billed today. Cancel anytime.": "今天扣款。隨時取消。",
|
|
1388
|
+
"Card required. Cancel anytime.": "需要綁卡。隨時取消。",
|
|
1380
1389
|
"Real-time data": "即時資料",
|
|
1381
1390
|
"Ask Gloom, MCP": "Ask Gloom、MCP",
|
|
1382
1391
|
"Flow and X": "選擇權流量與 X",
|
|
@@ -1465,4 +1474,55 @@ export const zhTW: Record<string, string> = {
|
|
|
1465
1474
|
"Picked": "已選",
|
|
1466
1475
|
"Follow {count} companies": "關注 {count} 家公司",
|
|
1467
1476
|
"Following {count} companies. Alerts and your Monday brief will cover them.": "已關注 {count} 家公司。提醒和週一簡報將涵蓋它們。",
|
|
1477
|
+
|
|
1478
|
+
// ── Dialog keys on the desktop ───────────────────────────────
|
|
1479
|
+
"newline": "換行",
|
|
1480
|
+
"Denied in {seconds} s": "{seconds} 秒後拒絕",
|
|
1481
|
+
"choose": "選擇",
|
|
1482
|
+
"select": "選定",
|
|
1483
|
+
"confirm": "確認",
|
|
1484
|
+
"presets": "預設",
|
|
1485
|
+
"add": "新增",
|
|
1486
|
+
"source": "來源",
|
|
1487
|
+
"panel": "面板",
|
|
1488
|
+
"log scale": "對數刻度",
|
|
1489
|
+
"use {value}": "使用 {value}",
|
|
1490
|
+
"keep the default": "保留預設值",
|
|
1491
|
+
"continue": "繼續",
|
|
1492
|
+
"new code": "新代碼",
|
|
1493
|
+
|
|
1494
|
+
// ── Plugins pane: starter packs ─────────────────────────────
|
|
1495
|
+
"Apply a starter pack": "套用入門套裝",
|
|
1496
|
+
"{name} pack": "{name} 套裝",
|
|
1497
|
+
"Custom set": "自訂組合",
|
|
1498
|
+
"{count} on": "開啟 {count} 個",
|
|
1499
|
+
"{count} off": "關閉 {count} 個",
|
|
1500
|
+
"{count} back on": "重新開啟 {count} 個",
|
|
1501
|
+
"Turn off": "關閉",
|
|
1502
|
+
"Turn on": "開啟",
|
|
1503
|
+
"Keep": "保留",
|
|
1504
|
+
"Panes are hidden, not closed. Undo brings them back.": "面板只是隱藏,不會關閉。復原即可找回。",
|
|
1505
|
+
"Apply {name}?": "套用 {name}?",
|
|
1506
|
+
"{name} applied: {changes}.": "已套用 {name}:{changes}。",
|
|
1507
|
+
"{name} is already what you have on.": "目前已經是 {name}。",
|
|
1508
|
+
"Undo": "復原",
|
|
1509
|
+
// ── Docs (DOCS, the ? on a pane) ─────────────────────────────
|
|
1510
|
+
"Docs for this pane": "此面板的文件",
|
|
1511
|
+
"Docs": "文件",
|
|
1512
|
+
"Open Docs": "開啟文件",
|
|
1513
|
+
"Read in Docs": "在文件中閱讀",
|
|
1514
|
+
"Read the docs and Academy lessons in the app. The ? on a pane opens its entry.": "在應用程式內閱讀文件與學院課程。面板上的 ? 會開啟對應條目。",
|
|
1515
|
+
"Open the focused pane's help card; Enter reads its docs.": "開啟目前面板的說明卡;按 Enter 閱讀其文件。",
|
|
1516
|
+
"function, page or lesson": "功能、頁面或課程",
|
|
1517
|
+
"Guides": "指南",
|
|
1518
|
+
"Academy": "學院",
|
|
1519
|
+
"offline, saved copy": "離線,已儲存的副本",
|
|
1520
|
+
"Open in Browser": "在瀏覽器中開啟",
|
|
1521
|
+
"No docs match \"{query}\".": "沒有符合「{query}」的文件。",
|
|
1522
|
+
"No docs for {name} yet.": "{name} 尚無文件。",
|
|
1523
|
+
"Search the Docs": "搜尋文件",
|
|
1524
|
+
"This lesson is not saved for offline reading.": "此課程未儲存供離線閱讀。",
|
|
1525
|
+
"It is kept once it has been read with a connection.": "連線閱讀過一次後就會儲存。",
|
|
1526
|
+
"Academy: {title}": "學院:{title}",
|
|
1527
|
+
"{minutes} min": "{minutes} 分鐘",
|
|
1468
1528
|
};
|
package/src/layout/desks.ts
CHANGED
|
@@ -251,7 +251,7 @@ async function buildDeskPane(
|
|
|
251
251
|
activeCollectionId: null,
|
|
252
252
|
}, createOptions) ?? {};
|
|
253
253
|
const capability = getPaneFunctionCapability(template, paneDef);
|
|
254
|
-
const options = normalizeCapabilityOptions(capability, { ...entry.options }, { strict: true });
|
|
254
|
+
const options = normalizeCapabilityOptions(capability, { ...entry.options }, { strict: true, code: template.shortcut?.prefix });
|
|
255
255
|
const settings: Record<string, unknown> = { ...spec.settings, ...capabilityPaneSettings(capability, options) };
|
|
256
256
|
const chartSpec = entry.studies?.length ? parseChartSpec(settings[CHART_SPEC_SETTING_KEY]) : null;
|
|
257
257
|
if (chartSpec) {
|
|
@@ -261,6 +261,24 @@ export function getDockDividerLayouts(layout: LayoutConfig, bounds: LayoutBounds
|
|
|
261
261
|
return collectDockGeometry(layout.dockRoot, bounds, [], [], [], options).dividers;
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
+
/**
|
|
265
|
+
* The leaves and dividers under the split at `path`, laid out in `bounds`
|
|
266
|
+
* (the split's own) as they will be once its ratio is `ratio`: what a divider
|
|
267
|
+
* drag moves, as `resizeSplitAtPath` will lay it out, without the rest of the
|
|
268
|
+
* tree. Null when no split is at `path`.
|
|
269
|
+
*/
|
|
270
|
+
export function getDockSplitGeometry(
|
|
271
|
+
layout: LayoutConfig,
|
|
272
|
+
path: Array<0 | 1>,
|
|
273
|
+
bounds: LayoutBounds,
|
|
274
|
+
ratio: number,
|
|
275
|
+
options?: DockGeometryOptions,
|
|
276
|
+
): { leaves: DockLeafLayout[]; dividers: DockDividerLayout[] } | null {
|
|
277
|
+
const node = getNodeAtPath(layout.dockRoot, path);
|
|
278
|
+
if (!node || node.kind !== "split") return null;
|
|
279
|
+
return collectDockGeometry({ ...node, ratio: clampRatio(ratio) }, bounds, path, [], [], options);
|
|
280
|
+
}
|
|
281
|
+
|
|
264
282
|
function isPathPrefix(prefix: Array<0 | 1>, path: Array<0 | 1>): boolean {
|
|
265
283
|
return prefix.length <= path.length && prefix.every((segment, index) => path[index] === segment);
|
|
266
284
|
}
|
|
@@ -14,7 +14,7 @@ import { apiClient, type TeamSummary } from "../api-client";
|
|
|
14
14
|
import { requestAuthDialog } from "../plugins/builtin/cloud/auth-dialog";
|
|
15
15
|
import { teamStore } from "../plugins/builtin/cloud/team/store";
|
|
16
16
|
import { usePlanAccess } from "../api-client/plan-access";
|
|
17
|
-
import { getMarketplaceHost } from "../plugins/
|
|
17
|
+
import { getMarketplaceHost } from "../plugins/marketplace/store";
|
|
18
18
|
import { rememberLayoutRequirements } from "../components/layout/missing-pane";
|
|
19
19
|
import type { PluginRegistry } from "../plugins/registry";
|
|
20
20
|
import type { LayoutConfig } from "../types/config";
|
|
@@ -45,8 +45,14 @@ function isIntradayChartRequest(request: ChartRequest, history?: QueryEntry<Pric
|
|
|
45
45
|
return request.bufferRange === "1D" || request.bufferRange === "1W" || request.bufferRange === "1M" || request.bufferRange === "3M";
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Held bars that still answer for the current window. `fetchedAt` is when
|
|
50
|
+
* they arrived: a copy received once its session had settled holds it however
|
|
51
|
+
* early its last bar, as the router judged it.
|
|
52
|
+
*/
|
|
48
53
|
export function normalizeFreshChartData(
|
|
49
54
|
points: PricePoint[] | null | undefined, request: ChartRequest, history?: QueryEntry<PricePoint[]>["history"],
|
|
55
|
+
fetchedAt?: number | null,
|
|
50
56
|
): PricePoint[] {
|
|
51
57
|
const normalized = normalizePriceHistory(points ?? []);
|
|
52
58
|
const target = publicListingTarget(request.instrument.symbol, request.instrument.exchange);
|
|
@@ -58,7 +64,7 @@ export function normalizeFreshChartData(
|
|
|
58
64
|
if (
|
|
59
65
|
isIntradayChartRequest(request, history)
|
|
60
66
|
&& isPriceHistoryStaleForCurrentWindow(normalized, Date.now(), { symbol: target.symbol, exchange: target.exchange,
|
|
61
|
-
intervalMs: interval ? priceHistoryIntervalMs(interval) : undefined, session })
|
|
67
|
+
intervalMs: interval ? priceHistoryIntervalMs(interval) : undefined, session, fetchedAt: fetchedAt ?? undefined })
|
|
62
68
|
) {
|
|
63
69
|
return [];
|
|
64
70
|
}
|
|
@@ -67,7 +73,7 @@ export function normalizeFreshChartData(
|
|
|
67
73
|
|
|
68
74
|
/** A request can cross a session/bar boundary while its upstream call is pending. */
|
|
69
75
|
export function freshChartFallback(entry: QueryEntry<PricePoint[]>, request: ChartRequest): QueryEntry<PricePoint[]> {
|
|
70
|
-
const data = normalizeFreshChartData(entry.lastGoodData, request, entry.history);
|
|
76
|
+
const data = normalizeFreshChartData(entry.lastGoodData, request, entry.history, entry.fetchedAt);
|
|
71
77
|
return data.length ? { ...entry, lastGoodData: data }
|
|
72
78
|
: { ...entry, data: null, lastGoodData: null, history: undefined };
|
|
73
79
|
}
|
|
@@ -105,7 +111,7 @@ function findChartSeedEntry({
|
|
|
105
111
|
if (candidateKey === key) continue;
|
|
106
112
|
if (!isSeedableChartRequest(request, candidateRequest)) continue;
|
|
107
113
|
const entry = getEntry(candidateKey);
|
|
108
|
-
const data = normalizeFreshChartData(resolveEntryData(entry), request, entry.history);
|
|
114
|
+
const data = normalizeFreshChartData(resolveEntryData(entry), request, entry.history, entry.fetchedAt);
|
|
109
115
|
if (!data?.length) continue;
|
|
110
116
|
const score = getTimeRangeIndex(candidateRequest.bufferRange);
|
|
111
117
|
if (!best || score > best.score) {
|
|
@@ -125,7 +131,7 @@ export function createChartLoadingEntry({
|
|
|
125
131
|
}: ChartSeedLookupArgs & {
|
|
126
132
|
current: QueryEntry<PricePoint[]>;
|
|
127
133
|
}): QueryEntry<PricePoint[]> {
|
|
128
|
-
const currentData = normalizeFreshChartData(resolveEntryData(current), request, current.history);
|
|
134
|
+
const currentData = normalizeFreshChartData(resolveEntryData(current), request, current.history, current.fetchedAt);
|
|
129
135
|
if (currentData.length) {
|
|
130
136
|
return loadingEntry<PricePoint[]>({
|
|
131
137
|
...current,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import { resolveTickerFinancialsQuoteState } from "../quotes/resolution";
|
|
23
23
|
import { measurePerf } from "../../utils/perf-marks";
|
|
24
24
|
import { hasLikelyQuoteUnitMismatch } from "../../utils/currency-units";
|
|
25
|
-
import { hasUsablePriceHistory } from "../../utils/price-history";
|
|
25
|
+
import { hasUsablePriceHistory, normalizePriceHistory } from "../../utils/price-history";
|
|
26
26
|
import { fxFreshUntil } from "../../utils/fx-market-hours";
|
|
27
27
|
import {
|
|
28
28
|
createBaselineChartRequest,
|
|
@@ -392,7 +392,7 @@ export class MarketDataCoordinator {
|
|
|
392
392
|
const key = buildChartKey(request);
|
|
393
393
|
this.chartRequests.set(key, request);
|
|
394
394
|
const current = this.chartStore.get(key);
|
|
395
|
-
const currentData = normalizeFreshChartData(resolveEntryData(current), request, current.history);
|
|
395
|
+
const currentData = normalizeFreshChartData(resolveEntryData(current), request, current.history, current.fetchedAt);
|
|
396
396
|
if (!options.forceRefresh && currentData.length > 0 && hasFreshEntryData(current, CHART_CACHE_TTL_MS)) {
|
|
397
397
|
if (currentData !== resolveEntryData(current)) {
|
|
398
398
|
return this.chartStore.update(key, (entry) =>
|
|
@@ -425,7 +425,9 @@ export class MarketDataCoordinator {
|
|
|
425
425
|
const result = await load(requested) ?? await load({ kind: "range", range: request.bufferRange });
|
|
426
426
|
if (!result) throw new Error("No chart history method is available");
|
|
427
427
|
const { points, ...history } = result;
|
|
428
|
-
|
|
428
|
+
// The router answers a copy short of the latest session only when a
|
|
429
|
+
// refetch failed, and that saved copy beats an empty chart.
|
|
430
|
+
const data = normalizePriceHistory(points);
|
|
429
431
|
const source = result.sourceKey ?? this.dataProvider.id;
|
|
430
432
|
const status = hasUsablePriceHistory(data) ? "success" : "empty";
|
|
431
433
|
const attempts = [createAttempt(source, startedAt, status, status === "empty" ? "NO_DATA" : undefined)];
|
|
@@ -563,6 +565,7 @@ export class MarketDataCoordinator {
|
|
|
563
565
|
fetchedAt: result?.fetchedAt ?? null,
|
|
564
566
|
responseSequence: result?.responseSequence,
|
|
565
567
|
asOf: result?.asOf,
|
|
568
|
+
delayMinutes: result?.delayMinutes,
|
|
566
569
|
staleAt: result?.staleAt ?? null,
|
|
567
570
|
error: classified ?? (!loading && empty ? { reasonCode: "NO_DATA", message: "No data available" } : null),
|
|
568
571
|
attempts: result ? [createAttempt(result.source, result.fetchedAt, error ? "fatal_error" : empty ? "empty" : "success", classified?.reasonCode, classified?.message)] : [],
|
|
@@ -25,8 +25,22 @@ export interface FuturesContract {
|
|
|
25
25
|
venue: "CME" | "CBT" | "NYM" | "CMX" | "NYB";
|
|
26
26
|
/** Lists a contract for every calendar month. */
|
|
27
27
|
everyMonth?: true;
|
|
28
|
-
/**
|
|
29
|
-
|
|
28
|
+
/**
|
|
29
|
+
* What a price counts where the server sends no contract terms for the root:
|
|
30
|
+
* Dutch TTF gas quotes in euros per MWh, which a bare "EUR" does not say, and
|
|
31
|
+
* live cattle in US cents per pound, where the server's "USX" does not.
|
|
32
|
+
*/
|
|
33
|
+
unit?: string;
|
|
34
|
+
/**
|
|
35
|
+
* No listed security answers to the code typed alone, so a bare TTF, ZN or 6E
|
|
36
|
+
* is this future wherever a symbol is typed. Codes a security also uses (NG
|
|
37
|
+
* is NovaGold, CL Colgate, ZM Zoom, GC several venues' listings) leave it
|
|
38
|
+
* unset: the security keeps the code and the future is its `=F` symbol.
|
|
39
|
+
* Checked with `gloomberb quote <code>` signed out on 2026-10-11: each of
|
|
40
|
+
* these was "Not a ticker", or for ZT and ZF a quote last updated in 2023 and
|
|
41
|
+
* 2021 that search no longer lists.
|
|
42
|
+
*/
|
|
43
|
+
bareCode?: true;
|
|
30
44
|
}
|
|
31
45
|
|
|
32
46
|
/** 0.005 -> 3, 0.25 -> 2, 1 -> 0. Written for ticks, not general numbers. */
|
|
@@ -41,28 +55,28 @@ export function tickDecimals(tick: number): number {
|
|
|
41
55
|
*/
|
|
42
56
|
export const FUTURES_CONTRACTS: FuturesContract[] = [
|
|
43
57
|
{ symbol: "ES=F", code: "ES", name: "E-Mini S&P 500", sector: "equity-index", venue: "CME", tick: 0.25 },
|
|
44
|
-
{ symbol: "NQ=F", code: "NQ", name: "E-Mini Nasdaq 100", sector: "equity-index", venue: "CME", tick: 0.25 },
|
|
45
|
-
{ symbol: "YM=F", code: "YM", name: "E-Mini Dow", sector: "equity-index", venue: "CBT", tick: 1 },
|
|
46
|
-
{ symbol: "RTY=F", code: "RTY", name: "E-Mini Russell 2000", sector: "equity-index", venue: "CME", tick: 0.1 },
|
|
58
|
+
{ symbol: "NQ=F", code: "NQ", name: "E-Mini Nasdaq 100", sector: "equity-index", venue: "CME", tick: 0.25, bareCode: true },
|
|
59
|
+
{ symbol: "YM=F", code: "YM", name: "E-Mini Dow", sector: "equity-index", venue: "CBT", tick: 1, bareCode: true },
|
|
60
|
+
{ symbol: "RTY=F", code: "RTY", name: "E-Mini Russell 2000", sector: "equity-index", venue: "CME", tick: 0.1, bareCode: true },
|
|
47
61
|
|
|
48
|
-
{ symbol: "ZT=F", code: "ZT", name: "2-Year T-Note", sector: "rates", venue: "CBT" },
|
|
49
|
-
{ symbol: "ZF=F", code: "ZF", name: "5-Year T-Note", sector: "rates", venue: "CBT" },
|
|
50
|
-
{ symbol: "ZN=F", code: "ZN", name: "10-Year T-Note", sector: "rates", venue: "CBT" },
|
|
51
|
-
{ symbol: "ZB=F", code: "ZB", name: "30-Year T-Bond", sector: "rates", venue: "CBT" },
|
|
52
|
-
{ symbol: "UB=F", code: "UB", name: "Ultra T-Bond", sector: "rates", venue: "CBT" },
|
|
62
|
+
{ symbol: "ZT=F", code: "ZT", name: "2-Year T-Note", sector: "rates", venue: "CBT", bareCode: true },
|
|
63
|
+
{ symbol: "ZF=F", code: "ZF", name: "5-Year T-Note", sector: "rates", venue: "CBT", bareCode: true },
|
|
64
|
+
{ symbol: "ZN=F", code: "ZN", name: "10-Year T-Note", sector: "rates", venue: "CBT", bareCode: true },
|
|
65
|
+
{ symbol: "ZB=F", code: "ZB", name: "30-Year T-Bond", sector: "rates", venue: "CBT", bareCode: true },
|
|
66
|
+
{ symbol: "UB=F", code: "UB", name: "Ultra T-Bond", sector: "rates", venue: "CBT", bareCode: true },
|
|
53
67
|
|
|
54
68
|
{ symbol: "CL=F", code: "CL", name: "WTI Crude Oil", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.01 },
|
|
55
69
|
{ symbol: "BZ=F", code: "BZ", name: "Brent Crude Oil", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.01 },
|
|
56
70
|
{ symbol: "NG=F", code: "NG", name: "Natural Gas", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.001 },
|
|
57
71
|
// Quoted in euros per MWh.
|
|
58
|
-
{ symbol: "TTF=F", code: "TTF", name: "Dutch TTF Gas", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.001,
|
|
72
|
+
{ symbol: "TTF=F", code: "TTF", name: "Dutch TTF Gas", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.001, unit: "EUR / MWh", bareCode: true },
|
|
59
73
|
{ symbol: "RB=F", code: "RB", name: "RBOB Gasoline", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.0001 },
|
|
60
74
|
{ symbol: "HO=F", code: "HO", name: "Heating Oil", sector: "energy", venue: "NYM", everyMonth: true, tick: 0.0001 },
|
|
61
75
|
|
|
62
76
|
{ symbol: "GC=F", code: "GC", name: "Gold", sector: "metals", venue: "CMX", tick: 0.1 },
|
|
63
77
|
{ symbol: "SI=F", code: "SI", name: "Silver", sector: "metals", venue: "CMX", tick: 0.005 },
|
|
64
78
|
{ symbol: "HG=F", code: "HG", name: "Copper", sector: "metals", venue: "CMX", tick: 0.0005 },
|
|
65
|
-
{ symbol: "ALI=F", code: "ALI", name: "Aluminum", sector: "metals", venue: "CMX", tick: 0.25,
|
|
79
|
+
{ symbol: "ALI=F", code: "ALI", name: "Aluminum", sector: "metals", venue: "CMX", tick: 0.25, unit: "USD / metric ton" },
|
|
66
80
|
{ symbol: "PL=F", code: "PL", name: "Platinum", sector: "metals", venue: "NYM", tick: 0.1 },
|
|
67
81
|
{ symbol: "PA=F", code: "PA", name: "Palladium", sector: "metals", venue: "NYM", tick: 0.1 },
|
|
68
82
|
|
|
@@ -70,27 +84,27 @@ export const FUTURES_CONTRACTS: FuturesContract[] = [
|
|
|
70
84
|
// dollars); a tick is in the quote's own units.
|
|
71
85
|
{ symbol: "ZC=F", code: "ZC", name: "Corn", sector: "agriculture", venue: "CBT", tick: 0.25 },
|
|
72
86
|
{ symbol: "ZS=F", code: "ZS", name: "Soybeans", sector: "agriculture", venue: "CBT", tick: 0.25 },
|
|
73
|
-
{ symbol: "ZM=F", code: "ZM", name: "Soybean Meal", sector: "agriculture", venue: "CBT", tick: 0.1
|
|
74
|
-
{ symbol: "ZL=F", code: "ZL", name: "Soybean Oil", sector: "agriculture", venue: "CBT", tick: 0.01,
|
|
75
|
-
{ symbol: "ZW=F", code: "ZW", name: "Chicago SRW Wheat", sector: "agriculture", venue: "CBT", tick: 0.25 },
|
|
76
|
-
{ symbol: "KE=F", code: "KE", name: "KC HRW Wheat", sector: "agriculture", venue: "CBT", tick: 0.25
|
|
87
|
+
{ symbol: "ZM=F", code: "ZM", name: "Soybean Meal", sector: "agriculture", venue: "CBT", tick: 0.1 },
|
|
88
|
+
{ symbol: "ZL=F", code: "ZL", name: "Soybean Oil", sector: "agriculture", venue: "CBT", tick: 0.01, bareCode: true },
|
|
89
|
+
{ symbol: "ZW=F", code: "ZW", name: "Chicago SRW Wheat", sector: "agriculture", venue: "CBT", tick: 0.25, bareCode: true },
|
|
90
|
+
{ symbol: "KE=F", code: "KE", name: "KC HRW Wheat", sector: "agriculture", venue: "CBT", tick: 0.25 },
|
|
77
91
|
{ symbol: "KC=F", code: "KC", name: "Coffee", sector: "agriculture", venue: "NYB", tick: 0.05 },
|
|
78
92
|
{ symbol: "SB=F", code: "SB", name: "Sugar #11", sector: "agriculture", venue: "NYB", tick: 0.01 },
|
|
79
93
|
{ symbol: "CC=F", code: "CC", name: "Cocoa", sector: "agriculture", venue: "NYB", tick: 1 },
|
|
80
|
-
{ symbol: "CT=F", code: "CT", name: "Cotton #2", sector: "agriculture", venue: "NYB", tick: 0.01 },
|
|
81
|
-
{ symbol: "OJ=F", code: "OJ", name: "Orange Juice", sector: "agriculture", venue: "NYB", tick: 0.05,
|
|
82
|
-
{ symbol: "LBR=F", code: "LBR", name: "Lumber", sector: "agriculture", venue: "CME", tick: 0.5,
|
|
94
|
+
{ symbol: "CT=F", code: "CT", name: "Cotton #2", sector: "agriculture", venue: "NYB", tick: 0.01, bareCode: true },
|
|
95
|
+
{ symbol: "OJ=F", code: "OJ", name: "Orange Juice", sector: "agriculture", venue: "NYB", tick: 0.05, unit: "US cents / lb", bareCode: true },
|
|
96
|
+
{ symbol: "LBR=F", code: "LBR", name: "Lumber", sector: "agriculture", venue: "CME", tick: 0.5, unit: "USD / 1,000 board ft", bareCode: true },
|
|
83
97
|
|
|
84
98
|
// Quoted in US cents per pound.
|
|
85
|
-
{ symbol: "LE=F", code: "LE", name: "Live Cattle", sector: "livestock", venue: "CME", tick: 0.025,
|
|
86
|
-
{ symbol: "HE=F", code: "HE", name: "Lean Hogs", sector: "livestock", venue: "CME", tick: 0.025,
|
|
87
|
-
|
|
88
|
-
{ symbol: "6E=F", code: "6E", name: "Euro FX", sector: "currencies", venue: "CME", tick: 0.00005 },
|
|
89
|
-
{ symbol: "6J=F", code: "6J", name: "Japanese Yen", sector: "currencies", venue: "CME", tick: 0.0000005 },
|
|
90
|
-
{ symbol: "6B=F", code: "6B", name: "British Pound", sector: "currencies", venue: "CME", tick: 0.0001 },
|
|
91
|
-
{ symbol: "6A=F", code: "6A", name: "Australian Dollar", sector: "currencies", venue: "CME", tick: 0.00005 },
|
|
92
|
-
{ symbol: "6C=F", code: "6C", name: "Canadian Dollar", sector: "currencies", venue: "CME", tick: 0.00005 },
|
|
93
|
-
{ symbol: "6S=F", code: "6S", name: "Swiss Franc", sector: "currencies", venue: "CME", tick: 0.00005 },
|
|
99
|
+
{ symbol: "LE=F", code: "LE", name: "Live Cattle", sector: "livestock", venue: "CME", tick: 0.025, unit: "US cents / lb" },
|
|
100
|
+
{ symbol: "HE=F", code: "HE", name: "Lean Hogs", sector: "livestock", venue: "CME", tick: 0.025, unit: "US cents / lb" },
|
|
101
|
+
|
|
102
|
+
{ symbol: "6E=F", code: "6E", name: "Euro FX", sector: "currencies", venue: "CME", tick: 0.00005, bareCode: true },
|
|
103
|
+
{ symbol: "6J=F", code: "6J", name: "Japanese Yen", sector: "currencies", venue: "CME", tick: 0.0000005, bareCode: true },
|
|
104
|
+
{ symbol: "6B=F", code: "6B", name: "British Pound", sector: "currencies", venue: "CME", tick: 0.0001, bareCode: true },
|
|
105
|
+
{ symbol: "6A=F", code: "6A", name: "Australian Dollar", sector: "currencies", venue: "CME", tick: 0.00005, bareCode: true },
|
|
106
|
+
{ symbol: "6C=F", code: "6C", name: "Canadian Dollar", sector: "currencies", venue: "CME", tick: 0.00005, bareCode: true },
|
|
107
|
+
{ symbol: "6S=F", code: "6S", name: "Swiss Franc", sector: "currencies", venue: "CME", tick: 0.00005, bareCode: true },
|
|
94
108
|
];
|
|
95
109
|
|
|
96
110
|
export const FUTURES_SECTOR_LABELS: Record<FuturesSector, string> = {
|
|
@@ -120,3 +134,42 @@ export function getContractsBySector(): Map<FuturesSector, FuturesContract[]> {
|
|
|
120
134
|
}
|
|
121
135
|
return map;
|
|
122
136
|
}
|
|
137
|
+
|
|
138
|
+
const BY_CODE: ReadonlyMap<string, FuturesContract> = new Map(FUTURES_CONTRACTS.map((contract) => [contract.code, contract]));
|
|
139
|
+
const BY_SYMBOL: ReadonlyMap<string, FuturesContract> = new Map(FUTURES_CONTRACTS.map((contract) => [contract.symbol, contract]));
|
|
140
|
+
|
|
141
|
+
const typed = (value: unknown) => typeof value === "string" ? value.trim().toUpperCase() : "";
|
|
142
|
+
|
|
143
|
+
/** The board row a bare code names, in any case: NG is Natural Gas whether or not a security also uses NG. */
|
|
144
|
+
export function futuresContractByCode(code: unknown): FuturesContract | null {
|
|
145
|
+
return BY_CODE.get(typed(code)) ?? null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* The board row a futures function's typed argument names, by code or
|
|
150
|
+
* continuous symbol: ttf, TTF and TTF=F are Dutch TTF Gas. A typed argument
|
|
151
|
+
* always means the future, so NG here is natural gas, never NovaGold.
|
|
152
|
+
*/
|
|
153
|
+
export function futuresBoardContract(value: unknown): FuturesContract | null {
|
|
154
|
+
return BY_SYMBOL.get(typed(value)) ?? futuresContractByCode(value);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The future a bare symbol typed for a security stands for: a code no listed
|
|
159
|
+
* security answers to (TTF is TTF=F). Null for every other symbol, and for a
|
|
160
|
+
* code a security keeps (NG), whose future is NG=F.
|
|
161
|
+
*/
|
|
162
|
+
export function bareFuturesCode(symbol: unknown): FuturesContract | null {
|
|
163
|
+
const contract = futuresContractByCode(symbol);
|
|
164
|
+
return contract?.bareCode ? contract : null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* The board row the ticker under the cursor names, for a futures function
|
|
169
|
+
* opened without an argument: its continuous symbol (NG=F) or a code no
|
|
170
|
+
* security answers to (TTF). A bare code a security keeps (NG, ZM, PL) is that
|
|
171
|
+
* security's, never the future's.
|
|
172
|
+
*/
|
|
173
|
+
export function futuresBoardContractForTicker(ticker: unknown): FuturesContract | null {
|
|
174
|
+
return BY_SYMBOL.get(typed(ticker)) ?? bareFuturesCode(ticker);
|
|
175
|
+
}
|