gloomberb 0.16.5 → 0.17.0

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.
Files changed (691) hide show
  1. package/package.json +3 -1
  2. package/src/api-client/central-bank-rates.ts +6 -1
  3. package/src/api-client/chat-pane-link.ts +47 -0
  4. package/src/api-client/chat.ts +35 -1
  5. package/src/api-client/credit-boards.ts +2 -0
  6. package/src/api-client/data.ts +85 -1
  7. package/src/api-client/equity-screener.ts +3 -0
  8. package/src/api-client/europe-energy.ts +197 -0
  9. package/src/api-client/index.ts +15 -0
  10. package/src/api-client/letters.ts +41 -0
  11. package/src/api-client/market-discovery.ts +3 -0
  12. package/src/api-client/normalizers.ts +68 -6
  13. package/src/api-client/organization-tickers.ts +44 -0
  14. package/src/api-client/perps.ts +8 -0
  15. package/src/api-client/request.ts +11 -2
  16. package/src/api-client/socket.ts +29 -0
  17. package/src/api-client/themes.ts +22 -1
  18. package/src/api-client/types.ts +88 -2
  19. package/src/app/global-shortcuts.ts +35 -1
  20. package/src/app/keybindings/actions.ts +12 -1
  21. package/src/app/pane-runtime/plugin-bindings.ts +2 -2
  22. package/src/app/pane-runtime/ticker-open-runtime.ts +9 -3
  23. package/src/app/runtime/desktop-deeplink.ts +58 -20
  24. package/src/app/runtime/startup.ts +1 -1
  25. package/src/app.tsx +6 -0
  26. package/src/architecture/core-builtin-allowlist.json +5 -14
  27. package/src/architecture/dom-cell-metrics-allowlist.json +28 -0
  28. package/src/ask-gloom/pane-context.ts +118 -0
  29. package/src/ask-gloom/pane-request.ts +70 -0
  30. package/src/ask-gloom/pane-text.ts +201 -0
  31. package/src/capabilities/chart-series.ts +8 -1
  32. package/src/capabilities/factories.ts +1 -0
  33. package/src/cli/central-bank-events.ts +23 -0
  34. package/src/cli/command-options.ts +17 -5
  35. package/src/cli/commands/crypto-hints.ts +28 -2
  36. package/src/cli/commands/fred-series.ts +155 -4
  37. package/src/cli/commands/market.ts +175 -35
  38. package/src/cli/commands/overview.ts +62 -20
  39. package/src/cli/commands/search.ts +254 -23
  40. package/src/cli/commands/ticker.ts +137 -24
  41. package/src/cli/desktop-pane-shot-view.ts +114 -0
  42. package/src/cli/desktop-pane-shot.ts +53 -37
  43. package/src/cli/entry.ts +7 -0
  44. package/src/cli/errors.ts +7 -5
  45. package/src/cli/exit-codes.ts +8 -0
  46. package/src/cli/export-source.ts +101 -0
  47. package/src/cli/freshness.ts +18 -3
  48. package/src/cli/glossary.ts +79 -8
  49. package/src/cli/help.ts +10 -0
  50. package/src/cli/helpers.ts +2 -5
  51. package/src/cli/history-rows.ts +244 -13
  52. package/src/cli/index.ts +9 -3
  53. package/src/cli/known-gaps.ts +76 -8
  54. package/src/cli/listing-arg.ts +201 -90
  55. package/src/cli/listing-suggestion.ts +159 -0
  56. package/src/cli/native-smoke.ts +13 -0
  57. package/src/cli/not-a-ticker.ts +24 -4
  58. package/src/cli/pane-functions/access-gate.ts +8 -2
  59. package/src/cli/pane-functions/capabilities.ts +17 -9
  60. package/src/cli/pane-functions/catalog.ts +183 -39
  61. package/src/cli/pane-functions/data.ts +30 -0
  62. package/src/cli/pane-functions/dom.ts +44 -14
  63. package/src/cli/pane-functions/freshness.ts +48 -24
  64. package/src/cli/pane-functions/function-help.ts +66 -12
  65. package/src/cli/pane-functions/headless.ts +81 -22
  66. package/src/cli/pane-functions/index.ts +90 -18
  67. package/src/cli/pane-functions/options.ts +8 -0
  68. package/src/cli/pane-functions/report-notices.ts +6 -3
  69. package/src/cli/pane-functions/report.ts +16 -2
  70. package/src/cli/pane-functions/resolver.ts +32 -11
  71. package/src/cli/pane-functions/screenshot.ts +145 -9
  72. package/src/cli/perpetual-contract.ts +60 -0
  73. package/src/cli/registry.ts +3 -1
  74. package/src/cli/report-tables.ts +53 -13
  75. package/src/cli/result.ts +91 -17
  76. package/src/cli/series-search.ts +111 -0
  77. package/src/cli/staged-tickers.ts +1 -1
  78. package/src/cli/symbol-args.ts +18 -0
  79. package/src/cli/symbol-list.ts +1 -19
  80. package/src/cli/symbol-rows.ts +171 -0
  81. package/src/cli/ticker-resolution.ts +99 -8
  82. package/src/components/chart/composite/axis-overlays.tsx +10 -1
  83. package/src/components/chart/composite/composite-chart.tsx +24 -15
  84. package/src/components/chart/composite/downsample.ts +1 -1
  85. package/src/components/chart/composite/format.ts +29 -0
  86. package/src/components/chart/composite/interactions.ts +9 -2
  87. package/src/components/chart/composite/legend.tsx +57 -33
  88. package/src/components/chart/composite/panel-bitmap.ts +70 -35
  89. package/src/components/chart/composite/panel-labels.ts +18 -17
  90. package/src/components/chart/composite/panel-series.ts +1 -0
  91. package/src/components/chart/composite/panel-surface.tsx +6 -8
  92. package/src/components/chart/composite/price-axis-labels.tsx +1 -0
  93. package/src/components/chart/composite/rasterizer.ts +50 -8
  94. package/src/components/chart/composite/scene.ts +2 -1
  95. package/src/components/chart/composite/time-scale.ts +26 -9
  96. package/src/components/chart/composite/types.ts +18 -0
  97. package/src/components/chart/composite/use-composite-viewport.ts +30 -2
  98. package/src/components/chart/native/raster/crosshair.ts +8 -3
  99. package/src/components/chart/native/raster/primitives.ts +85 -21
  100. package/src/components/chart/native/surface/manager.ts +33 -8
  101. package/src/components/chart/surface3d/chart.tsx +1 -1
  102. package/src/components/command-bar/action-runtime.ts +1 -1
  103. package/src/components/command-bar/commands/collection-list.ts +210 -0
  104. package/src/components/command-bar/commands/collection.ts +40 -1
  105. package/src/components/command-bar/commands/direct/index.ts +4 -0
  106. package/src/components/command-bar/commands/registry.ts +8 -0
  107. package/src/components/command-bar/list/model.ts +2 -0
  108. package/src/components/command-bar/pane-templates/items.ts +1 -1
  109. package/src/components/command-bar/routes/root/plugin-install.ts +4 -4
  110. package/src/components/command-bar/routes/ticker-search/actions.ts +1 -0
  111. package/src/components/command-bar/routes/ticker-search/results.ts +3 -1
  112. package/src/components/command-bar/routing/actions.ts +1 -1
  113. package/src/components/command-bar/workflow/ops.ts +8 -97
  114. package/src/components/command-bar/workflow/pane-reuse.ts +177 -0
  115. package/src/components/command-bar/workflow/tickers.ts +35 -29
  116. package/src/components/data-table/view.tsx +1 -0
  117. package/src/components/feed-data-table/stack-view.tsx +18 -42
  118. package/src/components/layout/detached-pane-shell.tsx +59 -39
  119. package/src/components/layout/floating-pane.tsx +7 -1
  120. package/src/components/layout/header.tsx +5 -0
  121. package/src/components/layout/missing-pane.tsx +5 -3
  122. package/src/components/layout/pane/capture-stamp.ts +41 -0
  123. package/src/components/layout/pane/capture-status.ts +12 -0
  124. package/src/components/layout/pane/footer/keyboard.ts +3 -0
  125. package/src/components/layout/pane/footer/model.ts +7 -1
  126. package/src/components/layout/pane/header.tsx +26 -0
  127. package/src/components/layout/pane/index.tsx +9 -1
  128. package/src/components/layout/pane/sidebar.tsx +10 -11
  129. package/src/components/layout/shell/cursor-occlusion.ts +2 -1
  130. package/src/components/layout/shell/index.tsx +62 -60
  131. package/src/components/layout/shell/menu.ts +9 -1
  132. package/src/components/layout/shell/pane/actions.ts +32 -10
  133. package/src/components/layout/shell/pane/ask.ts +136 -0
  134. package/src/components/layout/shell/pane/capture.ts +136 -0
  135. package/src/components/layout/shell/pane/layers.tsx +26 -5
  136. package/src/components/layout/shell/pane/management-shortcuts.ts +46 -1
  137. package/src/components/layout/shell/shortcuts.ts +21 -4
  138. package/src/components/markdown-text.tsx +37 -6
  139. package/src/components/metric-treemap/heat-surface.tsx +1 -3
  140. package/src/components/reader/article-reader.tsx +467 -0
  141. package/src/components/reader/article-text.ts +527 -0
  142. package/src/components/reader/detail-reader.tsx +210 -0
  143. package/src/components/reader/reader-text.tsx +239 -0
  144. package/src/components/table-view-shared.tsx +8 -4
  145. package/src/components/ticker/badge/list.tsx +15 -4
  146. package/src/components/ticker/list-table-view.tsx +19 -1
  147. package/src/components/ui/choice-dialog.tsx +3 -0
  148. package/src/components/ui/data-table/index.tsx +1 -0
  149. package/src/components/ui/data-table/types.ts +7 -0
  150. package/src/components/ui/detail-scroll-body.tsx +31 -4
  151. package/src/components/ui/display.tsx +46 -1
  152. package/src/components/ui/icon.tsx +14 -1
  153. package/src/components/ui/list-view.tsx +3 -1
  154. package/src/components/ui/query-bar-keys.tsx +2 -0
  155. package/src/components/ui/query-bar.tsx +18 -1
  156. package/src/components/ui/select-button.tsx +3 -0
  157. package/src/data/config/store/fold-panes.ts +202 -11
  158. package/src/data/config/store/migrations.ts +20 -1
  159. package/src/data/config/store/portfolio-as-of-column.ts +57 -0
  160. package/src/docs/snapshot.json +191 -23
  161. package/src/i18n/es.ts +18 -1
  162. package/src/i18n/ja.ts +18 -1
  163. package/src/i18n/ko.ts +18 -1
  164. package/src/i18n/zh-cn.ts +18 -1
  165. package/src/i18n/zh-tw.ts +18 -1
  166. package/src/layout/desk-keys.ts +7 -0
  167. package/src/layout/desks.ts +2 -2
  168. package/src/layout-marketplace/gallery.tsx +1 -1
  169. package/src/market-data/market/freshness.ts +3 -2
  170. package/src/market-data/market/session-close-note.ts +3 -2
  171. package/src/market-data/market/status.ts +67 -6
  172. package/src/market-data/quotes/contributions.ts +17 -0
  173. package/src/market-data/quotes/metadata.ts +12 -0
  174. package/src/market-data/quotes/regular-session-valuation.ts +131 -0
  175. package/src/market-data/quotes/resolution.ts +7 -0
  176. package/src/market-data/snapshot-provider.ts +6 -3
  177. package/src/notifications/app-badge.ts +30 -0
  178. package/src/notifications/app-notifier.ts +17 -1
  179. package/src/notifications/notification-log.ts +180 -0
  180. package/src/plugins/auto-update-node.ts +2 -2
  181. package/src/plugins/auto-update.ts +2 -2
  182. package/src/plugins/builtin/account-management/calendar-tab.tsx +1 -1
  183. package/src/plugins/builtin/account-management/form-components.tsx +53 -1
  184. package/src/plugins/builtin/account-management/index.tsx +1 -0
  185. package/src/plugins/builtin/account-management/keyboard.ts +5 -0
  186. package/src/plugins/builtin/account-management/model.ts +27 -0
  187. package/src/plugins/builtin/account-management/pane.tsx +62 -2
  188. package/src/plugins/builtin/alerts/catalysts.ts +1 -1
  189. package/src/plugins/builtin/alerts/cli.ts +6 -4
  190. package/src/plugins/builtin/alerts/focus.ts +27 -0
  191. package/src/plugins/builtin/alerts/index.tsx +6 -2
  192. package/src/plugins/builtin/alerts/pane.tsx +19 -1
  193. package/src/plugins/builtin/analytics/index.tsx +5 -2
  194. package/src/plugins/builtin/analytics/risk-headless.ts +30 -15
  195. package/src/plugins/builtin/attention/headless.ts +1 -1
  196. package/src/plugins/builtin/awards/headless.ts +88 -18
  197. package/src/plugins/builtin/awards/model.ts +41 -1
  198. package/src/plugins/builtin/awards/pane.tsx +48 -30
  199. package/src/plugins/builtin/backtest/headless.ts +2 -2
  200. package/src/plugins/builtin/backtest/pane.tsx +2 -1
  201. package/src/plugins/builtin/bond-calculator/index.tsx +3 -5
  202. package/src/plugins/builtin/broker-manager/index.tsx +1 -0
  203. package/src/plugins/builtin/buildout/detail/company.tsx +7 -4
  204. package/src/plugins/builtin/builtin-plugin-meta.ts +5 -4
  205. package/src/plugins/builtin/catalysts/headless.ts +1 -1
  206. package/src/plugins/builtin/catalysts/model.ts +92 -10
  207. package/src/plugins/builtin/catalysts/pane.tsx +6 -4
  208. package/src/plugins/builtin/cds/client.ts +11 -31
  209. package/src/plugins/builtin/cds/headless.ts +5 -2
  210. package/src/plugins/builtin/cds/index.tsx +21 -30
  211. package/src/plugins/builtin/cds/model.ts +21 -1
  212. package/src/plugins/builtin/cds/pane.tsx +6 -4
  213. package/src/plugins/builtin/central-bank-rates/client.ts +4 -0
  214. package/src/plugins/builtin/central-bank-rates/headless.ts +46 -16
  215. package/src/plugins/builtin/central-bank-rates/index.tsx +1 -1
  216. package/src/plugins/builtin/central-bank-rates/model.ts +99 -0
  217. package/src/plugins/builtin/central-bank-rates/pane.tsx +1 -1
  218. package/src/plugins/builtin/central-bank-rates/series.ts +19 -25
  219. package/src/plugins/builtin/changelog/index.tsx +11 -12
  220. package/src/plugins/builtin/chart-composer/catalog-inventory.ts +1 -0
  221. package/src/plugins/builtin/chart-composer/headless-schema.ts +3 -1
  222. package/src/plugins/builtin/chart-composer/headless.ts +151 -9
  223. package/src/plugins/builtin/chart-composer/index.tsx +6 -1
  224. package/src/plugins/builtin/chart-composer/pane.tsx +84 -40
  225. package/src/plugins/builtin/chart-composer/session-history.ts +20 -5
  226. package/src/plugins/builtin/chat/command-bar.ts +6 -8
  227. package/src/plugins/builtin/chat/content/composer-runtime.ts +6 -1
  228. package/src/plugins/builtin/chat/content/composer.tsx +15 -2
  229. package/src/plugins/builtin/chat/content/footer.tsx +27 -5
  230. package/src/plugins/builtin/chat/content/handle-prompt.tsx +326 -0
  231. package/src/plugins/builtin/chat/content/index.tsx +201 -13
  232. package/src/plugins/builtin/chat/content/layout-metrics.ts +4 -0
  233. package/src/plugins/builtin/chat/content/new-messages.tsx +89 -0
  234. package/src/plugins/builtin/chat/content/open-targets.ts +20 -4
  235. package/src/plugins/builtin/chat/content/row-activity.ts +132 -0
  236. package/src/plugins/builtin/chat/content/scroll.ts +133 -28
  237. package/src/plugins/builtin/chat/content/shortcuts.ts +2 -2
  238. package/src/plugins/builtin/chat/content/transcript.tsx +155 -79
  239. package/src/plugins/builtin/chat/content/types.ts +1 -0
  240. package/src/plugins/builtin/chat/controller/fetch.ts +8 -2
  241. package/src/plugins/builtin/chat/controller/index.ts +121 -1
  242. package/src/plugins/builtin/chat/controller/message-loading.ts +3 -0
  243. package/src/plugins/builtin/chat/controller/messages.ts +7 -2
  244. package/src/plugins/builtin/chat/controller/realtime.ts +10 -1
  245. package/src/plugins/builtin/chat/controller/send.ts +61 -1
  246. package/src/plugins/builtin/chat/controller/state.ts +8 -0
  247. package/src/plugins/builtin/chat/ghost-user.ts +20 -0
  248. package/src/plugins/builtin/chat/handle-prompt.ts +128 -0
  249. package/src/plugins/builtin/chat/index.tsx +66 -25
  250. package/src/plugins/builtin/chat/layout.ts +84 -18
  251. package/src/plugins/builtin/chat/message/desktop.tsx +111 -14
  252. package/src/plugins/builtin/chat/message/header.tsx +81 -21
  253. package/src/plugins/builtin/chat/message/pane-chip.tsx +223 -0
  254. package/src/plugins/builtin/chat/message/person-icons.tsx +53 -0
  255. package/src/plugins/builtin/chat/message/profile-popover.tsx +77 -9
  256. package/src/plugins/builtin/chat/message/reactions.tsx +210 -0
  257. package/src/plugins/builtin/chat/message/render-state.ts +33 -4
  258. package/src/plugins/builtin/chat/message/terminal.tsx +72 -8
  259. package/src/plugins/builtin/chat/message/types.ts +15 -0
  260. package/src/plugins/builtin/chat/pane-links/model.ts +149 -0
  261. package/src/plugins/builtin/chat/pane-links/open.ts +29 -0
  262. package/src/plugins/builtin/chat/pane-links/previews.ts +119 -0
  263. package/src/plugins/builtin/chat/pane-state.ts +5 -8
  264. package/src/plugins/builtin/chat/people.ts +202 -0
  265. package/src/plugins/builtin/chat/profile-popover.ts +18 -2
  266. package/src/plugins/builtin/chat/reactions.ts +197 -0
  267. package/src/plugins/builtin/chat/share/flow.tsx +87 -0
  268. package/src/plugins/builtin/chat/share/targets.ts +27 -0
  269. package/src/plugins/builtin/chat/status-widget.tsx +7 -9
  270. package/src/plugins/builtin/chat/unread-badge.ts +65 -0
  271. package/src/plugins/builtin/chat/unread-inbox-pane.tsx +151 -27
  272. package/src/plugins/builtin/chat/unread-inbox.ts +22 -0
  273. package/src/plugins/builtin/clinical-trials/client.ts +26 -1
  274. package/src/plugins/builtin/clinical-trials/index.tsx +10 -2
  275. package/src/plugins/builtin/clinical-trials/model.ts +269 -0
  276. package/src/plugins/builtin/clinical-trials/pane.tsx +247 -62
  277. package/src/plugins/builtin/clinical-trials/sponsor-tickers.ts +156 -0
  278. package/src/plugins/builtin/cloud/askg/attached-pane.tsx +69 -0
  279. package/src/plugins/builtin/cloud/askg/pane-attachment.ts +94 -0
  280. package/src/plugins/builtin/cloud/askg/pane.tsx +141 -12
  281. package/src/plugins/builtin/cloud/askg/pending-question.ts +11 -0
  282. package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +1 -0
  283. package/src/plugins/builtin/cloud/plugin.tsx +19 -2
  284. package/src/plugins/builtin/cloud/team/model.ts +5 -0
  285. package/src/plugins/builtin/cloud/team/module.tsx +1 -0
  286. package/src/plugins/builtin/cloud/team/store.ts +8 -3
  287. package/src/plugins/builtin/cloud/thesis/module.tsx +1 -0
  288. package/src/plugins/builtin/comment-letters/pane.tsx +30 -11
  289. package/src/plugins/builtin/commodities-energy/index.tsx +179 -0
  290. package/src/plugins/builtin/commodity-balances/client.ts +208 -0
  291. package/src/plugins/builtin/commodity-balances/headless.ts +66 -0
  292. package/src/plugins/builtin/commodity-balances/index.tsx +32 -0
  293. package/src/plugins/builtin/commodity-balances/model.ts +261 -0
  294. package/src/plugins/builtin/commodity-balances/pane.tsx +227 -0
  295. package/src/plugins/builtin/company-attention/headless.ts +2 -2
  296. package/src/plugins/builtin/company-kpis/headless.ts +97 -10
  297. package/src/plugins/builtin/company-kpis/model.ts +24 -2
  298. package/src/plugins/builtin/company-kpis/pane.tsx +13 -14
  299. package/src/plugins/builtin/composite-plugins.ts +26 -1
  300. package/src/plugins/builtin/connections/index.ts +1 -0
  301. package/src/plugins/builtin/cot/headless.ts +1 -1
  302. package/src/plugins/builtin/cpi/headless.ts +3 -3
  303. package/src/plugins/builtin/credit-boards/cdx-pane.tsx +10 -1
  304. package/src/plugins/builtin/credit-boards/client.ts +6 -2
  305. package/src/plugins/builtin/credit-boards/headless.ts +108 -31
  306. package/src/plugins/builtin/credit-boards/index.tsx +21 -42
  307. package/src/plugins/builtin/credit-boards/model.ts +11 -3
  308. package/src/plugins/builtin/credit-conditions/client.ts +12 -9
  309. package/src/plugins/builtin/credit-conditions/headless.ts +13 -2
  310. package/src/plugins/builtin/credit-conditions/index.tsx +20 -22
  311. package/src/plugins/builtin/credit-conditions/model.ts +19 -11
  312. package/src/plugins/builtin/credit-conditions/series.ts +8 -18
  313. package/src/plugins/builtin/credit-documents/headless.ts +2 -2
  314. package/src/plugins/builtin/credit-documents/index.tsx +27 -10
  315. package/src/plugins/builtin/debt-maturities/headless.ts +17 -11
  316. package/src/plugins/builtin/debt-maturities/index.tsx +3 -17
  317. package/src/plugins/builtin/debug/index.tsx +2 -2
  318. package/src/plugins/builtin/dividend-yield/client.ts +6 -1
  319. package/src/plugins/builtin/dividend-yield/headless.ts +8 -3
  320. package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
  321. package/src/plugins/builtin/dividend-yield/pane.tsx +6 -2
  322. package/src/plugins/builtin/dividend-yield/provider-client.ts +3 -1
  323. package/src/plugins/builtin/dividend-yield/types.ts +2 -0
  324. package/src/plugins/builtin/docs/blocks.tsx +4 -3
  325. package/src/plugins/builtin/docs/pane.tsx +16 -8
  326. package/src/plugins/builtin/doe/headless.ts +12 -8
  327. package/src/plugins/builtin/earnings/index.tsx +11 -0
  328. package/src/plugins/builtin/earnings-calls/headless.ts +28 -2
  329. package/src/plugins/builtin/earnings-calls/index.tsx +1 -1
  330. package/src/plugins/builtin/earnings-calls/pane.tsx +2 -12
  331. package/src/plugins/builtin/earnings-ripple/index.tsx +2 -0
  332. package/src/plugins/builtin/econ/fred-catalog.ts +9 -0
  333. package/src/plugins/builtin/equity-screener/client.ts +1 -1
  334. package/src/plugins/builtin/equity-screener/headless.ts +39 -5
  335. package/src/plugins/builtin/equity-screener/model.ts +121 -68
  336. package/src/plugins/builtin/estimate-revisions/headless.ts +3 -3
  337. package/src/plugins/builtin/executives/pane.tsx +3 -1
  338. package/src/plugins/builtin/exposure/drivers.ts +13 -0
  339. package/src/plugins/builtin/exposure/headless.ts +205 -13
  340. package/src/plugins/builtin/exposure/index.tsx +1 -0
  341. package/src/plugins/builtin/exposure/model.ts +23 -3
  342. package/src/plugins/builtin/exposure/pane.tsx +11 -11
  343. package/src/plugins/builtin/fear-greed/index.tsx +14 -10
  344. package/src/plugins/builtin/filing-events/index.tsx +20 -0
  345. package/src/plugins/builtin/fixed-income/index.tsx +46 -0
  346. package/src/plugins/builtin/fixed-income/model.ts +27 -0
  347. package/src/plugins/builtin/fixed-income/pane.tsx +162 -0
  348. package/src/plugins/builtin/fixed-income/shortcut.ts +52 -0
  349. package/src/plugins/builtin/futures/index.tsx +24 -7
  350. package/src/plugins/builtin/futures/series.ts +23 -2
  351. package/src/plugins/builtin/futures/use-front-returns.ts +3 -2
  352. package/src/plugins/builtin/futures-curve/headless.ts +1 -1
  353. package/src/plugins/builtin/futures-curve/index.tsx +1 -1
  354. package/src/plugins/builtin/futures-curve/pane.tsx +6 -4
  355. package/src/plugins/builtin/fx-matrix/client.ts +63 -0
  356. package/src/plugins/builtin/fx-matrix/export.ts +2 -1
  357. package/src/plugins/builtin/fx-matrix/headless.ts +154 -0
  358. package/src/plugins/builtin/fx-matrix/index.tsx +3 -3
  359. package/src/plugins/builtin/gpu/headless.ts +4 -4
  360. package/src/plugins/builtin/help/function-index.ts +2 -0
  361. package/src/plugins/builtin/help/index.tsx +14 -1
  362. package/src/plugins/builtin/help/shortcut-table.tsx +4 -2
  363. package/src/plugins/builtin/insider/detail.tsx +20 -12
  364. package/src/plugins/builtin/insider/index.tsx +2 -2
  365. package/src/plugins/builtin/ipo-calendar/headless.ts +1 -1
  366. package/src/plugins/builtin/iv-history/client.ts +6 -2
  367. package/src/plugins/builtin/iv-history/format.ts +9 -0
  368. package/src/plugins/builtin/iv-history/headless.ts +50 -18
  369. package/src/plugins/builtin/iv-history/index.tsx +3 -0
  370. package/src/plugins/builtin/iv-history/model.ts +35 -4
  371. package/src/plugins/builtin/iv-history/screen-pane.tsx +13 -5
  372. package/src/plugins/builtin/jobs/headless.ts +6 -8
  373. package/src/plugins/builtin/jodi/client.ts +220 -0
  374. package/src/plugins/builtin/jodi/headless.ts +63 -0
  375. package/src/plugins/builtin/jodi/index.tsx +32 -0
  376. package/src/plugins/builtin/jodi/model.ts +75 -0
  377. package/src/plugins/builtin/jodi/pane.tsx +141 -0
  378. package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
  379. package/src/plugins/builtin/market-heatmap/evidence.ts +13 -4
  380. package/src/plugins/builtin/market-heatmap/headless.ts +22 -7
  381. package/src/plugins/builtin/market-heatmap/index.tsx +47 -23
  382. package/src/plugins/builtin/market-heatmap/live.ts +2 -1
  383. package/src/plugins/builtin/market-heatmap/portfolio.ts +67 -21
  384. package/src/plugins/builtin/market-movers/table.ts +2 -2
  385. package/src/plugins/builtin/market-valuation/align.ts +10 -9
  386. package/src/plugins/builtin/members/headless.ts +1 -1
  387. package/src/plugins/builtin/members/pane.tsx +3 -2
  388. package/src/plugins/builtin/mna/distress/headless.ts +4 -4
  389. package/src/plugins/builtin/mna/distress/model.ts +52 -1
  390. package/src/plugins/builtin/mna/distress/pane.tsx +17 -12
  391. package/src/plugins/builtin/mna/headless.ts +3 -3
  392. package/src/plugins/builtin/mna/index.tsx +2 -0
  393. package/src/plugins/builtin/money-markets/headless.ts +5 -4
  394. package/src/plugins/builtin/news/index.tsx +0 -2
  395. package/src/plugins/builtin/news/wire/index.tsx +2 -2
  396. package/src/plugins/builtin/news/wire/industry-pane.tsx +28 -14
  397. package/src/plugins/builtin/news/wire/letters/client.ts +108 -0
  398. package/src/plugins/builtin/news/wire/letters/model.ts +69 -0
  399. package/src/plugins/builtin/news/wire/letters/pane.tsx +155 -0
  400. package/src/plugins/builtin/news/wire/mutes.ts +2 -1
  401. package/src/plugins/builtin/news/wire/news/detail-view.tsx +53 -104
  402. package/src/plugins/builtin/news/wire/news/footer.ts +2 -25
  403. package/src/plugins/builtin/news/wire/news/preset-pane.tsx +0 -2
  404. package/src/plugins/builtin/news/wire/news/query-presets.ts +4 -1
  405. package/src/plugins/builtin/notes/index.tsx +1 -0
  406. package/src/plugins/builtin/openfda/client.ts +123 -15
  407. package/src/plugins/builtin/openfda/model.ts +163 -0
  408. package/src/plugins/builtin/openfda/pane.tsx +109 -65
  409. package/src/plugins/builtin/openfda/types.ts +25 -0
  410. package/src/plugins/builtin/options/index.tsx +3 -0
  411. package/src/plugins/builtin/options/view.tsx +1 -1
  412. package/src/plugins/builtin/options-positioning/headless.ts +3 -3
  413. package/src/plugins/builtin/pe-band/model.ts +3 -2
  414. package/src/plugins/builtin/perps/client.ts +50 -10
  415. package/src/plugins/builtin/perps/equity-row.tsx +29 -16
  416. package/src/plugins/builtin/perps/headless.ts +2 -2
  417. package/src/plugins/builtin/perps/index.tsx +5 -3
  418. package/src/plugins/builtin/perps/list-perpetuals.ts +118 -0
  419. package/src/plugins/builtin/perps/open-market.ts +15 -0
  420. package/src/plugins/builtin/plugin-marketplace/index.tsx +1 -1
  421. package/src/plugins/builtin/plugin-marketplace/pane.tsx +7 -7
  422. package/src/plugins/builtin/plugin-module.ts +3 -1
  423. package/src/plugins/builtin/portfolio-list/allocation.ts +5 -4
  424. package/src/plugins/builtin/portfolio-list/cell-version.ts +8 -1
  425. package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +24 -136
  426. package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +78 -19
  427. package/src/plugins/builtin/portfolio-list/cli/render.ts +249 -52
  428. package/src/plugins/builtin/portfolio-list/cli/shared.ts +44 -12
  429. package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +21 -7
  430. package/src/plugins/builtin/portfolio-list/column-values.ts +103 -25
  431. package/src/plugins/builtin/portfolio-list/headless.ts +51 -15
  432. package/src/plugins/builtin/portfolio-list/index.tsx +5 -1
  433. package/src/plugins/builtin/portfolio-list/live-valuation.ts +25 -13
  434. package/src/plugins/builtin/portfolio-list/mutations.ts +2 -9
  435. package/src/plugins/builtin/portfolio-list/pane/data.ts +5 -1
  436. package/src/plugins/builtin/portfolio-list/pane/index.tsx +46 -8
  437. package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +16 -10
  438. package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +21 -1
  439. package/src/plugins/builtin/portfolio-list/settings.ts +17 -0
  440. package/src/plugins/builtin/portfolio-list/summary/index.tsx +12 -0
  441. package/src/plugins/builtin/portfolio-list/summary/totals.ts +8 -3
  442. package/src/plugins/builtin/portfolio-list/table.tsx +30 -6
  443. package/src/plugins/builtin/power/evidence.ts +86 -8
  444. package/src/plugins/builtin/power/gas-client.ts +110 -0
  445. package/src/plugins/builtin/power/gas-model.ts +194 -0
  446. package/src/plugins/builtin/power/gas.tsx +145 -0
  447. package/src/plugins/builtin/power/headless.ts +9 -2
  448. package/src/plugins/builtin/power/index.tsx +35 -3
  449. package/src/plugins/builtin/power/model.ts +2 -2
  450. package/src/plugins/builtin/power/pane.tsx +7 -3
  451. package/src/plugins/builtin/power/prices-client.ts +139 -0
  452. package/src/plugins/builtin/power/prices-headless.ts +205 -0
  453. package/src/plugins/builtin/power/prices-model.ts +103 -0
  454. package/src/plugins/builtin/power/prices.tsx +202 -0
  455. package/src/plugins/builtin/primary-dealers/client.ts +108 -0
  456. package/src/plugins/builtin/primary-dealers/headless.ts +53 -0
  457. package/src/plugins/builtin/primary-dealers/index.tsx +17 -0
  458. package/src/plugins/builtin/primary-dealers/model.ts +206 -0
  459. package/src/plugins/builtin/primary-dealers/pane.tsx +149 -0
  460. package/src/plugins/builtin/rate-path/headless.ts +38 -18
  461. package/src/plugins/builtin/relative-rotation/headless.ts +3 -3
  462. package/src/plugins/builtin/relative-rotation/index.tsx +3 -0
  463. package/src/plugins/builtin/research/analyst-model.ts +9 -5
  464. package/src/plugins/builtin/research/headless-schema.ts +2 -1
  465. package/src/plugins/builtin/research/index.tsx +2 -0
  466. package/src/plugins/builtin/research/relative-valuation-headless.ts +68 -32
  467. package/src/plugins/builtin/research/relative-valuation-model.ts +45 -24
  468. package/src/plugins/builtin/research/relative-valuation-pane.tsx +39 -4
  469. package/src/plugins/builtin/research-search/article.ts +65 -0
  470. package/src/plugins/builtin/research-search/document-view.tsx +33 -215
  471. package/src/plugins/builtin/research-search/model.ts +0 -9
  472. package/src/plugins/builtin/research-search/pane.tsx +41 -30
  473. package/src/plugins/builtin/research-search/snippet.ts +0 -29
  474. package/src/plugins/builtin/revenue-breakdown/headless.ts +18 -6
  475. package/src/plugins/builtin/scanner/flow-pane.tsx +8 -1
  476. package/src/plugins/builtin/sec/filing-display.tsx +3 -36
  477. package/src/plugins/builtin/sec/headless.ts +25 -3
  478. package/src/plugins/builtin/sec/index.tsx +133 -44
  479. package/src/plugins/builtin/sec/model.ts +148 -2
  480. package/src/plugins/builtin/sec/row-summaries.ts +105 -0
  481. package/src/plugins/builtin/sectors/index.tsx +2 -0
  482. package/src/plugins/builtin/sectors/sector-model.ts +2 -2
  483. package/src/plugins/builtin/series-inventory.ts +3 -0
  484. package/src/plugins/builtin/shared/cloud-denied.ts +15 -0
  485. package/src/plugins/builtin/shared/free-preview.ts +47 -0
  486. package/src/plugins/builtin/shared/locked-rows.tsx +1 -1
  487. package/src/plugins/builtin/shared/report-freshness.ts +3 -1
  488. package/src/plugins/builtin/shared/use-quote-board.ts +179 -43
  489. package/src/plugins/builtin/shared/volatility/options.ts +4 -1
  490. package/src/plugins/builtin/shared/wall-teaser.tsx +2 -2
  491. package/src/plugins/builtin/shared/zip-text.ts +46 -0
  492. package/src/plugins/builtin/short-interest/watch-headless.ts +2 -2
  493. package/src/plugins/builtin/short-interest/watch-model.ts +11 -2
  494. package/src/plugins/builtin/short-volume/headless.ts +1 -1
  495. package/src/plugins/builtin/social-mentions/headless.ts +1 -1
  496. package/src/plugins/builtin/supply-chain/headless.ts +43 -11
  497. package/src/plugins/builtin/supply-chain/model.ts +13 -0
  498. package/src/plugins/builtin/supply-chain/pane.tsx +5 -5
  499. package/src/plugins/builtin/themes/headless.ts +74 -10
  500. package/src/plugins/builtin/themes/model.ts +71 -4
  501. package/src/plugins/builtin/themes/pane.tsx +22 -5
  502. package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +114 -0
  503. package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +57 -2
  504. package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +19 -55
  505. package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +11 -0
  506. package/src/plugins/builtin/ticker-detail/financials/ratios.ts +81 -19
  507. package/src/plugins/builtin/ticker-detail/financials/tab.tsx +1 -1
  508. package/src/plugins/builtin/ticker-detail/headless-schema.ts +30 -0
  509. package/src/plugins/builtin/ticker-detail/headless.ts +88 -2
  510. package/src/plugins/builtin/ticker-detail/index.tsx +23 -11
  511. package/src/plugins/builtin/ticker-detail/overview/model.ts +3 -1
  512. package/src/plugins/builtin/ticker-detail/overview-tab.tsx +8 -6
  513. package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +8 -6
  514. package/src/plugins/builtin/time-sales/headless.ts +23 -1
  515. package/src/plugins/builtin/time-sales/index.tsx +2 -1
  516. package/src/plugins/builtin/trace-bonds/client.ts +196 -0
  517. package/src/plugins/builtin/trace-bonds/headless.ts +69 -0
  518. package/src/plugins/builtin/trace-bonds/index.tsx +33 -0
  519. package/src/plugins/builtin/trace-bonds/model.ts +115 -0
  520. package/src/plugins/builtin/trace-bonds/pane.tsx +191 -0
  521. package/src/plugins/builtin/treasury-auctions/index.tsx +33 -47
  522. package/src/plugins/builtin/treasury-daily/client.ts +96 -0
  523. package/src/plugins/builtin/treasury-daily/headless.ts +69 -0
  524. package/src/plugins/builtin/treasury-daily/index.tsx +17 -0
  525. package/src/plugins/builtin/treasury-daily/model.ts +69 -0
  526. package/src/plugins/builtin/treasury-daily/pane.tsx +140 -0
  527. package/src/plugins/builtin/vol-surface/evidence.ts +7 -1
  528. package/src/plugins/builtin/vol-surface/headless.ts +50 -17
  529. package/src/plugins/builtin/vol-surface/heat-grid.tsx +113 -0
  530. package/src/plugins/builtin/vol-surface/model.ts +39 -6
  531. package/src/plugins/builtin/vol-surface/pane.tsx +14 -13
  532. package/src/plugins/builtin/vol-surface/stored.ts +63 -3
  533. package/src/plugins/builtin/vol-surface/surface.tsx +30 -2
  534. package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +6 -5
  535. package/src/plugins/builtin/world-venue-map/basemap.ts +6 -3
  536. package/src/plugins/builtin/world-venue-map/entity-detail.tsx +15 -2
  537. package/src/plugins/builtin/world-venue-map/geo-draw.tsx +2 -1
  538. package/src/plugins/builtin/world-venue-map/geo-svg.tsx +6 -6
  539. package/src/plugins/builtin/world-venue-map/layered-pane.tsx +16 -9
  540. package/src/plugins/builtin/world-venue-map/map.tsx +145 -13
  541. package/src/plugins/builtin/world-venue-map/model.ts +56 -19
  542. package/src/plugins/builtin/world-venue-map/pane.tsx +5 -2
  543. package/src/plugins/builtin/yield-curve/index.tsx +1 -1
  544. package/src/plugins/builtin-editorial.ts +1 -1
  545. package/src/plugins/catalog-browser.ts +25 -2
  546. package/src/plugins/installer.ts +2 -2
  547. package/src/plugins/loader.ts +15 -0
  548. package/src/plugins/manager-node.ts +1 -1
  549. package/src/plugins/{builtin/plugin-marketplace → marketplace}/feed.ts +2 -2
  550. package/src/plugins/{builtin/plugin-marketplace → marketplace}/model.ts +63 -27
  551. package/src/plugins/{builtin/plugin-marketplace → marketplace}/store.ts +1 -1
  552. package/src/plugins/registry/host-actions.ts +11 -0
  553. package/src/portfolio/collection-name.ts +31 -0
  554. package/src/portfolio/valuation-basis.ts +79 -0
  555. package/src/public/time-series.ts +1 -1
  556. package/src/react/input.ts +33 -1
  557. package/src/react/key-repeat.ts +86 -0
  558. package/src/remote/controller.ts +21 -1
  559. package/src/remote/schema.ts +3 -2
  560. package/src/renderers/browser/main.tsx +1 -1
  561. package/src/renderers/browser/research-entry.ts +4 -2
  562. package/src/renderers/dom/build-assets.ts +14 -5
  563. package/src/renderers/dom/data-table/index.tsx +5 -3
  564. package/src/renderers/dom/data-table/row.tsx +3 -0
  565. package/src/renderers/dom/desktop/controls.tsx +2 -1
  566. package/src/renderers/dom/desktop/icons.tsx +34 -0
  567. package/src/renderers/dom/desktop/list-view.tsx +1 -1
  568. package/src/renderers/dom/desktop/menu.tsx +1 -1
  569. package/src/renderers/dom/desktop/query-bar.tsx +3 -1
  570. package/src/renderers/dom/host/block-glyph-canvas.tsx +6 -3
  571. package/src/renderers/dom/host/box.tsx +7 -2
  572. package/src/renderers/dom/host/chart-surface.tsx +34 -2
  573. package/src/renderers/dom/host/resize-rows.ts +111 -0
  574. package/src/renderers/dom/host/scroll-box.tsx +32 -0
  575. package/src/renderers/dom/host/size-observer.ts +24 -9
  576. package/src/renderers/dom/host/sticky-scroll.ts +147 -0
  577. package/src/renderers/dom/host/style.ts +15 -1
  578. package/src/renderers/dom/host/surface-3d.tsx +15 -7
  579. package/src/renderers/dom/host/surface-fit.ts +410 -0
  580. package/src/renderers/dom/host/text.tsx +2 -2
  581. package/src/renderers/dom/input-host.tsx +1 -0
  582. package/src/renderers/dom/styles.css +109 -16
  583. package/src/renderers/electrobun/bun/application-menu/click.ts +18 -0
  584. package/src/renderers/electrobun/bun/desktop/app-badge.ts +37 -0
  585. package/src/renderers/electrobun/bun/desktop/backend.ts +1 -0
  586. package/src/renderers/electrobun/bun/desktop/host-requests.ts +8 -0
  587. package/src/renderers/electrobun/bun/desktop/macos-dock-badge.ts +37 -0
  588. package/src/renderers/electrobun/bun/desktop/macos-dock-icon.ts +2 -40
  589. package/src/renderers/electrobun/bun/desktop/macos-objc.ts +41 -0
  590. package/src/renderers/electrobun/bun/index.ts +3 -2
  591. package/src/renderers/electrobun/bun/tui-entry.ts +18 -1
  592. package/src/renderers/electrobun/shared/protocol.ts +3 -1
  593. package/src/renderers/electrobun/view/app-badge-host.ts +17 -0
  594. package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +20 -3
  595. package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +59 -24
  596. package/src/renderers/electrobun/view/main.tsx +5 -3
  597. package/src/renderers/electrobun/view/remote/asset-data-client.ts +7 -1
  598. package/src/renderers/opentui/chart-surface.tsx +1 -0
  599. package/src/renderers/opentui/frame-capture.ts +33 -0
  600. package/src/renderers/opentui/host.tsx +10 -13
  601. package/src/renderers/opentui/pane-image/glyphs-license.txt +107 -0
  602. package/src/renderers/opentui/pane-image/glyphs.json +1 -0
  603. package/src/renderers/opentui/pane-image/index.ts +107 -0
  604. package/src/renderers/opentui/pane-image/raster.ts +428 -0
  605. package/src/renderers/opentui/start.tsx +3 -3
  606. package/src/renderers/opentui/test-utils.tsx +3 -0
  607. package/src/renderers/opentui/ui-host.tsx +29 -1
  608. package/src/series/resolve.ts +3 -2
  609. package/src/series/types.ts +8 -0
  610. package/src/series/validate.ts +2 -2
  611. package/src/shares/api.ts +5 -1
  612. package/src/shares/chat.ts +34 -0
  613. package/src/shares/dialog.tsx +295 -0
  614. package/src/shares/flow.tsx +56 -0
  615. package/src/shares/live.ts +14 -22
  616. package/src/shares/location.ts +31 -0
  617. package/src/shares/open.ts +26 -0
  618. package/src/shares/pane-image.ts +164 -0
  619. package/src/shares/personal-pane.ts +52 -0
  620. package/src/shares/portable-layout.ts +4 -2
  621. package/src/shares/prepare.ts +20 -0
  622. package/src/sources/gloomberb-cloud/index.ts +109 -5
  623. package/src/sources/gloomberb-cloud/normalizers.ts +7 -0
  624. package/src/sources/gloomberb-cloud/perpetuals.ts +249 -0
  625. package/src/sources/history-coverage.ts +22 -4
  626. package/src/sources/history-result.ts +3 -1
  627. package/src/sources/history-retention.ts +11 -0
  628. package/src/sources/listing-target.ts +4 -0
  629. package/src/sources/provider-errors.ts +2 -1
  630. package/src/sources/provider-router/batches.ts +18 -2
  631. package/src/sources/provider-router/index.ts +16 -1
  632. package/src/state/app/context/index.tsx +3 -2
  633. package/src/state/hooks/inline-tickers.ts +49 -11
  634. package/src/test-support/builtin-panes.ts +31 -0
  635. package/src/test-support/shell-pane-keys.tsx +1 -0
  636. package/src/theme/theme-context.tsx +15 -1
  637. package/src/tickers/instrument-kind.ts +9 -1
  638. package/src/tickers/listing-name.ts +34 -0
  639. package/src/tickers/listing-venues.ts +154 -0
  640. package/src/tickers/open-target.ts +11 -3
  641. package/src/tickers/perpetual-listing.ts +151 -0
  642. package/src/tickers/prediction-listing.ts +26 -0
  643. package/src/tickers/search/index.ts +34 -6
  644. package/src/tickers/search/ranking.ts +85 -4
  645. package/src/tickers/ticker-changes.ts +213 -0
  646. package/src/time-series/chart-data.ts +2 -0
  647. package/src/time-series/economic.ts +2 -6
  648. package/src/time-series/ice-credit.ts +39 -0
  649. package/src/time-series/parsed-history-cache.ts +41 -11
  650. package/src/time-series/resolve.ts +163 -28
  651. package/src/time-series/studies.ts +1 -0
  652. package/src/time-series/types.ts +8 -0
  653. package/src/types/config.ts +4 -2
  654. package/src/types/data-provider.ts +19 -1
  655. package/src/types/financials.ts +23 -0
  656. package/src/types/headless.ts +74 -0
  657. package/src/types/instrument.ts +4 -0
  658. package/src/types/plugin.ts +60 -2
  659. package/src/types/price-history.ts +2 -0
  660. package/src/types/ticker-changes.ts +26 -0
  661. package/src/ui/context-menu.tsx +13 -1
  662. package/src/ui/host.tsx +49 -7
  663. package/src/ui/live-resize.ts +10 -0
  664. package/src/ui/live-stretch.ts +51 -19
  665. package/src/ui/sticky-scroll.ts +7 -0
  666. package/src/utils/central-banks.ts +76 -0
  667. package/src/utils/cli-output.ts +126 -16
  668. package/src/utils/crypto-pair.ts +1 -1
  669. package/src/utils/currency-pair.ts +66 -0
  670. package/src/utils/currency-units.ts +11 -0
  671. package/src/utils/datetime-format.ts +27 -6
  672. package/src/utils/decimal-comma.ts +57 -0
  673. package/src/utils/dom-screenshot.ts +3 -1
  674. package/src/utils/double-escape-close.ts +15 -1
  675. package/src/utils/exchanges.ts +36 -0
  676. package/src/utils/format.ts +19 -2
  677. package/src/utils/forward-dividend.ts +14 -0
  678. package/src/utils/fx-status.ts +6 -1
  679. package/src/utils/guards.ts +25 -0
  680. package/src/utils/inline-content-tokenizer.ts +22 -3
  681. package/src/utils/local-utc-offset.ts +37 -0
  682. package/src/utils/market-capitalization.ts +8 -0
  683. package/src/utils/one-shot.ts +73 -0
  684. package/src/utils/options.ts +37 -8
  685. package/src/utils/plugin-proxy-hosts.json +8 -1
  686. package/src/utils/utc-time.ts +12 -0
  687. package/src/plugins/builtin/credit-boards/pane.tsx +0 -30
  688. package/src/ui/pane-fill.ts +0 -11
  689. /package/src/plugins/{builtin/plugin-marketplace → marketplace}/activation.ts +0 -0
  690. /package/src/plugins/{builtin/plugin-marketplace → marketplace}/ids.ts +0 -0
  691. /package/src/plugins/{builtin/plugin-marketplace → marketplace}/packs.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gloomberb",
