gloomberb 0.16.2 → 0.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -1
- package/src/api-client/askg.ts +43 -0
- package/src/api-client/auth.ts +15 -0
- package/src/api-client/beneficial-owners.ts +4 -0
- package/src/api-client/chat.ts +19 -0
- package/src/api-client/company-kpis.ts +14 -2
- package/src/api-client/data.ts +34 -16
- package/src/api-client/index.ts +12 -0
- package/src/api-client/normalizers.ts +27 -0
- package/src/api-client/paths.ts +88 -23
- package/src/api-client/request.ts +2 -1
- package/src/api-client/research-activity.ts +31 -0
- package/src/api-client/socket.ts +39 -8
- package/src/api-client/types.ts +57 -1
- package/src/api-client/upgrade-experiment.ts +90 -0
- package/src/app/global-shortcuts.ts +11 -1
- package/src/app/keybindings/actions.ts +10 -0
- package/src/app/pane-runtime/index.tsx +8 -0
- package/src/app/pane-runtime/pane-template-runtime.ts +5 -0
- package/src/app/pane-runtime/plugin-bindings.ts +65 -25
- package/src/app/pane-runtime/ticker-inspector-runtime.ts +12 -0
- package/src/app/pane-runtime/ticker-open-runtime.ts +18 -1
- package/src/app/runtime/desktop-deeplink.ts +5 -0
- package/src/app/star-prompt/model.ts +98 -0
- package/src/app/star-prompt/runtime.ts +41 -0
- package/src/app/star-prompt/status-line.tsx +190 -0
- package/src/app.tsx +13 -7
- package/src/architecture/core-builtin-allowlist.json +70 -0
- package/src/brokers/account-cache.ts +45 -0
- package/src/brokers/signed-in/adapter.ts +33 -2
- package/src/brokers/signed-in/client.ts +10 -0
- package/src/brokers/signed-in/sign-in-dialog.tsx +23 -9
- package/src/brokers/signed-in/sign-in.ts +62 -5
- package/src/capabilities/registry.ts +8 -1
- package/src/capabilities/types.ts +2 -0
- package/src/cli/command-options.ts +74 -0
- package/src/cli/commands/command-utils.ts +29 -0
- package/src/cli/commands/crypto-hints.ts +12 -4
- package/src/cli/commands/market.ts +524 -148
- package/src/cli/commands/options-chain.ts +172 -0
- package/src/cli/commands/options-leaps.ts +422 -0
- package/src/cli/commands/overview.ts +223 -42
- package/src/cli/commands/search.ts +29 -8
- package/src/cli/commands/system.ts +99 -19
- package/src/cli/commands/themes.ts +64 -0
- package/src/cli/commands/ticker.ts +200 -73
- package/src/cli/desktop-pane-shot.ts +100 -16
- package/src/cli/errors.ts +25 -2
- package/src/cli/freshness.ts +7 -4
- package/src/cli/fx-pair.ts +57 -0
- package/src/cli/help.ts +40 -7
- package/src/cli/history-rows.ts +187 -15
- package/src/cli/index-roots.ts +51 -0
- package/src/cli/index.ts +21 -13
- package/src/cli/listing-arg.ts +211 -3
- package/src/cli/not-a-ticker.ts +37 -0
- package/src/cli/options.ts +55 -7
- package/src/cli/pane-functions/capabilities.ts +13 -2
- package/src/cli/pane-functions/catalog.ts +13 -2
- package/src/cli/pane-functions/data.ts +36 -5
- package/src/cli/pane-functions/dom.ts +89 -28
- package/src/cli/pane-functions/freshness.ts +205 -26
- package/src/cli/pane-functions/function-help.ts +71 -24
- package/src/cli/pane-functions/headless.ts +168 -35
- package/src/cli/pane-functions/index.ts +12 -2
- package/src/cli/pane-functions/market-session.ts +133 -0
- package/src/cli/pane-functions/options.ts +15 -4
- package/src/cli/pane-functions/report-notices.ts +63 -0
- package/src/cli/pane-functions/report.ts +12 -1
- package/src/cli/pane-functions/resolver.ts +32 -8
- package/src/cli/pane-functions/screenshot-evidence.ts +2 -0
- package/src/cli/pane-functions/screenshot.ts +109 -23
- package/src/cli/registry.ts +8 -4
- package/src/cli/report-tables.ts +460 -0
- package/src/cli/result.ts +63 -16
- package/src/cli/row-window.ts +76 -0
- package/src/cli/scroll-truncation.ts +34 -0
- package/src/components/chart/composite/composite-chart.tsx +43 -4
- package/src/components/chart/composite/legend.tsx +39 -6
- package/src/components/chart/composite/rasterizer.ts +64 -4
- package/src/components/chart/composite/series-cues.ts +71 -0
- package/src/components/chart/composite/text-renderer.ts +16 -8
- package/src/components/chart/composite/types.ts +3 -0
- package/src/components/command-bar/commands/direct/index.ts +9 -1
- package/src/components/command-bar/commands/plugin/items.ts +3 -1
- package/src/components/command-bar/commands/registry.ts +7 -0
- package/src/components/command-bar/layout-items/focused-pane.ts +38 -0
- package/src/components/command-bar/pane-templates/workflow.ts +5 -0
- package/src/components/command-bar/routes/root/command-items.ts +2 -0
- package/src/components/command-bar/routes/root/plugin-turn-on.ts +92 -0
- package/src/components/command-bar/routes/root/results.ts +40 -10
- package/src/components/command-bar/routes/root/runtime.ts +8 -0
- package/src/components/command-bar/routes/root/search-providers.ts +97 -14
- package/src/components/command-bar/surface/index.tsx +18 -4
- package/src/components/command-bar/theme-picker.tsx +48 -13
- package/src/components/command-bar/workflow/ops.ts +5 -3
- package/src/components/data-table/export.ts +6 -51
- package/src/components/data-table/view.tsx +31 -10
- package/src/components/layout/floating-pane.tsx +6 -2
- package/src/components/layout/market-summary.ts +23 -9
- package/src/components/layout/pane/content.tsx +46 -29
- package/src/components/layout/pane/cycle-order.ts +2 -11
- package/src/components/layout/pane/header.tsx +2 -1
- package/src/components/layout/pane/title.ts +1 -1
- package/src/components/layout/presentation.ts +22 -0
- package/src/components/layout/shell/active-drag.ts +67 -35
- package/src/components/layout/shell/cursor-occlusion.ts +6 -5
- package/src/components/layout/shell/drag/index.ts +16 -7
- package/src/components/layout/shell/drag/live.ts +193 -0
- package/src/components/layout/shell/drag/overlays.tsx +179 -35
- package/src/components/layout/shell/drag/runtime.ts +62 -50
- package/src/components/layout/shell/drag/slide.ts +10 -0
- package/src/components/layout/shell/index.tsx +84 -57
- package/src/components/layout/shell/layout-state.ts +5 -11
- package/src/components/layout/shell/menu.ts +28 -1
- package/src/components/layout/shell/native/pointer-runtime.ts +13 -13
- package/src/components/layout/shell/native/surfaces.ts +30 -14
- package/src/components/layout/shell/pane/actions.ts +2 -1
- package/src/components/layout/shell/pane/layers.tsx +461 -180
- package/src/components/layout/shell/pane/management-shortcuts.ts +5 -0
- package/src/components/layout/shell/pane/new-layout.ts +116 -0
- package/src/components/layout/shell/shortcuts.ts +5 -2
- package/src/components/layout/shell/terminal-pointer-runtime.ts +18 -18
- package/src/components/layout/shell/visible-layout.ts +44 -1
- package/src/components/layout/shell/window-mode/overlays.tsx +12 -4
- package/src/components/layout/status-bar.tsx +4 -1
- package/src/components/markdown-text.tsx +9 -5
- package/src/components/metric-treemap/heat-surface.tsx +27 -8
- package/src/components/metric-treemap/heat-tiles.ts +48 -17
- package/src/components/onboarding/onboarding-frame.tsx +33 -10
- package/src/components/onboarding/onboarding-wizard.tsx +49 -40
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +5 -2
- package/src/components/onboarding/pro-step-layout.ts +86 -0
- package/src/components/onboarding/use-onboarding-upgrade.ts +6 -2
- package/src/components/ui/button.tsx +10 -0
- package/src/components/ui/data-table/index.tsx +38 -0
- package/src/components/ui/data-table/types.ts +8 -1
- package/src/components/ui/data-table/visible-range.ts +2 -0
- package/src/components/ui/icon.tsx +11 -2
- package/src/components/ui/index.ts +1 -1
- package/src/core/connection-health.ts +1 -1
- package/src/core/state/app/layout-reducer.ts +89 -3
- package/src/core/state/app/state.ts +8 -5
- package/src/core/state/app/types.ts +13 -2
- package/src/data/config/layout.ts +55 -21
- package/src/data/config/store/fold-panes.ts +149 -0
- package/src/data/config/store/migrations.ts +7 -0
- package/src/data/config/store/node.ts +27 -6
- package/src/data/config/store/normalize.ts +37 -3
- package/src/data/json-persistence.ts +17 -3
- package/src/data/json-storage.ts +2 -0
- package/src/data/memory-resource-store.ts +46 -0
- package/src/i18n/es.ts +14 -1
- package/src/i18n/ja.ts +14 -1
- package/src/i18n/ko.ts +14 -1
- package/src/i18n/zh-cn.ts +14 -1
- package/src/i18n/zh-tw.ts +14 -1
- package/src/layout/desks.ts +1 -2
- package/src/layout/pane-layout-move.ts +264 -0
- package/src/layout/pane-manager/hidden-panes.ts +160 -0
- package/src/layout/pane-manager/index.ts +1 -0
- package/src/market-data/coordinator/entries.ts +7 -1
- package/src/market-data/coordinator/quotes.ts +2 -2
- package/src/market-data/market/freshness.ts +156 -11
- package/src/market-data/market/status.ts +40 -0
- package/src/market-data/options-alternatives.ts +69 -0
- package/src/market-data/quotes/contributions.ts +19 -2
- package/src/market-data/quotes/freshness.ts +5 -0
- package/src/market-data/quotes/metadata.ts +16 -0
- package/src/market-data/quotes/screener-live-quotes.ts +56 -5
- package/src/plugins/builtin/account-management/keyboard.ts +3 -0
- package/src/plugins/builtin/account-management/model.ts +1 -0
- package/src/plugins/builtin/account-management/navigation.ts +1 -1
- package/src/plugins/builtin/account-management/pane.tsx +31 -4
- package/src/plugins/builtin/alerts/quotes.ts +3 -0
- package/src/plugins/builtin/analytics/pane-model.ts +10 -6
- package/src/plugins/builtin/analytics/risk-headless.ts +3 -1
- package/src/plugins/builtin/analytics/risk-model.ts +37 -8
- package/src/plugins/builtin/analytics/risk-pane.tsx +8 -4
- package/src/plugins/builtin/attention/pane.tsx +1 -1
- package/src/plugins/builtin/backtest/pane.tsx +1 -1
- package/src/plugins/builtin/broker-manager/detail.tsx +4 -0
- package/src/plugins/builtin/broker-manager/index.tsx +7 -3
- package/src/plugins/builtin/broker-manager/model.ts +8 -0
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +8 -2
- package/src/plugins/builtin/broker-manager/sign-in-end.ts +82 -0
- package/src/plugins/builtin/broker-manager/table.ts +5 -0
- package/src/plugins/builtin/builtin-plugin-meta.ts +121 -11
- package/src/plugins/builtin/catalysts/detail.tsx +1 -1
- package/src/plugins/builtin/chart-composer/pane.tsx +1 -1
- package/src/plugins/builtin/chat/channels.ts +34 -36
- package/src/plugins/builtin/chat/command-bar.ts +138 -0
- package/src/plugins/builtin/chat/composer-commands.ts +21 -1
- package/src/plugins/builtin/chat/content/composer-runtime.ts +11 -1
- package/src/plugins/builtin/chat/content/footer.tsx +5 -3
- package/src/plugins/builtin/chat/content/index.tsx +21 -1
- package/src/plugins/builtin/chat/content/mentions.ts +2 -1
- package/src/plugins/builtin/chat/content/user-map.ts +3 -1
- package/src/plugins/builtin/chat/controller/index.ts +48 -0
- package/src/plugins/builtin/chat/conversations.ts +256 -0
- package/src/plugins/builtin/chat/discord-command.ts +91 -0
- package/src/plugins/builtin/chat/edit-window.ts +12 -6
- package/src/plugins/builtin/chat/ghost-user.ts +14 -0
- package/src/plugins/builtin/chat/index.tsx +40 -2
- package/src/plugins/builtin/chat/layout.ts +2 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +2 -1
- package/src/plugins/builtin/chat/message/header.tsx +24 -15
- package/src/plugins/builtin/chat/message/profile-popover.tsx +2 -1
- package/src/plugins/builtin/chat/message/render-state.ts +3 -0
- package/src/plugins/builtin/chat/pane-requests.ts +60 -0
- package/src/plugins/builtin/chat/pane-state.ts +32 -2
- package/src/plugins/builtin/chat/pane.tsx +8 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +112 -4
- package/src/plugins/builtin/cloud/askg/conversation-store.ts +21 -0
- package/src/plugins/builtin/cloud/askg/manifest.ts +1 -0
- package/src/plugins/builtin/cloud/askg/model.ts +129 -70
- package/src/plugins/builtin/cloud/askg/pane.tsx +772 -377
- package/src/plugins/builtin/cloud/askg/protocol.ts +40 -2
- package/src/plugins/builtin/cloud/askg/tool-display.ts +437 -0
- package/src/plugins/builtin/cloud/askg/tool-timeline.tsx +403 -0
- package/src/plugins/builtin/cloud/company-picker.tsx +1 -9
- package/src/plugins/builtin/cloud/mcp-connect/command.ts +24 -0
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +360 -0
- package/src/plugins/builtin/cloud/mcp-connect/model.ts +135 -0
- package/src/plugins/builtin/cloud/mcp-connect/sections.ts +62 -0
- package/src/plugins/builtin/cloud/plugin.tsx +36 -1
- package/src/plugins/builtin/cloud/starter-symbols.ts +8 -0
- package/src/plugins/builtin/cloud/terminal-relay/acm-tab.tsx +89 -0
- package/src/plugins/builtin/cloud/terminal-relay/client.ts +97 -0
- package/src/plugins/builtin/cloud/terminal-relay/connect-section.tsx +57 -0
- package/src/plugins/builtin/cloud/terminal-relay/engine.ts +666 -0
- package/src/plugins/builtin/cloud/terminal-relay/grants.ts +137 -0
- package/src/plugins/builtin/cloud/terminal-relay/host.tsx +81 -0
- package/src/plugins/builtin/cloud/terminal-relay/indicator.tsx +82 -0
- package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +234 -0
- package/src/plugins/builtin/cloud/terminal-relay/policy.ts +153 -0
- package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +168 -0
- package/src/plugins/builtin/cloud/terminal-relay/redact.ts +73 -0
- package/src/plugins/builtin/cloud/terminal-relay/summary.ts +62 -0
- package/src/plugins/builtin/cloud/upgrade-dialog.tsx +26 -2
- package/src/plugins/builtin/cloud/upgrade-personalization.ts +57 -0
- package/src/plugins/builtin/cloud/upgrade-tickers.ts +124 -0
- package/src/plugins/builtin/comment-letters/client.ts +1 -3
- package/src/plugins/builtin/company-attention/pane.tsx +1 -1
- package/src/plugins/builtin/company-kpis/client.ts +23 -8
- package/src/plugins/builtin/company-kpis/headless.ts +3 -1
- package/src/plugins/builtin/company-kpis/pane.tsx +15 -7
- package/src/plugins/builtin/company-kpis/screenshot-evidence.ts +10 -3
- package/src/plugins/builtin/composite-plugins.ts +107 -64
- package/src/plugins/builtin/credit-boards/cdx-pane.tsx +4 -4
- package/src/plugins/builtin/credit-boards/index.tsx +21 -21
- package/src/plugins/builtin/credit-boards/model.ts +0 -1
- package/src/plugins/builtin/credit-boards/pane.tsx +30 -0
- package/src/plugins/builtin/credit-boards/sovr-pane.tsx +4 -4
- package/src/plugins/builtin/debt-maturities/client.ts +37 -9
- package/src/plugins/builtin/debt-maturities/headless.ts +3 -1
- package/src/plugins/builtin/debt-maturities/pane.tsx +5 -4
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/dividend-yield/pane.tsx +1 -1
- package/src/plugins/builtin/earnings-calls/data.ts +28 -7
- package/src/plugins/builtin/earnings-calls/headless.ts +3 -2
- package/src/plugins/builtin/earnings-calls/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +42 -17
- package/src/plugins/builtin/econ/detail-view.tsx +2 -2
- package/src/plugins/builtin/econ/index.tsx +68 -22
- package/src/plugins/builtin/econ-statistics/headless.ts +12 -2
- package/src/plugins/builtin/econ-statistics/pane.tsx +1 -1
- package/src/plugins/builtin/econ-statistics/view.ts +17 -0
- package/src/plugins/builtin/executives/data.ts +17 -6
- package/src/plugins/builtin/executives/pane.tsx +16 -7
- package/src/plugins/builtin/filing-events/pane.tsx +22 -5
- package/src/plugins/builtin/fx-matrix/freshness.ts +65 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +22 -1
- package/src/plugins/builtin/fx-matrix/pairs.ts +1 -1
- package/src/plugins/builtin/fx-matrix/settings.ts +42 -2
- package/src/plugins/builtin/gpu/headless.ts +9 -3
- package/src/plugins/builtin/gpu/model.ts +14 -5
- package/src/plugins/builtin/help/index.tsx +1 -0
- package/src/plugins/builtin/holders/beneficial-client.ts +29 -7
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/client.ts +3 -6
- package/src/plugins/builtin/holders/format.ts +31 -1
- package/src/plugins/builtin/holders/headless.ts +32 -6
- package/src/plugins/builtin/holders/pane.tsx +25 -13
- package/src/plugins/builtin/holders/report-header.ts +46 -5
- package/src/plugins/builtin/insider/index.tsx +4 -4
- package/src/plugins/builtin/iv-history/charts.tsx +21 -7
- package/src/plugins/builtin/iv-history/client.ts +12 -2
- package/src/plugins/builtin/iv-history/format.ts +33 -2
- package/src/plugins/builtin/iv-history/headless.ts +22 -10
- package/src/plugins/builtin/iv-history/index.tsx +3 -3
- package/src/plugins/builtin/iv-history/model.ts +61 -13
- package/src/plugins/builtin/iv-history/pane.tsx +11 -3
- package/src/plugins/builtin/iv-history/screen-pane.tsx +42 -18
- package/src/plugins/builtin/jobs/pane.tsx +1 -1
- package/src/plugins/builtin/kelly-sizer/headless.ts +149 -0
- package/src/plugins/builtin/kelly-sizer/history.ts +80 -0
- package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +121 -45
- package/src/plugins/builtin/kelly-sizer/portfolio.ts +25 -0
- package/src/plugins/builtin/kelly-sizer/sections.tsx +14 -0
- package/src/plugins/builtin/kelly-sizer/types.ts +9 -1
- package/src/plugins/builtin/layout-manager/index.tsx +9 -1
- package/src/plugins/builtin/macro-day/client.ts +24 -0
- package/src/plugins/builtin/macro-day/headless.ts +11 -8
- package/src/plugins/builtin/macro-day/index.tsx +3 -0
- package/src/plugins/builtin/macro-day/model.ts +11 -6
- package/src/plugins/builtin/macro-day/pane.tsx +12 -8
- package/src/plugins/builtin/macro-day/release-table.ts +40 -0
- package/src/plugins/builtin/macro-day/releases.ts +62 -44
- package/src/plugins/builtin/market-heatmap/data.ts +25 -5
- package/src/plugins/builtin/market-heatmap/evidence.ts +90 -0
- package/src/plugins/builtin/market-heatmap/index.tsx +144 -63
- package/src/plugins/builtin/market-heatmap/model.ts +94 -3
- package/src/plugins/builtin/market-heatmap/portfolio.ts +12 -2
- package/src/plugins/builtin/market-movers/headless.ts +31 -4
- package/src/plugins/builtin/market-movers/index.tsx +8 -1
- package/src/plugins/builtin/market-movers/model.ts +71 -17
- package/src/plugins/builtin/market-movers/table.ts +50 -23
- package/src/plugins/builtin/members/pane.tsx +10 -0
- package/src/plugins/builtin/news/headless.ts +9 -2
- package/src/plugins/builtin/news/wire/news/footer.ts +10 -0
- package/src/plugins/builtin/openfda/client.ts +1 -1
- package/src/plugins/builtin/options/carry.ts +95 -0
- package/src/plugins/builtin/options/index.tsx +58 -5
- package/src/plugins/builtin/options/strike-window.ts +183 -0
- package/src/plugins/builtin/options/table.ts +55 -3
- package/src/plugins/builtin/options/types.ts +8 -1
- package/src/plugins/builtin/options/view.tsx +161 -12
- package/src/plugins/builtin/options-positioning/headless.ts +4 -2
- package/src/plugins/builtin/options-scenario/charts.tsx +2 -2
- package/src/plugins/builtin/options-scenario/client.ts +73 -17
- package/src/plugins/builtin/options-scenario/headless.ts +71 -24
- package/src/plugins/builtin/options-scenario/hedge.ts +284 -0
- package/src/plugins/builtin/options-scenario/index.tsx +9 -2
- package/src/plugins/builtin/options-scenario/model.ts +33 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +40 -16
- package/src/plugins/builtin/pe-band/model.ts +2 -2
- package/src/plugins/builtin/pe-band/report-dates.ts +11 -7
- package/src/plugins/builtin/perps/equity-row.tsx +8 -5
- package/src/plugins/builtin/perps/model.ts +16 -5
- package/src/plugins/builtin/perps/pane.tsx +1 -1
- package/src/plugins/builtin/plugin-marketplace/model.ts +64 -21
- package/src/plugins/builtin/plugin-marketplace/packs.ts +118 -0
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +344 -32
- package/src/plugins/builtin/plugin-marketplace/store.ts +7 -1
- package/src/plugins/builtin/plugin-module.ts +87 -4
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +16 -1
- package/src/plugins/builtin/portfolio-list/allocation.ts +3 -0
- package/src/plugins/builtin/portfolio-list/cached-account.ts +18 -9
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +71 -36
- package/src/plugins/builtin/portfolio-list/cli/render.ts +89 -18
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +2 -16
- package/src/plugins/builtin/portfolio-list/headless.ts +40 -7
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +7 -4
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +22 -4
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +11 -1
- package/src/plugins/builtin/realized-vol/headless.ts +3 -0
- package/src/plugins/builtin/realized-vol/pane.tsx +1 -1
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +2 -2
- package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +1 -1
- package/src/plugins/builtin/research/relative-valuation-model.ts +7 -3
- package/src/plugins/builtin/revenue-breakdown/client.ts +13 -6
- package/src/plugins/builtin/revenue-breakdown/headless.ts +4 -1
- package/src/plugins/builtin/revenue-breakdown/pane.tsx +7 -4
- package/src/plugins/builtin/reverse-dcf/headless.ts +5 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +2 -1
- package/src/plugins/builtin/reverse-dcf/pane.tsx +1 -1
- package/src/plugins/builtin/risk-factors/data.ts +23 -9
- package/src/plugins/builtin/risk-factors/headless.ts +5 -2
- package/src/plugins/builtin/risk-factors/pane.tsx +6 -5
- package/src/plugins/builtin/seasonality/pane.tsx +1 -1
- package/src/plugins/builtin/sec/index.tsx +5 -5
- package/src/plugins/builtin/sectors/client.ts +10 -2
- package/src/plugins/builtin/sectors/headless.ts +35 -6
- package/src/plugins/builtin/sectors/index.tsx +18 -1
- package/src/plugins/builtin/sectors/sector-model.ts +150 -41
- package/src/plugins/builtin/shared/command-tab.ts +51 -0
- package/src/plugins/builtin/shared/headless-market-data.ts +33 -1
- package/src/plugins/builtin/shared/members-menu.tsx +260 -0
- package/src/plugins/builtin/shared/report-freshness.ts +50 -2
- package/src/plugins/builtin/shared/ticker-request.ts +25 -1
- package/src/plugins/builtin/shared/use-quote-board.ts +25 -5
- package/src/plugins/builtin/shared/volatility/options.ts +1 -46
- package/src/plugins/builtin/short-interest/index.tsx +19 -4
- package/src/plugins/builtin/short-interest/surface.tsx +4 -4
- package/src/plugins/builtin/short-volume/index.tsx +1 -10
- package/src/plugins/builtin/short-volume/pane.tsx +1 -1
- package/src/plugins/builtin/social-mentions/pane.tsx +1 -1
- package/src/plugins/builtin/supply-chain/model.ts +1 -1
- package/src/plugins/builtin/themes/pane.tsx +3 -0
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +4 -0
- package/src/plugins/builtin/ticker-detail/financials/model.ts +25 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +63 -25
- package/src/plugins/builtin/ticker-detail/overview/model.ts +9 -4
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +3 -2
- package/src/plugins/builtin/ticker-detail/pane.tsx +4 -5
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +94 -6
- package/src/plugins/builtin/treasury-auctions/cache.ts +5 -2
- package/src/plugins/builtin/treasury-auctions/client.ts +22 -8
- package/src/plugins/builtin/treasury-auctions/headless.ts +40 -4
- package/src/plugins/builtin/treasury-auctions/index.tsx +11 -9
- package/src/plugins/builtin/treasury-auctions/model.ts +197 -30
- package/src/plugins/builtin/treasury-auctions/pane.tsx +35 -11
- package/src/plugins/builtin/treasury-auctions/types.ts +11 -1
- package/src/plugins/builtin/vol-surface/charts.tsx +1 -3
- package/src/plugins/builtin/vol-surface/client.ts +6 -2
- package/src/plugins/builtin/vol-surface/evidence.ts +11 -6
- package/src/plugins/builtin/vol-surface/headless.ts +124 -20
- package/src/plugins/builtin/vol-surface/model.ts +23 -11
- package/src/plugins/builtin/vol-surface/pane.tsx +38 -27
- package/src/plugins/builtin/vol-surface/tables.ts +124 -0
- package/src/plugins/builtin/world-indices/client.ts +22 -4
- package/src/plugins/builtin/world-indices/headless.ts +54 -27
- package/src/plugins/builtin/world-indices/model.ts +4 -2
- package/src/plugins/builtin/world-indices/table.tsx +13 -2
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +2 -0
- package/src/plugins/builtin/world-venue-map/basemap.ts +18 -0
- package/src/plugins/builtin/world-venue-map/country-labels.ts +78 -0
- package/src/plugins/builtin/world-venue-map/geo-series.ts +1 -1
- package/src/plugins/builtin/world-venue-map/geo-svg.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/index.ts +6 -6
- package/src/plugins/builtin/world-venue-map/layered-pane.tsx +27 -14
- package/src/plugins/builtin/world-venue-map/layers.ts +68 -10
- package/src/plugins/builtin/world-venue-map/map.tsx +198 -62
- package/src/plugins/builtin/world-venue-map/model.ts +16 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/index.chunk.ts +3 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/labels.chunk.ts +244 -0
- package/src/plugins/builtin/world-venue-map/pane.tsx +16 -10
- package/src/plugins/builtin/yield-curve/index.tsx +1 -1
- package/src/plugins/builtin-editorial.ts +126 -0
- package/src/plugins/catalog-backend.ts +16 -9
- package/src/plugins/catalog-browser.ts +127 -63
- package/src/plugins/catalog-manifest.ts +73 -40
- package/src/plugins/catalog-ui.ts +26 -6
- package/src/plugins/extracted-plugins.ts +7 -1
- package/src/plugins/ownership.ts +150 -7
- package/src/plugins/plugin-functions.ts +54 -0
- package/src/plugins/plugin-off.ts +36 -0
- package/src/plugins/registry/host-actions.ts +16 -0
- package/src/plugins/registry/index.ts +84 -24
- package/src/plugins/registry/plugin-state.ts +25 -1
- package/src/plugins/runtime/context.tsx +29 -0
- package/src/react/input.ts +48 -1
- package/src/remote/app-host.tsx +5 -0
- package/src/remote/controller.ts +3 -53
- package/src/remote/matching.ts +69 -0
- package/src/remote/schema.ts +1 -1
- package/src/remote/semantic-tree.tsx +14 -0
- package/src/remote/types.ts +2 -0
- package/src/renderers/browser/app-services.ts +3 -1
- package/src/renderers/dom/data-table/dom.ts +31 -0
- package/src/renderers/dom/data-table/index.tsx +5 -0
- package/src/renderers/dom/desktop/icons.tsx +14 -0
- package/src/renderers/dom/desktop/query-bar.tsx +59 -32
- package/src/renderers/dom/host/box.tsx +113 -17
- package/src/renderers/dom/host/drag-shield.ts +35 -0
- package/src/renderers/dom/host/live-frame.ts +62 -0
- package/src/renderers/dom/host/mouse.ts +8 -1
- package/src/renderers/dom/host/scroll-box.tsx +6 -5
- package/src/renderers/dom/host/tabs.tsx +3 -2
- package/src/renderers/dom/input-host.tsx +6 -1
- package/src/renderers/dom/styles.css +26 -5
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +7 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +7 -1
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +12 -1
- package/src/renderers/electrobun/bun/desktop/initialization.ts +15 -1
- package/src/renderers/electrobun/shared/protocol.ts +12 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +4 -1
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +101 -5
- package/src/renderers/electrobun/view/host/native.ts +0 -10
- package/src/renderers/electrobun/view/host/window-move.ts +28 -0
- package/src/renderers/electrobun/view/main.tsx +4 -1
- package/src/renderers/electrobun/view/remote/persistence.ts +15 -2
- package/src/renderers/electrobun/view/ui-host.tsx +2 -5
- package/src/renderers/opentui/input-host.tsx +6 -1
- package/src/renderers/opentui/start.tsx +9 -0
- package/src/renderers/opentui/ui-host.tsx +7 -1
- package/src/shares/portable-layout.ts +16 -6
- package/src/sources/gloomberb-cloud/index.ts +19 -10
- package/src/sources/gloomberb-cloud/normalizers.ts +20 -21
- package/src/sources/listing-symbols.ts +11 -5
- package/src/sources/provider-errors.ts +88 -3
- package/src/sources/provider-router/batches.ts +3 -3
- package/src/sources/provider-router/cached-routes.ts +8 -4
- package/src/sources/provider-router/financial-routes.ts +13 -7
- package/src/sources/provider-router/financials.ts +106 -16
- package/src/sources/provider-router/history.ts +27 -11
- package/src/sources/provider-router/index.ts +1 -1
- package/src/sources/provider-router/primary.ts +24 -6
- package/src/sources/sec-edgar.ts +68 -8
- package/src/state/pane-scroll-registry.tsx +67 -35
- package/src/sync/core-contributors.ts +4 -3
- package/src/test-support/cli-context.ts +2 -1
- package/src/test-support/data-provider.ts +34 -0
- package/src/test-support/margin-account.ts +108 -0
- package/src/test-support/shell-pane-keys.tsx +1 -0
- package/src/theme/series-colors.ts +46 -0
- package/src/theme/themes.ts +149 -0
- package/src/tickers/search/index.ts +22 -2
- package/src/tickers/search/ranking.ts +45 -1
- package/src/tickers/search/types.ts +3 -1
- package/src/time-series/resolution.ts +15 -0
- package/src/time-series/resolve.ts +1 -14
- package/src/types/config.ts +61 -1
- package/src/types/financials.ts +32 -3
- package/src/types/headless.ts +11 -0
- package/src/types/instrument.ts +8 -0
- package/src/types/plugin.ts +49 -3
- package/src/ui/host.tsx +16 -0
- package/src/ui/index.tsx +10 -3
- package/src/ui/scroll-box-axis.ts +26 -0
- package/src/utils/cli-output.ts +14 -1
- package/src/utils/currency-units.ts +8 -3
- package/src/utils/depositary-receipt.ts +54 -10
- package/src/utils/display-number.ts +63 -0
- package/src/utils/exchanges.ts +13 -0
- package/src/utils/format.ts +2 -1
- package/src/utils/fundamentals.ts +17 -1
- package/src/utils/fx-market-hours.ts +34 -0
- package/src/utils/option-expiry.ts +126 -0
- package/src/utils/price-history-integrity.ts +19 -6
- package/src/utils/price-history.ts +39 -6
- package/src/utils/rpc-timeout-error.ts +6 -2
- package/src/utils/sec-eps-basis.ts +159 -30
- package/src/utils/sec.ts +38 -34
- package/src/utils/throttled-fetch.ts +51 -22
|
@@ -42,7 +42,7 @@ function MarketEvidence({ row, data, width, height }: { row: PerpBoardRow; data:
|
|
|
42
42
|
["Contract", [["Contract", `${label(row.contractType)} · ${row.priceMultiplier}× price`], ["Margin", row.marginCurrency], ["Max leverage", row.maxLeverage == null ? "--" : `${row.maxLeverage}×`],
|
|
43
43
|
["Margin mode", row.isolatedOnly === null ? "Unspecified" : row.isolatedOnly ? "Isolated only" : "Cross / isolated"], ["Listing", row.delisted ? "Delisted" : "Active"], ["Confidence", label(row.confidence)]]],
|
|
44
44
|
];
|
|
45
|
-
return <ScrollBox width={width} height={desktop ? undefined : height} flexGrow={1} flexBasis={0} minHeight={0} contentOptions={{ paddingX: 1 }}>
|
|
45
|
+
return <ScrollBox scrollY width={width} height={desktop ? undefined : height} flexGrow={1} flexBasis={0} minHeight={0} contentOptions={{ paddingX: 1 }}>
|
|
46
46
|
{groups.map(([title, fields]) => <Fragment key={title}>
|
|
47
47
|
<SectionHeading title={title} />
|
|
48
48
|
{fields.map(([name, value, detail]) => <KeyValueRow key={name} labelWidth={25} label={name} value={value} detail={detail} />)}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { PluginTarget } from "../../../types/plugin";
|
|
2
2
|
import { compareSemver, formatVersion, requiredGloomberb } from "../../../utils/semver";
|
|
3
3
|
import { runsExternalPlugins } from "../../current-target";
|
|
4
|
+
import { BUILTIN_EDITORIAL } from "../../builtin-editorial";
|
|
5
|
+
import { builtinPluginGroupMembers } from "../../ownership";
|
|
6
|
+
import type { FunctionAccess } from "../../../cli/pane-functions/function-help";
|
|
7
|
+
import { PACK_PLUGIN_IDS } from "./packs";
|
|
4
8
|
|
|
5
9
|
type PluginTier = "official" | "verified" | "community";
|
|
6
10
|
|
|
@@ -9,6 +13,8 @@ export interface RegistryPluginShortcut {
|
|
|
9
13
|
code: string;
|
|
10
14
|
name: string;
|
|
11
15
|
description: string;
|
|
16
|
+
/** Built-ins only: what Free gets of it. */
|
|
17
|
+
access?: FunctionAccess;
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
/** One record from https://plugins.gloom.sh/registry.json. */
|
|
@@ -28,7 +34,7 @@ export interface RegistryPlugin {
|
|
|
28
34
|
panes: string[];
|
|
29
35
|
capabilities: string[];
|
|
30
36
|
broker: boolean;
|
|
31
|
-
/** Declared in the plugin's gloom.json; absent from older feeds
|
|
37
|
+
/** Declared in the plugin's gloom.json, or listed for a built-in; absent from older feeds. */
|
|
32
38
|
shortcuts?: RegistryPluginShortcut[];
|
|
33
39
|
};
|
|
34
40
|
minGloomberb?: string;
|
|
@@ -78,7 +84,11 @@ export interface InstalledPlugin {
|
|
|
78
84
|
needsRestart?: boolean;
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
|
|
87
|
+
/**
|
|
88
|
+
* `research` holds the built-ins starter packs switch, so a pack's reach is
|
|
89
|
+
* the section above the others; `builtin` the other built-ins.
|
|
90
|
+
*/
|
|
91
|
+
export type MarketplaceSection = "research" | "builtin" | "installed" | "available";
|
|
82
92
|
|
|
83
93
|
export interface MarketplaceEntry {
|
|
84
94
|
id: string;
|
|
@@ -131,8 +141,8 @@ export interface MarketplaceEntry {
|
|
|
131
141
|
|
|
132
142
|
const TIER_RANK: Record<PluginTier, number> = { official: 0, verified: 1, community: 2 };
|
|
133
143
|
|
|
134
|
-
function sectionOf(entry: { installed: boolean; bundled: boolean }): MarketplaceSection {
|
|
135
|
-
if (entry.bundled) return "builtin";
|
|
144
|
+
function sectionOf(entry: { id: string; installed: boolean; bundled: boolean }): MarketplaceSection {
|
|
145
|
+
if (entry.bundled) return PACK_PLUGIN_IDS.includes(entry.id) ? "research" : "builtin";
|
|
136
146
|
return entry.installed ? "installed" : "available";
|
|
137
147
|
}
|
|
138
148
|
|
|
@@ -151,6 +161,11 @@ function repoDirectory(repo: string | undefined): string | null {
|
|
|
151
161
|
return name ? name.toLowerCase() : null;
|
|
152
162
|
}
|
|
153
163
|
|
|
164
|
+
/** The short line a built-in's row reads: its editorial tagline, else its description. */
|
|
165
|
+
function builtinTagline(local: InstalledPlugin): string {
|
|
166
|
+
return BUILTIN_EDITORIAL[local.id]?.tagline ?? local.description ?? "";
|
|
167
|
+
}
|
|
168
|
+
|
|
154
169
|
export function mergeCatalog(options: {
|
|
155
170
|
registry: readonly RegistryPlugin[];
|
|
156
171
|
/** Remote default-branch heads by plugin folder, from `PluginManager.remoteHeads`. */
|
|
@@ -158,7 +173,11 @@ export function mergeCatalog(options: {
|
|
|
158
173
|
installed: readonly InstalledPlugin[];
|
|
159
174
|
target: PluginTarget;
|
|
160
175
|
}): MarketplaceEntry[] {
|
|
161
|
-
const {
|
|
176
|
+
const { installed, target, remoteHeads } = options;
|
|
177
|
+
// A built-in this build split into several, which a feed generated before
|
|
178
|
+
// the split still lists. Its id now only switches its successors together,
|
|
179
|
+
// and they have rows of their own.
|
|
180
|
+
const registry = options.registry.filter((plugin) => !(plugin.bundled && builtinPluginGroupMembers(plugin.id)));
|
|
162
181
|
const remoteHeadFor = (local: InstalledPlugin | undefined) => (
|
|
163
182
|
local?.directory ? remoteHeads?.[local.directory] : undefined
|
|
164
183
|
);
|
|
@@ -193,6 +212,9 @@ export function mergeCatalog(options: {
|
|
|
193
212
|
|
|
194
213
|
for (const plugin of registry) {
|
|
195
214
|
const local = localFor.get(plugin.id);
|
|
215
|
+
// The feed lags the app: a built-in this build renamed or redescribed
|
|
216
|
+
// reads the way the running app has it.
|
|
217
|
+
const builtin = local?.source === "builtin" ? local : null;
|
|
196
218
|
|
|
197
219
|
const base = {
|
|
198
220
|
// A bundled plugin is present whether or not the local catalog reports it,
|
|
@@ -205,10 +227,10 @@ export function mergeCatalog(options: {
|
|
|
205
227
|
};
|
|
206
228
|
entries.push({
|
|
207
229
|
id: plugin.id,
|
|
208
|
-
name: plugin.name,
|
|
209
|
-
tagline: plugin.tagline,
|
|
210
|
-
description: plugin.description,
|
|
211
|
-
categories: plugin.categories,
|
|
230
|
+
name: builtin?.name ?? plugin.name,
|
|
231
|
+
tagline: builtin ? builtinTagline(builtin) : plugin.tagline,
|
|
232
|
+
description: builtin?.description ?? plugin.description,
|
|
233
|
+
categories: builtin ? BUILTIN_EDITORIAL[plugin.id]?.categories ?? plugin.categories : plugin.categories,
|
|
212
234
|
tier: plugin.tier,
|
|
213
235
|
targets: plugin.targets,
|
|
214
236
|
hosts: plugin.hosts,
|
|
@@ -246,7 +268,7 @@ export function mergeCatalog(options: {
|
|
|
246
268
|
: plugin.bundled
|
|
247
269
|
? !plugin.targets.includes(target)
|
|
248
270
|
: !runsExternalPlugins(target) || !plugin.targets.includes(target),
|
|
249
|
-
section: sectionOf(base),
|
|
271
|
+
section: sectionOf({ id: plugin.id, ...base }),
|
|
250
272
|
});
|
|
251
273
|
}
|
|
252
274
|
|
|
@@ -257,10 +279,13 @@ export function mergeCatalog(options: {
|
|
|
257
279
|
entries.push({
|
|
258
280
|
id: local.id,
|
|
259
281
|
name: local.name,
|
|
260
|
-
tagline: local.
|
|
282
|
+
tagline: local.source === "builtin"
|
|
283
|
+
? builtinTagline(local)
|
|
284
|
+
: local.description ?? (local.linked ? "Linked from a local checkout" : "Installed outside the registry"),
|
|
261
285
|
description: local.description,
|
|
262
|
-
categories: local.source === "builtin" ? [] : ["unlisted"],
|
|
263
|
-
|
|
286
|
+
categories: local.source === "builtin" ? [...BUILTIN_EDITORIAL[local.id]?.categories ?? []] : ["unlisted"],
|
|
287
|
+
// Shipped by Gloom like every built-in, whether or not the feed lists it.
|
|
288
|
+
tier: local.source === "builtin" ? "official" : "community",
|
|
264
289
|
targets: local.unsupportedTarget ? [] : [target],
|
|
265
290
|
hosts: [],
|
|
266
291
|
stars: 0,
|
|
@@ -282,7 +307,7 @@ export function mergeCatalog(options: {
|
|
|
282
307
|
lastError: local.lastError,
|
|
283
308
|
needsRestart: local.needsRestart === true,
|
|
284
309
|
unsupportedHere: !!local.unsupportedTarget,
|
|
285
|
-
section: sectionOf(base),
|
|
310
|
+
section: sectionOf({ id: local.id, ...base }),
|
|
286
311
|
});
|
|
287
312
|
}
|
|
288
313
|
|
|
@@ -366,6 +391,12 @@ export interface MarketplaceStatus {
|
|
|
366
391
|
text: string;
|
|
367
392
|
}
|
|
368
393
|
|
|
394
|
+
/**
|
|
395
|
+
* The built-in the research pane, DES and the G charts come from. It can be
|
|
396
|
+
* switched off, after a confirmation, and every starter pack keeps it on.
|
|
397
|
+
*/
|
|
398
|
+
export const CORE_PLUGIN_ID = "ticker-core";
|
|
399
|
+
|
|
369
400
|
/**
|
|
370
401
|
* One word for "what should I do about this row". Health outranks state:
|
|
371
402
|
* a plugin that is enabled but failed to load is `failed`, not `enabled`.
|
|
@@ -383,21 +414,32 @@ export function statusOf(entry: MarketplaceEntry): MarketplaceStatus {
|
|
|
383
414
|
const required = requiredGloomberb(entry.minGloomberb);
|
|
384
415
|
const needsGloomberb: MarketplaceStatus | null = required ? { kind: "needs-gloomberb", text: `needs ${required}` } : null;
|
|
385
416
|
if (!entry.installed) return needsGloomberb ?? { kind: "none", text: "" };
|
|
386
|
-
if (!entry.enabled) return { kind: "disabled", text: "
|
|
417
|
+
if (!entry.enabled) return { kind: "disabled", text: "off" };
|
|
418
|
+
if (entry.id === CORE_PLUGIN_ID && entry.bundled) return { kind: "enabled", text: "core" };
|
|
387
419
|
if (entry.needsSetup) return { kind: "needs-setup", text: "needs setup" };
|
|
388
420
|
if (hasUpdate(entry)) return needsGloomberb ?? { kind: "update", text: "update" };
|
|
389
421
|
if (entry.errorCount > 0) return { kind: "errors", text: `errors (${entry.errorCount})` };
|
|
390
|
-
return { kind: "enabled", text: "
|
|
422
|
+
return { kind: "enabled", text: "on" };
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/** Whether a section lists plugins that ship inside Gloomberb. */
|
|
426
|
+
function isBuiltinSection(section: MarketplaceSection): boolean {
|
|
427
|
+
return section === "research" || section === "builtin";
|
|
391
428
|
}
|
|
392
429
|
|
|
393
430
|
/**
|
|
394
|
-
* Sorted for a sectioned list:
|
|
395
|
-
*
|
|
431
|
+
* Sorted for a sectioned list: the research built-ins in pack order, the
|
|
432
|
+
* other built-ins, then installed, then available; within the last two the
|
|
433
|
+
* curated order: featured, then tier, then stars.
|
|
396
434
|
*/
|
|
397
435
|
export function sortEntries(entries: readonly MarketplaceEntry[]): MarketplaceEntry[] {
|
|
398
|
-
const SECTION_RANK: Record<MarketplaceSection, number> = {
|
|
436
|
+
const SECTION_RANK: Record<MarketplaceSection, number> = { research: 0, builtin: 1, installed: 2, available: 3 };
|
|
399
437
|
return [...entries].sort((a, b) => {
|
|
400
438
|
if (a.section !== b.section) return SECTION_RANK[a.section] - SECTION_RANK[b.section];
|
|
439
|
+
if (a.section === "research") return PACK_PLUGIN_IDS.indexOf(a.id) - PACK_PLUGIN_IDS.indexOf(b.id);
|
|
440
|
+
// The other built-ins read alphabetically after the featured one: a
|
|
441
|
+
// repository's stars say nothing about something built in.
|
|
442
|
+
if (a.section === "builtin" && a.featured === b.featured) return a.name.localeCompare(b.name);
|
|
401
443
|
if (a.featured !== b.featured) return a.featured ? -1 : 1;
|
|
402
444
|
if (a.tier !== b.tier) return TIER_RANK[a.tier] - TIER_RANK[b.tier];
|
|
403
445
|
if (a.stars !== b.stars) return b.stars - a.stars;
|
|
@@ -413,8 +455,8 @@ export function filterEntries(
|
|
|
413
455
|
|
|
414
456
|
return entries.filter((entry) => {
|
|
415
457
|
// Core modules with no switch are not something the user manages; a
|
|
416
|
-
// toggleable built-in is,
|
|
417
|
-
if (entry.section
|
|
458
|
+
// toggleable built-in is, unless the built-in filter is off.
|
|
459
|
+
if (isBuiltinSection(entry.section) && (!entry.toggleable || !options.showBuiltin)) return false;
|
|
418
460
|
if (options.category && !entry.categories.includes(options.category)) return false;
|
|
419
461
|
if (!query) return true;
|
|
420
462
|
return [entry.name, entry.id, entry.tagline, entry.description, ...entry.categories]
|
|
@@ -435,6 +477,7 @@ export type MarketplaceRow =
|
|
|
435
477
|
| { type: "entry"; entry: MarketplaceEntry };
|
|
436
478
|
|
|
437
479
|
export const SECTION_LABELS: Record<MarketplaceSection, string> = {
|
|
480
|
+
research: "Research and markets",
|
|
438
481
|
installed: "Installed",
|
|
439
482
|
available: "Available",
|
|
440
483
|
builtin: "Built in",
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Starter packs: sets of the research built-ins to have on, so someone who
|
|
3
|
+
* trades options or reads credit starts from a pane list that fits. A pack
|
|
4
|
+
* only ever switches the plugins Ticker Research, Market Overview and Macro
|
|
5
|
+
* were split into. Portfolio, News, Chat, Cloud, the other built-ins and
|
|
6
|
+
* installed plugins stay as they are.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** The plugins packs switch, in the order the Plugins pane lists them. */
|
|
10
|
+
export const PACK_PLUGIN_IDS: readonly string[] = [
|
|
11
|
+
"ticker-core",
|
|
12
|
+
"options-volatility",
|
|
13
|
+
"ownership",
|
|
14
|
+
"filings",
|
|
15
|
+
"earnings",
|
|
16
|
+
"credit",
|
|
17
|
+
"rates-macro",
|
|
18
|
+
"global-markets",
|
|
19
|
+
"screeners",
|
|
20
|
+
"futures-commodities",
|
|
21
|
+
"crypto",
|
|
22
|
+
"alt-data",
|
|
23
|
+
"quant",
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
export interface StarterPack {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
/** Ten words at most. */
|
|
30
|
+
tagline: string;
|
|
31
|
+
/** The pack plugins it keeps on; every other one goes off. */
|
|
32
|
+
plugins: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Ticker Research is in every pack: DES, G and the research pane need it. */
|
|
36
|
+
export const STARTER_PACKS: readonly StarterPack[] = [
|
|
37
|
+
{
|
|
38
|
+
id: "everything",
|
|
39
|
+
name: "Everything",
|
|
40
|
+
tagline: "Every research plugin on, as Gloomberb ships.",
|
|
41
|
+
plugins: PACK_PLUGIN_IDS,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "equity-research",
|
|
45
|
+
name: "Equity research",
|
|
46
|
+
tagline: "Companies, filings, ownership, earnings and screens.",
|
|
47
|
+
plugins: ["ticker-core", "ownership", "filings", "earnings", "screeners", "alt-data"],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "options-desk",
|
|
51
|
+
name: "Options desk",
|
|
52
|
+
tagline: "Chains, volatility, flow, earnings moves and backtests.",
|
|
53
|
+
plugins: ["ticker-core", "options-volatility", "earnings", "screeners", "quant"],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: "macro-rates",
|
|
57
|
+
name: "Macro & rates",
|
|
58
|
+
tagline: "Economy, curves, credit, futures and world markets.",
|
|
59
|
+
plugins: ["ticker-core", "rates-macro", "credit", "futures-commodities", "global-markets", "quant"],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "credit-bonds",
|
|
63
|
+
name: "Credit & bonds",
|
|
64
|
+
tagline: "CDS, spreads, covenants and filings, with the rates backdrop.",
|
|
65
|
+
plugins: ["ticker-core", "credit", "rates-macro", "filings", "earnings"],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "alt-data-quant",
|
|
69
|
+
name: "Alt data & quant",
|
|
70
|
+
tagline: "Supply chains, hiring, attention, ownership and backtests.",
|
|
71
|
+
plugins: ["ticker-core", "alt-data", "quant", "ownership", "screeners"],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
|
|
75
|
+
/** What choosing a pack does from here, each list in pane order. */
|
|
76
|
+
export interface PackChange {
|
|
77
|
+
turnOff: string[];
|
|
78
|
+
turnOn: string[];
|
|
79
|
+
/** On now and on in the pack. */
|
|
80
|
+
keep: string[];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function packChange(disabledPlugins: readonly string[], pack: StarterPack): PackChange {
|
|
84
|
+
const disabled = new Set(disabledPlugins);
|
|
85
|
+
const wanted = new Set(pack.plugins);
|
|
86
|
+
const change: PackChange = { turnOff: [], turnOn: [], keep: [] };
|
|
87
|
+
for (const id of PACK_PLUGIN_IDS) {
|
|
88
|
+
if (wanted.has(id)) (disabled.has(id) ? change.turnOn : change.keep).push(id);
|
|
89
|
+
else if (!disabled.has(id)) change.turnOff.push(id);
|
|
90
|
+
}
|
|
91
|
+
return change;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** The switches that make a change, for one `setPluginsEnabled` call; empty when there is nothing to do. */
|
|
95
|
+
export function packToggles(change: PackChange): Record<string, boolean> {
|
|
96
|
+
return Object.fromEntries([
|
|
97
|
+
...change.turnOff.map((id) => [id, false] as const),
|
|
98
|
+
...change.turnOn.map((id) => [id, true] as const),
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** The pack whose plugins are exactly the ones on, or null for a custom set. */
|
|
103
|
+
export function matchingPack(disabledPlugins: readonly string[]): StarterPack | null {
|
|
104
|
+
return STARTER_PACKS.find((pack) => {
|
|
105
|
+
const change = packChange(disabledPlugins, pack);
|
|
106
|
+
return change.turnOff.length === 0 && change.turnOn.length === 0;
|
|
107
|
+
}) ?? null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The switches that put every pack plugin back the way `previous` had it,
|
|
112
|
+
* for Undo. Nothing outside the pack plugins is named, so a plugin the user
|
|
113
|
+
* switched in between keeps that state.
|
|
114
|
+
*/
|
|
115
|
+
export function restoreToggles(previousDisabledPlugins: readonly string[]): Record<string, boolean> {
|
|
116
|
+
const disabled = new Set(previousDisabledPlugins);
|
|
117
|
+
return Object.fromEntries(PACK_PLUGIN_IDS.map((id) => [id, !disabled.has(id)]));
|
|
118
|
+
}
|