gloomberb 0.16.1 → 0.16.3
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 +2 -1
- package/package.json +2 -1
- package/src/api-client/beneficial-owners.ts +92 -0
- package/src/api-client/data.ts +26 -8
- package/src/api-client/errors.ts +12 -0
- package/src/api-client/geo.ts +363 -0
- package/src/api-client/index.ts +2 -0
- package/src/api-client/market-discovery.ts +10 -0
- package/src/api-client/paths.ts +30 -1
- package/src/api-client/perps.ts +37 -0
- package/src/api-client/request.ts +5 -2
- package/src/api-client/types.ts +2 -0
- package/src/brokers/account-cache.ts +69 -0
- package/src/cli/command-options.ts +74 -0
- package/src/cli/commands/command-utils.ts +37 -0
- package/src/cli/commands/crypto-hints.ts +75 -0
- package/src/cli/commands/market.ts +560 -136
- package/src/cli/commands/overview.ts +136 -48
- package/src/cli/commands/ticker.ts +220 -67
- package/src/cli/desktop-pane-shot.ts +37 -4
- package/src/cli/freshness.ts +61 -0
- package/src/cli/help.ts +27 -6
- package/src/cli/helpers.ts +4 -8
- package/src/cli/history-rows.ts +187 -15
- package/src/cli/index.ts +23 -8
- package/src/cli/listing-arg.ts +321 -0
- package/src/cli/options.ts +5 -1
- package/src/cli/pane-functions/access-gate.ts +42 -0
- package/src/cli/pane-functions/capabilities.ts +5 -0
- package/src/cli/pane-functions/catalog.ts +28 -1
- package/src/cli/pane-functions/data.ts +3 -1
- package/src/cli/pane-functions/dom.ts +87 -16
- package/src/cli/pane-functions/freshness.ts +400 -0
- package/src/cli/pane-functions/function-help.ts +31 -22
- package/src/cli/pane-functions/headless.ts +201 -41
- package/src/cli/pane-functions/index.ts +24 -6
- package/src/cli/pane-functions/options.ts +3 -0
- package/src/cli/pane-functions/report.ts +12 -1
- package/src/cli/pane-functions/resolver.ts +63 -9
- package/src/cli/pane-functions/screenshot-evidence.ts +2 -0
- package/src/cli/pane-functions/screenshot.ts +11 -3
- package/src/cli/registry.ts +6 -3
- package/src/cli/report-tables.ts +460 -0
- package/src/cli/result.ts +53 -29
- package/src/cli/ticker-resolution.ts +7 -5
- package/src/components/chart/composite/composite-chart.tsx +88 -2536
- package/src/components/chart/composite/drawing-store.ts +59 -0
- package/src/components/chart/composite/legend.tsx +319 -0
- package/src/components/chart/composite/panel-bitmap.ts +139 -0
- package/src/components/chart/composite/panel-gestures.ts +59 -0
- package/src/components/chart/composite/panel-labels.ts +107 -0
- package/src/components/chart/composite/panel-surface.tsx +876 -0
- package/src/components/chart/composite/tool-catalog.ts +98 -0
- package/src/components/chart/composite/toolbar.tsx +186 -0
- package/src/components/chart/composite/tools.ts +8 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +703 -0
- package/src/components/chart/composite/use-composite-viewport.ts +143 -0
- package/src/components/command-bar/list/model.ts +5 -0
- package/src/components/command-bar/list/view.tsx +16 -3
- package/src/components/command-bar/pane-templates/workflow.ts +1 -0
- package/src/components/command-bar/routes/ticker-search/actions.ts +5 -0
- package/src/components/command-bar/workflow/ops.ts +1 -1
- package/src/components/command-bar/workflow/tickers.ts +6 -0
- package/src/components/data-table/export.ts +6 -51
- package/src/components/data-table/view.tsx +32 -11
- package/src/components/feedback-dialog.tsx +2 -1
- package/src/components/form-modal/field-row.tsx +2 -2
- package/src/components/layout/detached-pane-shell.tsx +6 -3
- package/src/components/layout/pane/content.tsx +23 -10
- package/src/components/layout/pane/error-boundary.tsx +103 -0
- package/src/components/layout/pane/footer/registration.tsx +68 -23
- package/src/components/layout/pane/header.tsx +11 -11
- 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 +12 -7
- package/src/components/layout/shell/drag/live.ts +122 -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 +37 -51
- package/src/components/layout/shell/menu.ts +2 -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 +419 -168
- package/src/components/layout/shell/terminal-pointer-runtime.ts +18 -18
- package/src/components/layout/shell/window-mode/overlays.tsx +12 -4
- package/src/components/metric-treemap/heat-surface.tsx +43 -16
- package/src/components/metric-treemap/heat-tiles.ts +18 -0
- package/src/components/metric-treemap/layout.ts +2 -0
- package/src/components/onboarding/onboarding-keyboard.ts +311 -0
- package/src/components/onboarding/onboarding-wizard.tsx +101 -788
- package/src/components/onboarding/use-onboarding-broker-form.ts +263 -0
- package/src/components/onboarding/use-onboarding-progress.ts +298 -0
- package/src/components/onboarding/use-onboarding-upgrade.ts +83 -0
- package/src/components/ticker/list-table-view.tsx +13 -1
- package/src/components/ui/fields.tsx +8 -0
- package/src/components/ui/range-track.tsx +10 -3
- package/src/components/ui/status.tsx +8 -2
- package/src/components/ui/tabs.tsx +7 -4
- package/src/components/ui/text-prompt-dialog.tsx +4 -2
- package/src/data/config/store/normalize.ts +17 -1
- 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 +19 -1
- package/src/i18n/ja.ts +19 -1
- package/src/i18n/ko.ts +19 -1
- package/src/i18n/zh-cn.ts +19 -1
- package/src/i18n/zh-tw.ts +19 -1
- package/src/market-data/coordinator/chart.ts +1 -1
- package/src/market-data/coordinator/quotes.ts +23 -4
- package/src/market-data/fx-closes.ts +72 -0
- package/src/market-data/market/freshness.ts +123 -6
- package/src/market-data/market/session-close-note.ts +57 -0
- package/src/market-data/market/status.ts +151 -0
- package/src/market-data/published-apac-sessions.ts +66 -0
- package/src/market-data/quotes/contributions.ts +2 -0
- package/src/market-data/quotes/freshness.ts +5 -0
- package/src/market-data/quotes/resolution.ts +2 -0
- package/src/market-data/quotes/screener-live-quotes.ts +49 -4
- package/src/plugins/builtin/account-management/pane.tsx +4 -0
- package/src/plugins/builtin/alerts/cli.ts +10 -5
- package/src/plugins/builtin/alerts/index.tsx +1 -0
- package/src/plugins/builtin/analytics/metrics.ts +8 -3
- package/src/plugins/builtin/analytics/pane-model.ts +10 -6
- package/src/plugins/builtin/analytics/risk-client.ts +191 -66
- package/src/plugins/builtin/analytics/risk-fx.ts +102 -0
- package/src/plugins/builtin/analytics/risk-headless.ts +19 -13
- package/src/plugins/builtin/analytics/risk-model.ts +45 -17
- package/src/plugins/builtin/analytics/risk-pane.tsx +1 -0
- package/src/plugins/builtin/analytics/risk-test-data.ts +25 -1
- package/src/plugins/builtin/attention/headless.ts +6 -4
- package/src/plugins/builtin/attention/index.tsx +1 -1
- package/src/plugins/builtin/attention/pane.tsx +2 -2
- package/src/plugins/builtin/awards/headless.ts +1 -0
- package/src/plugins/builtin/awards/pane.tsx +1 -1
- package/src/plugins/builtin/backtest/headless.ts +1 -0
- package/src/plugins/builtin/bond-calculator/headless.ts +1 -0
- package/src/plugins/builtin/buildout/index.tsx +1 -0
- package/src/plugins/builtin/catalysts/detail.tsx +1 -1
- package/src/plugins/builtin/catalysts/headless.ts +3 -1
- package/src/plugins/builtin/cds/headless.ts +2 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +1 -0
- package/src/plugins/builtin/chart-composer/headless.ts +38 -3
- package/src/plugins/builtin/chart-composer/index.tsx +3 -1
- package/src/plugins/builtin/chart-composer/series-expression.ts +18 -2
- package/src/plugins/builtin/chat/channels.ts +19 -3
- package/src/plugins/builtin/chat/content/composer-runtime.ts +28 -13
- package/src/plugins/builtin/chat/content/footer.tsx +15 -6
- package/src/plugins/builtin/chat/content/index.tsx +120 -21
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +261 -113
- package/src/plugins/builtin/chat/content/transcript.tsx +20 -2
- package/src/plugins/builtin/chat/direct-messages.ts +200 -0
- package/src/plugins/builtin/chat/index.tsx +1 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +3 -0
- package/src/plugins/builtin/chat/message/header.tsx +16 -6
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +72 -32
- package/src/plugins/builtin/chat/message/profile-popover.tsx +96 -12
- package/src/plugins/builtin/chat/message/terminal.tsx +3 -0
- package/src/plugins/builtin/chat/message/types.ts +14 -2
- package/src/plugins/builtin/chat/profile-popover.ts +18 -13
- package/src/plugins/builtin/clinical-trials/index.tsx +1 -0
- package/src/plugins/builtin/cloud/askg/executor.ts +2 -1
- package/src/plugins/builtin/cloud/plugin.tsx +1 -0
- package/src/plugins/builtin/cloud/team/module.tsx +1 -0
- package/src/plugins/builtin/cloud/thesis/module.tsx +1 -0
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/comment-letters/index.tsx +1 -0
- package/src/plugins/builtin/company-attention/headless.ts +5 -1
- package/src/plugins/builtin/company-attention/pane.tsx +2 -2
- package/src/plugins/builtin/company-kpis/headless.ts +1 -0
- package/src/plugins/builtin/congress-trades/headless.ts +1 -0
- package/src/plugins/builtin/correlation/compute.ts +59 -16
- package/src/plugins/builtin/correlation/geo.ts +34 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +4 -1
- package/src/plugins/builtin/correlation/headless.ts +42 -8
- package/src/plugins/builtin/correlation/history.ts +2 -0
- package/src/plugins/builtin/correlation/index.tsx +68 -14
- package/src/plugins/builtin/correlation/matrix/model.ts +17 -2
- package/src/plugins/builtin/correlation/matrix/selection.ts +5 -3
- package/src/plugins/builtin/correlation/relationship/model.ts +1 -1
- package/src/plugins/builtin/correlation/relationship/pane.tsx +4 -2
- package/src/plugins/builtin/correlation/relationship/view-model.ts +16 -1
- package/src/plugins/builtin/correlation/settings.ts +1 -1
- package/src/plugins/builtin/cot/headless.ts +6 -3
- package/src/plugins/builtin/cot/index.tsx +3 -3
- package/src/plugins/builtin/cot/model.ts +36 -3
- package/src/plugins/builtin/cpi/headless.ts +4 -0
- package/src/plugins/builtin/credit-boards/headless.ts +2 -0
- package/src/plugins/builtin/credit-conditions/headless.ts +1 -0
- package/src/plugins/builtin/credit-documents/gauge.tsx +5 -8
- package/src/plugins/builtin/credit-documents/headless.ts +2 -0
- package/src/plugins/builtin/crypto-board/headless.ts +3 -0
- package/src/plugins/builtin/custom-view/loader.ts +1 -1
- package/src/plugins/builtin/debt-maturities/headless.ts +4 -0
- package/src/plugins/builtin/dividend-yield/headless.ts +1 -0
- package/src/plugins/builtin/doe/headless.ts +7 -0
- package/src/plugins/builtin/doe/range-bar.tsx +7 -37
- package/src/plugins/builtin/earnings/headless.ts +5 -0
- package/src/plugins/builtin/earnings-calls/headless.ts +1 -0
- package/src/plugins/builtin/earnings-ripple/client.ts +91 -18
- package/src/plugins/builtin/earnings-ripple/headless.ts +28 -8
- package/src/plugins/builtin/earnings-ripple/index.tsx +2 -2
- package/src/plugins/builtin/earnings-ripple/model.ts +97 -7
- package/src/plugins/builtin/earnings-ripple/pane.tsx +148 -23
- package/src/plugins/builtin/econ/index.tsx +1 -0
- package/src/plugins/builtin/econ-statistics/headless.ts +2 -0
- package/src/plugins/builtin/equity-screener/headless.ts +2 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +1 -0
- package/src/plugins/builtin/executives/index.tsx +1 -0
- package/src/plugins/builtin/exposure/headless.ts +3 -1
- package/src/plugins/builtin/fear-greed/headless.ts +2 -0
- package/src/plugins/builtin/filing-events/index.tsx +1 -0
- package/src/plugins/builtin/futures-curve/client.ts +12 -3
- package/src/plugins/builtin/futures-curve/headless.ts +39 -10
- package/src/plugins/builtin/futures-curve/index.tsx +3 -3
- package/src/plugins/builtin/futures-curve/model.ts +188 -4
- package/src/plugins/builtin/futures-curve/pane.tsx +51 -9
- package/src/plugins/builtin/gpu/headless.ts +7 -3
- package/src/plugins/builtin/gpu/ladder.tsx +26 -30
- package/src/plugins/builtin/gpu/model.ts +27 -1
- package/src/plugins/builtin/holders/beneficial-client.ts +209 -0
- package/src/plugins/builtin/holders/beneficial-model.ts +279 -0
- package/src/plugins/builtin/holders/beneficial-report.ts +126 -0
- package/src/plugins/builtin/holders/beneficial-view.tsx +241 -0
- 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 +161 -6
- package/src/plugins/builtin/holders/index.tsx +10 -3
- package/src/plugins/builtin/holders/pane.tsx +42 -16
- package/src/plugins/builtin/holders/report-header.ts +136 -0
- package/src/plugins/builtin/holders/table-model.ts +20 -5
- package/src/plugins/builtin/holders/thirteenf-match.ts +29 -1
- package/src/plugins/builtin/holders/types.ts +2 -1
- package/src/plugins/builtin/insider/headless.ts +2 -0
- package/src/plugins/builtin/ipo-calendar/headless.ts +1 -0
- package/src/plugins/builtin/iv-history/headless.ts +4 -1
- package/src/plugins/builtin/jobs/headless.ts +1 -0
- package/src/plugins/builtin/kelly-sizer/index.tsx +1 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +12 -6
- package/src/plugins/builtin/kelly-sizer/portfolio.ts +25 -0
- package/src/plugins/builtin/macro-day/headless.ts +2 -0
- package/src/plugins/builtin/market-halts/index.tsx +1 -0
- package/src/plugins/builtin/market-heatmap/data.ts +2 -0
- package/src/plugins/builtin/market-heatmap/headless.ts +135 -0
- package/src/plugins/builtin/market-heatmap/index.tsx +39 -46
- package/src/plugins/builtin/market-heatmap/model.ts +146 -0
- package/src/plugins/builtin/market-heatmap/portfolio.ts +23 -4
- package/src/plugins/builtin/market-movers/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/members/client.ts +20 -3
- package/src/plugins/builtin/members/headless.ts +5 -3
- package/src/plugins/builtin/members/model.ts +10 -2
- package/src/plugins/builtin/members/pane.tsx +23 -6
- package/src/plugins/builtin/mna/distress/headless.ts +1 -0
- package/src/plugins/builtin/mna/headless.ts +1 -0
- package/src/plugins/builtin/money-markets/headless.ts +1 -0
- package/src/plugins/builtin/news/headless.ts +2 -0
- package/src/plugins/builtin/news/wire/index.tsx +8 -1
- package/src/plugins/builtin/notes/cli.ts +14 -6
- package/src/plugins/builtin/notes/index.tsx +1 -0
- package/src/plugins/builtin/openfda/index.tsx +1 -0
- package/src/plugins/builtin/options-calculator/headless.ts +2 -0
- package/src/plugins/builtin/options-positioning/headless.ts +3 -0
- package/src/plugins/builtin/options-scenario/headless.ts +5 -0
- package/src/plugins/builtin/pe-band/client.ts +48 -3
- package/src/plugins/builtin/pe-band/headless.ts +25 -7
- package/src/plugins/builtin/pe-band/model.ts +92 -16
- package/src/plugins/builtin/pe-band/pane.tsx +33 -16
- package/src/plugins/builtin/perps/client.ts +50 -3
- package/src/plugins/builtin/perps/headless.ts +144 -16
- package/src/plugins/builtin/perps/index.tsx +6 -6
- package/src/plugins/builtin/perps/model.ts +189 -12
- package/src/plugins/builtin/perps/pane.tsx +249 -48
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +16 -1
- package/src/plugins/builtin/portfolio-list/allocation.ts +248 -0
- package/src/plugins/builtin/portfolio-list/cached-account.ts +42 -0
- package/src/plugins/builtin/portfolio-list/cell-version.ts +19 -1
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +328 -29
- package/src/plugins/builtin/portfolio-list/cli/render.ts +232 -39
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +67 -2
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +35 -31
- package/src/plugins/builtin/portfolio-list/column-values.ts +124 -47
- package/src/plugins/builtin/portfolio-list/headless.ts +100 -16
- package/src/plugins/builtin/portfolio-list/index.tsx +14 -3
- package/src/plugins/builtin/portfolio-list/live-valuation.ts +7 -5
- package/src/plugins/builtin/portfolio-list/mutations.ts +55 -1
- package/src/plugins/builtin/portfolio-list/pane/data.ts +6 -0
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +53 -16
- package/src/plugins/builtin/portfolio-list/settings.ts +33 -2
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +46 -5
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +11 -1
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +26 -7
- package/src/plugins/builtin/power/headless.ts +3 -1
- package/src/plugins/builtin/rate-path/headless.ts +2 -0
- package/src/plugins/builtin/realized-vol/headless.ts +2 -0
- package/src/plugins/builtin/relative-rotation/headless.ts +2 -0
- package/src/plugins/builtin/research/analyst-headless.ts +3 -0
- package/src/plugins/builtin/research/events-headless.ts +2 -0
- package/src/plugins/builtin/research/headless.ts +2 -0
- package/src/plugins/builtin/research/index.tsx +1 -0
- package/src/plugins/builtin/research/relative-valuation-headless.ts +10 -5
- package/src/plugins/builtin/research/relative-valuation-model.ts +18 -6
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +3 -3
- package/src/plugins/builtin/research-search/index.tsx +1 -0
- package/src/plugins/builtin/revenue-breakdown/headless.ts +2 -0
- package/src/plugins/builtin/reverse-dcf/headless.ts +2 -0
- package/src/plugins/builtin/reverse-dcf/model.ts +2 -1
- package/src/plugins/builtin/risk-factors/headless.ts +2 -0
- package/src/plugins/builtin/scanner/flow-history.ts +2 -13
- package/src/plugins/builtin/scanner/headless.ts +14 -0
- package/src/plugins/builtin/seasonality/headless.ts +2 -0
- package/src/plugins/builtin/sec/command-bar-search.ts +14 -4
- package/src/plugins/builtin/sec/filing-content.ts +42 -17
- package/src/plugins/builtin/sec/forms.ts +12 -0
- package/src/plugins/builtin/sec/headless.ts +2 -0
- package/src/plugins/builtin/sectors/client.ts +1 -0
- package/src/plugins/builtin/sectors/headless.ts +9 -1
- package/src/plugins/builtin/sectors/sector-model.ts +2 -0
- package/src/plugins/builtin/shared/crypto-pair.ts +14 -0
- package/src/plugins/builtin/shared/locked-rows.tsx +1 -1
- package/src/plugins/builtin/shared/members-menu.tsx +260 -0
- package/src/plugins/builtin/shared/report-freshness.ts +57 -0
- package/src/plugins/builtin/shared/research-cells.tsx +4 -9
- package/src/plugins/builtin/short-interest/headless.ts +2 -0
- package/src/plugins/builtin/short-interest/watch-headless.ts +1 -0
- package/src/plugins/builtin/short-volume/headless.ts +1 -0
- package/src/plugins/builtin/short-volume/pane.tsx +1 -1
- package/src/plugins/builtin/social-mentions/headless.ts +1 -0
- package/src/plugins/builtin/social-mentions/pane.tsx +1 -1
- package/src/plugins/builtin/supply-chain/headless.ts +7 -1
- package/src/plugins/builtin/supply-chain/index.tsx +10 -1
- package/src/plugins/builtin/supply-chain/model.ts +27 -2
- package/src/plugins/builtin/supply-chain/pane.tsx +71 -32
- package/src/plugins/builtin/themes/headless.ts +3 -0
- package/src/plugins/builtin/themes/pane.tsx +3 -0
- package/src/plugins/builtin/thirteenf/headless.ts +110 -25
- package/src/plugins/builtin/thirteenf/report-notes.ts +149 -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 +27 -5
- package/src/plugins/builtin/ticker-detail/index.tsx +1 -0
- package/src/plugins/builtin/ticker-detail/overview/model.ts +17 -5
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +27 -26
- package/src/plugins/builtin/time-sales/headless.ts +5 -1
- package/src/plugins/builtin/treasury-auctions/headless.ts +1 -0
- package/src/plugins/builtin/volatility/headless.ts +6 -1
- package/src/plugins/builtin/world-indices/headless.ts +2 -0
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +159 -0
- package/src/plugins/builtin/world-venue-map/basemap.ts +232 -0
- package/src/plugins/builtin/world-venue-map/client.ts +45 -0
- package/src/plugins/builtin/world-venue-map/country-labels.ts +78 -0
- package/src/plugins/builtin/world-venue-map/entity-detail.tsx +147 -0
- package/src/plugins/builtin/world-venue-map/entity-table.ts +59 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +77 -0
- package/src/plugins/builtin/world-venue-map/feed.ts +293 -0
- package/src/plugins/builtin/world-venue-map/geo-draw.tsx +248 -0
- package/src/plugins/builtin/world-venue-map/geo-series.ts +142 -0
- package/src/plugins/builtin/world-venue-map/geo-svg.tsx +448 -0
- package/src/plugins/builtin/world-venue-map/headless.ts +146 -0
- package/src/plugins/builtin/world-venue-map/ids.ts +1 -0
- package/src/plugins/builtin/world-venue-map/index.ts +69 -6
- package/src/plugins/builtin/world-venue-map/layered-pane.tsx +565 -0
- package/src/plugins/builtin/world-venue-map/layers.ts +406 -0
- package/src/plugins/builtin/world-venue-map/map-symbols.ts +220 -0
- package/src/plugins/builtin/world-venue-map/map.tsx +557 -85
- package/src/plugins/builtin/world-venue-map/model.ts +23 -4
- package/src/plugins/builtin/world-venue-map/natural-earth/index.chunk.ts +202 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/labels.chunk.ts +244 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/world-50m.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/pane.tsx +35 -44
- package/src/plugins/builtin/world-venue-map/use-geo.ts +55 -0
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +32 -0
- package/src/plugins/builtin/yield-curve/headless.ts +16 -0
- package/src/plugins/loader.ts +13 -1
- package/src/plugins/registry/pane-settings.ts +1 -0
- package/src/renderers/browser/app-services.ts +3 -1
- package/src/renderers/dom/build-assets.ts +81 -3
- package/src/renderers/dom/data-table/dom.ts +31 -0
- package/src/renderers/dom/data-table/index.tsx +5 -0
- package/src/renderers/dom/data-table/row.tsx +2 -0
- package/src/renderers/dom/desktop/controls.tsx +7 -3
- package/src/renderers/dom/desktop/list-view.tsx +35 -10
- package/src/renderers/dom/desktop/popover.tsx +73 -14
- package/src/renderers/dom/host/box.tsx +113 -17
- package/src/renderers/dom/host/drag-shield.ts +24 -0
- package/src/renderers/dom/host/input.tsx +14 -3
- package/src/renderers/dom/host/live-frame.ts +54 -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/styles.css +16 -9
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +7 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +2 -0
- package/src/renderers/electrobun/bun/desktop/initialization.ts +13 -0
- package/src/renderers/electrobun/shared/protocol.ts +10 -1
- package/src/renderers/electrobun/view/backend-rpc.ts +10 -4
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +4 -0
- 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/remote/persistence.ts +15 -2
- package/src/renderers/electrobun/view/rpc-timeout.ts +14 -3
- package/src/renderers/electrobun/view/ui-host.tsx +2 -5
- package/src/renderers/opentui/host.tsx +5 -0
- package/src/renderers/opentui/ui-host.tsx +7 -1
- package/src/sources/gloomberb-cloud/index.ts +25 -4
- package/src/sources/gloomberb-cloud/normalizers.ts +43 -23
- package/src/sources/provider-router/batches.ts +3 -3
- package/src/sources/provider-router/cached-routes.ts +4 -1
- package/src/sources/provider-router/financial-routes.ts +2 -2
- package/src/sources/provider-router/financials.ts +76 -12
- package/src/sources/provider-router/history.ts +15 -10
- package/src/sources/provider-router/primary.ts +2 -2
- package/src/sources/sec-registrant.ts +75 -0
- package/src/state/app/context/index.tsx +24 -8
- package/src/state/hooks/quote-streaming.ts +41 -26
- package/src/state/pane-scroll-registry.tsx +67 -35
- package/src/sync/core-contributors.ts +4 -0
- package/src/telemetry/crash-reports.ts +4 -1
- package/src/test-support/cli-context.ts +10 -2
- package/src/test-support/margin-account.ts +108 -0
- package/src/theme/heat-colors.ts +266 -84
- package/src/time-series/resolution.ts +15 -0
- package/src/time-series/resolve.ts +1 -1
- package/src/time-series/use-chart-resolution.ts +1 -1
- package/src/types/context-menu.ts +6 -0
- package/src/types/data-provider.ts +2 -0
- package/src/types/financials.ts +35 -3
- package/src/types/headless.ts +79 -2
- package/src/types/plugin.ts +20 -1
- package/src/types/ticker.ts +15 -0
- package/src/ui/host.tsx +26 -0
- package/src/ui/index.tsx +8 -3
- package/src/ui/scroll-box-axis.ts +26 -0
- package/src/updater/index.ts +9 -11
- package/src/utils/async-deadline.ts +21 -0
- package/src/utils/cli-output.ts +5 -1
- package/src/utils/crypto-pair.ts +41 -0
- package/src/utils/currency-units.ts +19 -0
- package/src/utils/depositary-receipt.ts +70 -0
- package/src/utils/display-number.ts +63 -0
- package/src/utils/exchanges.ts +72 -0
- package/src/utils/fire-and-forget.ts +24 -0
- package/src/utils/format.ts +13 -0
- package/src/utils/fundamentals.ts +17 -1
- package/src/utils/price-earnings.ts +70 -3
- package/src/utils/price-history-integrity.ts +19 -6
- package/src/utils/price-history.ts +58 -13
- package/src/utils/rpc-timeout-error.ts +27 -0
- package/src/utils/sec.ts +13 -1
- package/src/utils/utc-time.ts +79 -0
|
@@ -87,8 +87,8 @@ export function useShellTerminalPointerRuntime({
|
|
|
87
87
|
windowMode,
|
|
88
88
|
}: UseShellTerminalPointerRuntimeOptions) {
|
|
89
89
|
const {
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
live,
|
|
91
|
+
startDrag,
|
|
92
92
|
updateDividerPreview,
|
|
93
93
|
updateDragFloatingRect,
|
|
94
94
|
} = dragRuntime;
|
|
@@ -112,7 +112,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
112
112
|
|
|
113
113
|
for (const { pane, rect: visibleRect } of sortedFloatingPanes(visibleFloatingPanes)) {
|
|
114
114
|
const paneId = pane.instance.instanceId;
|
|
115
|
-
const rect = getVisibleFloatingRect(visibleRect, paneId,
|
|
115
|
+
const rect = getVisibleFloatingRect(visibleRect, paneId, live.get().floating, width, contentHeight);
|
|
116
116
|
if (!pointInRect({ x: rect.x, y: rect.y, width: rect.width, height: rect.height }, event.x, shellY)) continue;
|
|
117
117
|
|
|
118
118
|
const relativeX = event.x - rect.x;
|
|
@@ -120,13 +120,13 @@ export function useShellTerminalPointerRuntime({
|
|
|
120
120
|
selectWindowModePane(paneId);
|
|
121
121
|
|
|
122
122
|
if (relativeX >= rect.width - 2 && relativeY >= rect.height - 1) {
|
|
123
|
-
|
|
123
|
+
startDrag({
|
|
124
124
|
type: "float-resize",
|
|
125
125
|
paneId,
|
|
126
126
|
startX: preciseX,
|
|
127
127
|
startY: preciseShellY,
|
|
128
128
|
origRect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
|
|
129
|
-
};
|
|
129
|
+
});
|
|
130
130
|
updateDragFloatingRect({ paneId, rect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height } });
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -138,7 +138,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
138
138
|
if (!transientFocusActive) {
|
|
139
139
|
for (const divider of dockDividerLayouts) {
|
|
140
140
|
if (!pointInRect(divider.rect, event.x, shellY)) continue;
|
|
141
|
-
|
|
141
|
+
startDrag({
|
|
142
142
|
type: "divider",
|
|
143
143
|
path: divider.path,
|
|
144
144
|
axis: divider.axis,
|
|
@@ -146,7 +146,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
146
146
|
startY: preciseShellY,
|
|
147
147
|
startRatio: divider.ratio,
|
|
148
148
|
bounds: divider.bounds,
|
|
149
|
-
};
|
|
149
|
+
});
|
|
150
150
|
updateDividerPreview({
|
|
151
151
|
pathKey: divider.path.join("."),
|
|
152
152
|
rect: divider.rect,
|
|
@@ -179,7 +179,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
179
179
|
|
|
180
180
|
for (const { pane, rect: visibleRect } of sortedFloatingPanes(visibleFloatingPanes)) {
|
|
181
181
|
const paneId = pane.instance.instanceId;
|
|
182
|
-
const rect = getVisibleFloatingRect(visibleRect, paneId,
|
|
182
|
+
const rect = getVisibleFloatingRect(visibleRect, paneId, live.get().floating, width, contentHeight);
|
|
183
183
|
if (!pointInRect({ x: rect.x, y: rect.y, width: rect.width, height: rect.height }, event.x, shellY)) continue;
|
|
184
184
|
const relativeX = event.x - rect.x;
|
|
185
185
|
const relativeY = shellY - rect.y;
|
|
@@ -212,13 +212,13 @@ export function useShellTerminalPointerRuntime({
|
|
|
212
212
|
return;
|
|
213
213
|
}
|
|
214
214
|
if (!transientFocusActive && relativeX >= rect.width - 2 && relativeY >= rect.height - 1) {
|
|
215
|
-
|
|
215
|
+
startDrag({
|
|
216
216
|
type: "float-resize",
|
|
217
217
|
paneId,
|
|
218
218
|
startX: preciseX,
|
|
219
219
|
startY: preciseShellY,
|
|
220
220
|
origRect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
|
|
221
|
-
};
|
|
221
|
+
});
|
|
222
222
|
updateDragFloatingRect({ paneId, rect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height } });
|
|
223
223
|
event.stopPropagation();
|
|
224
224
|
event.preventDefault();
|
|
@@ -230,14 +230,14 @@ export function useShellTerminalPointerRuntime({
|
|
|
230
230
|
return;
|
|
231
231
|
}
|
|
232
232
|
if (relativeY === 0) {
|
|
233
|
-
|
|
233
|
+
startDrag({
|
|
234
234
|
type: "pane-drag",
|
|
235
235
|
paneId,
|
|
236
236
|
mode: "floating",
|
|
237
237
|
startX: preciseX,
|
|
238
238
|
startY: preciseShellY,
|
|
239
239
|
origRect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
|
|
240
|
-
};
|
|
240
|
+
});
|
|
241
241
|
updateDragFloatingRect({ paneId, rect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height } });
|
|
242
242
|
event.stopPropagation();
|
|
243
243
|
event.preventDefault();
|
|
@@ -248,7 +248,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
248
248
|
|
|
249
249
|
for (const divider of dockDividerLayouts) {
|
|
250
250
|
if (!pointInRect(divider.rect, event.x, shellY)) continue;
|
|
251
|
-
|
|
251
|
+
startDrag({
|
|
252
252
|
type: "divider",
|
|
253
253
|
path: divider.path,
|
|
254
254
|
axis: divider.axis,
|
|
@@ -256,7 +256,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
256
256
|
startY: preciseShellY,
|
|
257
257
|
startRatio: divider.ratio,
|
|
258
258
|
bounds: divider.bounds,
|
|
259
|
-
};
|
|
259
|
+
});
|
|
260
260
|
updateDividerPreview({
|
|
261
261
|
pathKey: divider.path.join("."),
|
|
262
262
|
rect: divider.rect,
|
|
@@ -308,14 +308,14 @@ export function useShellTerminalPointerRuntime({
|
|
|
308
308
|
return;
|
|
309
309
|
}
|
|
310
310
|
if (relativeY === 0) {
|
|
311
|
-
|
|
311
|
+
startDrag({
|
|
312
312
|
type: "pane-drag",
|
|
313
313
|
paneId: leaf.instanceId,
|
|
314
314
|
mode: "docked",
|
|
315
315
|
startX: preciseX,
|
|
316
316
|
startY: preciseShellY,
|
|
317
317
|
origRect: { x: leaf.rect.x, y: leaf.rect.y, width: leaf.rect.width, height: leaf.rect.height },
|
|
318
|
-
};
|
|
318
|
+
});
|
|
319
319
|
event.stopPropagation();
|
|
320
320
|
event.preventDefault();
|
|
321
321
|
return;
|
|
@@ -333,12 +333,11 @@ export function useShellTerminalPointerRuntime({
|
|
|
333
333
|
contentHeight,
|
|
334
334
|
dockDividerLayouts,
|
|
335
335
|
dockLeafLayouts,
|
|
336
|
-
dragFloatingRect,
|
|
337
|
-
dragRef,
|
|
338
336
|
focusPane,
|
|
339
337
|
focusedPaneId,
|
|
340
338
|
handleActiveDrag,
|
|
341
339
|
handleFloatingClose,
|
|
340
|
+
live,
|
|
342
341
|
restoreFullscreen,
|
|
343
342
|
menuState,
|
|
344
343
|
openPaneMenu,
|
|
@@ -346,6 +345,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
346
345
|
selectWindowModePane,
|
|
347
346
|
setHoveredMenuItemId,
|
|
348
347
|
setMenuState,
|
|
348
|
+
startDrag,
|
|
349
349
|
transientFocusActive,
|
|
350
350
|
updateDividerPreview,
|
|
351
351
|
updateDragFloatingRect,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
1
2
|
import { Box, Text } from "../../../../ui";
|
|
2
3
|
import type {
|
|
3
4
|
DockGeometryOptions,
|
|
@@ -8,6 +9,7 @@ import type {
|
|
|
8
9
|
} from "../../../../layout/pane-manager";
|
|
9
10
|
import { colors } from "../../../../theme/colors";
|
|
10
11
|
import { constrainFloatingRectToBounds } from "../drag";
|
|
12
|
+
import { useLiveDrag, type LiveDragGeometry, type LiveDragStore } from "../drag/live";
|
|
11
13
|
import {
|
|
12
14
|
getFloatingResizeCornerPosition,
|
|
13
15
|
type WindowEditDockMovePreview,
|
|
@@ -27,9 +29,9 @@ interface ShellWindowModeOverlaysProps {
|
|
|
27
29
|
contentHeight: number;
|
|
28
30
|
dockGeometryOptions: DockGeometryOptions;
|
|
29
31
|
dockLeafLayouts: DockLeafLayout[];
|
|
30
|
-
dragFloatingRect: { paneId: string; rect: FloatingRect } | null;
|
|
31
32
|
focusedPaneId: string | null;
|
|
32
33
|
getPaneTitle: (pane: ResolvedPane) => string;
|
|
34
|
+
live: LiveDragStore;
|
|
33
35
|
menuOpen: boolean;
|
|
34
36
|
nativePaneChrome: boolean;
|
|
35
37
|
nativeWindowModePanelRect: LayoutBounds | null;
|
|
@@ -64,9 +66,9 @@ export function ShellWindowModeOverlays({
|
|
|
64
66
|
contentHeight,
|
|
65
67
|
dockGeometryOptions,
|
|
66
68
|
dockLeafLayouts,
|
|
67
|
-
dragFloatingRect,
|
|
68
69
|
focusedPaneId,
|
|
69
70
|
getPaneTitle,
|
|
71
|
+
live,
|
|
70
72
|
menuOpen,
|
|
71
73
|
nativePaneChrome,
|
|
72
74
|
nativeWindowModePanelRect,
|
|
@@ -84,9 +86,15 @@ export function ShellWindowModeOverlays({
|
|
|
84
86
|
const highlightedDockedLeaf = highlightedPaneId && !highlightedFloatingPane
|
|
85
87
|
? dockLeafLayouts.find((leaf) => leaf.instanceId === highlightedPaneId)
|
|
86
88
|
: null;
|
|
89
|
+
// The terminal frame follows a floating pane while it moves; desktop panes draw their own.
|
|
90
|
+
const followedPaneId = !nativePaneChrome && highlightedFloatingPane ? highlightedFloatingPane.pane.instance.instanceId : null;
|
|
91
|
+
const selectDragRect = useCallback((geometry: LiveDragGeometry) => (
|
|
92
|
+
followedPaneId && geometry.floating?.paneId === followedPaneId ? geometry.floating.rect : null
|
|
93
|
+
), [followedPaneId]);
|
|
94
|
+
const dragRect = useLiveDrag(live, selectDragRect);
|
|
87
95
|
const highlightedRect = highlightedFloatingPane
|
|
88
|
-
?
|
|
89
|
-
? constrainFloatingRectToBounds(
|
|
96
|
+
? dragRect
|
|
97
|
+
? constrainFloatingRectToBounds(dragRect, width, contentHeight)
|
|
90
98
|
: highlightedFloatingPane.rect
|
|
91
99
|
: highlightedDockedLeaf?.rect ?? null;
|
|
92
100
|
const highlightedZIndex = highlightedFloatingPane
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { memo, useEffect, useMemo, useRef, useState, type CSSProperties } from "react";
|
|
2
2
|
import { Box, Text, TextAttributes, useUiCapabilities } from "../../ui";
|
|
3
|
-
import { blendHex
|
|
4
|
-
import {
|
|
3
|
+
import { blendHex } from "../../theme/colors";
|
|
4
|
+
import {
|
|
5
|
+
heatmapColorDistance,
|
|
6
|
+
resolveHeatmapSelectedTileColors,
|
|
7
|
+
resolveHeatmapSelectionRing,
|
|
8
|
+
resolveHeatmapTileColors,
|
|
9
|
+
} from "../../theme/heat-colors";
|
|
10
|
+
import { useThemeColors } from "../../theme/theme-context";
|
|
5
11
|
import { t } from "../../i18n";
|
|
6
12
|
import { clipToDisplayWidth, padTo } from "../../utils/format";
|
|
7
13
|
import type { FloatMetricTreemapTile, MetricTreemapItem } from "./layout";
|
|
@@ -17,6 +23,7 @@ import {
|
|
|
17
23
|
heatTileLabelCells,
|
|
18
24
|
heatTileLabelPx,
|
|
19
25
|
heatTileMotion,
|
|
26
|
+
heatTileValueWithSuffix,
|
|
20
27
|
} from "./heat-tiles";
|
|
21
28
|
|
|
22
29
|
type PreventableMouseEvent = { preventDefault(): void };
|
|
@@ -203,7 +210,7 @@ function useItemsById<T>(scene: MetricTreemapScene<T>, items: readonly MetricTre
|
|
|
203
210
|
const VISIBLE_FADE_DISTANCE = 0.03;
|
|
204
211
|
|
|
205
212
|
const DomHeatTile = memo(function DomHeatTile({
|
|
206
|
-
id, rect, canvasWidth, canvasHeight, gap, label, value, background, foreground,
|
|
213
|
+
id, rect, canvasWidth, canvasHeight, gap, label, value, valueSuffix, background, foreground,
|
|
207
214
|
selected, reducedMotion, glide, pulseCount, events,
|
|
208
215
|
}: {
|
|
209
216
|
id: string;
|
|
@@ -213,6 +220,7 @@ const DomHeatTile = memo(function DomHeatTile({
|
|
|
213
220
|
gap: number;
|
|
214
221
|
label: string;
|
|
215
222
|
value: string | null;
|
|
223
|
+
valueSuffix: string | null;
|
|
216
224
|
background: string;
|
|
217
225
|
foreground: string;
|
|
218
226
|
selected: boolean;
|
|
@@ -222,6 +230,7 @@ const DomHeatTile = memo(function DomHeatTile({
|
|
|
222
230
|
events: SurfaceEvents;
|
|
223
231
|
}) {
|
|
224
232
|
const text = heatTileLabelPx(rect.width - gap * 2, rect.height - gap * 2, label, value);
|
|
233
|
+
const shownValue = heatTileValueWithSuffix(value, valueSuffix, { width: rect.width - gap * 2, valuePx: text.valuePx });
|
|
225
234
|
// Where this tile sat before the last relayout, kept to slide it from there.
|
|
226
235
|
const placedRef = useRef(rect);
|
|
227
236
|
const glideRef = useRef<{ dx: number; dy: number; count: number }>({ dx: 0, dy: 0, count: 0 });
|
|
@@ -234,13 +243,19 @@ const DomHeatTile = memo(function DomHeatTile({
|
|
|
234
243
|
placedRef.current = rect;
|
|
235
244
|
}
|
|
236
245
|
const motion = heatTileMotion({ reducedMotion, glide, glideCount: glideRef.current.count, pulseCount });
|
|
246
|
+
const colors = useThemeColors();
|
|
247
|
+
const ring = resolveHeatmapSelectionRing(colors);
|
|
237
248
|
// The colour this tile showed before, kept to fade out over the new one.
|
|
238
249
|
const shownRef = useRef(background);
|
|
239
250
|
const fadeRef = useRef<{ from: string; key: number } | null>(null);
|
|
251
|
+
const paletteRef = useRef(colors);
|
|
252
|
+
// A theme switch recolours every tile at once; only a move fades.
|
|
253
|
+
const themeChanged = paletteRef.current !== colors;
|
|
254
|
+
paletteRef.current = colors;
|
|
240
255
|
if (shownRef.current !== background) {
|
|
241
256
|
// A step too small to see snaps: a fade costs a compositor layer for its whole run.
|
|
242
257
|
const visible = heatmapColorDistance(shownRef.current, background) >= VISIBLE_FADE_DISTANCE;
|
|
243
|
-
if (!motion.fadeAnimation) fadeRef.current = null;
|
|
258
|
+
if (!motion.fadeAnimation || themeChanged) fadeRef.current = null;
|
|
244
259
|
else if (visible) fadeRef.current = { from: shownRef.current, key: (fadeRef.current?.key ?? 0) + 1 };
|
|
245
260
|
shownRef.current = background;
|
|
246
261
|
}
|
|
@@ -267,9 +282,9 @@ const DomHeatTile = memo(function DomHeatTile({
|
|
|
267
282
|
justifyContent: "center",
|
|
268
283
|
gap: 0,
|
|
269
284
|
cursor: "pointer",
|
|
270
|
-
// The
|
|
271
|
-
//
|
|
272
|
-
boxShadow: selected ? `inset 0 0 0 2px ${
|
|
285
|
+
// The theme's text tone against the page, then a hairline of the page: one
|
|
286
|
+
// of the two stands out on any tile, bright or dim.
|
|
287
|
+
boxShadow: selected ? `inset 0 0 0 2px ${ring.outer}, inset 0 0 0 3px ${ring.inner}` : undefined,
|
|
273
288
|
zIndex: selected ? 1 : undefined,
|
|
274
289
|
...(motion.glideAnimation
|
|
275
290
|
? {
|
|
@@ -336,7 +351,7 @@ const DomHeatTile = memo(function DomHeatTile({
|
|
|
336
351
|
<Text style={{ ...lineStyle, fontSize: text.tickerPx, fontWeight: 700, lineHeight: 1.12 }}>{label}</Text>
|
|
337
352
|
)}
|
|
338
353
|
{text.tier === "full" && value && (
|
|
339
|
-
<Text style={{ ...lineStyle, fontSize: text.valuePx, fontWeight: 500, lineHeight: 1.12 }}>{
|
|
354
|
+
<Text style={{ ...lineStyle, fontSize: text.valuePx, fontWeight: 500, lineHeight: 1.12 }}>{shownValue}</Text>
|
|
340
355
|
)}
|
|
341
356
|
</Box>
|
|
342
357
|
);
|
|
@@ -347,6 +362,7 @@ function headerLabel(header: MetricTreemapHeader): string {
|
|
|
347
362
|
}
|
|
348
363
|
|
|
349
364
|
function DomHeader({ header, canvasWidth, canvasHeight }: { header: MetricTreemapHeader; canvasWidth: number; canvasHeight: number }) {
|
|
365
|
+
const colors = useThemeColors();
|
|
350
366
|
const sector = header.level === 0 && !header.other;
|
|
351
367
|
return (
|
|
352
368
|
<Box
|
|
@@ -402,6 +418,7 @@ function DomTooltip<T>({ state, itemsById, otherLines }: {
|
|
|
402
418
|
itemsById: ReadonlyMap<string, MetricTreemapItem<T>>;
|
|
403
419
|
otherLines: readonly string[] | null;
|
|
404
420
|
}) {
|
|
421
|
+
const colors = useThemeColors();
|
|
405
422
|
if (!state) return null;
|
|
406
423
|
const lines = state.id === OTHER_ID
|
|
407
424
|
? otherLines
|
|
@@ -457,6 +474,7 @@ function DomHeatTreemap<T>({
|
|
|
457
474
|
scene, items, width, height, selectedId, onSelect, onActivate, otherTooltip, otherSummary: summarizeOther,
|
|
458
475
|
}: HeatTreemapSurfaceProps<T>) {
|
|
459
476
|
const reducedMotion = usePrefersReducedMotion();
|
|
477
|
+
const colors = useThemeColors();
|
|
460
478
|
const itemsById = useItemsById(scene, items);
|
|
461
479
|
const chartRef = useRef<{ getBoundingClientRect?: () => { x: number; y: number; width: number; height: number } } | null>(null);
|
|
462
480
|
const [tooltip, setTooltip] = useState<TooltipState | null>(null);
|
|
@@ -543,7 +561,7 @@ function DomHeatTreemap<T>({
|
|
|
543
561
|
)}
|
|
544
562
|
{scene.tiles.map((tile) => {
|
|
545
563
|
const item = itemsById.get(tile.item.id) ?? tile.item;
|
|
546
|
-
const tileColors = resolveHeatmapTileColors(item.colorValue);
|
|
564
|
+
const tileColors = resolveHeatmapTileColors(item.colorValue, colors);
|
|
547
565
|
return (
|
|
548
566
|
<DomHeatTile
|
|
549
567
|
key={tile.item.id}
|
|
@@ -554,6 +572,7 @@ function DomHeatTreemap<T>({
|
|
|
554
572
|
gap={gap}
|
|
555
573
|
label={item.label}
|
|
556
574
|
value={item.primaryText ?? null}
|
|
575
|
+
valueSuffix={item.primaryTextSuffix ?? null}
|
|
557
576
|
background={tileColors.background}
|
|
558
577
|
foreground={tileColors.foreground}
|
|
559
578
|
selected={tile.item.id === selectedId}
|
|
@@ -586,7 +605,7 @@ function tileRect(tile: FloatMetricTreemapTile<unknown>): TreemapRect {
|
|
|
586
605
|
// Terminal: whole cells, a one-cell gutter right of and under each tile.
|
|
587
606
|
|
|
588
607
|
const TerminalHeatTile = memo(function TerminalHeatTile({
|
|
589
|
-
id, x, y, width, height, label, value, colorValue, selected, events,
|
|
608
|
+
id, x, y, width, height, label, value, valueSuffix, colorValue, selected, events,
|
|
590
609
|
}: {
|
|
591
610
|
id: string;
|
|
592
611
|
x: number;
|
|
@@ -595,17 +614,21 @@ const TerminalHeatTile = memo(function TerminalHeatTile({
|
|
|
595
614
|
height: number;
|
|
596
615
|
label: string;
|
|
597
616
|
value: string | null;
|
|
617
|
+
valueSuffix: string | null;
|
|
598
618
|
colorValue: number | null;
|
|
599
619
|
selected: boolean;
|
|
600
620
|
events: SurfaceEvents;
|
|
601
621
|
}) {
|
|
622
|
+
// Read here, not passed down: a theme switch reaches every tile even though its props are the same.
|
|
623
|
+
const colors = useThemeColors();
|
|
602
624
|
const { background, foreground } = selected
|
|
603
|
-
? resolveHeatmapSelectedTileColors(colorValue)
|
|
604
|
-
: resolveHeatmapTileColors(colorValue);
|
|
625
|
+
? resolveHeatmapSelectedTileColors(colorValue, colors)
|
|
626
|
+
: resolveHeatmapTileColors(colorValue, colors);
|
|
605
627
|
const renderWidth = Math.max(1, width - (width >= 3 ? 1 : 0));
|
|
606
628
|
const renderHeight = Math.max(1, height - (height >= 2 ? 1 : 0));
|
|
607
629
|
const tier = heatTileLabelCells(renderWidth, renderHeight, label, value);
|
|
608
|
-
const
|
|
630
|
+
const shownValue = heatTileValueWithSuffix(value, valueSuffix, { width: renderWidth });
|
|
631
|
+
const lines = tier === "full" && shownValue ? [label, shownValue] : tier === "none" ? [] : [label];
|
|
609
632
|
const top = Math.max(0, Math.floor((renderHeight - lines.length) / 2));
|
|
610
633
|
return (
|
|
611
634
|
<Box
|
|
@@ -641,6 +664,7 @@ const TerminalHeatTile = memo(function TerminalHeatTile({
|
|
|
641
664
|
function TerminalHeatTreemap<T>({
|
|
642
665
|
scene, items, width, height, selectedId, onSelect, onActivate, otherSummary: summarizeOther,
|
|
643
666
|
}: HeatTreemapSurfaceProps<T>) {
|
|
667
|
+
const colors = useThemeColors();
|
|
644
668
|
const itemsById = useItemsById(scene, items);
|
|
645
669
|
const events = useSurfaceEvents(itemsById, onSelect, onActivate);
|
|
646
670
|
const other = scene.other;
|
|
@@ -688,6 +712,7 @@ function TerminalHeatTreemap<T>({
|
|
|
688
712
|
height={tile.height}
|
|
689
713
|
label={item.label}
|
|
690
714
|
value={item.primaryText ?? null}
|
|
715
|
+
valueSuffix={item.primaryTextSuffix ?? null}
|
|
691
716
|
colorValue={item.colorValue ?? null}
|
|
692
717
|
selected={tile.item.id === selectedId}
|
|
693
718
|
events={events}
|
|
@@ -701,12 +726,14 @@ function TerminalHeatTreemap<T>({
|
|
|
701
726
|
|
|
702
727
|
/**
|
|
703
728
|
* The heat map look of the treemap: optional sector and industry blocks,
|
|
704
|
-
* calm tiles (ticker, then the move, as space allows), a continuous
|
|
705
|
-
*
|
|
706
|
-
* a short pulse on a tile whose move jumps and a glide
|
|
729
|
+
* calm tiles (ticker, then the move, as space allows), a continuous scale
|
|
730
|
+
* from the theme's down colour to its up colour, and on the desktop a hover
|
|
731
|
+
* tooltip, colour fades, a short pulse on a tile whose move jumps and a glide
|
|
732
|
+
* when sizes change.
|
|
707
733
|
*/
|
|
708
734
|
export function HeatTreemapSurface<T>(props: HeatTreemapSurfaceProps<T>) {
|
|
709
735
|
const { nativePaneChrome } = useUiCapabilities();
|
|
736
|
+
const colors = useThemeColors();
|
|
710
737
|
if (props.scene.tiles.length === 0) {
|
|
711
738
|
return (
|
|
712
739
|
<Box width={props.width} height={props.height} paddingX={1} paddingY={1}>
|
|
@@ -57,6 +57,24 @@ export function heatTileLabelPx(width: number, height: number, ticker: string, v
|
|
|
57
57
|
return NO_LABEL;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The move with its qualifier (an after-hours move's AH) where that still fits
|
|
62
|
+
* at the size the move alone was given, else the move alone. The qualifier
|
|
63
|
+
* never shrinks the text or drops the move.
|
|
64
|
+
*/
|
|
65
|
+
export function heatTileValueWithSuffix(
|
|
66
|
+
value: string | null,
|
|
67
|
+
suffix: string | null | undefined,
|
|
68
|
+
room: { width: number; valuePx?: number },
|
|
69
|
+
): string | null {
|
|
70
|
+
if (!value || !suffix) return value;
|
|
71
|
+
const withSuffix = `${value} ${suffix}`;
|
|
72
|
+
const width = room.valuePx == null
|
|
73
|
+
? withSuffix.length
|
|
74
|
+
: withSuffix.length * MONO_CHAR_EM * room.valuePx + TILE_PAD_X_PX * 2;
|
|
75
|
+
return width <= room.width ? withSuffix : value;
|
|
76
|
+
}
|
|
77
|
+
|
|
60
78
|
/** The same tiers on a cell grid: whole words or nothing, never a clipped ticker. */
|
|
61
79
|
export function heatTileLabelCells(width: number, height: number, ticker: string, value: string | null): HeatTileLabelTier {
|
|
62
80
|
if (width < ticker.length || height < 1 || ticker.length === 0) return "none";
|
|
@@ -4,6 +4,8 @@ export interface MetricTreemapItem<T = unknown> {
|
|
|
4
4
|
weight: number | null | undefined;
|
|
5
5
|
colorValue?: number | null;
|
|
6
6
|
primaryText?: string | null;
|
|
7
|
+
/** A short qualifier after primaryText, such as AH for an after-hours move; the heat map shows it where the tile has room. */
|
|
8
|
+
primaryTextSuffix?: string | null;
|
|
7
9
|
secondaryText?: string | null;
|
|
8
10
|
tertiaryText?: string | null;
|
|
9
11
|
/** Optional hierarchy for the heat map layout (a sector); the flat layouts ignore it. */
|