3
- "version": "0.16.5",
3
+ "version": "0.17.0",
4
4
  "packageManager": "bun@1.3.11",
5
5
  "description": "Market research and portfolio tracker for the terminal",
6
6
  "module": "src/public/index.ts",
@@ -68,6 +68,7 @@
68
68
  "plugins:registry:check": "bun run scripts/check-registry-plugins.ts",
69
69
  "web:proxy-hosts": "bun run scripts/generate-web-proxy-hosts.ts",
70
70
  "map:data": "bun run scripts/generate-world-map-data.ts",
71
+ "glyphs:terminal": "bun run scripts/generate-terminal-glyphs.ts",
71
72
  "macro-releases:update": "bun run scripts/update-macro-releases.ts",
72
73
  "web:proxy-hosts:check": "bun run scripts/generate-web-proxy-hosts.ts --check",
73
74
  "typecheck": "bun run typecheck:opentui && bun run typecheck:dom && bun run typecheck:cloudflare && bun run typecheck:scripts && bun run typecheck:plugin-tests",
@@ -84,6 +85,7 @@
84
85
  "check:pane-chrome": "bun run scripts/pane-chrome/checks.ts",
85
86
  "check:pane-screenshot": "bun run scripts/pane-chrome/screenshot.ts",
86
87
  "check:pane-rest": "bun run scripts/pane-chrome/rest-diff.ts",
