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/README.md
CHANGED
|
@@ -25,125 +25,48 @@ Desktop app for macOS and Windows. Terminal UI for macOS, Linux, and Windows.
|
|
|
25
25
|
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
- **Follow markets:** news, global indices, FX, economic events, and market scanners.
|
|
30
|
-
- **Manage your workspace:** portfolios, watchlists, broker connections, alerts, notes, and AI tools.
|
|
31
|
-
|
|
32
|
-
The desktop app and TUI share the command language and plugin system. The [browser app](https://term.gloom.sh) offers a smaller feature set and requires a free Gloom Cloud account: free market data is rate-limited and delayed by 15 minutes; Pro provides realtime data. See [browser features and limits](docs/browser.md).
|
|
28
|
+
Quotes, charts, financials, filings, options, news, portfolios and alerts in one workspace. Browse every function in the [function catalog](https://gloom.sh/docs/functions).
|
|
33
29
|
|
|
34
30
|
## Install
|
|
35
31
|
|
|
36
|
-
### Desktop
|
|
37
|
-
|
|
38
32
|
On **macOS (Apple Silicon)**:
|
|
39
33
|
|
|
40
34
|
```bash
|
|
41
35
|
brew install --cask gloomberb
|
|
42
36
|
```
|
|
43
37
|
|
|
44
|
-
On **Windows 11**, [download the installer](https://github.com/gloom-sh/gloomberb/releases/latest/download/stable-win-x64-GloomberbSetup.exe). It
|
|
45
|
-
|
|
46
|
-
Both desktop installers include the `gloomberb` terminal command.
|
|
47
|
-
|
|
48
|
-
### Terminal
|
|
38
|
+
On **Windows 11**, [download the installer](https://github.com/gloom-sh/gloomberb/releases/latest/download/stable-win-x64-GloomberbSetup.exe). It is not code-signed yet, so SmartScreen may ask you to click **More info**, then **Run anyway**.
|
|
49
39
|
|
|
50
|
-
|
|
40
|
+
For the terminal on **macOS or Linux**:
|
|
51
41
|
|
|
52
42
|
```bash
|
|
53
43
|
curl -fsSL gloom.sh/install | bash
|
|
54
44
|
```
|
|
55
45
|
|
|
56
|
-
|
|
46
|
+
The script downloads the prebuilt release from GitHub and checks its SHA-256 against the digest GitHub lists. Apple Silicon Macs get the desktop app and the `gloomberb` command; Linux and Intel Macs get the standalone binary. It asks for `sudo` only if the destination isn't writable. Prefer to download it yourself? See the [installation guide](docs/installation.md).
|
|
57
47
|
|
|
58
|
-
|
|
48
|
+
With [Bun](https://bun.sh), on any supported OS:
|
|
59
49
|
|
|
60
50
|
```bash
|
|
61
51
|
bun install -g gloomberb
|
|
62
52
|
```
|
|
63
53
|
|
|
64
|
-
|
|
54
|
+
Then run `gloomberb`. For chart graphics, use a Kitty-compatible terminal such as Ghostty, Kitty, or WezTerm. Windows Terminal draws charts as text; the desktop app draws them in full.
|
|
65
55
|
|
|
66
56
|
## Start
|
|
67
57
|
|
|
68
|
-
Press `Ctrl+P`
|
|
69
|
-
|
|
70
|
-
| Try | Opens |
|
|
71
|
-
|-----|-------|
|
|
72
|
-
| `DES AAPL` | Company details |
|
|
73
|
-
| `GP NVDA` | Price chart |
|
|
74
|
-
| `OVDV AAPL` | Implied-volatility surface and options term structure |
|
|
75
|
-
| `OPX SPY` / `GEX SPY` | Open interest by strike and expiry, max pain and dealer gamma ([method](docs/options-positioning.md)) |
|
|
76
|
-
| `HVG AAPL` / `HVT AAPL` | Realized volatility and volatility cones |
|
|
77
|
-
| `SEAS AAPL` | Seasonality: monthly returns by year and year overlays |
|
|
78
|
-
| `RDCF AAPL` | Reverse DCF: the cash flow growth the price assumes |
|
|
79
|
-
| `PEB AAPL` | P/E band: price against multiples of trailing EPS, and today's P/E in its own history |
|
|
80
|
-
| `SIW` | Short squeeze watch: crowded shorts in your portfolios and watchlists that are moving up |
|
|
81
|
-
| `RIPL` | Earnings Ripple: customers and suppliers of your holdings that report soon |
|
|
82
|
-
| `MDAY SPY` | Macro-day reaction: how a name moves on CPI, jobs and FOMC days against a normal day |
|
|
83
|
-
| `COT [code or root]` | CFTC positioning and cross-market extremes |
|
|
84
|
-
| `DOE` / `NGS` | EIA weekly oil stocks and gas storage, with builds, draws and five-year ranges |
|
|
85
|
-
| `CPI [component]` / `ECAN` | US consumer prices by component, with weights, contributions to the headline and the next release |
|
|
86
|
-
| `TOP` | Market stories |
|
|
87
|
-
| `WIRP` / `FFIP` | US rate path and conditional FOMC probabilities |
|
|
88
|
-
| `BTMM` | Funding rates, bill curves and Federal Reserve liquidity |
|
|
89
|
-
| `CTM [root]` | Futures contract curve, historical ghosts, roll yield and open interest, including `CTM VX` and CME crypto (`CTM BTC`) |
|
|
90
|
-
| `MAP ships` / `CHOKE` | Ships, ports, energy and airports on one map, and chokepoint transits as chart series ([guide](docs/world-map.md)) |
|
|
91
|
-
| `PF` | Portfolios and watchlists |
|
|
92
|
-
| `HELP` | Commands and keyboard shortcuts |
|
|
93
|
-
|
|
94
|
-
Use `Tab` to switch panes and `j` / `k` to navigate lists. The [user guide](docs/usage.md) covers charts, broker setup, keyboard shortcuts, and the full command reference. See [research data conventions](docs/research-data.md) for return definitions, financial sources, and model assumptions. [Supply chain evidence](docs/supply-chain.md) explains Pro SPLC trust tiers, source evidence, reverse relationships, flow diagrams and multi-hop graphs and path searches. [Credit documents](docs/credit-documents.md) covers CRDOC/COVN capital structure, covenant headroom and amendment evidence. [Research attention](docs/research-attention.md) covers the Pro ATTN dataset, privacy-qualified counts and Gloom Trending. [Hiring and app attention](docs/hiring-app-attention.md) covers HIRE/APPS observations, evidence and Pro previews. [Government awards](docs/government-awards.md) covers AWARDS, procurement history and source coverage. [Distress records](docs/distress-monitor.md) covers DIST: 8-K filings, going-concern disclosures, listing designations and insolvency notices, with their dates and licences. [Power and grid capacity](docs/power-grid.md) covers POWER queues, large loads, utility exposure and source history. [Perpetual markets](docs/perpetuals.md) covers funding, open interest, premiums and Pro access. [Exposure analysis](docs/exposure.md) covers EXPO scenario estimates, portfolio weights and evidence paths.
|
|
95
|
-
|
|
96
|
-
## CLI
|
|
97
|
-
|
|
98
|
-
Run commands directly from your shell:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
gloomberb quote AAPL
|
|
102
|
-
gloomberb quote AAPL --json
|
|
103
|
-
gloomberb help
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Output is human-readable by default; use `--json`, `--csv`, or `--ndjson` for scripts. See the [CLI reference](docs/usage.md#cli) for commands and flags.
|
|
107
|
-
|
|
108
|
-
## Plugins and contributing
|
|
109
|
-
|
|
110
|
-
Plugins add panes, data providers, broker connections, and commands. Install one from GitHub:
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
gloomberb install gloom-sh/gloom-tv
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
See the [plugin development guide](PLUGINS.md), [TV setup](docs/usage.md#live-tv), or [contributing guide](CONTRIBUTING.md) to get started.
|
|
117
|
-
|
|
118
|
-
Available in English, Spanish, Simplified Chinese, Traditional Chinese, Japanese, and Korean. Use `LANG` in the command bar to switch; see [language settings](docs/usage.md#localized-interface).
|
|
119
|
-
|
|
120
|
-
[MIT licensed](LICENSE). Built with [OpenTUI](https://opentui.com/).
|
|
58
|
+
Press `Ctrl+P` for the command bar, or `` ` `` to search for a ticker. Try `DES AAPL` for company details or `GP NVDA` for a price chart. `HELP` lists commands and shortcuts.
|
|
121
59
|
|
|
122
|
-
|
|
60
|
+
The [user guide](docs/usage.md) covers charts, broker setup, shortcuts, and the CLI (`gloomberb quote AAPL`).
|
|
123
61
|
|
|
124
|
-
|
|
62
|
+
## Data and privacy
|
|
125
63
|
|
|
126
|
-
The app
|
|
64
|
+
The app is MIT licensed. Market data and Ask Gloom use [Gloom Cloud](https://gloom.sh/cloud), our hosted service, which is not open source. Free market data is delayed 15 minutes; Pro adds real-time data. See [what is open and what is not](docs/open-source.md). The [browser app](https://term.gloom.sh) has a smaller feature set ([limits](docs/browser.md)).
|
|
127
65
|
|
|
128
|
-
|
|
66
|
+
Crash reports and usage counts can be turned off. See [what is sent and how to opt out](docs/telemetry.md).
|
|
129
67
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
To turn either off, run `Crash Reports` or `Usage Counts` from the command bar, or:
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
gloomberb config set telemetry.crashReports false
|
|
136
|
-
gloomberb config set telemetry.usage false
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Setting `GLOOMBERB_NO_TELEMETRY=1` or `DO_NOT_TRACK=1` in the environment turns all of it off. The browser app also honours Do Not Track and Global Privacy Control.
|
|
140
|
-
|
|
141
|
-
**Attention Counts are separate and off by default.** Run `Attention Counts` in the command bar and review the consent dialog to share ticker research counts for Gloom Trending. This sends ticker symbols and the kind of explicit research action only while signed in with a verified account. It does not send holdings, watchlist names, queries or an install id. Consent stays on this device; cloud sync cannot enable it elsewhere. Turn the setting off to discard unsent counts, or run `gloomberb config set telemetry.attention false`. The environment and browser opt-outs above also disable Attention Counts. See the [attention privacy review](docs/attention-privacy.md) for the authenticated collection boundary, retention, aggregation and remaining risks.
|
|
142
|
-
|
|
143
|
-
## Sponsors
|
|
144
|
-
|
|
145
|
-
<a href="https://adjacent.markets/?ref=gloomberb"><img src="docs/assets/adjacent.svg" alt="Adjacent" width="56" /></a>
|
|
68
|
+
## Plugins and contributing
|
|
146
69
|
|
|
147
|
-
|
|
70
|
+
Plugins add panes, data providers, broker connections, and commands. Install one from GitHub with `gloomberb install gloom-sh/gloom-tv`. See the [plugin guide](PLUGINS.md) and the [contributing guide](CONTRIBUTING.md).
|
|
148
71
|
|
|
149
|
-
|
|
72
|
+
[MIT licensed](LICENSE). Built with [OpenTUI](https://opentui.com/). [Sponsor Gloomberb](https://gloom.sh/sponsor).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gloomberb",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.6",
|
|
4
4
|
"packageManager": "bun@1.3.11",
|
|
5
5
|
"description": "Market research and portfolio tracker for the terminal",
|
|
6
6
|
"module": "src/public/index.ts",
|
|
@@ -62,11 +62,13 @@
|
|
|
62
62
|
"desktop:build": "electrobun build",
|
|
63
63
|
"desktop:release": "electrobun build --env=stable",
|
|
64
64
|
"desktop:release:windows": "electrobun build --env=stable --targets=win-x64",
|
|
65
|
+
"docs:snapshot": "bun run scripts/update-docs-snapshot.ts",
|
|
65
66
|
"plugins:manifest": "bun run scripts/generate-plugin-manifest.ts",
|
|
66
67
|
"plugins:manifest:check": "bun run scripts/generate-plugin-manifest.ts --check",
|
|
67
68
|
"plugins:registry:check": "bun run scripts/check-registry-plugins.ts",
|
|
68
69
|
"web:proxy-hosts": "bun run scripts/generate-web-proxy-hosts.ts",
|
|
69
70
|
"map:data": "bun run scripts/generate-world-map-data.ts",
|
|
71
|
+
"glyphs:terminal": "bun run scripts/generate-terminal-glyphs.ts",
|
|
70
72
|
"macro-releases:update": "bun run scripts/update-macro-releases.ts",
|
|
71
73
|
"web:proxy-hosts:check": "bun run scripts/generate-web-proxy-hosts.ts --check",
|
|
72
74
|
"typecheck": "bun run typecheck:opentui && bun run typecheck:dom && bun run typecheck:cloudflare && bun run typecheck:scripts && bun run typecheck:plugin-tests",
|
|
@@ -81,6 +83,8 @@
|
|
|
81
83
|
"benchmark:tui:compare": "bun run scripts/benchmark-tui-compare.ts",
|
|
82
84
|
"benchmark:tui:memory": "bun run scripts/benchmark-tui-memory.ts",
|
|
83
85
|
"check:pane-chrome": "bun run scripts/pane-chrome/checks.ts",
|
|
86
|
+
"check:pane-screenshot": "bun run scripts/pane-chrome/screenshot.ts",
|
|
87
|
+
"check:pane-rest": "bun run scripts/pane-chrome/rest-diff.ts",
|
|
84
88
|
"benchmark:pane-drag:compare": "bun run scripts/pane-chrome/frame-budget.ts",
|
|
85
89
|
"test:global-upgrade": "bun run scripts/smoke-global-upgrade.ts",
|
|
86
90
|
"release": "./scripts/release.sh"
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
* `email-auth-attempt`, the non-React logic in `auth-model`.
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useRef, useState, type ReactNode } from "react";
|
|
8
|
-
import { apiClient, type AuthUser } from "
|
|
9
|
-
import { matchesKeyChord, parseKeyChord } from "
|
|
10
|
-
import { Button, Spinner, TextField } from "
|
|
11
|
-
import { t, tf } from "
|
|
12
|
-
import { useAppLanguage } from "
|
|
13
|
-
import { colors } from "
|
|
14
|
-
import { Box, Text, TextAttributes, type InputRenderable } from "
|
|
15
|
-
import { useDialogKeyboard } from "
|
|
16
|
-
import { isPlainKey } from "
|
|
8
|
+
import { apiClient, type AuthUser } from "../api-client";
|
|
9
|
+
import { matchesKeyChord, parseKeyChord } from "../app/keybindings";
|
|
10
|
+
import { Button, Spinner, TextField } from "../components";
|
|
11
|
+
import { t, tf } from "../i18n";
|
|
12
|
+
import { useAppLanguage } from "../i18n/react";
|
|
13
|
+
import { colors } from "../theme/colors";
|
|
14
|
+
import { Box, Text, TextAttributes, type InputRenderable } from "../ui";
|
|
15
|
+
import { useDialogKeyboard } from "../ui/dialog";
|
|
16
|
+
import { isPlainKey } from "../utils/keyboard";
|
|
17
17
|
import { validateAccountEmail, type AccountMode } from "./auth-model";
|
|
18
18
|
import { useEmailAuthAttempt, type EmailAuthField } from "./email-auth-attempt";
|
|
19
19
|
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* (validation, retry classification, username derivation) can be exercised
|
|
5
5
|
* without rendering.
|
|
6
6
|
*/
|
|
7
|
-
import { apiClient, type AuthUser } from "
|
|
8
|
-
import { identifyResearchUser } from "
|
|
9
|
-
import { t } from "
|
|
10
|
-
import { chatController } from "
|
|
7
|
+
import { apiClient, type AuthUser } from "../api-client";
|
|
8
|
+
import { identifyResearchUser } from "../api-client/research-activity";
|
|
9
|
+
import { t } from "../i18n";
|
|
10
|
+
import { accountSession as chatController } from "./session";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* `signup` is the one email form that serves new and returning accounts (a
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { CloudPricing } from "../api-client";
|
|
2
|
+
import { t, tf } from "../i18n";
|
|
3
|
+
|
|
4
|
+
const DEFAULT_TRIAL_DAYS = 7;
|
|
5
|
+
|
|
6
|
+
function formatUsdCents(cents: number): string {
|
|
7
|
+
const dollars = cents / 100;
|
|
8
|
+
return Number.isInteger(dollars) ? `$${dollars}` : `$${dollars.toFixed(2)}`;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type CloudBillingInterval = "month" | "year";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Pro price for one billing interval, suffixed with the period. Falls back to
|
|
15
|
+
* the current price when `/pricing` is unreachable so the table never renders
|
|
16
|
+
* a blank cell.
|
|
17
|
+
*/
|
|
18
|
+
export function formatCloudPrice(
|
|
19
|
+
pricing: CloudPricing | null | undefined,
|
|
20
|
+
interval: CloudBillingInterval = "month",
|
|
21
|
+
): string {
|
|
22
|
+
const yearly = interval === "year";
|
|
23
|
+
if (!pricing) return yearly ? t("$630/yr") : t("$70/mo");
|
|
24
|
+
const amount = formatUsdCents((yearly ? pricing.yearly : pricing.monthly).amount);
|
|
25
|
+
return yearly ? tf("{amount}/yr", { amount }) : tf("{amount}/mo", { amount });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function formatCloudMonthlyPrice(pricing: CloudPricing | null | undefined): string {
|
|
29
|
+
return formatCloudPrice(pricing, "month");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Whole months of the monthly price the yearly price leaves unpaid, e.g. 3. */
|
|
33
|
+
export function monthsFreeYearly(pricing: CloudPricing | null | undefined): number {
|
|
34
|
+
if (!pricing || pricing.monthly.amount <= 0) return 0;
|
|
35
|
+
const saved = (pricing.monthly.amount * 12 - pricing.yearly.amount) / pricing.monthly.amount;
|
|
36
|
+
return saved > 0 ? Math.round(saved) : 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Short calendar date for the trial countdown, e.g. "Aug 11". */
|
|
40
|
+
export function formatTrialEnd(endsAt: Date | null | undefined): string | null {
|
|
41
|
+
if (!endsAt || Number.isNaN(endsAt.getTime())) return null;
|
|
42
|
+
return endsAt.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Pro-column note for the plan comparison, e.g. "7-day free trial". The trial
|
|
47
|
+
* is part of the Pro subscription (card required, cancel before it converts),
|
|
48
|
+
* so it is never advertised as something the free plan includes.
|
|
49
|
+
*/
|
|
50
|
+
export function formatTrialOffer(pricing: CloudPricing | null | undefined): string {
|
|
51
|
+
return tf("{days}-day free trial", { days: trialDaysOf(pricing) });
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** The trial length `/pricing` gives, or today's length when it is unreachable. */
|
|
55
|
+
export function trialDaysOf(pricing: CloudPricing | null | undefined): number {
|
|
56
|
+
return pricing?.trialDays ?? DEFAULT_TRIAL_DAYS;
|
|
57
|
+
}
|
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
* and which owns the actual dialog.
|
|
7
7
|
*/
|
|
8
8
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
9
|
-
import type { AuthUser } from "
|
|
10
|
-
import { t, tf } from "
|
|
11
|
-
import { useAppLanguage } from "
|
|
12
|
-
import { useViewport } from "
|
|
13
|
-
import { colors } from "
|
|
14
|
-
import { Box, Text, TextAttributes } from "
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
9
|
+
import type { AuthUser } from "../api-client";
|
|
10
|
+
import { t, tf } from "../i18n";
|
|
11
|
+
import { useAppLanguage } from "../i18n/react";
|
|
12
|
+
import { useViewport } from "../react/input";
|
|
13
|
+
import { colors } from "../theme/colors";
|
|
14
|
+
import { Box, Text, TextAttributes, useUiCapabilities } from "../ui";
|
|
15
|
+
import { DialogHints } from "../components/ui/dialog-actions";
|
|
16
|
+
import { SignInCodePanel } from "../components/sign-in-code-panel";
|
|
17
|
+
import { useDialog, useDialogKeyboard, type PromptContext } from "../ui/dialog";
|
|
18
|
+
import { isPlainKey, type KeyboardModifierEventLike } from "../utils/keyboard";
|
|
18
19
|
import { DeviceSignInController, type DeviceSignInSnapshot } from "./device-signin";
|
|
19
20
|
|
|
20
21
|
/** How long the approval stays on screen before `onApproved` moves on. */
|
|
@@ -101,6 +102,7 @@ export function DeviceSignInPanel({
|
|
|
101
102
|
|
|
102
103
|
export function DeviceSignInDialog({ resolve, dismiss }: PromptContext<AuthUser | undefined>) {
|
|
103
104
|
useAppLanguage();
|
|
105
|
+
const { nativePaneChrome } = useUiCapabilities();
|
|
104
106
|
const { height: termHeight } = useViewport();
|
|
105
107
|
// Closes on approval after a beat so the confirmation is visible; enter skips the wait.
|
|
106
108
|
const { snapshot, retry } = useDeviceSignIn({ onApproved: resolve });
|
|
@@ -127,9 +129,13 @@ export function DeviceSignInDialog({ resolve, dismiss }: PromptContext<AuthUser
|
|
|
127
129
|
{/* Border, padding, title, and footer take about ten rows around the panel. */}
|
|
128
130
|
<DeviceSignInPanel snapshot={snapshot} height={Math.max(4, termHeight - 10)} />
|
|
129
131
|
<Box height={1} />
|
|
130
|
-
|
|
131
|
-
<
|
|
132
|
-
|
|
132
|
+
{nativePaneChrome ? (
|
|
133
|
+
<DialogHints keys={[{ key: "r", label: "new code" }, { key: "Esc", label: "cancel" }]} />
|
|
134
|
+
) : (
|
|
135
|
+
<Box height={1}>
|
|
136
|
+
<Text fg={colors.textMuted}>{t("r to refresh the code · esc to cancel")}</Text>
|
|
137
|
+
</Box>
|
|
138
|
+
)}
|
|
133
139
|
</Box>
|
|
134
140
|
);
|
|
135
141
|
}
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
type AuthUser,
|
|
10
10
|
type DeviceAuthStartResponse,
|
|
11
11
|
type DeviceAuthTokenResponse,
|
|
12
|
-
} from "
|
|
13
|
-
import { chatController } from "
|
|
12
|
+
} from "../api-client";
|
|
13
|
+
import { accountSession as chatController } from "./session";
|
|
14
14
|
|
|
15
15
|
export type DeviceSignInPhase =
|
|
16
16
|
| "idle"
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* attempt ignored. Each form keeps its own fields, layout and keys.
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
|
-
import type { AuthUser } from "
|
|
9
|
-
import { t } from "
|
|
8
|
+
import type { AuthUser } from "../api-client";
|
|
9
|
+
import { t } from "../i18n";
|
|
10
10
|
import {
|
|
11
11
|
advanceAccountField,
|
|
12
12
|
classifyAccountError,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PersistedAuthUser } from "../api-client";
|
|
2
|
+
|
|
3
|
+
/** Session persistence and realtime wiring supplied by the host's session owner. */
|
|
4
|
+
interface AccountSession {
|
|
5
|
+
adoptSession(sessionToken: string, user: PersistedAuthUser): void;
|
|
6
|
+
refreshSession(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// The session owner registers its singleton during module initialization, before
|
|
10
|
+
// any host renders an account surface. Keep the object so method calls retain
|
|
11
|
+
// their receiver and use the same session state as boot restoration.
|
|
12
|
+
export let accountSession: AccountSession;
|
|
13
|
+
|
|
14
|
+
export function registerAccountSession(session: AccountSession): void {
|
|
15
|
+
accountSession = session;
|
|
16
|
+
}
|
|
@@ -5,22 +5,23 @@
|
|
|
5
5
|
* only then opens checkout.
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
|
-
import { apiClient, type CloudAccountPlan, type CloudPricing } from "
|
|
9
|
-
import { Button } from "
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
8
|
+
import { apiClient, type CloudAccountPlan, type CloudPricing } from "../api-client";
|
|
9
|
+
import { Button } from "../components/ui/button";
|
|
10
|
+
import { DialogActions } from "../components/ui/dialog-actions";
|
|
11
|
+
import { KeyValueRow } from "../components/ui/display";
|
|
12
|
+
import { DialogFrame } from "../components/ui/frame";
|
|
13
|
+
import { SegmentedControl } from "../components/ui/toggle";
|
|
14
|
+
import { t, tf } from "../i18n";
|
|
15
|
+
import { useAppLanguage } from "../i18n/react";
|
|
16
|
+
import { Box } from "../ui";
|
|
17
|
+
import { type DialogApi, type PromptContext, useDialogKeyboard } from "../ui/dialog";
|
|
17
18
|
import {
|
|
18
19
|
type CloudBillingInterval,
|
|
19
20
|
formatCloudPrice,
|
|
20
21
|
formatTrialEnd,
|
|
21
22
|
monthsFreeYearly,
|
|
22
23
|
trialDaysOf,
|
|
23
|
-
} from "
|
|
24
|
+
} from "./billing";
|
|
24
25
|
import { useUpgradePersonalization } from "./upgrade-personalization";
|
|
25
26
|
import { upgradeTickerList } from "./upgrade-tickers";
|
|
26
27
|
|
|
@@ -210,7 +211,7 @@ function UpgradeDialog({
|
|
|
210
211
|
: tf("Enter {action} · Esc not now", { action: copy.confirmLabel.toLowerCase() });
|
|
211
212
|
|
|
212
213
|
return (
|
|
213
|
-
<DialogFrame title={copy.title} subtitle={copy.subtitle} footer={footer}>
|
|
214
|
+
<DialogFrame title={copy.title} subtitle={copy.subtitle} footer={footer} desktopFooter={null}>
|
|
214
215
|
<Box flexDirection="column" width={width}>
|
|
215
216
|
{copy.showPlan ? (
|
|
216
217
|
<>
|
|
@@ -241,10 +242,10 @@ function UpgradeDialog({
|
|
|
241
242
|
<Box height={1} />
|
|
242
243
|
</>
|
|
243
244
|
) : null}
|
|
244
|
-
<
|
|
245
|
-
<Button label={copy.confirmLabel} variant="primary" disabled={!offer} onPress={confirm} />
|
|
246
|
-
<Button label="Not now" variant="secondary" onPress={dismiss} />
|
|
247
|
-
</
|
|
245
|
+
<DialogActions>
|
|
246
|
+
<Button label={copy.confirmLabel} variant="primary" desktopShortcut="Enter" disabled={!offer} onPress={confirm} />
|
|
247
|
+
<Button label="Not now" variant="secondary" desktopShortcut="Esc" onPress={dismiss} />
|
|
248
|
+
</DialogActions>
|
|
248
249
|
</Box>
|
|
249
250
|
</DialogFrame>
|
|
250
251
|
);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useEffect, useMemo, useReducer } from "react";
|
|
2
|
-
import { apiClient } from "
|
|
3
|
-
import { usePlanAccess } from "
|
|
4
|
-
import { exposeUpgradePersonalized, knownUpgradePersonalized } from "
|
|
5
|
-
import { useOptionalAppSelector } from "
|
|
6
|
-
import { useAppVisible } from "
|
|
7
|
-
import type { TickerFinancials } from "
|
|
8
|
-
import type { TickerRecord, Watchlist } from "
|
|
2
|
+
import { apiClient } from "../api-client";
|
|
3
|
+
import { usePlanAccess } from "../api-client/plan-access";
|
|
4
|
+
import { exposeUpgradePersonalized, knownUpgradePersonalized } from "../api-client/research-activity";
|
|
5
|
+
import { useOptionalAppSelector } from "../state/app/context";
|
|
6
|
+
import { useAppVisible } from "../state/app/activity";
|
|
7
|
+
import type { TickerFinancials } from "../types/financials";
|
|
8
|
+
import type { TickerRecord, Watchlist } from "../types/ticker";
|
|
9
9
|
import { selectUpgradeTickers } from "./upgrade-tickers";
|
|
10
10
|
|
|
11
11
|
const NO_TICKERS = new Map<string, TickerRecord>();
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* to watch, read from this device's portfolios and watchlists. They stay on
|
|
5
5
|
* the device; nothing here is sent anywhere.
|
|
6
6
|
*/
|
|
7
|
-
import { tf } from "
|
|
8
|
-
import type { TickerFinancials } from "
|
|
9
|
-
import type { TickerRecord, Watchlist } from "
|
|
10
|
-
import { isUsListingExchange } from "
|
|
11
|
-
import { getPortfolioPositionValue } from "../
|
|
12
|
-
import { STARTER_SYMBOLS } from "
|
|
7
|
+
import { tf } from "../i18n";
|
|
8
|
+
import type { TickerFinancials } from "../types/financials";
|
|
9
|
+
import type { TickerRecord, Watchlist } from "../types/ticker";
|
|
10
|
+
import { isUsListingExchange } from "../utils/exchanges";
|
|
11
|
+
import { getPortfolioPositionValue } from "../portfolio/position-value";
|
|
12
|
+
import { STARTER_SYMBOLS } from "../tickers/starter-symbols";
|
|
13
13
|
|
|
14
14
|
const UPGRADE_TICKER_LIMIT = 3;
|
|
15
15
|
/** One to five letters and an optional class letter: BRK.B, never BTC-USD, ES=F, ^GSPC, SHOP.TO or 7203. */
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
-
import { apiClient, type AuthUser } from "
|
|
3
|
-
import { Button } from "
|
|
4
|
-
import { useShortcut } from "
|
|
5
|
-
import { Box, Text } from "
|
|
6
|
-
import { colors } from "
|
|
7
|
-
import { isPlainKey } from "
|
|
2
|
+
import { apiClient, type AuthUser } from "../api-client";
|
|
3
|
+
import { Button } from "../components/ui/button";
|
|
4
|
+
import { useShortcut } from "../react/input";
|
|
5
|
+
import { Box, Text } from "../ui";
|
|
6
|
+
import { colors } from "../theme/colors";
|
|
7
|
+
import { isPlainKey } from "../utils/keyboard";
|
|
8
8
|
|
|
9
9
|
/** Shared continuation after email signup in the terminal and browser. */
|
|
10
10
|
export function CloudVerificationPanel({ onVerified, onContinueFree }: {
|
|
@@ -29,7 +29,12 @@ export interface CentralBankRow {
|
|
|
29
29
|
/** When the bank's own site last showed the same level as a lagging BIS observation. */
|
|
30
30
|
confirmedAt?: string | null
|
|
31
31
|
confirmationSourceUrl?: string | null
|
|
32
|
-
|
|
32
|
+
/** The bank's next decision from its own published calendar, or China's next 1-year LPR fixing (`kind`). */
|
|
33
|
+
nextMeeting: { date: string; sourceUrl: string; verifiedAt: string; kind?: "decision" | "fixing" } | null
|
|
34
|
+
/** Why `nextMeeting` is null; older servers leave it out, and a null meeting then reads as not published. */
|
|
35
|
+
nextMeetingStatus?: "scheduled" | "not-published" | "not-verified" | "no-policy-rate"
|
|
36
|
+
/** The BIS series definition and breaks, also in `notes`: history a citation of the latest rate leaves out. */
|
|
37
|
+
seriesNotes?: string[]
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
export interface CentralBankRatesPayload {
|
package/src/api-client/chat.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
normalizeChatDiscordLink,
|
|
5
5
|
normalizeChatMessage,
|
|
6
6
|
normalizeChatMessages,
|
|
7
|
+
normalizeChatReactions,
|
|
7
8
|
normalizeChatState,
|
|
8
9
|
} from "./normalizers";
|
|
9
10
|
import { CHAT_ATTACHMENTS_FEATURE, type CloudApiSocket } from "./socket";
|
|
@@ -14,6 +15,7 @@ import type {
|
|
|
14
15
|
ChatDiscordLink,
|
|
15
16
|
ChatMessage,
|
|
16
17
|
ChatNotification,
|
|
18
|
+
ChatReactionsUpdate,
|
|
17
19
|
ChatStateResponse,
|
|
18
20
|
} from "./types";
|
|
19
21
|
import type { CloudApiRequest } from "./request";
|
|
@@ -258,6 +260,30 @@ export class CloudChatApi {
|
|
|
258
260
|
return normalizeChatMessage(message);
|
|
259
261
|
}
|
|
260
262
|
|
|
263
|
+
/**
|
|
264
|
+
* Sets your reaction with one emoji on a message; setting what is already
|
|
265
|
+
* there changes nothing. Answers the message's reactions as they stand.
|
|
266
|
+
*/
|
|
267
|
+
async setReaction(
|
|
268
|
+
channelId: string,
|
|
269
|
+
messageId: string,
|
|
270
|
+
emoji: string,
|
|
271
|
+
reacted: boolean,
|
|
272
|
+
): Promise<ChatReactionsUpdate> {
|
|
273
|
+
const answer = await this.request<{ reactions?: unknown }>(
|
|
274
|
+
`/chat/channels/${channelId}/messages/${messageId}/reactions`,
|
|
275
|
+
{
|
|
276
|
+
method: "PUT",
|
|
277
|
+
body: JSON.stringify({ emoji, reacted }),
|
|
278
|
+
},
|
|
279
|
+
);
|
|
280
|
+
return { channelId, messageId, reactions: normalizeChatReactions(answer?.reactions) };
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
subscribeReactions(listener: (update: ChatReactionsUpdate) => void): () => void {
|
|
284
|
+
return this.options.socket.subscribeChatReactions(listener);
|
|
285
|
+
}
|
|
286
|
+
|
|
261
287
|
/** Whether this account is tied to a Discord person. Throws a 404 or 501 `ApiRequestError` on a server without Discord sync. */
|
|
262
288
|
async getDiscordLink(): Promise<ChatDiscordLink> {
|
|
263
289
|
return normalizeChatDiscordLink(await this.options.request<unknown>("/chat/discord/link"));
|
|
@@ -27,6 +27,8 @@ export interface CdxBoardIndex {
|
|
|
27
27
|
/** In the quote's unit, on one contract across a roll. */
|
|
28
28
|
change1D: number | null;
|
|
29
29
|
change1W: number | null;
|
|
30
|
+
/** Absent from a server that predates it. */
|
|
31
|
+
change1M?: number | null;
|
|
30
32
|
/** Oldest first, the on-the-run 5Y contract each day. */
|
|
31
33
|
points: CreditBoardPoint[];
|
|
32
34
|
}
|