gloomberb 0.18.3 → 0.18.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/README.zh-CN.md +11 -11
- package/bin/{gloomberb → gloom} +3 -1
- package/package.json +6 -2
- package/patches/electrobun@1.18.1.patch +32 -1
- package/src/account/auth-model.ts +7 -3
- package/src/account/checkout-handoff.tsx +225 -0
- package/src/account/device-signin-dialog.tsx +2 -2
- package/src/account/device-signin.ts +2 -2
- package/src/account/upgrade-dialog.tsx +1 -1
- package/src/api-client/askg.ts +2 -2
- package/src/api-client/auth.ts +11 -6
- package/src/api-client/catalysts.ts +2 -1
- package/src/api-client/central-bank-rates.ts +6 -0
- package/src/api-client/collections.ts +5 -1
- package/src/api-client/cot.ts +2 -0
- package/src/api-client/crypto-etf-flows.ts +37 -0
- package/src/api-client/crypto-markets.ts +60 -0
- package/src/api-client/data.ts +98 -5
- package/src/api-client/doe.ts +15 -0
- package/src/api-client/equity-screener.ts +28 -0
- package/src/api-client/exchange-announcements.ts +38 -0
- package/src/api-client/fund-facts.ts +39 -0
- package/src/api-client/futures-curve.ts +9 -1
- package/src/api-client/hiring.ts +301 -0
- package/src/api-client/index.ts +182 -16
- package/src/api-client/live-scan.ts +91 -0
- package/src/api-client/market-discovery.ts +14 -0
- package/src/api-client/members.ts +18 -0
- package/src/api-client/mna.ts +6 -0
- package/src/api-client/paths.ts +18 -1
- package/src/api-client/request.ts +224 -26
- package/src/api-client/research-activity.ts +3 -10
- package/src/api-client/short-side-publications.ts +37 -0
- package/src/api-client/socket.ts +64 -4
- package/src/api-client/swap-curve.ts +35 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +96 -2
- package/src/app/keybindings/index.ts +3 -0
- package/src/app/keybindings/labels.ts +18 -1
- package/src/app/keybindings/resolve.ts +14 -0
- package/src/app/pane-runtime/plugin-bindings.ts +9 -2
- package/src/app/runtime/broker-import.ts +43 -26
- package/src/app/runtime/desktop-deeplink.ts +5 -5
- package/src/app/runtime/plugin-bindings.ts +2 -2
- package/src/app/runtime/startup.ts +13 -0
- package/src/app/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/ui-literals-allowlist.json +3 -3
- package/src/architecture/ui-tokens-allowlist.json +1 -1
- package/src/brokers/broker-portfolio-sync.ts +37 -0
- package/src/brokers/directory.ts +11 -0
- package/src/brokers/logos.ts +3 -1
- package/src/brokers/signed-in/adapter.ts +304 -26
- package/src/brokers/signed-in/client.ts +14 -2
- package/src/brokers/signed-in/connect.ts +10 -2
- package/src/brokers/sync-broker-instance.ts +9 -1
- package/src/capabilities/chart-series.ts +22 -6
- package/src/cli/bank-section.ts +1 -1
- package/src/cli/base-converter.ts +23 -14
- package/src/cli/central-bank-events.ts +1 -1
- package/src/cli/command-options.ts +59 -4
- package/src/cli/commands/api.ts +9 -6
- package/src/cli/commands/broker.ts +2 -2
- package/src/cli/commands/command-utils.ts +2 -2
- package/src/cli/commands/crypto-hints.ts +7 -20
- package/src/cli/commands/fred-series.ts +9 -2
- package/src/cli/commands/keybindings.ts +25 -2
- package/src/cli/commands/market.ts +1177 -278
- package/src/cli/commands/news-hints.ts +2 -2
- package/src/cli/commands/news-search.ts +59 -6
- package/src/cli/commands/options-chain.ts +59 -3
- package/src/cli/commands/options-leaps.ts +41 -26
- package/src/cli/commands/overview.ts +222 -61
- package/src/cli/commands/plugins.ts +9 -9
- package/src/cli/commands/remote.ts +13 -10
- package/src/cli/commands/search.ts +82 -46
- package/src/cli/commands/system.ts +27 -19
- package/src/cli/commands/themes.ts +1 -1
- package/src/cli/commands/ticker.ts +194 -48
- package/src/cli/context.ts +3 -2
- package/src/cli/desktop-pane-shot-view.ts +2 -2
- package/src/cli/desktop-pane-shot.ts +1 -1
- package/src/cli/earnings-calendar.ts +4 -4
- package/src/cli/entry.ts +18 -1
- package/src/cli/errors.ts +21 -3
- package/src/cli/exit-codes.ts +1 -1
- package/src/cli/export-source.ts +38 -4
- package/src/cli/freshness.ts +2 -8
- package/src/cli/fx-forward.ts +130 -0
- package/src/cli/fx-pair.ts +10 -9
- package/src/cli/glossary.ts +113 -20
- package/src/cli/help.ts +19 -13
- package/src/cli/history-export.ts +126 -0
- package/src/cli/history-rows.ts +226 -50
- package/src/cli/index-roots.ts +5 -45
- package/src/cli/index.ts +24 -18
- package/src/cli/known-gaps.ts +123 -27
- package/src/cli/listing-arg.ts +316 -46
- package/src/cli/name-entries.ts +30 -18
- package/src/cli/native-smoke.ts +2 -0
- package/src/cli/not-a-ticker.ts +19 -9
- package/src/cli/opentui-libc.ts +5 -0
- package/src/cli/options.ts +12 -0
- package/src/cli/pane-functions/capabilities.ts +75 -20
- package/src/cli/pane-functions/catalog.ts +24 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +10 -7
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +193 -30
- package/src/cli/pane-functions/function-help.ts +76 -30
- package/src/cli/pane-functions/headless.ts +59 -12
- package/src/cli/pane-functions/index.ts +28 -19
- package/src/cli/pane-functions/market-session.ts +15 -5
- package/src/cli/pane-functions/options.ts +22 -2
- package/src/cli/pane-functions/report-notices.ts +12 -4
- package/src/cli/pane-functions/report.ts +10 -6
- package/src/cli/pane-functions/resolver.ts +64 -11
- package/src/cli/pane-functions/screenshot-assessment.ts +322 -0
- package/src/cli/pane-functions/screenshot-bridge.ts +152 -0
- package/src/cli/pane-functions/screenshot-chart-evidence.ts +396 -0
- package/src/cli/pane-functions/screenshot-data-evidence.ts +383 -0
- package/src/cli/pane-functions/screenshot-evidence.ts +1 -1
- package/src/cli/pane-functions/screenshot-payload.ts +453 -0
- package/src/cli/pane-functions/screenshot-render.ts +316 -0
- package/src/cli/pane-functions/screenshot-types.ts +162 -0
- package/src/cli/pane-functions/shot-options.ts +8 -3
- package/src/cli/peso-dollar-rates.ts +79 -0
- package/src/cli/quote-answer.ts +45 -4
- package/src/cli/report-tables.ts +75 -19
- package/src/cli/restore-plugins.ts +42 -15
- package/src/cli/result.ts +164 -23
- package/src/cli/series-search.ts +5 -5
- package/src/cli/statement-filings.ts +19 -0
- package/src/cli/suffixed-listing-rows.ts +49 -0
- package/src/cli/symbol-args.ts +50 -15
- package/src/cli/symbol-cells.ts +120 -0
- package/src/cli/symbol-list.ts +198 -68
- package/src/cli/symbol-rows.ts +131 -25
- package/src/cli/ticker-resolution.ts +108 -11
- package/src/cli/treasury-yields.ts +5 -5
- package/src/cli/types.ts +2 -0
- package/src/cli/uncovered-instrument.ts +3 -3
- package/src/cli/unknown-command.ts +6 -6
- package/src/components/chart/composite/chart-layout.ts +131 -0
- package/src/components/chart/composite/composite-chart.tsx +395 -20
- package/src/components/chart/composite/format.ts +27 -0
- package/src/components/chart/composite/interactions.ts +7 -2
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +7 -0
- package/src/components/chart/composite/panel-gestures.ts +41 -0
- package/src/components/chart/composite/panel-labels.ts +2 -1
- package/src/components/chart/composite/panel-series.ts +1 -0
- package/src/components/chart/composite/panel-surface.tsx +314 -13
- package/src/components/chart/composite/price-axis-labels.tsx +27 -3
- package/src/components/chart/composite/range-statistics.ts +62 -0
- package/src/components/chart/composite/rasterizer.ts +44 -19
- package/src/components/chart/composite/scene.ts +20 -4
- package/src/components/chart/composite/series-axis-tags.tsx +16 -9
- package/src/components/chart/composite/text-renderer.ts +48 -21
- package/src/components/chart/composite/toolbar.tsx +52 -5
- package/src/components/chart/composite/types.ts +17 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +120 -13
- package/src/components/chart/composite/use-composite-value-scales.ts +44 -0
- package/src/components/chart/composite/use-composite-viewport.ts +12 -3
- package/src/components/chart/composite/value-scale.ts +149 -0
- package/src/components/chart/composite/volume-profile-paint.ts +6 -3
- package/src/components/chart/core/pointer.ts +2 -0
- package/src/components/chart-table/index.ts +2 -0
- package/src/components/chart-table/read.tsx +74 -0
- package/src/components/command-bar/commands/collection-list.ts +41 -19
- package/src/components/command-bar/commands/collection.ts +9 -3
- package/src/components/command-bar/commands/direct/index.ts +1 -1
- package/src/components/command-bar/commands/direct/runtime.ts +3 -2
- package/src/components/command-bar/pane-templates/items.ts +59 -6
- package/src/components/command-bar/pane-templates/workflow.ts +10 -1
- package/src/components/command-bar/panel/prompt-binding.ts +0 -8
- package/src/components/command-bar/routes/root/plugin-install.ts +1 -1
- package/src/components/command-bar/routes/root/provider-search.ts +42 -11
- package/src/components/command-bar/routes/root/results.ts +18 -4
- package/src/components/command-bar/routes/root/runtime.ts +15 -3
- package/src/components/command-bar/routes/root/search-providers.ts +25 -2
- package/src/components/command-bar/routes/root/selection.ts +6 -1
- package/src/components/command-bar/routes/root/shortcut-feedback.ts +4 -1
- package/src/components/command-bar/routes/root/shortcuts.ts +30 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +73 -4
- package/src/components/command-bar/selection-runtime.ts +50 -10
- package/src/components/command-bar/surface/index.tsx +24 -2
- package/src/components/command-bar/view-model.ts +7 -0
- package/src/components/command-bar/workflow/alert.ts +1 -1
- package/src/components/command-bar/workflow/broker.ts +2 -2
- package/src/components/command-bar/workflow/collection-actions.ts +46 -7
- package/src/components/command-bar/workflow/collection-ticker.ts +32 -4
- package/src/components/command-bar/workflow/fields.ts +8 -2
- package/src/components/command-bar/workflow/ops.ts +18 -4
- package/src/components/command-bar/workflow/portfolio-position.ts +53 -4
- package/src/components/command-bar/workflow/submit.ts +3 -2
- package/src/components/command-bar/workflow/tickers.ts +5 -1
- package/src/components/company-logo.tsx +39 -0
- package/src/components/data-table/sections.ts +4 -2
- package/src/components/form-modal/confirm.tsx +2 -1
- package/src/components/form-modal/request.ts +5 -0
- package/src/components/form-modal/routes.ts +4 -1
- package/src/components/index.ts +12 -6
- package/src/components/layout/header.tsx +33 -46
- package/src/components/layout/market-summary.ts +9 -6
- package/src/components/layout/pane/capture-status.ts +1 -1
- package/src/components/layout/pane/footer/index.tsx +1 -0
- package/src/components/layout/pane/footer/model.ts +38 -5
- package/src/components/layout/shell/chrome.ts +19 -6
- package/src/components/layout/shell/index.tsx +2 -1
- package/src/components/layout/shell/pane/layers.tsx +19 -1
- package/src/components/layout/status-bar.tsx +2 -2
- package/src/components/market-board/index.tsx +11 -3
- package/src/components/onboarding/onboarding-frame.tsx +1 -1
- package/src/components/onboarding/onboarding-wizard.tsx +1 -0
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +2 -2
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +2 -2
- package/src/components/onboarding/wizard-broker-sync.ts +4 -1
- package/src/components/pane-settings-dialog/desktop.tsx +20 -7
- package/src/components/pane-settings-dialog/tui.tsx +17 -9
- package/src/components/pane-settings-dialog/value.ts +8 -1
- package/src/components/pane-settings-dialog.tsx +44 -13
- package/src/components/sign-in-code-panel.tsx +27 -19
- package/src/components/ui/column-grid.tsx +48 -4
- package/src/components/ui/country-flag-art.tsx +180 -0
- package/src/components/ui/country-flag.tsx +118 -12
- package/src/components/ui/data-table/opentui/index.tsx +61 -2
- package/src/components/ui/data-table/opentui/model.ts +109 -2
- package/src/components/ui/data-table/types.ts +1 -1
- package/src/components/ui/display.tsx +10 -2
- package/src/components/ui/index.ts +3 -1
- package/src/components/ui/logo-mark.tsx +11 -2
- package/src/components/ui/query-bar.tsx +1 -1
- package/src/components/ui/row-notes.ts +79 -0
- package/src/core/state/app/layout.ts +6 -4
- package/src/core/state/app/state.ts +9 -0
- package/src/core/state/app/types.ts +3 -0
- package/src/data/cached-query.ts +8 -1
- package/src/data/config/chart-settings.ts +3 -3
- package/src/data/config/home.ts +10 -2
- package/src/data/config/layout.ts +4 -1
- package/src/data/config/store/node.ts +4 -0
- package/src/data/config/store/normalize.ts +13 -3
- package/src/data/config/store/portfolio-as-of-column.ts +2 -2
- package/src/data/json-storage.ts +2 -0
- package/src/data/saved-copies.ts +123 -0
- package/src/docs/snapshot.json +422 -112
- package/src/i18n/es.ts +30 -13
- package/src/i18n/ja.ts +30 -13
- package/src/i18n/ko.ts +30 -13
- package/src/i18n/zh-cn.ts +30 -13
- package/src/i18n/zh-tw.ts +30 -13
- package/src/layout/desks.ts +1 -1
- package/src/layout/launch-layout.ts +1 -1
- package/src/layout/pane-manager/floating-actions.ts +5 -3
- package/src/layout/pane-manager/floating.ts +43 -1
- package/src/layout/pane-manager/index.ts +2 -0
- package/src/layout/selected-ticker.ts +74 -0
- package/src/market-data/coordinator/financials.ts +10 -2
- package/src/market-data/coordinator/index.ts +3 -1
- package/src/market-data/coordinator/quotes.ts +4 -2
- package/src/market-data/depositary-pair.ts +251 -0
- package/src/market-data/futures-board.ts +1 -1
- package/src/market-data/futures-contract.ts +124 -40
- package/src/market-data/fx-closes.ts +17 -2
- package/src/market-data/hooks.tsx +19 -11
- package/src/market-data/market/change-basis.ts +81 -11
- package/src/market-data/market/dated-previous-close.ts +203 -0
- package/src/market-data/market/freshness.ts +34 -5
- package/src/market-data/market/futures-week.ts +68 -0
- package/src/market-data/market/period-return.ts +163 -0
- package/src/market-data/market/status.ts +16 -4
- package/src/market-data/market/trading-sessions.ts +13 -0
- package/src/market-data/market/year-to-date.ts +8 -13
- package/src/market-data/options-alternatives.ts +60 -0
- package/src/market-data/performance.ts +20 -14
- package/src/market-data/perpetual-premium.ts +32 -0
- package/src/market-data/published-apac-sessions.ts +2 -1
- package/src/market-data/published-futures-sessions.ts +69 -0
- package/src/market-data/quotes/contributions.ts +25 -3
- package/src/market-data/quotes/freshness.ts +42 -0
- package/src/market-data/quotes/intraday-bar.ts +37 -0
- package/src/market-data/quotes/regular-session-valuation.ts +13 -8
- package/src/market-data/quotes/resolution.ts +7 -2
- package/src/market-data/selectors.ts +3 -0
- package/src/market-data/tax-equivalent.ts +1 -1
- package/src/market-data/ticker-price-returns.ts +3 -1
- package/src/news/aggregator.ts +5 -1
- package/src/news/news-model.ts +4 -0
- package/src/news/types.ts +11 -0
- package/src/notifications/app-notifier.ts +1 -1
- package/src/notifications/notification-log.ts +6 -4
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/pane.tsx +9 -8
- package/src/plugins/builtin/alerts/alert-engine.ts +34 -20
- package/src/plugins/builtin/alerts/calendar-events.ts +429 -0
- package/src/plugins/builtin/alerts/cli.ts +533 -85
- package/src/plugins/builtin/alerts/command.ts +12 -10
- package/src/plugins/builtin/alerts/constants.ts +1 -1
- package/src/plugins/builtin/alerts/event-rows.ts +9 -5
- package/src/plugins/builtin/alerts/events-pane.tsx +71 -56
- package/src/plugins/builtin/alerts/events.ts +107 -5
- package/src/plugins/builtin/alerts/fired-log.ts +119 -0
- package/src/plugins/builtin/alerts/format.ts +10 -3
- package/src/plugins/builtin/alerts/headless.ts +107 -41
- package/src/plugins/builtin/alerts/history-pane.tsx +105 -62
- package/src/plugins/builtin/alerts/history-rows.ts +92 -0
- package/src/plugins/builtin/alerts/history.ts +2 -0
- package/src/plugins/builtin/alerts/index.tsx +107 -30
- package/src/plugins/builtin/alerts/iv-level.ts +365 -0
- package/src/plugins/builtin/alerts/levels.ts +3 -3
- package/src/plugins/builtin/alerts/live.ts +3 -3
- package/src/plugins/builtin/alerts/metric-command.ts +61 -0
- package/src/plugins/builtin/alerts/metric-data.ts +70 -0
- package/src/plugins/builtin/alerts/metric-model.ts +175 -0
- package/src/plugins/builtin/alerts/metric-parity-fixture.json +725 -0
- package/src/plugins/builtin/alerts/pane.tsx +130 -49
- package/src/plugins/builtin/alerts/price.ts +35 -0
- package/src/plugins/builtin/alerts/quotes.ts +24 -0
- package/src/plugins/builtin/alerts/research-builder.ts +84 -11
- package/src/plugins/builtin/alerts/research-rules.ts +76 -3
- package/src/plugins/builtin/alerts/scheduled-check.ts +206 -32
- package/src/plugins/builtin/alerts/scheduled-sources.ts +26 -3
- package/src/plugins/builtin/alerts/scheduled.ts +188 -29
- package/src/plugins/builtin/alerts/storage.ts +38 -12
- package/src/plugins/builtin/alerts/targets.ts +12 -3
- package/src/plugins/builtin/alerts/types.ts +3 -0
- package/src/plugins/builtin/analytics/index.tsx +8 -2
- package/src/plugins/builtin/analytics/metrics.ts +1 -1
- package/src/plugins/builtin/analytics/risk-book.ts +215 -0
- package/src/plugins/builtin/analytics/risk-client.ts +13 -6
- package/src/plugins/builtin/analytics/risk-headless.ts +55 -21
- package/src/plugins/builtin/analytics/risk-math.ts +6 -3
- package/src/plugins/builtin/analytics/risk-model.ts +297 -104
- package/src/plugins/builtin/analytics/risk-options.ts +17 -2
- package/src/plugins/builtin/analytics/risk-pane.tsx +97 -36
- package/src/plugins/builtin/attention/pane.tsx +6 -2
- package/src/plugins/builtin/awards/headless.ts +7 -3
- package/src/plugins/builtin/awards/model.ts +18 -0
- package/src/plugins/builtin/awards/pane.tsx +6 -3
- package/src/plugins/builtin/backtest/headless.ts +13 -8
- package/src/plugins/builtin/backtest/pane.tsx +9 -4
- package/src/plugins/builtin/backtest/presets.ts +29 -3
- package/src/plugins/builtin/backtest/rules.ts +41 -5
- package/src/plugins/builtin/broker-manager/add-flow.tsx +12 -7
- package/src/plugins/builtin/broker-manager/detail.tsx +47 -19
- package/src/plugins/builtin/broker-manager/footer.ts +27 -11
- package/src/plugins/builtin/broker-manager/index.tsx +24 -14
- package/src/plugins/builtin/broker-manager/keyboard.ts +1 -1
- package/src/plugins/builtin/broker-manager/model.ts +18 -3
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +183 -57
- package/src/plugins/builtin/broker-manager/table.ts +28 -12
- package/src/plugins/builtin/broker-trading/account-picker.tsx +2 -1
- package/src/plugins/builtin/broker-trading/chart-levels.ts +82 -13
- package/src/plugins/builtin/broker-trading/controller.ts +66 -24
- package/src/plugins/builtin/broker-trading/dock.tsx +22 -4
- package/src/plugins/builtin/broker-trading/headless.ts +2 -1
- package/src/plugins/builtin/broker-trading/index.tsx +19 -1
- package/src/plugins/builtin/broker-trading/linked-orders.ts +148 -0
- package/src/plugins/builtin/broker-trading/order-feed.ts +83 -10
- package/src/plugins/builtin/broker-trading/orders.tsx +109 -31
- package/src/plugins/builtin/broker-trading/overview-orders.tsx +9 -3
- package/src/plugins/builtin/broker-trading/pane-model.ts +30 -2
- package/src/plugins/builtin/broker-trading/pane.tsx +111 -24
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +112 -31
- package/src/plugins/builtin/buildout/cells.tsx +4 -0
- package/src/plugins/builtin/buildout/detail/index.tsx +5 -1
- package/src/plugins/builtin/buildout/detail/ui.tsx +7 -4
- package/src/plugins/builtin/buildout/pane/index.tsx +25 -12
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +2 -2
- package/src/plugins/builtin/catalysts/detail.tsx +3 -2
- package/src/plugins/builtin/catalysts/index.tsx +1 -1
- package/src/plugins/builtin/catalysts/model.ts +51 -5
- package/src/plugins/builtin/catalysts/pane.tsx +6 -8
- package/src/plugins/builtin/central-bank-rates/client.ts +5 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +36 -10
- package/src/plugins/builtin/central-bank-rates/model.ts +33 -8
- package/src/plugins/builtin/changelog/index.tsx +1 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +4 -1
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +3 -2
- package/src/plugins/builtin/chart-composer/chart-spec.ts +7 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +7 -10
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +7 -3
- package/src/plugins/builtin/chart-composer/editor/controller.ts +4 -0
- package/src/plugins/builtin/chart-composer/editor/model.ts +2 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +9 -4
- package/src/plugins/builtin/chart-composer/formula.ts +71 -18
- package/src/plugins/builtin/chart-composer/headless-schema.ts +42 -29
- package/src/plugins/builtin/chart-composer/headless.ts +266 -37
- package/src/plugins/builtin/chart-composer/index.tsx +12 -2
- package/src/plugins/builtin/chart-composer/leverage-overlay.ts +142 -0
- package/src/plugins/builtin/chart-composer/pane.tsx +144 -30
- package/src/plugins/builtin/chart-composer/presets.ts +50 -15
- package/src/plugins/builtin/chart-composer/quick-add.tsx +40 -25
- package/src/plugins/builtin/chart-composer/series-catalog.ts +1 -0
- package/src/plugins/builtin/chart-composer/series-expression.ts +65 -6
- package/src/plugins/builtin/chart-composer/session-history.ts +31 -28
- package/src/plugins/builtin/chart-composer/session-range.ts +4 -2
- package/src/plugins/builtin/chart-composer/settings.ts +31 -19
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +44 -31
- package/src/plugins/builtin/chart-composer/viewport-labels.ts +18 -8
- package/src/plugins/builtin/chat/attachments/model.ts +3 -1
- package/src/plugins/builtin/chat/content/command-suggestions.ts +92 -0
- package/src/plugins/builtin/chat/content/composer.tsx +13 -6
- package/src/plugins/builtin/chat/content/footer.tsx +6 -3
- package/src/plugins/builtin/chat/content/index.tsx +51 -22
- package/src/plugins/builtin/chat/content/open-targets.ts +14 -3
- package/src/plugins/builtin/chat/controller/session-runtime.ts +4 -2
- package/src/plugins/builtin/chat/index.tsx +23 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +1 -0
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +23 -0
- package/src/plugins/builtin/chat/message/pane-chip.tsx +50 -20
- package/src/plugins/builtin/chat/pane-links/commands.ts +265 -0
- package/src/plugins/builtin/chat/pane-links/model.ts +12 -3
- package/src/plugins/builtin/chat/pane-links/open.ts +9 -2
- package/src/plugins/builtin/chat/people.ts +1 -1
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +10 -1
- package/src/plugins/builtin/clinical-trials/client.ts +5 -2
- package/src/plugins/builtin/clinical-trials/model.ts +13 -4
- package/src/plugins/builtin/clinical-trials/pane.tsx +32 -12
- package/src/plugins/builtin/clinical-trials/ticker-sponsor.ts +17 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +1 -1
- package/src/plugins/builtin/cloud/askg/lock-note.ts +1 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +3 -3
- package/src/plugins/builtin/cloud/plugin.tsx +1 -1
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +105 -47
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +42 -4
- package/src/plugins/builtin/cloud/team/pane.tsx +204 -64
- package/src/plugins/builtin/cloud/thesis/store.ts +45 -22
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/commodities-energy/index.tsx +29 -2
- package/src/plugins/builtin/commodities-energy/view-state.ts +2 -0
- package/src/plugins/builtin/commodity-balances/pane.tsx +11 -4
- package/src/plugins/builtin/company-attention/app-rank.tsx +7 -5
- package/src/plugins/builtin/company-attention/building-model.ts +222 -0
- package/src/plugins/builtin/company-attention/building.tsx +172 -0
- package/src/plugins/builtin/company-attention/client.ts +117 -1
- package/src/plugins/builtin/company-attention/evidence.ts +16 -3
- package/src/plugins/builtin/company-attention/headless.ts +101 -5
- package/src/plugins/builtin/company-attention/index.tsx +6 -3
- package/src/plugins/builtin/company-attention/model.ts +33 -7
- package/src/plugins/builtin/company-attention/moves-model.ts +253 -0
- package/src/plugins/builtin/company-attention/moves.tsx +159 -0
- package/src/plugins/builtin/company-attention/pane.tsx +79 -23
- package/src/plugins/builtin/company-attention/signals-model.ts +229 -0
- package/src/plugins/builtin/company-attention/signals.tsx +160 -0
- package/src/plugins/builtin/company-kpis/headless.ts +3 -2
- package/src/plugins/builtin/company-kpis/model.ts +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +1 -1
- package/src/plugins/builtin/composite-plugins.ts +2 -1
- package/src/plugins/builtin/congress-trades/headless.ts +1 -1
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +3 -2
- package/src/plugins/builtin/correlation/headless.ts +5 -3
- package/src/plugins/builtin/cot/headless.ts +28 -6
- package/src/plugins/builtin/cot/model.ts +12 -0
- package/src/plugins/builtin/cot/pane.tsx +3 -2
- package/src/plugins/builtin/cpi/headless.ts +5 -1
- package/src/plugins/builtin/cpi/pane.tsx +11 -9
- package/src/plugins/builtin/credit-boards/model.ts +2 -0
- package/src/plugins/builtin/credit-documents/headless.ts +1 -1
- package/src/plugins/builtin/crypto-board/client.ts +86 -0
- package/src/plugins/builtin/crypto-board/defi-view.tsx +218 -0
- package/src/plugins/builtin/crypto-board/defi.ts +239 -0
- package/src/plugins/builtin/crypto-board/headless.ts +117 -6
- package/src/plugins/builtin/crypto-board/index.tsx +8 -3
- package/src/plugins/builtin/crypto-board/model.ts +40 -8
- package/src/plugins/builtin/crypto-board/pane.tsx +55 -21
- package/src/plugins/builtin/crypto-board/series.ts +19 -1
- package/src/plugins/builtin/crypto-etf-flows/client.ts +60 -0
- package/src/plugins/builtin/crypto-etf-flows/headless.ts +132 -0
- package/src/plugins/builtin/crypto-etf-flows/index.tsx +44 -0
- package/src/plugins/builtin/crypto-etf-flows/model.ts +121 -0
- package/src/plugins/builtin/crypto-etf-flows/pane.tsx +193 -0
- package/src/plugins/builtin/debug/index.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/docs/index.tsx +1 -1
- package/src/plugins/builtin/docs/pane.tsx +2 -2
- package/src/plugins/builtin/docs/targets.ts +1 -1
- package/src/plugins/builtin/doe/client.ts +5 -1
- package/src/plugins/builtin/doe/headless.ts +12 -6
- package/src/plugins/builtin/doe/model.ts +43 -6
- package/src/plugins/builtin/doe/pane.tsx +18 -11
- package/src/plugins/builtin/earnings/board-model.ts +13 -6
- package/src/plugins/builtin/earnings/board-table.ts +4 -1
- package/src/plugins/builtin/earnings/board.tsx +253 -50
- package/src/plugins/builtin/earnings/calendar-model.ts +188 -0
- package/src/plugins/builtin/earnings/calendar.tsx +338 -0
- package/src/plugins/builtin/earnings/client.ts +4 -3
- package/src/plugins/builtin/earnings/headless.ts +53 -15
- package/src/plugins/builtin/earnings/history-model.ts +53 -36
- package/src/plugins/builtin/earnings/index.tsx +15 -22
- package/src/plugins/builtin/earnings/model.ts +17 -12
- package/src/plugins/builtin/earnings/scope.ts +89 -0
- package/src/plugins/builtin/earnings-calls/calendar.tsx +310 -0
- package/src/plugins/builtin/earnings-calls/data.ts +146 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +151 -9
- package/src/plugins/builtin/earnings-calls/index.tsx +3 -3
- package/src/plugins/builtin/earnings-calls/lock-note.ts +1 -1
- package/src/plugins/builtin/earnings-calls/pane.tsx +149 -31
- package/src/plugins/builtin/earnings-calls/upcoming.ts +195 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +144 -27
- package/src/plugins/builtin/econ/detail-view.tsx +48 -10
- package/src/plugins/builtin/econ/figures.ts +72 -0
- package/src/plugins/builtin/econ/fred-catalog.ts +23 -6
- package/src/plugins/builtin/econ/fred-series-map.ts +4 -0
- package/src/plugins/builtin/econ/index.tsx +144 -27
- package/src/plugins/builtin/econ/print-watch.ts +2 -1
- package/src/plugins/builtin/econ/types.ts +34 -1
- package/src/plugins/builtin/econ-statistics/client.ts +16 -3
- package/src/plugins/builtin/econ-statistics/defs.ts +4 -0
- package/src/plugins/builtin/econ-statistics/detail.tsx +2 -2
- package/src/plugins/builtin/econ-statistics/headless.ts +87 -28
- package/src/plugins/builtin/econ-statistics/index.tsx +3 -3
- package/src/plugins/builtin/econ-statistics/pane.tsx +2 -1
- package/src/plugins/builtin/econ-statistics/stats.ts +104 -0
- package/src/plugins/builtin/econ-statistics/view.ts +19 -1
- package/src/plugins/builtin/equity-screener/client.ts +21 -3
- package/src/plugins/builtin/equity-screener/headless.ts +68 -6
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +6 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +47 -12
- package/src/plugins/builtin/equity-screener/screen-check.ts +90 -0
- package/src/plugins/builtin/equity-screener/ticker-check.tsx +148 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -1
- package/src/plugins/builtin/estimate-revisions/lock-note.ts +3 -3
- package/src/plugins/builtin/estimate-revisions/model.ts +8 -10
- package/src/plugins/builtin/exposure/charts.tsx +2 -2
- package/src/plugins/builtin/exposure/headless.ts +51 -6
- package/src/plugins/builtin/exposure/index.tsx +28 -2
- package/src/plugins/builtin/exposure/model.ts +20 -1
- package/src/plugins/builtin/exposure/pane.tsx +10 -5
- package/src/plugins/builtin/fear-greed/index.tsx +1 -1
- package/src/plugins/builtin/filing-events/index.tsx +1 -1
- package/src/plugins/builtin/futures/index.tsx +1 -0
- package/src/plugins/builtin/futures/model.ts +12 -10
- package/src/plugins/builtin/futures/returns.ts +8 -36
- package/src/plugins/builtin/futures/table.tsx +3 -3
- package/src/plugins/builtin/futures-curve/client.ts +40 -9
- package/src/plugins/builtin/futures-curve/headless.ts +39 -17
- package/src/plugins/builtin/futures-curve/model.ts +258 -69
- package/src/plugins/builtin/futures-curve/pane.tsx +46 -17
- package/src/plugins/builtin/fx-matrix/client.ts +20 -8
- package/src/plugins/builtin/fx-matrix/headless.ts +37 -16
- package/src/plugins/builtin/fx-matrix/index.tsx +25 -13
- package/src/plugins/builtin/fx-matrix/live-legs.ts +34 -0
- package/src/plugins/builtin/fx-matrix/settings.ts +2 -1
- package/src/plugins/builtin/gpu/headless.ts +9 -4
- package/src/plugins/builtin/help/index.tsx +13 -3
- package/src/plugins/builtin/help/keybindings-editor.tsx +18 -14
- package/src/plugins/builtin/holders/beneficial-model.ts +8 -11
- package/src/plugins/builtin/holders/beneficial-report.ts +6 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/client.ts +13 -1
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +46 -7
- package/src/plugins/builtin/holders/index-holders.ts +264 -0
- package/src/plugins/builtin/holders/pane.tsx +79 -15
- package/src/plugins/builtin/holders/report-rows.ts +35 -7
- package/src/plugins/builtin/holders/table-model.ts +2 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/headless.ts +1 -1
- package/src/plugins/builtin/insider/signals-client.ts +1 -1
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/ipo-calendar/pane.tsx +7 -4
- package/src/plugins/builtin/iv-history/client.ts +20 -0
- package/src/plugins/builtin/iv-history/headless.ts +7 -4
- package/src/plugins/builtin/iv-history/index.tsx +1 -1
- package/src/plugins/builtin/iv-history/model.ts +13 -4
- package/src/plugins/builtin/iv-history/series.ts +3 -1
- package/src/plugins/builtin/jobs/lock-note.ts +1 -1
- package/src/plugins/builtin/jobs/model.ts +4 -15
- package/src/plugins/builtin/jobs/pane.tsx +7 -5
- package/src/plugins/builtin/jobs/share-bars.tsx +11 -5
- package/src/plugins/builtin/jodi/pane.tsx +10 -4
- package/src/plugins/builtin/layout-manager/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +20 -7
- package/src/plugins/builtin/macro-day/index.tsx +3 -2
- package/src/plugins/builtin/macro-day/model.ts +29 -8
- package/src/plugins/builtin/macro-day/pane.tsx +51 -13
- package/src/plugins/builtin/macro-day/releases.ts +55 -13
- package/src/plugins/builtin/market-heatmap/data.ts +9 -2
- package/src/plugins/builtin/market-heatmap/evidence.ts +1 -1
- package/src/plugins/builtin/market-heatmap/headless.ts +9 -6
- package/src/plugins/builtin/market-heatmap/index.tsx +3 -3
- package/src/plugins/builtin/market-heatmap/model.ts +10 -7
- package/src/plugins/builtin/market-movers/client.ts +33 -19
- package/src/plugins/builtin/market-movers/footer.ts +2 -2
- package/src/plugins/builtin/market-movers/headless.ts +8 -2
- package/src/plugins/builtin/market-movers/index.tsx +16 -10
- package/src/plugins/builtin/market-movers/screener.ts +29 -8
- package/src/plugins/builtin/market-movers/session-body.tsx +4 -2
- package/src/plugins/builtin/market-movers/session-table.ts +4 -2
- package/src/plugins/builtin/market-movers/table.ts +4 -1
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/view.ts +5 -0
- package/src/plugins/builtin/members/breadth-pane.tsx +81 -0
- package/src/plugins/builtin/members/client.ts +19 -4
- package/src/plugins/builtin/members/headless.ts +24 -10
- package/src/plugins/builtin/members/index.tsx +9 -9
- package/src/plugins/builtin/members/model.ts +23 -4
- package/src/plugins/builtin/members/pane.tsx +31 -14
- package/src/plugins/builtin/mna/client.ts +1 -0
- package/src/plugins/builtin/mna/detail.tsx +20 -32
- package/src/plugins/builtin/mna/distress/detail.tsx +16 -4
- package/src/plugins/builtin/mna/distress/model.ts +3 -2
- package/src/plugins/builtin/mna/distress/pane.tsx +7 -4
- package/src/plugins/builtin/mna/headless.ts +6 -13
- package/src/plugins/builtin/mna/model.ts +93 -15
- package/src/plugins/builtin/mna/pane.tsx +5 -4
- package/src/plugins/builtin/news/headless.ts +12 -6
- package/src/plugins/builtin/news/index.tsx +10 -1
- package/src/plugins/builtin/news/wire/index.tsx +3 -2
- package/src/plugins/builtin/news/wire/news/command-bar-search.ts +26 -10
- package/src/plugins/builtin/news/wire/news/query-presets.ts +6 -2
- package/src/plugins/builtin/news/wire/rss/cli.ts +3 -3
- package/src/plugins/builtin/notes/cli.ts +49 -14
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/analytics.ts +26 -2
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/model-spot.ts +5 -2
- package/src/plugins/builtin/options/strike-window.ts +2 -1
- package/src/plugins/builtin/options/table.ts +1 -7
- package/src/plugins/builtin/options/view.tsx +30 -13
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-positioning/client.ts +19 -0
- package/src/plugins/builtin/options-positioning/headless.ts +54 -14
- package/src/plugins/builtin/options-positioning/index.tsx +3 -3
- package/src/plugins/builtin/options-positioning/model.ts +47 -8
- package/src/plugins/builtin/options-positioning/pane.tsx +68 -38
- package/src/plugins/builtin/options-scenario/client.ts +123 -28
- package/src/plugins/builtin/options-scenario/collar.ts +8 -6
- package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +127 -0
- package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +165 -0
- package/src/plugins/builtin/options-scenario/csp-screen.ts +258 -0
- package/src/plugins/builtin/options-scenario/csp.ts +101 -21
- package/src/plugins/builtin/options-scenario/headless.ts +36 -15
- package/src/plugins/builtin/options-scenario/hedge.ts +20 -14
- package/src/plugins/builtin/options-scenario/index.tsx +28 -3
- package/src/plugins/builtin/options-scenario/model.ts +13 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +9 -5
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +14 -9
- package/src/plugins/builtin/perps/headless.ts +3 -1
- package/src/plugins/builtin/perps/list-perpetuals.ts +25 -4
- package/src/plugins/builtin/perps/live-rows.ts +168 -0
- package/src/plugins/builtin/perps/markets-section.tsx +154 -0
- package/src/plugins/builtin/perps/pane.tsx +49 -26
- package/src/plugins/builtin/perps/venue-markets.ts +96 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +2 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +143 -59
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +72 -24
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +54 -22
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +3 -3
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +29 -24
- package/src/plugins/builtin/portfolio-list/headless.ts +7 -4
- package/src/plugins/builtin/portfolio-list/income.ts +13 -2
- package/src/plugins/builtin/portfolio-list/index.tsx +9 -2
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +21 -8
- package/src/plugins/builtin/portfolio-list/pane/purchase-date-fx.ts +46 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +11 -8
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +16 -9
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +2 -15
- package/src/plugins/builtin/power/client.ts +4 -1
- package/src/plugins/builtin/power/evidence.ts +22 -7
- package/src/plugins/builtin/power/gas.tsx +5 -1
- package/src/plugins/builtin/power/pane.tsx +8 -1
- package/src/plugins/builtin/power/prices.tsx +10 -3
- package/src/plugins/builtin/rate-path/pane.tsx +2 -2
- package/src/plugins/builtin/research/analyst-headless.ts +25 -8
- package/src/plugins/builtin/research/analyst-model.ts +68 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +63 -14
- package/src/plugins/builtin/research/event-model.ts +3 -1
- package/src/plugins/builtin/research/event-sources.ts +12 -4
- package/src/plugins/builtin/research/index.tsx +2 -1
- package/src/plugins/builtin/research/relative-valuation-basis.ts +58 -0
- package/src/plugins/builtin/research/relative-valuation-columns.ts +31 -2
- package/src/plugins/builtin/research/relative-valuation-currency.ts +12 -5
- package/src/plugins/builtin/research/relative-valuation-headless.ts +84 -26
- package/src/plugins/builtin/research/relative-valuation-model.ts +88 -19
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +80 -13
- package/src/plugins/builtin/research/relative-valuation-peers.ts +1 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +6 -2
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/feed.ts +2 -2
- package/src/plugins/builtin/scanner/index.ts +24 -1
- package/src/plugins/builtin/scanner/live-condition-editor.tsx +222 -0
- package/src/plugins/builtin/scanner/live-feed.ts +168 -0
- package/src/plugins/builtin/scanner/live-headless.ts +114 -0
- package/src/plugins/builtin/scanner/live-model.ts +351 -0
- package/src/plugins/builtin/scanner/live-pane.tsx +677 -0
- package/src/plugins/builtin/scanner/live-track.ts +186 -0
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/sec/forms.ts +13 -0
- package/src/plugins/builtin/sec/fund-abroad.ts +32 -0
- package/src/plugins/builtin/sec/fund-facts.ts +68 -8
- package/src/plugins/builtin/sec/headless.ts +85 -8
- package/src/plugins/builtin/sec/index.tsx +58 -12
- package/src/plugins/builtin/sectors/client.ts +2 -1
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +3 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-upgrade.ts +34 -6
- package/src/plugins/builtin/shared/earnings-calendar.ts +375 -0
- package/src/plugins/builtin/{earnings/estimate-basis.ts → shared/earnings-estimate-basis.ts} +1 -1
- package/src/plugins/builtin/shared/earnings-report.ts +3 -3
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +23 -1
- package/src/plugins/builtin/shared/job-posting.ts +129 -0
- package/src/plugins/builtin/shared/macro-releases.ts +65 -0
- package/src/plugins/builtin/shared/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +21 -0
- package/src/plugins/builtin/shared/scanner-capture.ts +3 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/ticker-surface.ts +2 -1
- package/src/plugins/builtin/shared/use-quote-board.ts +8 -2
- package/src/plugins/builtin/shared/volatility/pricing.ts +7 -1
- package/src/plugins/builtin/short-interest/client.ts +2 -0
- package/src/plugins/builtin/short-interest/headless.ts +41 -12
- package/src/plugins/builtin/short-interest/index.tsx +23 -1
- package/src/plugins/builtin/short-interest/model.ts +70 -19
- package/src/plugins/builtin/short-interest/pane.tsx +19 -2
- package/src/plugins/builtin/short-interest/publications-client.ts +82 -0
- package/src/plugins/builtin/short-interest/publications-headless.ts +29 -0
- package/src/plugins/builtin/short-interest/publications-model.ts +50 -0
- package/src/plugins/builtin/short-interest/publications-pane.tsx +66 -0
- package/src/plugins/builtin/short-interest/schedule.ts +35 -2
- package/src/plugins/builtin/short-interest/surface.tsx +11 -4
- package/src/plugins/builtin/short-interest/types.ts +9 -0
- package/src/plugins/builtin/short-interest/watch-client.ts +14 -8
- package/src/plugins/builtin/short-interest/watch-model.ts +12 -25
- package/src/plugins/builtin/short-interest/watch-pane.tsx +5 -1
- package/src/plugins/builtin/supply-chain/flow.tsx +33 -9
- package/src/plugins/builtin/supply-chain/model.ts +51 -3
- package/src/plugins/builtin/supply-chain/pane.tsx +78 -39
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +1 -1
- package/src/plugins/builtin/themes/headless.ts +11 -6
- package/src/plugins/builtin/themes/model.ts +15 -5
- package/src/plugins/builtin/themes/pane.tsx +27 -8
- package/src/plugins/builtin/thirteenf/headless.ts +5 -5
- package/src/plugins/builtin/thirteenf/signals.ts +3 -1
- package/src/plugins/builtin/ticker-detail/adr-pair/headless.ts +123 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/model.ts +132 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/tab.tsx +87 -0
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +40 -26
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +8 -4
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +67 -3
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +112 -5
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +17 -2
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +21 -7
- package/src/plugins/builtin/ticker-detail/financials/model.ts +36 -1
- package/src/plugins/builtin/ticker-detail/financials/offerings.ts +56 -0
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +62 -13
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +30 -4
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +14 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +148 -35
- package/src/plugins/builtin/ticker-detail/index.tsx +37 -5
- package/src/plugins/builtin/ticker-detail/overview/model.ts +65 -10
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +9 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +68 -11
- package/src/plugins/builtin/ticker-detail/pane.tsx +11 -0
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +14 -4
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +11 -0
- package/src/plugins/builtin/vol-surface/charts.tsx +9 -4
- package/src/plugins/builtin/vol-surface/client.ts +7 -4
- package/src/plugins/builtin/vol-surface/headless.ts +71 -13
- package/src/plugins/builtin/vol-surface/index.tsx +2 -2
- package/src/plugins/builtin/vol-surface/model.ts +26 -9
- package/src/plugins/builtin/vol-surface/pane.tsx +44 -7
- package/src/plugins/builtin/vol-surface/tables.ts +31 -3
- package/src/plugins/builtin/volatility/dvol.ts +46 -0
- package/src/plugins/builtin/volatility/model.ts +5 -10
- package/src/plugins/builtin/volatility/pane.tsx +2 -2
- package/src/plugins/builtin/volatility/series.ts +26 -0
- package/src/plugins/builtin/world-indices/footer.ts +1 -1
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +4 -3
- package/src/plugins/builtin/world-venue-map/basemap.ts +3 -1
- package/src/plugins/builtin/world-venue-map/chokepoint-chart.ts +40 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +1 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +90 -11
- package/src/plugins/builtin/world-venue-map/headless.ts +1 -1
- package/src/plugins/builtin/world-venue-map/index.ts +3 -26
- package/src/plugins/builtin/world-venue-map/layers.ts +1 -1
- package/src/plugins/builtin/world-venue-map/map.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/pane.tsx +4 -2
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +15 -4
- package/src/plugins/builtin/yield-curve/client.ts +25 -0
- package/src/plugins/builtin/yield-curve/curves.ts +7 -4
- package/src/plugins/builtin/yield-curve/headless.ts +38 -4
- package/src/plugins/builtin/yield-curve/history.ts +4 -3
- package/src/plugins/builtin/yield-curve/index.tsx +12 -6
- package/src/plugins/builtin/yield-curve/swaps-model.ts +93 -0
- package/src/plugins/builtin/yield-curve/swaps.tsx +99 -0
- package/src/plugins/bundle.ts +1 -1
- package/src/plugins/catalog-browser.ts +15 -9
- package/src/plugins/compat.ts +3 -3
- package/src/plugins/dependencies.ts +75 -14
- package/src/plugins/extracted-plugins.ts +132 -34
- package/src/plugins/host-link.ts +149 -34
- package/src/plugins/installer.ts +35 -10
- package/src/plugins/loader.ts +206 -38
- package/src/plugins/manager-node.ts +2 -2
- package/src/plugins/marketplace/deactivation.ts +22 -0
- package/src/plugins/marketplace/model.ts +2 -2
- package/src/plugins/marketplace/packs.ts +1 -1
- package/src/plugins/ownership.ts +1 -1
- package/src/plugins/peer-retry.ts +155 -0
- package/src/plugins/registry/contributions.ts +3 -1
- package/src/plugins/registry/index.ts +4 -3
- package/src/plugins/registry/plugin-state.ts +3 -0
- package/src/plugins/seed-notice.ts +20 -0
- package/src/plugins/shortcut-argument.ts +39 -0
- package/src/portfolio/allocation.ts +1 -1
- package/src/portfolio/collection-name.ts +31 -0
- package/src/portfolio/column-values.ts +15 -13
- package/src/portfolio/cost-fx.ts +296 -19
- package/src/portfolio/manual-lots.ts +75 -0
- package/src/portfolio/mutations.ts +60 -22
- package/src/portfolio/suffixed-listings.ts +209 -0
- package/src/portfolio/totals-currency.ts +24 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +15 -0
- package/src/public/time-series.ts +11 -8
- package/src/remote/schema.ts +1 -1
- package/src/renderers/browser/app-services.ts +1 -7
- package/src/renderers/browser/config-host.ts +5 -55
- package/src/renderers/browser/main.tsx +30 -60
- package/src/renderers/dom/boot-frame-page.ts +187 -0
- package/src/renderers/dom/boot-frame.ts +237 -0
- package/src/renderers/dom/build-assets.ts +46 -8
- package/src/renderers/dom/dom-ui-host.tsx +4 -29
- package/src/renderers/dom/host/ascii-text.ts +16 -2
- package/src/renderers/dom/host/box.tsx +43 -2
- package/src/renderers/dom/host/chart-surface.tsx +2 -0
- package/src/renderers/dom/host/hls.chunk.ts +3 -0
- package/src/renderers/dom/host/image-surface.tsx +49 -0
- package/src/renderers/dom/host/media-surface.tsx +24 -18
- package/src/renderers/dom/host/mouse.ts +30 -0
- package/src/renderers/dom/host/size-observer.ts +1 -1
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/styles.css +76 -0
- package/src/renderers/dom/test-utils.tsx +2 -1
- package/src/renderers/electrobun/bun/application-menu/index.ts +3 -3
- package/src/renderers/electrobun/bun/desktop/app-name.ts +222 -0
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +3 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +56 -3
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/host-requests.ts +9 -3
- package/src/renderers/electrobun/bun/desktop/initialization.ts +81 -18
- package/src/renderers/electrobun/bun/desktop/relaunch.ts +74 -25
- package/src/renderers/electrobun/bun/desktop/state-broadcaster.ts +1 -0
- package/src/renderers/electrobun/bun/desktop/update.ts +70 -3
- package/src/renderers/electrobun/bun/desktop/workspace/index.ts +2 -0
- package/src/renderers/electrobun/bun/external-plugins.ts +29 -7
- package/src/renderers/electrobun/bun/index.ts +36 -2
- package/src/renderers/electrobun/bun/window/boot-frame.ts +67 -0
- package/src/renderers/electrobun/bun/window/create.ts +4 -1
- package/src/renderers/electrobun/shared/app-name.ts +17 -0
- package/src/renderers/electrobun/shared/boot-frame.ts +7 -0
- package/src/renderers/electrobun/shared/protocol.ts +6 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +3 -3
- package/src/renderers/electrobun/view/config-host.ts +3 -0
- package/src/renderers/electrobun/view/desktop/window/snapshot.ts +1 -0
- package/src/renderers/electrobun/view/fatal-screen.tsx +1 -1
- package/src/renderers/electrobun/view/main.tsx +30 -4
- package/src/renderers/electrobun/view/news-source.ts +5 -5
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +1 -1
- package/src/renderers/electrobun/view/ui-host.tsx +1 -1
- package/src/renderers/opentui/browser-open.ts +88 -0
- package/src/renderers/opentui/host.tsx +5 -14
- package/src/renderers/opentui/image/loader.ts +3 -2
- package/src/renderers/opentui/native-smoke.ts +10 -1
- package/src/renderers/opentui/pane-image/index.ts +2 -1
- package/src/renderers/opentui/render-lib.ts +253 -0
- package/src/renderers/opentui/render-timing-smoke.ts +1 -1
- package/src/renderers/opentui/start.tsx +1 -1
- package/src/renderers/opentui/toast-host.tsx +71 -43
- package/src/renderers/share/layout-view.tsx +2 -2
- package/src/renderers/share/main.tsx +4 -4
- package/src/renderers/share/view.tsx +1 -1
- package/src/series/resolve.ts +22 -6
- package/src/series/standalone.ts +30 -2
- package/src/series/types.ts +8 -1
- package/src/shares/api.ts +4 -1
- package/src/shares/pane.ts +1 -1
- package/src/sources/gloomberb-cloud/fred-series.ts +46 -1
- package/src/sources/gloomberb-cloud/index.ts +32 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +16 -1
- package/src/sources/gloomberb-cloud/perpetuals.ts +49 -1
- package/src/sources/listing-symbols.ts +37 -0
- package/src/sources/provider-errors.ts +16 -2
- package/src/sources/provider-router/batches.ts +10 -2
- package/src/sources/provider-router/financial-routes.ts +21 -3
- package/src/sources/provider-router/financials.ts +15 -2
- package/src/sources/provider-router/history.ts +58 -15
- package/src/sources/provider-router/index.ts +146 -10
- package/src/sources/provider-router/primary.ts +1 -1
- package/src/sources/provider-router/search.ts +13 -2
- package/src/state/app/bootstrap.ts +23 -0
- package/src/state/app/context/index.tsx +3 -0
- package/src/state/hooks/inline-tickers.ts +30 -5
- package/src/sync/auth-transition.ts +19 -9
- package/src/sync/baseline.ts +10 -4
- package/src/sync/controller.ts +67 -17
- package/src/sync/core-contributors.ts +46 -14
- package/src/sync/react.ts +4 -1
- package/src/sync/types.ts +3 -0
- package/src/team/collections-sync.ts +2 -1
- package/src/team/collections.ts +178 -17
- package/src/telemetry/crash-reports.ts +17 -4
- package/src/telemetry/usage-counts.ts +0 -18
- package/src/test-support/builtin-panes.ts +1 -1
- package/src/theme/colors.ts +11 -30
- package/src/theme/ui-tokens.ts +37 -1
- package/src/tickers/company-name-listing.ts +210 -33
- package/src/tickers/company-name.ts +59 -0
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- package/src/tickers/listing-venues.ts +23 -0
- package/src/tickers/metadata.ts +10 -0
- package/src/tickers/perpetual-listing.ts +5 -2
- package/src/tickers/search/bare-symbol.ts +36 -0
- package/src/tickers/search/home-listing.ts +75 -0
- package/src/tickers/search/index.ts +111 -33
- package/src/tickers/search/ranking.ts +64 -5
- package/src/tickers/search/types.ts +5 -0
- package/src/tickers/search/upsert.ts +29 -0
- package/src/tickers/terminal-codes.ts +416 -40
- package/src/time-series/bar-aggregation.ts +243 -0
- package/src/time-series/base-series.ts +315 -0
- package/src/time-series/chart-bounds.ts +349 -0
- package/src/time-series/chart-seed.ts +142 -0
- package/src/time-series/daily-valuation.ts +62 -0
- package/src/time-series/economic.ts +5 -0
- package/src/time-series/field-catalog.ts +1 -3
- package/src/time-series/forward-valuation.ts +32 -0
- package/src/time-series/fundamentals.ts +173 -10
- package/src/time-series/history-acquisition.ts +499 -0
- package/src/time-series/hooks.ts +1 -0
- package/src/time-series/leverage.ts +100 -0
- package/src/time-series/market-resolution.ts +4 -2
- package/src/time-series/market.ts +2 -1
- package/src/time-series/price-comparison.ts +175 -30
- package/src/time-series/price-units.ts +72 -2
- package/src/time-series/range.ts +9 -1
- package/src/time-series/resolution.ts +174 -16
- package/src/time-series/resolve-context.ts +161 -0
- package/src/time-series/resolve.ts +185 -1587
- package/src/time-series/series-name.ts +38 -0
- package/src/time-series/series-presentation.ts +242 -0
- package/src/time-series/spec.ts +13 -7
- package/src/time-series/studies.ts +377 -82
- package/src/time-series/tail-reconcile.ts +121 -0
- package/src/time-series/transforms.ts +1 -0
- package/src/time-series/types.ts +34 -2
- package/src/time-series/use-chart-resolution.ts +4 -5
- package/src/time-series/valuation-releases.ts +39 -0
- package/src/types/broker.ts +10 -0
- package/src/types/config.ts +14 -0
- package/src/types/data-provider.ts +23 -1
- package/src/types/desktop-window.ts +2 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +145 -8
- package/src/types/headless.ts +117 -9
- package/src/types/instrument.ts +6 -0
- package/src/types/plugin.ts +66 -9
- package/src/types/price-history.ts +2 -0
- package/src/types/ticker.ts +13 -0
- package/src/types/trading.ts +59 -1
- package/src/ui/ascii-font.ts +13 -1
- package/src/ui/host.tsx +6 -1
- package/src/updater/command-names.ts +180 -0
- package/src/updater/index.ts +10 -5
- package/src/utils/calendar-date.ts +32 -15
- package/src/utils/cash-runway.ts +241 -0
- package/src/utils/central-banks.ts +42 -0
- package/src/utils/cli-output.ts +259 -80
- package/src/utils/contract-month.ts +16 -0
- package/src/utils/crypto-pair.ts +61 -3
- package/src/utils/currency-units.ts +29 -0
- package/src/utils/datetime-format.ts +10 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +39 -6
- package/src/utils/exchange-announcements.ts +71 -0
- package/src/utils/exchange-rate-snapshot.ts +10 -0
- package/src/utils/financial-statements.ts +89 -5
- package/src/utils/format.ts +34 -16
- package/src/utils/fundamentals.ts +150 -34
- package/src/utils/fx-market-hours.ts +10 -1
- package/src/utils/latest-financial-period.ts +8 -0
- package/src/utils/linux-libc.ts +54 -0
- package/src/utils/market-capitalization.ts +111 -15
- package/src/utils/max-drawdown.ts +64 -0
- package/src/utils/network-failure.ts +86 -0
- package/src/utils/option-expiry.ts +186 -7
- package/src/utils/options.ts +10 -0
- package/src/utils/plugin-proxy-hosts.json +1 -0
- package/src/utils/price-earnings.ts +11 -5
- package/src/utils/price-history.ts +23 -8
- package/src/utils/price-window.ts +131 -0
- package/src/utils/release-date.ts +47 -0
- package/src/utils/sec.ts +3 -0
- package/src/utils/throttled-fetch.ts +11 -4
- package/src/utils/trailing-eps.ts +67 -0
- package/src/utils/typed-text.ts +21 -0
- package/src/utils/utc-time.ts +24 -1
- package/src/version.ts +6 -0
- package/src/cli/pane-functions/screenshot.ts +0 -2122
- package/src/renderers/browser/first-screen.ts +0 -193
package/src/team/collections.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { TeamCollection, TeamCollectionItem } from "../api-client";
|
|
2
2
|
import { getManualPortfolioPositionPrefill } from "../portfolio/manual-lots";
|
|
3
3
|
import type { AppConfig } from "../types/config";
|
|
4
|
-
import type { Portfolio, TickerRecord, Watchlist } from "../types/ticker";
|
|
4
|
+
import type { Portfolio, TickerPosition, TickerRecord, Watchlist } from "../types/ticker";
|
|
5
|
+
import { heldCurrencyUnit, normalizeHeldCurrencyCode } from "../utils/currency-units";
|
|
6
|
+
import { debugLog } from "../utils/debug-log";
|
|
5
7
|
|
|
6
8
|
const TEAM_COLLECTION_PREFIX = "team:";
|
|
7
9
|
|
|
@@ -61,12 +63,112 @@ export function reconcileConfigCollections(
|
|
|
61
63
|
return { ...config, watchlists, portfolios };
|
|
62
64
|
}
|
|
63
65
|
|
|
66
|
+
/**
|
|
67
|
+
* What a portfolio item carries of the holding beside its quantity, as sent:
|
|
68
|
+
* its purchase date, and its currency with the rate its cost was bought at
|
|
69
|
+
* (null when it has none), which go together. A field left out is kept as the
|
|
70
|
+
* server has it, so a sync never clears a date or rate it did not know; a null
|
|
71
|
+
* date clears the server's.
|
|
72
|
+
*/
|
|
73
|
+
interface TeamItemTerms {
|
|
74
|
+
dateAcquired?: string | null;
|
|
75
|
+
currency?: string;
|
|
76
|
+
costFxRate?: number | null;
|
|
77
|
+
costFxCurrency?: string | null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface LotTerms {
|
|
81
|
+
dateAcquired?: string;
|
|
82
|
+
/** The holding's currency, the one `costFx` is a rate of. */
|
|
83
|
+
currency?: string;
|
|
84
|
+
/** Null: no rate, the cost converts at today's. Undefined: lots whose rates do not become one. */
|
|
85
|
+
costFx?: { rate: number; currency: string } | null;
|
|
86
|
+
}
|
|
87
|
+
|
|
64
88
|
interface LocalMember {
|
|
65
89
|
ticker: TickerRecord;
|
|
66
90
|
/** The ticker's shares in the collection: its one lot, or the total of several. Null with no position. */
|
|
67
91
|
quantity: number | null;
|
|
68
92
|
/** Several lots that cannot be totalled (mixed currencies, a long and a short lot): there is no quantity to compare or send. */
|
|
69
93
|
lotsNotTotalled?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Several lots whose cost FX rates cannot become one position's: a server
|
|
96
|
+
* count does not collapse them (applyMembership), so their total is not sent
|
|
97
|
+
* over the server's either, only for a ticker the server does not hold yet.
|
|
98
|
+
*/
|
|
99
|
+
lotsKept?: boolean;
|
|
100
|
+
/** The manual lots it holds; only a single one sends its date or rate on its own. */
|
|
101
|
+
lotCount?: number;
|
|
102
|
+
/** The purchase date and rate of the lot, or of several as one position keeps them. */
|
|
103
|
+
terms?: LotTerms;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const ISO_DAY = /^\d{4}-\d{2}-\d{2}$/;
|
|
107
|
+
const CURRENCY_CODE = /^[A-Za-z]{3}$/;
|
|
108
|
+
|
|
109
|
+
/** Two currencies whose amounts are the same unit: a rate of one is a rate of the other (GBp and GBX are both pence). */
|
|
110
|
+
function sameHeldUnit(left: string | undefined, right: string | undefined): boolean {
|
|
111
|
+
if (!left?.trim() || !right?.trim()) return false;
|
|
112
|
+
const a = heldCurrencyUnit(normalizeHeldCurrencyCode(left));
|
|
113
|
+
const b = heldCurrencyUnit(normalizeHeldCurrencyCode(right));
|
|
114
|
+
return a.currency === b.currency && a.divisor === b.divisor;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function positionCostFx(position: Pick<TickerPosition, "costFxRate" | "costFxCurrency">): { rate: number; currency: string } | null {
|
|
118
|
+
const rate = position.costFxRate;
|
|
119
|
+
return typeof rate === "number" && Number.isFinite(rate) && rate > 0 && position.costFxCurrency?.trim()
|
|
120
|
+
? { rate, currency: position.costFxCurrency.trim().toUpperCase() }
|
|
121
|
+
: null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The date, currency and rate a server item holds, each only when it holds a
|
|
126
|
+
* usable one. An item with a currency carries the holding's terms as a
|
|
127
|
+
* teammate's app set them, a missing date or rate included: the first terms
|
|
128
|
+
* an item gets carry the currency (changedTerms). One without (written before
|
|
129
|
+
* terms were synced, or by an older app) carries none, and a lot keeps its own.
|
|
130
|
+
*/
|
|
131
|
+
function itemTerms(item: TeamCollectionItem): LotTerms {
|
|
132
|
+
const currency = typeof item.currency === "string" && CURRENCY_CODE.test(item.currency.trim()) ? normalizeHeldCurrencyCode(item.currency) : undefined;
|
|
133
|
+
return {
|
|
134
|
+
...(typeof item.dateAcquired === "string" && ISO_DAY.test(item.dateAcquired) ? { dateAcquired: item.dateAcquired } : {}),
|
|
135
|
+
...(currency ? { currency, costFx: positionCostFx({ costFxRate: item.costFxRate ?? undefined, costFxCurrency: item.costFxCurrency ?? undefined }) } : {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** A lot's purchase date as the server stores it, null with none; undefined for one it cannot store, which is never sent. */
|
|
140
|
+
function lotDate(terms: LotTerms | undefined): string | null | undefined {
|
|
141
|
+
if (!terms?.dateAcquired) return null;
|
|
142
|
+
return ISO_DAY.test(terms.dateAcquired) ? terms.dateAcquired : undefined;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* What a push sends of a lot's terms over the server's item (none for a
|
|
147
|
+
* ticker it does not hold yet), of the parts asked. A date or rate goes as it
|
|
148
|
+
* is. A missing one goes as null only where this client knows the holding has
|
|
149
|
+
* none: from a single lot, which takes the item's date and its rate in the
|
|
150
|
+
* lot's unit whenever they arrive (applyMembership), so one the item holds and
|
|
151
|
+
* the lot lacks was cleared here; and a rate where the item holds none either.
|
|
152
|
+
* Otherwise the server keeps its own: several lots never take the item's, so
|
|
153
|
+
* theirs lacking one says nothing about the holding.
|
|
154
|
+
*/
|
|
155
|
+
function sentTerms(
|
|
156
|
+
terms: LotTerms | undefined,
|
|
157
|
+
item: TeamCollectionItem | undefined,
|
|
158
|
+
parts: { date: boolean; rate: boolean },
|
|
159
|
+
single: boolean,
|
|
160
|
+
): TeamItemTerms | null {
|
|
161
|
+
const sent: TeamItemTerms = {};
|
|
162
|
+
const held = item ? itemTerms(item) : {};
|
|
163
|
+
const date = lotDate(terms);
|
|
164
|
+
if (parts.date && (date || (date === null && single && held.dateAcquired))) sent.dateAcquired = date ?? null;
|
|
165
|
+
if (parts.rate && terms?.currency && CURRENCY_CODE.test(terms.currency) && terms.costFx !== undefined
|
|
166
|
+
&& (terms.costFx || !held.costFx || (single && sameHeldUnit(held.currency, terms.currency)))) {
|
|
167
|
+
sent.currency = terms.currency;
|
|
168
|
+
sent.costFxRate = terms.costFx?.rate ?? null;
|
|
169
|
+
sent.costFxCurrency = terms.costFx?.currency ?? null;
|
|
170
|
+
}
|
|
171
|
+
return Object.keys(sent).length > 0 ? sent : null;
|
|
70
172
|
}
|
|
71
173
|
|
|
72
174
|
/** Which tickers a team collection holds locally, keyed by symbol. */
|
|
@@ -84,35 +186,76 @@ export function localMembership(
|
|
|
84
186
|
continue;
|
|
85
187
|
}
|
|
86
188
|
if (!ticker.metadata.portfolios.includes(localCollectionId)) continue;
|
|
87
|
-
const { position, lotCount } = getManualPortfolioPositionPrefill(ticker, localCollectionId);
|
|
189
|
+
const { position, lotCount, costFxConflict } = getManualPortfolioPositionPrefill(ticker, localCollectionId);
|
|
190
|
+
const currency = position?.currency?.trim() ? normalizeHeldCurrencyCode(position.currency) : undefined;
|
|
88
191
|
members.set(ticker.metadata.ticker, {
|
|
89
192
|
ticker,
|
|
90
193
|
quantity: position ? position.shares : null,
|
|
194
|
+
lotCount,
|
|
91
195
|
...(lotCount > 1 && !position ? { lotsNotTotalled: true } : {}),
|
|
196
|
+
...(lotCount > 1 && position && costFxConflict ? { lotsKept: true } : {}),
|
|
197
|
+
...(position ? {
|
|
198
|
+
terms: {
|
|
199
|
+
...(position.dateAcquired ? { dateAcquired: position.dateAcquired } : {}),
|
|
200
|
+
...(currency ? { currency } : {}),
|
|
201
|
+
...(costFxConflict ? {} : { costFx: positionCostFx(position) }),
|
|
202
|
+
},
|
|
203
|
+
} : {}),
|
|
92
204
|
});
|
|
93
205
|
}
|
|
94
206
|
return members;
|
|
95
207
|
}
|
|
96
208
|
|
|
97
209
|
export interface MembershipDiff {
|
|
98
|
-
add: Array<{ symbol: string; quantity: number | null }>;
|
|
210
|
+
add: Array<{ symbol: string; quantity: number | null; terms?: TeamItemTerms }>;
|
|
99
211
|
remove: string[];
|
|
100
212
|
}
|
|
101
213
|
|
|
214
|
+
/**
|
|
215
|
+
* The date and rate a single lot sends on their own, its count unchanged:
|
|
216
|
+
* those the server lacks, holds otherwise, or holds where the lot was cleared.
|
|
217
|
+
* A rate goes only over the server's in the same unit, or none, so two
|
|
218
|
+
* teammates holding it in different currencies never overwrite each other
|
|
219
|
+
* back and forth, nor do pence written GBp and GBX; only a server that keeps
|
|
220
|
+
* terms (one that answers with them) is sent any. The first terms an item
|
|
221
|
+
* gets carry the currency, so it is read as carrying them (itemTerms).
|
|
222
|
+
*/
|
|
223
|
+
function changedTerms(terms: LotTerms | undefined, item: TeamCollectionItem): TeamItemTerms | null {
|
|
224
|
+
if (!terms || item.dateAcquired === undefined) return null;
|
|
225
|
+
const held = itemTerms(item);
|
|
226
|
+
const local = lotDate(terms);
|
|
227
|
+
const date = local !== undefined && local !== (held.dateAcquired ?? null);
|
|
228
|
+
const ownsRate = !held.currency || sameHeldUnit(held.currency, terms.currency);
|
|
229
|
+
const rate = ownsRate && terms.costFx !== undefined
|
|
230
|
+
&& ((held.costFx?.rate ?? null) !== (terms.costFx?.rate ?? null)
|
|
231
|
+
|| (held.costFx?.currency ?? null) !== (terms.costFx?.currency ?? null)
|
|
232
|
+
|| (date && !held.currency));
|
|
233
|
+
return date || rate ? sentTerms(terms, item, { date, rate }, true) : null;
|
|
234
|
+
}
|
|
235
|
+
|
|
102
236
|
/**
|
|
103
237
|
* What changed locally since the last known server set, to push upstream.
|
|
104
238
|
* Lots that cannot be totalled have no quantity to push: a ticker the server
|
|
105
|
-
* already holds is left as the server has it, and a new one goes up without
|
|
239
|
+
* already holds is left as the server has it, and a new one goes up without
|
|
240
|
+
* one; nor do lots whose rates cannot be merged push theirs over the server's.
|
|
241
|
+
* A count goes up with the purchase date and rate the position keeps, and a
|
|
242
|
+
* single lot's date or rate on its own when only that changed.
|
|
106
243
|
*/
|
|
107
244
|
export function diffMembership(
|
|
108
|
-
local: ReadonlyMap<string, Pick<LocalMember, "quantity" | "lotsNotTotalled">>,
|
|
245
|
+
local: ReadonlyMap<string, Pick<LocalMember, "quantity" | "lotsNotTotalled" | "lotsKept" | "lotCount" | "terms">>,
|
|
109
246
|
known: ReadonlyMap<string, TeamCollectionItem>,
|
|
110
247
|
): MembershipDiff {
|
|
111
248
|
const add: MembershipDiff["add"] = [];
|
|
112
249
|
const remove: string[] = [];
|
|
113
250
|
for (const [symbol, entry] of local) {
|
|
114
251
|
const item = known.get(symbol);
|
|
115
|
-
if (!item || (!entry.lotsNotTotalled && (item.quantity ?? null) !== entry.quantity))
|
|
252
|
+
if (!item || (!entry.lotsNotTotalled && !entry.lotsKept && (item.quantity ?? null) !== entry.quantity)) {
|
|
253
|
+
const terms = sentTerms(entry.terms, item, { date: true, rate: true }, entry.lotCount === 1);
|
|
254
|
+
add.push({ symbol, quantity: entry.quantity, ...(terms ? { terms } : {}) });
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const terms = entry.lotCount === 1 ? changedTerms(entry.terms, item) : null;
|
|
258
|
+
if (terms) add.push({ symbol, quantity: entry.quantity, terms });
|
|
116
259
|
}
|
|
117
260
|
for (const symbol of known.keys()) {
|
|
118
261
|
if (!local.has(symbol)) remove.push(symbol);
|
|
@@ -120,6 +263,8 @@ export function diffMembership(
|
|
|
120
263
|
return { add, remove };
|
|
121
264
|
}
|
|
122
265
|
|
|
266
|
+
const teamsLog = debugLog.createLogger("teams");
|
|
267
|
+
|
|
123
268
|
/** Applies server items to a ticker's metadata for one collection. */
|
|
124
269
|
export function applyMembership(
|
|
125
270
|
ticker: TickerRecord,
|
|
@@ -142,7 +287,7 @@ export function applyMembership(
|
|
|
142
287
|
}
|
|
143
288
|
const has = metadata.portfolios.includes(localCollectionId);
|
|
144
289
|
// The lot itself, or the total of several lots (null when those cannot be totalled).
|
|
145
|
-
const { position, lotCount } = getManualPortfolioPositionPrefill(ticker, localCollectionId);
|
|
290
|
+
const { position, lotCount, costFxConflict } = getManualPortfolioPositionPrefill(ticker, localCollectionId);
|
|
146
291
|
const quantity = item?.quantity ?? null;
|
|
147
292
|
if (!item) {
|
|
148
293
|
if (!has && lotCount === 0) return null;
|
|
@@ -155,30 +300,46 @@ export function applyMembership(
|
|
|
155
300
|
},
|
|
156
301
|
};
|
|
157
302
|
}
|
|
303
|
+
const withMembership = () => (has ? null : { ...ticker, metadata: { ...metadata, portfolios: [...metadata.portfolios, localCollectionId] } });
|
|
158
304
|
// Several lots are collapsed into one only when the server's quantity differs
|
|
159
305
|
// from their total, and never when they cannot be totalled: no lot is dropped
|
|
160
306
|
// for a number that was not compared with all of them.
|
|
161
|
-
if (lotCount > 1 && (!position || position.shares === quantity))
|
|
162
|
-
return has ? null : { ...ticker, metadata: { ...metadata, portfolios: [...metadata.portfolios, localCollectionId] } };
|
|
163
|
-
}
|
|
164
|
-
if (has && (position?.shares ?? null) === quantity) return null;
|
|
307
|
+
if (lotCount > 1 && (!position || position.shares === quantity)) return withMembership();
|
|
165
308
|
const positions = metadata.positions.filter((entry) => entry.portfolio !== localCollectionId);
|
|
166
|
-
if (quantity
|
|
309
|
+
if (quantity === null) {
|
|
310
|
+
if (has && !position) return null;
|
|
311
|
+
} else {
|
|
167
312
|
// A count that turns a long into a short, or back, is a new position: the old one's cost and date
|
|
168
313
|
// were for what was closed, so the lot keeps neither and its cost is unknown until it is entered.
|
|
169
314
|
const flipped = !!position && quantity !== 0 && position.shares !== 0 && Math.sign(quantity) !== Math.sign(position.shares);
|
|
170
|
-
|
|
315
|
+
// The team's purchase date and rate, as the teammate who set the holding sent them, a cleared one
|
|
316
|
+
// included; the rate only for a lot in the currency it is a rate of. An item that carries no terms
|
|
317
|
+
// leaves the lot its own, several lots theirs merged.
|
|
318
|
+
const shared = itemTerms(item);
|
|
319
|
+
const lotCurrency = position?.currency ?? shared.currency ?? currency;
|
|
320
|
+
const sharedRate = shared.currency && sameHeldUnit(shared.currency, lotCurrency) ? { costFx: shared.costFx ?? null } : null;
|
|
321
|
+
if (lotCount > 1 && costFxConflict && !sharedRate && !flipped) {
|
|
322
|
+
teamsLog.warn("Kept several lots of a team portfolio holding whose cost FX rates cannot become one position", { symbol: metadata.ticker });
|
|
323
|
+
return withMembership();
|
|
324
|
+
}
|
|
325
|
+
const dateAcquired = shared.currency ? shared.dateAcquired : shared.dateAcquired ?? (flipped ? undefined : position?.dateAcquired);
|
|
326
|
+
const costFx = sharedRate ? sharedRate.costFx : flipped || !position ? null : positionCostFx(position);
|
|
327
|
+
const lot: TickerPosition = {
|
|
171
328
|
portfolio: localCollectionId,
|
|
172
329
|
shares: quantity,
|
|
173
330
|
...(flipped ? {} : { avgCost: position?.avgCost ?? 0 }),
|
|
174
|
-
currency:
|
|
331
|
+
currency: lotCurrency,
|
|
175
332
|
broker: "manual",
|
|
176
|
-
...(
|
|
333
|
+
...(dateAcquired ? { dateAcquired } : {}),
|
|
177
334
|
// So does the rate its cost was bought at, with its cost.
|
|
178
|
-
...(
|
|
335
|
+
...(costFx ? { costFxRate: costFx.rate, costFxCurrency: costFx.currency } : {}),
|
|
179
336
|
// A future's contract size stays with the holding when the team changes its count.
|
|
180
337
|
...(position?.multiplier ? { multiplier: position.multiplier } : {}),
|
|
181
|
-
}
|
|
338
|
+
};
|
|
339
|
+
// A single lot already as the server has it is left as it is.
|
|
340
|
+
if (has && lotCount === 1 && position && position.shares === quantity && position.dateAcquired === lot.dateAcquired
|
|
341
|
+
&& position.costFxRate === lot.costFxRate && position.costFxCurrency === lot.costFxCurrency) return null;
|
|
342
|
+
positions.push(lot);
|
|
182
343
|
}
|
|
183
344
|
return {
|
|
184
345
|
...ticker,
|
|
@@ -18,7 +18,9 @@ import { VERSION } from "../version";
|
|
|
18
18
|
* failures are posted to Gloom's API, which forwards them to error tracking;
|
|
19
19
|
* the app never talks to an analytics service itself. What leaves the
|
|
20
20
|
* machine is the error (type, message, stack), the surface, the app version
|
|
21
|
-
* and the OS.
|
|
21
|
+
* and the OS. A plugin load failure can add a line of state about the
|
|
22
|
+
* plugin's files to the message (see `CrashReportContext.detail`). Nothing
|
|
23
|
+
* from the workspace goes along: no portfolio, config,
|
|
22
24
|
* query, ticker list or layout. The user's home directory is replaced by `~`
|
|
23
25
|
* before sending.
|
|
24
26
|
*
|
|
@@ -71,6 +73,12 @@ export interface CrashReportContext {
|
|
|
71
73
|
componentStack?: string | null;
|
|
72
74
|
/** A failed update step (update-failures.ts), sent as it is: it holds no free text. */
|
|
73
75
|
update?: UpdateFailureReport;
|
|
76
|
+
/**
|
|
77
|
+
* State that explains the failure, appended to the message in brackets.
|
|
78
|
+
* The message, not the stack: error tracking keeps only frames from the
|
|
79
|
+
* stack, and an import error has none.
|
|
80
|
+
*/
|
|
81
|
+
detail?: string;
|
|
74
82
|
}
|
|
75
83
|
|
|
76
84
|
interface PendingError {
|
|
@@ -105,11 +113,14 @@ function isOptOut(value: string | undefined): boolean {
|
|
|
105
113
|
return normalized === "1" || normalized === "true" || normalized === "yes";
|
|
106
114
|
}
|
|
107
115
|
|
|
108
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* Replaces the home directory, in native, forward-slash, URL-encoded and
|
|
118
|
+
* escaped (a Windows path in JSON or a string literal) forms, with `~`.
|
|
119
|
+
*/
|
|
109
120
|
export function stripHomeDir(text: string, homeDir: string | null | undefined): string {
|
|
110
121
|
const home = homeDir?.trim().replace(/[\\/]+$/, "");
|
|
111
122
|
if (!home || home.length < 3) return text;
|
|
112
|
-
const forms = new Set([home, home.replaceAll("\\", "/")]);
|
|
123
|
+
const forms = new Set([home, home.replaceAll("\\", "/"), home.replaceAll("\\", "\\\\")]);
|
|
113
124
|
for (const form of [...forms]) forms.add(encodeURI(form));
|
|
114
125
|
let result = text;
|
|
115
126
|
for (const form of forms) {
|
|
@@ -155,7 +166,9 @@ function topFrame(stack: string | undefined, type: string): string {
|
|
|
155
166
|
}
|
|
156
167
|
|
|
157
168
|
function toReportError(error: unknown, context: CrashReportContext): PendingError {
|
|
158
|
-
const
|
|
169
|
+
const thrown = describeError(error);
|
|
170
|
+
const detail = readString(context.detail?.trim());
|
|
171
|
+
const described = detail ? { ...thrown, message: `${thrown.message} [${detail}]` } : thrown;
|
|
159
172
|
const componentStack = readString(context.componentStack?.trim());
|
|
160
173
|
const stack = [
|
|
161
174
|
described.stack ? clip(described.stack, MAX_STACK_LENGTH) : null,
|
|
@@ -97,7 +97,6 @@ let officialIds: ReadonlySet<string> | null = null;
|
|
|
97
97
|
let officialLookup: Promise<void> | null = null;
|
|
98
98
|
let automationDepth = 0;
|
|
99
99
|
const builtinPlugins = new WeakSet<object>();
|
|
100
|
-
const openListeners = new Set<() => void>();
|
|
101
100
|
|
|
102
101
|
/** Reads the config switch and the environment. Absent means on. */
|
|
103
102
|
export function usageCountsEnabled(
|
|
@@ -197,27 +196,10 @@ export function automationActive(): boolean {
|
|
|
197
196
|
return automationDepth > 0;
|
|
198
197
|
}
|
|
199
198
|
|
|
200
|
-
/**
|
|
201
|
-
* Calls `listener` each time the user opens a function, with nothing about
|
|
202
|
-
* which one. The web terminal's first-screen measure uses it; automation never
|
|
203
|
-
* reaches it.
|
|
204
|
-
*/
|
|
205
|
-
export function subscribeFunctionOpens(listener: () => void): () => void {
|
|
206
|
-
openListeners.add(listener);
|
|
207
|
-
return () => {
|
|
208
|
-
openListeners.delete(listener);
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
|
|
212
199
|
/** Counts one open of a function by the user. Never throws. */
|
|
213
200
|
export function recordFunctionOpen(fn: UsageFunction): void {
|
|
214
201
|
try {
|
|
215
202
|
if (automationDepth > 0) return;
|
|
216
|
-
for (const listener of openListeners) {
|
|
217
|
-
try { listener(); } catch (error) {
|
|
218
|
-
logFailure("telemetry-usage-counts", "Could not notify function-open listener")(error);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
203
|
if (host && !host.isEnabled()) return;
|
|
222
204
|
count(fn, "opened");
|
|
223
205
|
scheduleFlush();
|
|
@@ -5,7 +5,7 @@ import type { GloomPlugin, PaneDef } from "../types/plugin";
|
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Every built-in pane definition, the panes a plugin registers in `setup()`
|
|
8
|
-
* included, as `
|
|
8
|
+
* included, as `gloom catalog` finds them. `dispose` stops the plugins
|
|
9
9
|
* that were set up.
|
|
10
10
|
*/
|
|
11
11
|
export async function loadBuiltinPanes(): Promise<{ panes: Map<string, PaneDef>; dispose: () => void }> {
|
package/src/theme/colors.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { blendForContrast, blendForContrastOnSurfaces, blendHex, higherContrast } from "./color-utils";
|
|
2
2
|
import { getTheme, DEFAULT_THEME, type Theme } from "./themes";
|
|
3
|
-
import {
|
|
3
|
+
import { hoverColour, themeCssVariables } from "./ui-tokens";
|
|
4
4
|
|
|
5
5
|
export type ThemeColors = Readonly<Omit<Theme, "name" | "description">>;
|
|
6
6
|
|
|
@@ -24,34 +24,11 @@ export const colors = new Proxy({ ...currentColors } as ThemeColors, {
|
|
|
24
24
|
}),
|
|
25
25
|
}) as ThemeColors;
|
|
26
26
|
|
|
27
|
-
type ColorKey = keyof typeof colors;
|
|
28
|
-
|
|
29
27
|
let currentThemeId = DEFAULT_THEME;
|
|
30
28
|
let transientPreviewThemeId: string | null = null;
|
|
31
29
|
let cssThemeId: string | null = null;
|
|
32
30
|
let cssThemeDocument: unknown = null;
|
|
33
31
|
|
|
34
|
-
const THEME_CSS_VARIABLES: Array<[ColorKey, string]> = [
|
|
35
|
-
["bg", "--gloom-bg"],
|
|
36
|
-
["panel", "--gloom-panel"],
|
|
37
|
-
["border", "--gloom-border"],
|
|
38
|
-
["borderFocused", "--gloom-border-focused"],
|
|
39
|
-
["text", "--gloom-text"],
|
|
40
|
-
["textDim", "--gloom-text-dim"],
|
|
41
|
-
["textBright", "--gloom-text-bright"],
|
|
42
|
-
["textMuted", "--gloom-text-muted"],
|
|
43
|
-
["positive", "--gloom-positive"],
|
|
44
|
-
["negative", "--gloom-negative"],
|
|
45
|
-
["neutral", "--gloom-neutral"],
|
|
46
|
-
["warning", "--gloom-warning"],
|
|
47
|
-
["header", "--gloom-header"],
|
|
48
|
-
["headerText", "--gloom-header-text"],
|
|
49
|
-
["selected", "--gloom-selected"],
|
|
50
|
-
["selectedText", "--gloom-selected-text"],
|
|
51
|
-
["commandBg", "--gloom-command-bg"],
|
|
52
|
-
["commandBorder", "--gloom-command-border"],
|
|
53
|
-
];
|
|
54
|
-
|
|
55
32
|
export function getCurrentThemeId(): string {
|
|
56
33
|
return currentThemeId;
|
|
57
34
|
}
|
|
@@ -114,7 +91,7 @@ export function getChartIndicatorColor(index: number): string {
|
|
|
114
91
|
|
|
115
92
|
/** Returns a hover background color derived from bg and selected */
|
|
116
93
|
export function hoverBg(palette: ThemeColors = colors): string {
|
|
117
|
-
return
|
|
94
|
+
return hoverColour(palette);
|
|
118
95
|
}
|
|
119
96
|
|
|
120
97
|
/** Body-text contrast, which text on a hovered control keeps whatever the surface. */
|
|
@@ -145,11 +122,7 @@ function syncThemeCssVariables(): void {
|
|
|
145
122
|
if (cssThemeId === currentThemeId && cssThemeDocument === documentLike) return;
|
|
146
123
|
cssThemeId = currentThemeId;
|
|
147
124
|
cssThemeDocument = documentLike;
|
|
148
|
-
for (const [
|
|
149
|
-
style.setProperty(name, currentColors[key]);
|
|
150
|
-
}
|
|
151
|
-
style.setProperty("--gloom-hover-bg", hoverBg());
|
|
152
|
-
for (const [name, value] of roleColours(currentColors)) style.setProperty(name, value);
|
|
125
|
+
for (const [name, value] of themeCssVariables(currentColors)) style.setProperty(name, value);
|
|
153
126
|
}
|
|
154
127
|
|
|
155
128
|
export function commandBarBg(palette: ThemeColors = colors): string {
|
|
@@ -318,6 +291,14 @@ export function priceColor(value: number, palette: ThemeColors = colors): string
|
|
|
318
291
|
return palette.neutral;
|
|
319
292
|
}
|
|
320
293
|
|
|
294
|
+
/**
|
|
295
|
+
* `priceColor` for a figure as it is printed, to `digits` decimals: a move that
|
|
296
|
+
* rounds to zero (0.00%, never -0.00%) is neutral, not red or green.
|
|
297
|
+
*/
|
|
298
|
+
export function shownPriceColor(value: number, digits: number, palette: ThemeColors = colors): string {
|
|
299
|
+
return priceColor(Number(value.toFixed(digits)), palette);
|
|
300
|
+
}
|
|
301
|
+
|
|
321
302
|
const TONE_TINT = 0.18;
|
|
322
303
|
|
|
323
304
|
/**
|
package/src/theme/ui-tokens.ts
CHANGED
|
@@ -53,11 +53,16 @@ function surfaceSunkenColour(palette: Palette): string {
|
|
|
53
53
|
return palette.bg;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/** A row or control under the pointer: halfway from the background to the selection. */
|
|
57
|
+
export function hoverColour(palette: Palette): string {
|
|
58
|
+
return blendHex(palette.bg, palette.selected, 0.5);
|
|
59
|
+
}
|
|
60
|
+
|
|
56
61
|
/**
|
|
57
62
|
* The colour roles the palette names indirectly, as `--gloom-*` variables:
|
|
58
63
|
* styles.css and inline styles read these, never a blend of their own.
|
|
59
64
|
*/
|
|
60
|
-
|
|
65
|
+
function roleColours(palette: Palette): Array<[string, string]> {
|
|
61
66
|
return [
|
|
62
67
|
["--gloom-surface-raised", surfaceRaisedColour(palette)],
|
|
63
68
|
["--gloom-surface-sunken", surfaceSunkenColour(palette)],
|
|
@@ -69,3 +74,34 @@ export function roleColours(palette: Palette): Array<[string, string]> {
|
|
|
69
74
|
["--gloom-locked", palette.textDim],
|
|
70
75
|
];
|
|
71
76
|
}
|
|
77
|
+
|
|
78
|
+
/** The palette entries styles.css reads as they are. */
|
|
79
|
+
const PALETTE_VARIABLES: Array<[keyof Palette, string]> = [
|
|
80
|
+
["bg", "--gloom-bg"],
|
|
81
|
+
["panel", "--gloom-panel"],
|
|
82
|
+
["border", "--gloom-border"],
|
|
83
|
+
["borderFocused", "--gloom-border-focused"],
|
|
84
|
+
["text", "--gloom-text"],
|
|
85
|
+
["textDim", "--gloom-text-dim"],
|
|
86
|
+
["textBright", "--gloom-text-bright"],
|
|
87
|
+
["textMuted", "--gloom-text-muted"],
|
|
88
|
+
["positive", "--gloom-positive"],
|
|
89
|
+
["negative", "--gloom-negative"],
|
|
90
|
+
["neutral", "--gloom-neutral"],
|
|
91
|
+
["warning", "--gloom-warning"],
|
|
92
|
+
["header", "--gloom-header"],
|
|
93
|
+
["headerText", "--gloom-header-text"],
|
|
94
|
+
["selected", "--gloom-selected"],
|
|
95
|
+
["selectedText", "--gloom-selected-text"],
|
|
96
|
+
["commandBg", "--gloom-command-bg"],
|
|
97
|
+
["commandBorder", "--gloom-command-border"],
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
/** Every custom property a theme sets on the document root, which the desktop and web stylesheet draws with. */
|
|
101
|
+
export function themeCssVariables(palette: Palette): Array<[string, string]> {
|
|
102
|
+
return [
|
|
103
|
+
...PALETTE_VARIABLES.map(([key, name]): [string, string] => [name, palette[key]]),
|
|
104
|
+
["--gloom-hover-bg", hoverColour(palette)],
|
|
105
|
+
...roleColours(palette),
|
|
106
|
+
];
|
|
107
|
+
}
|