88
+ "check:pane-layout": "bun run scripts/pane-chrome/layout-sweep.ts",
87
89
  "benchmark:pane-drag:compare": "bun run scripts/pane-chrome/frame-budget.ts",
88
90
  "test:global-upgrade": "bun run scripts/smoke-global-upgrade.ts",
89
91
  "release": "./scripts/release.sh"
@@ -29,7 +29,12 @@ export interface CentralBankRow {
29
29
  /** When the bank's own site last showed the same level as a lagging BIS observation. */
30
30
  confirmedAt?: string | null
31
31
  confirmationSourceUrl?: string | null
32
- nextMeeting: { date: string; sourceUrl: string; verifiedAt: string } | null
32
+ /** The bank's next decision from its own published calendar, or China's next 1-year LPR fixing (`kind`). */
33
+ nextMeeting: { date: string; sourceUrl: string; verifiedAt: string; kind?: "decision" | "fixing" } | null
34
+ /** Why `nextMeeting` is null; older servers leave it out, and a null meeting then reads as not published. */
35
+ nextMeetingStatus?: "scheduled" | "not-published" | "not-verified" | "no-policy-rate"
36
+ /** The BIS series definition and breaks, also in `notes`: history a citation of the latest rate leaves out. */
37
+ seriesNotes?: string[]
33
38
  }
