gloomberb 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/api-client/data.ts +18 -3
- package/src/api-client/index.ts +3 -0
- package/src/api-client/members.ts +26 -0
- package/src/api-client/perps.ts +4 -0
- package/src/api-client/types.ts +7 -1
- package/src/app/global-shortcuts.ts +14 -6
- package/src/app/keybindings/actions.ts +1 -1
- package/src/app/runtime/update.ts +38 -2
- package/src/app.tsx +10 -6
- package/src/cli/pane-functions/function-help.ts +9 -2
- package/src/components/command-bar/commands/collection.ts +5 -1
- package/src/components/command-bar/routes/root/command-items.ts +9 -2
- package/src/components/command-bar/routes/root/plugin-install.ts +2 -2
- package/src/components/command-bar/routes/root/provider-search.ts +19 -5
- package/src/components/command-bar/routes/root/runtime.ts +14 -5
- package/src/components/command-bar/routes/ticker-search/results.ts +31 -5
- package/src/components/command-bar/routes/ticker-search/route.ts +2 -2
- package/src/components/command-bar/routing/actions.ts +2 -0
- package/src/components/command-bar/selection-runtime.ts +38 -0
- package/src/components/command-bar/surface/index.tsx +7 -2
- package/src/components/index.ts +2 -2
- package/src/components/layout/floating-pane.tsx +6 -0
- package/src/components/layout/header.tsx +24 -7
- package/src/components/layout/missing-pane.tsx +2 -2
- package/src/components/layout/pane/header.tsx +63 -30
- package/src/components/layout/pane/index.tsx +6 -0
- package/src/components/layout/pane/title.ts +31 -7
- package/src/components/layout/shell/drag/index.ts +6 -5
- package/src/components/layout/shell/drag/runtime.ts +3 -0
- package/src/components/layout/shell/index.tsx +6 -0
- package/src/components/layout/shell/pane/layers.tsx +15 -7
- package/src/components/layout/shell/terminal-pointer-runtime.ts +24 -3
- package/src/components/layout/shell/ticker-link-menu.ts +23 -9
- package/src/components/metric-treemap/heat-surface.tsx +718 -0
- package/src/components/metric-treemap/heat-tiles.ts +210 -0
- package/src/components/metric-treemap/index.tsx +2 -0
- package/src/components/metric-treemap/layout.ts +6 -0
- package/src/components/metric-treemap/scene.ts +432 -0
- package/src/components/pane-settings-dialog/field-dialogs.tsx +1 -0
- package/src/components/toggle-list.tsx +38 -12
- package/src/components/ui/country-flag-art.tsx +449 -0
- package/src/components/ui/country-flag.tsx +41 -0
- package/src/components/ui/data-table/types.ts +13 -0
- package/src/components/ui/icon.tsx +2 -0
- package/src/components/ui/index.ts +4 -0
- package/src/components/ui/multi-select/dialog.tsx +108 -22
- package/src/components/ui/range-track.tsx +46 -0
- package/src/components/ui/tabs.tsx +4 -0
- package/src/core/state/app/types.ts +10 -1
- package/src/i18n/es.ts +5 -3
- package/src/i18n/ja.ts +5 -3
- package/src/i18n/ko.ts +5 -3
- package/src/i18n/zh-cn.ts +5 -3
- package/src/i18n/zh-tw.ts +5 -3
- package/src/layout/ticker-navigation.ts +28 -2
- package/src/market-data/quotes/contributions.ts +6 -0
- package/src/market-data/quotes/freshness.ts +36 -0
- package/src/market-data/quotes/resolution.ts +22 -8
- package/src/market-data/quotes/time.ts +16 -0
- package/src/plugins/builtin/analytics/risk-client.ts +185 -59
- package/src/plugins/builtin/analytics/risk-headless.ts +55 -49
- package/src/plugins/builtin/analytics/risk-math.ts +33 -13
- package/src/plugins/builtin/analytics/risk-model.ts +250 -60
- package/src/plugins/builtin/analytics/risk-pane.tsx +61 -30
- package/src/plugins/builtin/analytics/risk-test-data.ts +182 -0
- package/src/plugins/builtin/buildout/cells.tsx +15 -12
- package/src/plugins/builtin/buildout/detail/company.tsx +3 -3
- package/src/plugins/builtin/buildout/detail/index.tsx +0 -1
- package/src/plugins/builtin/buildout/detail/intel.tsx +6 -6
- package/src/plugins/builtin/buildout/detail/site.tsx +4 -7
- package/src/plugins/builtin/buildout/detail/ui.tsx +0 -19
- package/src/plugins/builtin/catalysts/index.tsx +2 -2
- package/src/plugins/builtin/catalysts/pane.tsx +3 -1
- package/src/plugins/builtin/cds/index.tsx +1 -0
- package/src/plugins/builtin/debt-maturities/wall-bar.tsx +14 -41
- package/src/plugins/builtin/dividend-yield/client.ts +4 -2
- package/src/plugins/builtin/earnings/client.ts +2 -2
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -0
- package/src/plugins/builtin/fx-matrix/direction.ts +81 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +71 -33
- package/src/plugins/builtin/fx-matrix/live-legs.ts +17 -0
- package/src/plugins/builtin/fx-matrix/pairs.ts +68 -14
- package/src/plugins/builtin/fx-matrix/settings.ts +62 -0
- package/src/plugins/builtin/jobs/index.tsx +1 -0
- package/src/plugins/builtin/jobs/share-bars.tsx +5 -28
- package/src/plugins/builtin/market-heatmap/data.ts +28 -2
- package/src/plugins/builtin/market-heatmap/index.tsx +250 -79
- package/src/plugins/builtin/market-heatmap/live.ts +88 -0
- package/src/plugins/builtin/market-heatmap/portfolio.ts +27 -7
- package/src/plugins/builtin/market-movers/client.ts +3 -2
- package/src/plugins/builtin/market-movers/headless.ts +8 -1
- package/src/plugins/builtin/market-movers/screener.ts +18 -5
- package/src/plugins/builtin/members/client.ts +36 -0
- package/src/plugins/builtin/members/headless.ts +33 -0
- package/src/plugins/builtin/members/index.tsx +20 -0
- package/src/plugins/builtin/members/model.ts +60 -0
- package/src/plugins/builtin/members/pane.tsx +168 -0
- package/src/plugins/builtin/mna/index.tsx +2 -1
- package/src/plugins/builtin/mna/pane.tsx +5 -2
- package/src/plugins/builtin/options/index.tsx +2 -1
- package/src/plugins/builtin/pe-band/client.ts +29 -2
- package/src/plugins/builtin/pe-band/headless.ts +2 -2
- package/src/plugins/builtin/pe-band/model.ts +11 -7
- package/src/plugins/builtin/pe-band/pane.tsx +2 -1
- package/src/plugins/builtin/pe-band/report-dates.ts +78 -0
- package/src/plugins/builtin/perps/client.ts +17 -3
- package/src/plugins/builtin/perps/equity-identity.ts +16 -0
- package/src/plugins/builtin/perps/equity-row.tsx +6 -4
- package/src/plugins/builtin/plugin-marketplace/activation.ts +19 -0
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +2 -2
- package/src/plugins/builtin/plugin-marketplace/store.ts +2 -0
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +43 -2
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +48 -5
- package/src/plugins/builtin/scanner/hilo-bars.tsx +12 -70
- package/src/plugins/builtin/scanner/hilo-model.ts +0 -18
- package/src/plugins/builtin/sectors/move-bar.tsx +10 -32
- package/src/plugins/builtin/social-mentions/index.tsx +1 -1
- package/src/plugins/builtin/thirteenf/index.tsx +2 -1
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +5 -60
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/pane.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +7 -1
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +20 -4
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +2 -2
- package/src/plugins/builtin/vol-surface/index.tsx +1 -1
- package/src/plugins/catalog-browser.ts +2 -0
- package/src/plugins/catalog-manifest.ts +1 -0
- package/src/plugins/catalog-ui.ts +3 -1
- package/src/plugins/catalog.ts +1 -1
- package/src/plugins/host-link.ts +33 -1
- package/src/plugins/installer.ts +48 -12
- package/src/plugins/loader.ts +18 -3
- package/src/plugins/manager-node.ts +15 -5
- package/src/plugins/registry/index.ts +1 -1
- package/src/plugins/registry/pane-settings.ts +25 -7
- package/src/public/__snapshots__/public-api.test.ts.snap +2 -0
- package/src/renderers/dom/data-table/row.tsx +50 -16
- package/src/renderers/dom/desktop/icons.tsx +1 -0
- package/src/renderers/dom/host/box.tsx +69 -26
- package/src/renderers/dom/host/tabs.tsx +37 -1
- package/src/renderers/dom/styles.css +40 -5
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +11 -6
- package/src/renderers/electrobun/bun/desktop/backend.ts +1 -0
- package/src/renderers/electrobun/bun/desktop/update.ts +181 -87
- package/src/renderers/electrobun/bun/index.ts +73 -6
- package/src/renderers/electrobun/bun/window/remembered-frame.ts +122 -0
- package/src/renderers/electrobun/shared/protocol.ts +3 -0
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +2 -1
- package/src/renderers/electrobun/view/main.tsx +7 -1
- package/src/renderers/electrobun/view/renderer-window-error.ts +18 -0
- package/src/renderers/electrobun/view/update-host.ts +45 -21
- package/src/sources/gloomberb-cloud/normalizers.ts +9 -2
- package/src/sources/provider-router/financials.ts +3 -1
- package/src/telemetry/benign-window-error.ts +7 -0
- package/src/telemetry/crash-reports-dom.ts +2 -0
- package/src/test-support/daily-nav.ts +25 -0
- package/src/theme/heat-colors.ts +174 -1
- package/src/tickers/instrument-kind.ts +34 -7
- package/src/tickers/search/asset-classes.ts +24 -9
- package/src/tickers/search/index.ts +44 -11
- package/src/tickers/search/ranking.ts +23 -3
- package/src/types/financials.ts +2 -0
- package/src/types/plugin.ts +18 -5
- package/src/ui/context-menu.tsx +1 -0
- package/src/ui/host.tsx +2 -0
- package/src/updater/index.ts +29 -2
|
@@ -37,6 +37,7 @@ interface ShellPaneLayersProps {
|
|
|
37
37
|
getPaneQuickSettings: (paneId: string) => PaneHeaderQuickSetting[];
|
|
38
38
|
handleFloatingClose: (paneId: string) => void;
|
|
39
39
|
handleFloatingCloseMouseDown: (paneId: string, event: any) => void;
|
|
40
|
+
handleRestoreFullscreen: ShellMouseHandler;
|
|
40
41
|
handleNativeDrag: ShellMouseHandler;
|
|
41
42
|
handleNativePaneContextMenu: (paneId: string, rect: LayoutBounds, event: any) => void;
|
|
42
43
|
handleNativePaneMouseDown: (paneId: string, event: any) => void;
|
|
@@ -73,6 +74,7 @@ export function ShellPaneLayers({
|
|
|
73
74
|
getPaneQuickSettings,
|
|
74
75
|
handleFloatingClose,
|
|
75
76
|
handleFloatingCloseMouseDown,
|
|
77
|
+
handleRestoreFullscreen,
|
|
76
78
|
handleNativeDrag,
|
|
77
79
|
handleNativePaneContextMenu,
|
|
78
80
|
handleNativePaneMouseDown,
|
|
@@ -125,6 +127,7 @@ export function ShellPaneLayers({
|
|
|
125
127
|
const rect = transientFocusActive
|
|
126
128
|
? { x: 0, y: 0, width, height: contentHeight }
|
|
127
129
|
: leaf.rect;
|
|
130
|
+
const isFullscreenBase = transientFocusActive && leaf.instanceId === transientFocusPaneId;
|
|
128
131
|
const focused = focusedPaneId === leaf.instanceId && (!overlayOpen || menuPaneId === leaf.instanceId);
|
|
129
132
|
const windowModeSelected = windowModePaneId === leaf.instanceId;
|
|
130
133
|
const showActions = focused || hoveredPaneId === leaf.instanceId || menuPaneId === leaf.instanceId;
|
|
@@ -170,6 +173,8 @@ export function ShellPaneLayers({
|
|
|
170
173
|
onHeaderMouseDragEnd={nativePaneChrome && !transientFocusActive ? handleNativeDrag : undefined}
|
|
171
174
|
onHeaderContextMenu={nativePaneChrome && nativeContextMenu === true ? (event) => handleNativePaneContextMenu(leaf.instanceId, rect, event) : undefined}
|
|
172
175
|
onActionMouseDown={(event) => handlePaneAction(leaf.instanceId, rect, event)}
|
|
176
|
+
fullscreen={isFullscreenBase}
|
|
177
|
+
onRestoreMouseDown={isFullscreenBase ? handleRestoreFullscreen : undefined}
|
|
173
178
|
>
|
|
174
179
|
<PaneFooterKeys paneId={leaf.instanceId} footer={footer} focused={focused} />
|
|
175
180
|
<PaneContent
|
|
@@ -191,6 +196,7 @@ export function ShellPaneLayers({
|
|
|
191
196
|
|
|
192
197
|
{visibleFloatingPanes.map(({ pane, rect }) => {
|
|
193
198
|
if (transientFocusActive && pane.instance.instanceId !== transientFocusPaneId) return null;
|
|
199
|
+
const isFullscreenBase = transientFocusActive && pane.instance.instanceId === transientFocusPaneId;
|
|
194
200
|
const preview = transientFocusActive
|
|
195
201
|
? { x: 0, y: 0, width, height: contentHeight }
|
|
196
202
|
: dragFloatingRect?.paneId === pane.instance.instanceId
|
|
@@ -230,15 +236,17 @@ export function ShellPaneLayers({
|
|
|
230
236
|
footer={footer}
|
|
231
237
|
onMouseDownCapture={nativePaneChrome ? (event) => handleNativePaneMouseDown(pane.instance.instanceId, event) : undefined}
|
|
232
238
|
onHeaderMouseMove={() => setHoveredPaneIfChanged(pane.instance.instanceId)}
|
|
233
|
-
onHeaderMouseDown={nativePaneChrome ? (event) => startNativeFloatingDrag(pane.instance.instanceId, preview, event) : undefined}
|
|
234
|
-
onHeaderMouseDrag={nativePaneChrome ? handleNativeDrag : undefined}
|
|
235
|
-
onHeaderMouseDragEnd={nativePaneChrome ? handleNativeDrag : undefined}
|
|
239
|
+
onHeaderMouseDown={nativePaneChrome && !isFullscreenBase ? (event) => startNativeFloatingDrag(pane.instance.instanceId, preview, event) : undefined}
|
|
240
|
+
onHeaderMouseDrag={nativePaneChrome && !isFullscreenBase ? handleNativeDrag : undefined}
|
|
241
|
+
onHeaderMouseDragEnd={nativePaneChrome && !isFullscreenBase ? handleNativeDrag : undefined}
|
|
236
242
|
onHeaderContextMenu={nativePaneChrome && nativeContextMenu === true ? (event) => handleNativePaneContextMenu(pane.instance.instanceId, preview, event) : undefined}
|
|
237
243
|
onActionMouseDown={(event) => handlePaneAction(pane.instance.instanceId, preview, event)}
|
|
238
|
-
onCloseMouseDown={(event) => handleFloatingCloseMouseDown(pane.instance.instanceId, event)}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
onCloseMouseDown={isFullscreenBase ? undefined : (event) => handleFloatingCloseMouseDown(pane.instance.instanceId, event)}
|
|
245
|
+
onRestoreMouseDown={isFullscreenBase ? handleRestoreFullscreen : undefined}
|
|
246
|
+
fullscreen={isFullscreenBase}
|
|
247
|
+
onResizeMouseDown={nativePaneChrome && !isFullscreenBase ? (event) => startNativeFloatResize(pane.instance.instanceId, preview, event) : undefined}
|
|
248
|
+
onResizeMouseDrag={nativePaneChrome && !isFullscreenBase ? handleNativeDrag : undefined}
|
|
249
|
+
onResizeMouseDragEnd={nativePaneChrome && !isFullscreenBase ? handleNativeDrag : undefined}
|
|
242
250
|
>
|
|
243
251
|
<PaneFooterKeys paneId={pane.instance.instanceId} footer={footer} focused={focused} />
|
|
244
252
|
<PaneContent
|
|
@@ -30,6 +30,7 @@ interface UseShellTerminalPointerRuntimeOptions {
|
|
|
30
30
|
focusedPaneId: string | null;
|
|
31
31
|
handleActiveDrag: (event: ShellMouseEvent) => void;
|
|
32
32
|
handleFloatingClose: (paneId: string) => void;
|
|
33
|
+
restoreFullscreen: () => void;
|
|
33
34
|
menuState: ActionMenuState | null;
|
|
34
35
|
openPaneMenu: (
|
|
35
36
|
paneId: string,
|
|
@@ -73,6 +74,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
73
74
|
focusedPaneId,
|
|
74
75
|
handleActiveDrag,
|
|
75
76
|
handleFloatingClose,
|
|
77
|
+
restoreFullscreen,
|
|
76
78
|
menuState,
|
|
77
79
|
openPaneMenu,
|
|
78
80
|
paneMap,
|
|
@@ -185,6 +187,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
185
187
|
const headerAreas = resolveHeaderHitAreas(rect.width, {
|
|
186
188
|
floating: true,
|
|
187
189
|
focused: isFocused,
|
|
190
|
+
fullscreen: transientFocusActive,
|
|
188
191
|
});
|
|
189
192
|
focusPane(paneId);
|
|
190
193
|
if (event.button === 2 && relativeY === 0) {
|
|
@@ -192,7 +195,8 @@ export function useShellTerminalPointerRuntime({
|
|
|
192
195
|
return;
|
|
193
196
|
}
|
|
194
197
|
if (relativeY === 0 && headerAreas.closeStart != null && relativeX >= headerAreas.closeStart && relativeX < rect.width) {
|
|
195
|
-
|
|
198
|
+
if (transientFocusActive) restoreFullscreen();
|
|
199
|
+
else handleFloatingClose(paneId);
|
|
196
200
|
event.stopPropagation();
|
|
197
201
|
event.preventDefault();
|
|
198
202
|
return;
|
|
@@ -207,7 +211,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
207
211
|
event.preventDefault();
|
|
208
212
|
return;
|
|
209
213
|
}
|
|
210
|
-
if (relativeX >= rect.width - 2 && relativeY >= rect.height - 1) {
|
|
214
|
+
if (!transientFocusActive && relativeX >= rect.width - 2 && relativeY >= rect.height - 1) {
|
|
211
215
|
dragRef.current = {
|
|
212
216
|
type: "float-resize",
|
|
213
217
|
paneId,
|
|
@@ -220,6 +224,11 @@ export function useShellTerminalPointerRuntime({
|
|
|
220
224
|
event.preventDefault();
|
|
221
225
|
return;
|
|
222
226
|
}
|
|
227
|
+
if (relativeY === 0 && transientFocusActive) {
|
|
228
|
+
event.stopPropagation();
|
|
229
|
+
event.preventDefault();
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
223
232
|
if (relativeY === 0) {
|
|
224
233
|
dragRef.current = {
|
|
225
234
|
type: "pane-drag",
|
|
@@ -268,15 +277,26 @@ export function useShellTerminalPointerRuntime({
|
|
|
268
277
|
const headerAreas = resolveHeaderHitAreas(leaf.rect.width, {
|
|
269
278
|
floating: false,
|
|
270
279
|
focused: isFocused,
|
|
280
|
+
fullscreen: transientFocusActive,
|
|
271
281
|
});
|
|
272
282
|
focusPane(leaf.instanceId);
|
|
273
283
|
if (event.button === 2 && relativeY === 0) {
|
|
274
284
|
openPaneMenu(leaf.instanceId, leaf.rect, event);
|
|
275
285
|
return;
|
|
276
286
|
}
|
|
287
|
+
if (relativeY === 0
|
|
288
|
+
&& transientFocusActive
|
|
289
|
+
&& headerAreas.closeStart != null
|
|
290
|
+
&& relativeX >= headerAreas.closeStart) {
|
|
291
|
+
restoreFullscreen();
|
|
292
|
+
event.stopPropagation();
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
277
296
|
if (relativeY === 0
|
|
278
297
|
&& headerAreas.actionStart != null
|
|
279
|
-
&& relativeX >= headerAreas.actionStart
|
|
298
|
+
&& relativeX >= headerAreas.actionStart
|
|
299
|
+
&& (headerAreas.closeStart == null || relativeX < headerAreas.closeStart)) {
|
|
280
300
|
openPaneMenu(leaf.instanceId, leaf.rect, event);
|
|
281
301
|
event.stopPropagation();
|
|
282
302
|
event.preventDefault();
|
|
@@ -319,6 +339,7 @@ export function useShellTerminalPointerRuntime({
|
|
|
319
339
|
focusedPaneId,
|
|
320
340
|
handleActiveDrag,
|
|
321
341
|
handleFloatingClose,
|
|
342
|
+
restoreFullscreen,
|
|
322
343
|
menuState,
|
|
323
344
|
openPaneMenu,
|
|
324
345
|
paneMap,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { tf } from "../../../i18n";
|
|
2
2
|
import { updatePaneInstance } from "../../../pane-settings";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
canFollowTickerSource,
|
|
5
|
+
followBindingReaches,
|
|
6
|
+
isTickerLinkPeer,
|
|
7
|
+
} from "../../../layout/ticker-navigation";
|
|
8
|
+
import { isPaneInLayout } from "../../../layout/pane-manager";
|
|
4
9
|
import { resolveTickerForPane, type AppState } from "../../../state/app/context";
|
|
5
10
|
import { resolveInstrumentForPane } from "../../../core/state/app/instrument";
|
|
6
11
|
import { paneTitleMnemonic, pinFollowingPane } from "../../../layout/pane-follow";
|
|
@@ -11,13 +16,13 @@ import {
|
|
|
11
16
|
} from "../../../types/config";
|
|
12
17
|
import type { ContextMenuItem } from "../../../types/context-menu";
|
|
13
18
|
import type { PaneDef } from "../../../types/plugin";
|
|
14
|
-
import {
|
|
19
|
+
import { getTickerLinkSourceTitle } from "../pane/title";
|
|
15
20
|
|
|
16
21
|
/**
|
|
17
22
|
* Flat link controls for a pane that shows one ticker (Ticker Research, or a pane that sets
|
|
18
|
-
* `PaneDef.tickerFollower`): one "Link to" entry per visible
|
|
19
|
-
* that pins the pane on the symbol it currently shows.
|
|
20
|
-
*
|
|
23
|
+
* `PaneDef.tickerFollower`): one "Link to" entry per visible list, scanner, or other single-ticker
|
|
24
|
+
* pane, plus an unlink entry that pins the pane on the symbol it currently shows. A target whose
|
|
25
|
+
* follow chain already reaches this pane is left out, so two panes cannot point at each other.
|
|
21
26
|
*/
|
|
22
27
|
export function tickerLinkMenuItems({
|
|
23
28
|
instance,
|
|
@@ -72,10 +77,19 @@ export function tickerLinkMenuItems({
|
|
|
72
77
|
});
|
|
73
78
|
};
|
|
74
79
|
|
|
75
|
-
return
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
return layout.instances.flatMap((source): ContextMenuItem[] => {
|
|
81
|
+
if (source.instanceId === instance.instanceId || !isPaneInLayout(layout, source.instanceId)) return [];
|
|
82
|
+
const sourceDef = panes.get(source.paneId);
|
|
83
|
+
if (!sourceDef) return [];
|
|
84
|
+
const list = sourceDef.tickerSource === true;
|
|
85
|
+
const peer = isTickerLinkPeer(source, panes);
|
|
86
|
+
if (!list && !peer) return [];
|
|
87
|
+
if (
|
|
88
|
+
source.instanceId !== sourceInstanceId
|
|
89
|
+
&& followBindingReaches(layout, source.instanceId, instance.instanceId)
|
|
90
|
+
) return [];
|
|
91
|
+
if (peer && !list && !resolveTickerForPane(state as AppState, source.instanceId)) return [];
|
|
92
|
+
const title = getTickerLinkSourceTitle(state, source, sourceDef, panes, "menu");
|
|
79
93
|
|
|
80
94
|
if (source.instanceId !== sourceInstanceId) {
|
|
81
95
|
return linkable
|