34
39
 
35
40
  export interface CentralBankRatesPayload {
@@ -0,0 +1,47 @@
1
+ /**
2
+ * What a chat message opens in the terminal beside its text, as the server
3
+ * sends it: the news story a Gloom Wire headline names, the calendar a morning
4
+ * post reads from. Only the server writes it, from ids it already resolved.
5
+ * A kind this version does not know, or a malformed one, reads as absent and
6
+ * the message is plain text, as it is for a server that predates the field.
7
+ */
8
+ export type ChatPaneLink =
9
+ | { kind: "news-story"; storyId: string }
10
+ | { kind: "economic-calendar"; date: string }
11
+ | { kind: "earnings-calendar"; date: string }
12
+ | { kind: "ipo-calendar"; date: string }
13
+ | { kind: "energy-report"; report: "petroleum" | "gas"; weekEnding: string };
14
+
15
+ const STORY_ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
16
+ const DATE = /^\d{4}-\d{2}-\d{2}$/;
17
+ const DATED_KINDS: ReadonlySet<string> = new Set(["economic-calendar", "earnings-calendar", "ipo-calendar"]);
18
+
19
+ function isCalendarDate(value: unknown): value is string {
20
+ if (typeof value !== "string" || !DATE.test(value)) return false;
21
+ const date = new Date(`${value}T00:00:00Z`);
22
+ return Number.isFinite(date.getTime()) && date.toISOString().startsWith(value);
23
+ }
24
+
25
+ export function parseChatPaneLink(value: unknown): ChatPaneLink | null {
26
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
27
+ const link = value as Record<string, unknown>;
28
+ const keys = Object.keys(link).sort().join(",");
29
+ if (link.kind === "news-story") {
30
+ return keys === "kind,storyId" && typeof link.storyId === "string" && STORY_ID.test(link.storyId)
31
+ ? { kind: "news-story", storyId: link.storyId }
32
+ : null;
33
+ }
34
+ if (typeof link.kind === "string" && DATED_KINDS.has(link.kind)) {
35
+ return keys === "date,kind" && isCalendarDate(link.date)
36
+ ? { kind: link.kind, date: link.date } as ChatPaneLink
37
+ : null;
38
+ }
39
+ if (link.kind === "energy-report") {
40
+ return keys === "kind,report,weekEnding"
41
+ && (link.report === "petroleum" || link.report === "gas")
42
+ && isCalendarDate(link.weekEnding)
43
+ ? { kind: "energy-report", report: link.report, weekEnding: link.weekEnding }
44
+ : null;
45
+ }
46
+ return null;
47
+ }
@@ -4,6 +4,7 @@ import {
4
4
  normalizeChatDiscordLink,
5
5
  normalizeChatMessage,
6
6
  normalizeChatMessages,
7
+ normalizeChatReactions,
7
8
  normalizeChatState,
8
9
  } from "./normalizers";
9
10
  import { CHAT_ATTACHMENTS_FEATURE, type CloudApiSocket } from "./socket";
@@ -14,9 +15,11 @@ import type {
14
15
  ChatDiscordLink,
15
16
  ChatMessage,
16
17
  ChatNotification,
18
+ ChatReactionsUpdate,
17
19
  ChatStateResponse,
18
20
  } from "./types";
19
21
  import type { CloudApiRequest } from "./request";
22
+ import { localUtcOffsetMinutes } from "../utils/local-utc-offset";
20
23
  type ChatNotificationListener = (notification: ChatNotification) => void;
21
24
  type ChatPresenceListener = (onlineCount: number) => void;
22
25
 
@@ -125,8 +128,15 @@ export class CloudChatApi {
125
128
  return this.request<{ onlineCount: number }>("/chat/presence");
126
129
  }
127
130
 
131
+ /**
132
+ * Channels, unread counts and pending notifications. It also reports this
133
+ * machine's current offset from UTC, so the card others open on you shows
134
+ * your local time; a server that predates it ignores the parameter.
135
+ */
128
136
  async getState(): Promise<ChatStateResponse> {
129
- const state = await this.request<ChatStateResponse>("/chat/state");
137
+ const offset = localUtcOffsetMinutes();
138
+ const query = offset === null ? "" : `?${new URLSearchParams({ utcOffset: String(offset) })}`;
139
+ const state = await this.request<ChatStateResponse>(`/chat/state${query}`);
130
140
  this.noteMessages((state.notifications ?? []).map((notification) => notification?.message));
131
141
  return normalizeChatState(state);
132
142
  }
@@ -258,6 +268,30 @@ export class CloudChatApi {
258
268
  return normalizeChatMessage(message);
259
269
  }
260
270
 
271
+ /**
272
+ * Sets your reaction with one emoji on a message; setting what is already
273
+ * there changes nothing. Answers the message's reactions as they stand.
274
+ */
275
+ async setReaction(
276
+ channelId: string,
277
+ messageId: string,
278
+ emoji: string,
279
+ reacted: boolean,
280
+ ): Promise<ChatReactionsUpdate> {
281
+ const answer = await this.request<{ reactions?: unknown }>(
282
+ `/chat/channels/${channelId}/messages/${messageId}/reactions`,
283
+ {
284
+ method: "PUT",
285
+ body: JSON.stringify({ emoji, reacted }),
286
+ },
287
+ );
288
+ return { channelId, messageId, reactions: normalizeChatReactions(answer?.reactions) };
289
+ }
290
+
291
+ subscribeReactions(listener: (update: ChatReactionsUpdate) => void): () => void {
292
+ return this.options.socket.subscribeChatReactions(listener);
293
+ }
294
+
261
295
  /** Whether this account is tied to a Discord person. Throws a 404 or 501 `ApiRequestError` on a server without Discord sync. */
262
296
  async getDiscordLink(): Promise<ChatDiscordLink> {
263
297
  return normalizeChatDiscordLink(await this.options.request<unknown>("/chat/discord/link"));
@@ -27,6 +27,8 @@ export interface CdxBoardIndex {
27
27
  /** In the quote's unit, on one contract across a roll. */
28
28
  change1D: number | null;
29
29
  change1W: number | null;
30
+ /** Absent from a server that predates it. */
31
+ change1M?: number | null;
30
32
  /** Oldest first, the on-the-run 5Y contract each day. */
31
33
  points: CreditBoardPoint[];
32
34
  }
@@ -5,7 +5,8 @@ import type { CatalystResponse, CatalystDetail, CatalystFilters, CatalystStatus,
5
5
  import type { KpisPayload, GuidancePayload, KpiQueryOptions } from "./company-kpis";
6
6
  import { companyDisclosurePath } from "./company-kpis";
7
7
  import type { PowerBoard, PowerDetail, PowerFilter, PowerHistory } from "./power";
8
- import type { PerpBoardPayload, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery, PerpMarketPayload } from "./perps";
8
+ import type { PerpBoardPayload, PerpEquitiesPayload, PerpEquityListing, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery,
9
+ PerpMarketPayload } from "./perps";
9
10
  import type { ExposureRequest, ExposurePayload, ExposureScenario } from "./exposure";
10
11
  import type { SupplyChainPayload, SupplyOptions } from "./supply-chain";
11
12
  import { supplyGraphQuery, type GraphOptions, type GraphPayload } from "./supply-chain-graph";
@@ -22,7 +23,10 @@ import {
22
23
  type GoingConcernParams,
23
24
  type InsolvencyNoticesParams,
24
25
  } from "./distress";
26
+ import type { LettersParams } from "./letters";
25
27
  import type { IpoCalendarParams, IpoCalendarPayload } from "./ipo";
28
+ import type { TickerChanges } from "../types/ticker-changes";
29
+ import type { OrganizationTickersResponse } from "./organization-tickers";
26
30
  import type { CryptoMarketsPayload } from "./crypto-markets";
27
31
  import type { CentralBankRatesPayload } from "./central-bank-rates";
28
32
  import type { EstimateRevisionsPayload } from "./estimate-revisions";
@@ -35,6 +39,7 @@ import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange
35
39
  import type { FuturesContractTermsPayload, FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
36
40
  import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
37
41
  import type { DoeBoardPayload } from "./doe";
42
+ import type { CarbonBoard, CarbonHistory, EuropePowerBoard, EuropePowerHistory, GasStorageBoard, GasStorageHistory, GasStorageSeasonal } from "./europe-energy";
38
43
  import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
39
44
  import type { CpiBoardPayload } from "./cpi";
40
45
  import type { TapeSnapshot } from "./tape";
@@ -110,6 +115,7 @@ import type {
110
115
  CloudAnalystResearchPayload,
111
116
  CloudShortInterestPayload,
112
117
  CloudCdsHistoryResponse,
118
+ CloudCdsLevelsResponse,
113
119
  CloudCdsResponse,
114
120
  CloudCongressHousePayload,
115
121
  CloudEarningsCallListPayload,
@@ -373,6 +379,26 @@ export class CloudDataApi {
373
379
  );
374
380
  }
375
381
 
382
+ /** Where the issuer that held a US symbol trades now, or what the symbol's holder was called before. */
383
+ async getCloudTickerChanges(
384
+ symbol: string,
385
+ options: { signal?: AbortSignal } = {},
386
+ ): Promise<CloudMarketResponse<TickerChanges>> {
387
+ return this.request<CloudMarketResponse<TickerChanges>>(
388
+ `/market/ticker-changes?${new URLSearchParams({ symbol: symbol.trim().toUpperCase() })}`,
389
+ options.signal ? { signal: options.signal } : undefined,
390
+ );
391
+ }
392
+
393
+ /** The listed company each organization name resolves to, if any: a trial's lead sponsors, a page at a time. */
394
+ async getCloudOrganizationTickers(names: readonly string[], signal?: AbortSignal): Promise<OrganizationTickersResponse> {
395
+ return this.request<OrganizationTickersResponse>("/market/organization-tickers", {
396
+ method: "POST",
397
+ body: JSON.stringify({ names }),
398
+ signal,
399
+ });
400
+ }
401
+
376
402
  async getCloudHistory(
377
403
  symbol: string,
378
404
  exchange: string,
@@ -518,6 +544,9 @@ export class CloudDataApi {
518
544
  const query = exchange === undefined ? "" : `?${new URLSearchParams({ identity: "listing", exchange })}`;
519
545
  return this.request(`/cloud/perps/equity/${encodeURIComponent(symbol)}${query}`);
520
546
  }
547
+ async getCloudPerpsEquities(listings: readonly PerpEquityListing[]): Promise<PerpEquitiesPayload> {
548
+ return this.request("/cloud/perps/equities", { method: "POST", body: JSON.stringify({ listings }) });
549
+ }
521
550
  async getCloudPerpsMarket(marketId: string): Promise<PerpMarketPayload> { return this.request(`/cloud/perps/market?${new URLSearchParams({ marketId })}`); }
522
551
 
523
552
  async analyzeCloudExposure(request: ExposureRequest): Promise<ExposurePayload> {
@@ -577,6 +606,50 @@ export class CloudDataApi {
577
606
  return this.request<PowerDetail>(`/cloud/power/projects/${encodeURIComponent(id)}?${params}`, { signal });
578
607
  }
579
608
 
609
+ /** European day-ahead power prices by country, latest day first per market. */
610
+ async getCloudEuropePower(): Promise<EuropePowerBoard> {
611
+ return this.request<EuropePowerBoard>("/cloud/europe-energy/power", { signal: AbortSignal.timeout(30_000) });
612
+ }
613
+
614
+ /** One market's daily day-ahead prices from `from` (all of them without one), oldest first. */
615
+ async getCloudEuropePowerHistory(code: string, from?: string | null): Promise<EuropePowerHistory> {
616
+ const query = from ? `?${new URLSearchParams({ from })}` : "";
617
+ return this.request<EuropePowerHistory>(
618
+ `/cloud/europe-energy/power/${encodeURIComponent(code)}/history${query}`,
619
+ { signal: AbortSignal.timeout(30_000) },
620
+ );
621
+ }
622
+
623
+ /** The EU carbon allowance (EUA) auction price as of its latest auction day, with the latest auctions. */
624
+ async getCloudEuropeCarbon(): Promise<CarbonBoard> {
625
+ return this.request<CarbonBoard>("/cloud/europe-energy/carbon", { signal: AbortSignal.timeout(30_000) });
626
+ }
627
+
628
+ /** The daily EUA auction price from `from` (every auction day since 2020 without one), oldest first. */
629
+ async getCloudEuropeCarbonHistory(from?: string | null): Promise<CarbonHistory> {
630
+ const query = from ? `?${new URLSearchParams({ from })}` : "";
631
+ return this.request<CarbonHistory>(`/cloud/europe-energy/carbon/history${query}`, { signal: AbortSignal.timeout(30_000) });
632
+ }
633
+
634
+ /** European gas storage: the EU aggregate and each member state as of its latest gas day. */
635
+ async getCloudEuropeGas(): Promise<GasStorageBoard> {
636
+ return this.request<GasStorageBoard>("/cloud/europe-energy/gas", { signal: AbortSignal.timeout(30_000) });
637
+ }
638
+
639
+ /** One area's gas days from `from` (all kept without one), oldest first. */
640
+ async getCloudEuropeGasHistory(code: string, from?: string | null): Promise<GasStorageHistory> {
641
+ const query = from ? `?${new URLSearchParams({ from })}` : "";
642
+ return this.request<GasStorageHistory>(
643
+ `/cloud/europe-energy/gas/${encodeURIComponent(code)}/history${query}`,
644
+ { signal: AbortSignal.timeout(30_000) },
645
+ );
646
+ }
647
+
648
+ /** One area's latest year against last year and its five-year range, day by day. */
649
+ async getCloudEuropeGasSeasonal(code: string): Promise<GasStorageSeasonal> {
650
+ return this.request<GasStorageSeasonal>(`/cloud/europe-energy/gas/${encodeURIComponent(code)}/seasonal`, { signal: AbortSignal.timeout(30_000) });
651
+ }
652
+
580
653
  async getCloudGpuBoard(): Promise<GpuBoardPayload> {
581
654
  return this.request<GpuBoardPayload>("/cloud/gpu/board");
582
655
  }
@@ -684,6 +757,12 @@ export class CloudDataApi {
684
757
  return this.request<unknown>(`/public/insolvency-notices${distressQuery(params)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
685
758
  }
686
759
 
760
+ async getPublicLetters(params: LettersParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
761
+ const { kinds, ...rest } = params;
762
+ const query = distressQuery({ kind: kinds?.length ? kinds.join(",") : undefined, ...rest });
763
+ return this.request<unknown>(`/public/letters${query}`, { signal: signalWithTimeout(options?.signal, 30_000) });
764
+ }
765
+
687
766
  async getCloudIpoCalendar(params: IpoCalendarParams = {}, options?: { signal?: AbortSignal }): Promise<IpoCalendarPayload> {
688
767
  const query = new URLSearchParams();
689
768
  for (const [key, value] of Object.entries(params)) {
@@ -735,6 +814,11 @@ export class CloudDataApi {
735
814
  return this.request<CloudCdsHistoryResponse>(cloudCdsHistoryPath(params), { signal: AbortSignal.timeout(30_000) });
736
815
  }
737
816
 
817
+ /** Every listed issuer's latest 5Y level in one request. */
818
+ async getCloudCdsLevels(): Promise<CloudCdsLevelsResponse> {
819
+ return this.request<CloudCdsLevelsResponse>("/cloud/credit/cds/levels", { signal: AbortSignal.timeout(30_000) });
820
+ }
821
+
738
822
  async getCloudCdxBoard(params: CloudCreditBoardParams = {}): Promise<CdxBoardPayload> {
739
823
  return this.request<CdxBoardPayload>(cloudCreditBoardPath("cdx", params), { signal: AbortSignal.timeout(30_000) });
740
824
  }
@@ -38,6 +38,7 @@ export const NUMERIC_FIELDS = [
38
38
  "return1YPercent",
39
39
  "fromHigh52WPercent",
40
40
  "beta",
41
+ "atrPercent",
41
42
  "priceToBook",
42
43
  "evToEbitda",
43
44
  "roePercent",
@@ -58,6 +59,8 @@ export const RESEARCH_FIELDS = [
58
59
  "return1WPercent", "return1MPercent", "return3MPercent", "returnYtdPercent", "return1YPercent", "fromHigh52WPercent",
59
60
  "beta", "priceToBook", "evToEbitda", "roePercent", "epsRevision30dPercent", "analystUpsidePercent", "ivRank", "ivToHv",
60
61
  ] as const;
62
+ /** Average true range as a percent of price; listed only when asked (`include=volatility`), and omitted by a server from before it. */
63
+ export const VOLATILITY_FIELDS = ["atrPercent"] as const;
61
64
  export const CATEGORY_FIELDS = [
62
65
  "symbol",
63
66
  "exchange",
@@ -0,0 +1,197 @@
1
+ /** Who publishes the prices; their licence asks for this attribution. */
2
+ interface EuropeEnergySource {
3
+ name: string;
4
+ licence: string;
5
+ url: string;
6
+ }
7
+
8
+ /** One market's latest day-ahead price and its context, all as of `date`. */
9
+ export interface PowerPriceRow {
10
+ /** ISO 3166 alpha-2: DE, FR, GB. */
11
+ code: string;
12
+ name: string;
13
+ /** Latest delivery day with a price. */
14
+ date: string | null;
15
+ /** EUR/MWh, the day's load-weighted average of the day-ahead auction. */
16
+ price: number | null;
17
+ previousDate: string | null;
18
+ change: number | null;
19
+ average7: number | null;
20
+ average30: number | null;
21
+ yearAgoDate: string | null;
22
+ yearAgo: number | null;
23
+ low52w: number | null;
24
+ high52w: number | null;
25
+ /** Weekly means over the year to `date`, oldest first. */
26
+ trail: Array<{ date: string; value: number }>;
27
+ }
28
+
29
+ export interface EuropePowerBoard {
30
+ generatedAt: string;
31
+ status: "available" | "unavailable";
32
+ market: "day-ahead";
33
+ unit: "EUR/MWh";
34
+ source: EuropeEnergySource;
35
+ /** When the published file was last read, and when its publisher last changed it. */
36
+ checkedAt: string | null;
37
+ publishedAt: string | null;
38
+ gaps: string[];
39
+ rows: PowerPriceRow[];
40
+ }
41
+
42
+ export interface EuropePowerHistory {
43
+ code: string;
44
+ name: string;
45
+ market: "day-ahead";
46
+ unit: "EUR/MWh";
47
+ source: EuropeEnergySource;
48
+ /** Oldest first. */
49
+ points: Array<{ date: string; value: number }>;
50
+ }
51
+
52
+ /** One EU ETS primary-market auction. Prices in EUR/tCO2, volumes in tCO2. */
53
+ interface CarbonAuction {
54
+ date: string;
55
+ auction: string;
56
+ contract: string;
57
+ /** successful, cancelled. */
58
+ status: string;
59
+ /** EU (common platform), DE, PL, XI (Northern Ireland). */
60
+ zone: string | null;
61
+ /** Null when the auction did not clear. */
62
+ price: number | null;
63
+ minBid: number | null;
64
+ maxBid: number | null;
65
+ meanBid: number | null;
66
+ medianBid: number | null;
67
+ volume: number;
68
+ coverRatio: number | null;
69
+ bidders: number | null;
70
+ successfulBidders: number | null;
71
+ /** An aviation allowance (EUAA) auction, which is not the EUA price. */
72
+ aviation: boolean;
73
+ }
74
+
75
+ /** The EUA price as of its latest auction day: the day's cleared auctions, volume-weighted. */
76
+ interface CarbonPriceRow extends Omit<PowerPriceRow, "code"> {
77
+ code: "EUA";
78
+ /** tCO2 auctioned that day, and in how many auctions. */
79
+ volume: number | null;
80
+ auctions: number | null;
81
+ }
82
+
83
+ export interface CarbonBoard {
84
+ generatedAt: string;
85
+ status: "available" | "unavailable";
86
+ /** The primary auction clearing price, not a futures settlement. */
87
+ market: "primary auction";
88
+ unit: "EUR/tCO2";
89
+ source: { name: string; url: string };
90
+ checkedAt: string | null;
91
+ publishedAt: string | null;
92
+ gaps: string[];
93
+ row: CarbonPriceRow;
94
+ /** Newest first. */
95
+ auctions: CarbonAuction[];
96
+ }
97
+
98
+ export interface CarbonHistory {
99
+ code: "EUA";
100
+ name: string;
101
+ market: "primary auction";
102
+ unit: "EUR/tCO2";
103
+ source: { name: string; url: string };
104
+ /** Each auction day's price, oldest first. */
105
+ points: Array<{ date: string; value: number }>;
106
+ }
107
+
108
+ /** Percent full, TWh in storage, GWh/day flows: as GIE AGSI+ publishes them. */
109
+ interface GasStorageUnits {
110
+ full: "%";
111
+ storage: "TWh";
112
+ flow: "GWh/day";
113
+ }
114
+
115
+ /** The platform's own flag for a gas day. */
116
+ type GasReadingStatus = "estimated" | "confirmed";
117
+
118
+ /** Fullness on the same calendar day in the five years before the gas day's own; fewer where history is short. */
119
+ interface GasFiveYear {
120
+ years: number[];
121
+ min: number;
122
+ max: number;
123
+ average: number;
124
+ /** Percentage points against the average. */
125
+ vsAverage: number;
126
+ /** 0 at the low, 100 at the high, beyond either outside the range; null under two years. */
127
+ position: number | null;
128
+ }
129
+
130
+ /** One area's latest gas day with a reading: the EU aggregate or a member state. */
131
+ export interface GasStorageRow {
132
+ /** EU, or ISO 3166 alpha-2. */
133
+ code: string;
134
+ name: string;
135
+ /** The gas day, dated by its start. */
136
+ gasDay: string | null;
137
+ status: GasReadingStatus | null;
138
+ /** Percent of working gas volume. */
139
+ full: number | null;
140
+ /** TWh. */
141
+ gasInStorage: number | null;
142
+ workingGasVolume: number | null;
143
+ /** GWh/day. */
144
+ injection: number | null;
145
+ withdrawal: number | null;
146
+ previousGasDay: string | null;
147
+ /** Percentage points against the gas day before. */
148
+ change: number | null;
149
+ yearAgo: { gasDay: string; full: number; gasInStorage: number | null; change: number } | null;
150
+ fiveYear: GasFiveYear | null;
151
+ /** Fullness at the end of each week of the year to `gasDay`, oldest first. */
152
+ trail: Array<{ date: string; value: number }>;
153
+ }
154
+
155
+ export interface GasStorageBoard {
156
+ generatedAt: string;
157
+ status: "available" | "unavailable";
158
+ units: GasStorageUnits;
159
+ source: { name: string; url: string };
160
+ /** When every area was last read from the platform. */
161
+ checkedAt: string | null;
162
+ gaps: string[];
163
+ /** The EU aggregate first, then the member states by name. */
164
+ rows: GasStorageRow[];
165
+ }
166
+
167
+ export interface GasStorageHistory {
168
+ code: string;
169
+ name: string;
170
+ units: GasStorageUnits;
171
+ source: { name: string; url: string };
172
+ /** Every gas day with a reading, oldest first; a missing figure is null, never zero. */
173
+ points: Array<{
174
+ date: string;
175
+ status: GasReadingStatus;
176
+ full: number | null;
177
+ gasInStorage: number | null;
178
+ workingGasVolume: number | null;
179
+ injection: number | null;
180
+ withdrawal: number | null;
181
+ }>;
182
+ }
183
+
184
+ /** The latest gas day's calendar year against last year and the five years before, on that year's calendar. */
185
+ export interface GasStorageSeasonal {
186
+ code: string;
187
+ name: string;
188
+ unit: "%";
189
+ source: { name: string; url: string };
190
+ year: number | null;
191
+ /** The band years holding any reading. */
192
+ years: number[];
193
+ current: Array<[string, number]>;
194
+ previous: Array<[string, number]>;
195
+ /** [date, min, average, max, years with a reading]. */
196
+ band: Array<[string, number | null, number | null, number | null, number]>;
197
+ }
@@ -40,6 +40,7 @@ import type {
40
40
 
41
41
  export { setCloudApiFetchTransport, setCloudApiUploadTransport } from "./request";
42
42
  export type { ChatAttachmentUpload } from "./chat";
43
+ export type { ChatPaneLink } from "./chat-pane-link";
43
44
  export { NoteConflictError } from "./notes";
44
45
  export { ThesisConflictError, ThesisGoalpostError } from "./theses";
45
46
  export { TeamRevisionConflictError } from "./views";
@@ -643,6 +644,8 @@ class GloomApiClient {
643
644
  chatAttachmentsSupported = this.chat.attachmentsSupported.bind(this.chat);
644
645
  subscribeChatAttachmentSupport = this.chat.subscribeAttachmentSupport.bind(this.chat);
645
646
  editMessage = this.chat.editMessage.bind(this.chat);
647
+ setChatReaction = this.chat.setReaction.bind(this.chat);
648
+ subscribeChatReactions = this.chat.subscribeReactions.bind(this.chat);
646
649
  connectChannel = this.chat.connectChannel.bind(this.chat);
647
650
  subscribeChatNotifications = this.chat.subscribeNotifications.bind(this.chat);
648
651
  subscribeChatPresence = this.chat.subscribePresence.bind(this.chat);
@@ -738,6 +741,8 @@ class GloomApiClient {
738
741
  getCloudShortInterest = this.data.getCloudShortInterest.bind(this.data);
739
742
  getCloudAnalystResearch = this.data.getCloudAnalystResearch.bind(this.data);
740
743
  getCloudCorporateActions = this.data.getCloudCorporateActions.bind(this.data);
744
+ getCloudTickerChanges = this.data.getCloudTickerChanges.bind(this.data);
745
+ getCloudOrganizationTickers = this.data.getCloudOrganizationTickers.bind(this.data);
741
746
  getCloudHistory = this.data.getCloudHistory.bind(this.data);
742
747
  getCloudExchangeRate = this.data.getCloudExchangeRate.bind(this.data);
743
748
  getCloudEconomicCalendar = this.data.getCloudEconomicCalendar.bind(this.data);
@@ -769,6 +774,7 @@ class GloomApiClient {
769
774
  getPublicGoingConcern = this.data.getPublicGoingConcern.bind(this.data);
770
775
  getPublicDistressDesignations = this.data.getPublicDistressDesignations.bind(this.data);
771
776
  getPublicInsolvencyNotices = this.data.getPublicInsolvencyNotices.bind(this.data);
777
+ getPublicLetters = this.data.getPublicLetters.bind(this.data);
772
778
  getCloudIpoCalendar = this.data.getCloudIpoCalendar.bind(this.data);
773
779
  getCloudShortVolume = this.data.getCloudShortVolume.bind(this.data);
774
780
  getCloudSocialMentions = this.data.getCloudSocialMentions.bind(this.data);
@@ -796,6 +802,7 @@ class GloomApiClient {
796
802
  getCloudPerpsRankings = this.data.getCloudPerpsRankings.bind(this.data);
797
803
  getCloudPerpsCompare = this.data.getCloudPerpsCompare.bind(this.data);
798
804
  getCloudPerpsEquity = this.data.getCloudPerpsEquity.bind(this.data);
805
+ getCloudPerpsEquities = this.data.getCloudPerpsEquities.bind(this.data);
799
806
  getCloudPerpsMarket = this.data.getCloudPerpsMarket.bind(this.data);
800
807
  analyzeCloudExposure = this.data.analyzeCloudExposure.bind(this.data);
801
808
  getCloudExposureScenarios = this.data.getCloudExposureScenarios.bind(this.data);
@@ -809,6 +816,13 @@ class GloomApiClient {
809
816
  getCloudPowerBoard = this.data.getCloudPowerBoard.bind(this.data);
810
817
  getCloudPowerHistory = this.data.getCloudPowerHistory.bind(this.data);
811
818
  getCloudPowerProject = this.data.getCloudPowerProject.bind(this.data);
819
+ getCloudEuropePower = this.data.getCloudEuropePower.bind(this.data);
820
+ getCloudEuropePowerHistory = this.data.getCloudEuropePowerHistory.bind(this.data);
821
+ getCloudEuropeCarbon = this.data.getCloudEuropeCarbon.bind(this.data);
822
+ getCloudEuropeCarbonHistory = this.data.getCloudEuropeCarbonHistory.bind(this.data);
823
+ getCloudEuropeGas = this.data.getCloudEuropeGas.bind(this.data);
824
+ getCloudEuropeGasHistory = this.data.getCloudEuropeGasHistory.bind(this.data);
825
+ getCloudEuropeGasSeasonal = this.data.getCloudEuropeGasSeasonal.bind(this.data);
812
826
  getCloudGpuBoard = this.data.getCloudGpuBoard.bind(this.data);
813
827
  getCloudGpuHistory = this.data.getCloudGpuHistory.bind(this.data);
814
828
  getCloudGpuEvents = this.data.getCloudGpuEvents.bind(this.data);
@@ -820,6 +834,7 @@ class GloomApiClient {
820
834
  getCloudWorldCurves = this.data.getCloudWorldCurves.bind(this.data);
821
835
  getCloudCds = this.data.getCloudCds.bind(this.data);
822
836
  getCloudCdsHistory = this.data.getCloudCdsHistory.bind(this.data);
837
+ getCloudCdsLevels = this.data.getCloudCdsLevels.bind(this.data);
823
838
  getCloudCdxBoard = this.data.getCloudCdxBoard.bind(this.data);
824
839
  getCloudSovrBoard = this.data.getCloudSovrBoard.bind(this.data);
825
840
  getCloudCongressHouse = this.data.getCloudCongressHouse.bind(this.data);
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Public fund and investor letters: a link-only list of each letter's title,
3
+ * who wrote it, when, what kind it is and where its publisher keeps it. The
4
+ * route is anonymous; the Letters code of Topic News parses the answer before
5
+ * drawing anything.
6
+ */
7
+ export type LetterKind = "shareholder_letter" | "memo" | "commentary" | "annual_report";
8
+
9
+ /**
10
+ * What a letter's date is: the date its publisher states, its EDGAR filing
11
+ * date, or the last change of its document file (for publishers whose pages
12
+ * give no date), which is not a publication date.
13
+ */
14
+ export type LetterDateBasis = "published" | "filed" | "file_modified";
15
+
16
+ export interface LettersParams {
17
+ /** Any of these kinds, sent as one comma-separated `kind`; every kind when absent. */
18
+ kinds?: readonly LetterKind[];
19
+ /** 1 to 200. */
20
+ limit?: number;
21
+ offset?: number;
22
+ }
23
+
24
+ export interface Letter {
25
+ id: string;
26
+ title: string;
27
+ entity: string;
28
+ kind: LetterKind;
29
+ /** `YYYY-MM-DD`; `date_basis` says what it is. */
30
+ date: string;
31
+ date_basis: LetterDateBasis;
32
+ /** The publisher's own page or file. */
33
+ url: string;
34
+ }
35
+
36
+ export interface LettersPayload {
37
+ items: Letter[];
38
+ hasMore: boolean;
39
+ limit: number;
40
+ offset: number;
41
+ }
@@ -86,7 +86,10 @@ export interface MarketMoversPayload {
86
86
  export interface DividendSummary {
87
87
  trailingAnnualDividendRate: number | null;
88
88
  trailingAnnualDividendYield: number | null;
89
+ /** The indicated annual rate fundamentals serve: the latest regular distribution annualized. */
89
90
  forwardAnnualDividendRate: number | null;
91
+ /** The ex-date of the distribution that rate annualizes, YYYY-MM-DD. */
92
+ forwardRateAsOf?: string | null;
90
93
  payoutRatio: number | null;
91
94
  exDividendDate: number | null;
92
95
  dividendDate: number | null;