@forgecharts/sdk 1.1.28 → 1.1.30
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/dist/index.js +8100 -48
- package/dist/index.js.map +1 -1
- package/dist/internal.js +8851 -31
- package/dist/internal.js.map +1 -1
- package/dist/react/index.js +11558 -27
- package/dist/react/index.js.map +1 -1
- package/dist/react/internal.js +12147 -43
- package/dist/react/internal.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/backwardCompatibility.test.js +0 -159
- package/dist/__tests__/backwardCompatibility.test.js.map +0 -1
- package/dist/__tests__/candleInvariant.test.js +0 -415
- package/dist/__tests__/candleInvariant.test.js.map +0 -1
- package/dist/__tests__/public-api-surface.js +0 -38
- package/dist/__tests__/public-api-surface.js.map +0 -1
- package/dist/__tests__/timeframeBoundary.test.js +0 -452
- package/dist/__tests__/timeframeBoundary.test.js.map +0 -1
- package/dist/api/DrawingManager.js +0 -190
- package/dist/api/DrawingManager.js.map +0 -1
- package/dist/api/EventBus.js +0 -44
- package/dist/api/EventBus.js.map +0 -1
- package/dist/api/IndicatorDAG.js +0 -316
- package/dist/api/IndicatorDAG.js.map +0 -1
- package/dist/api/IndicatorRegistry.js +0 -39
- package/dist/api/IndicatorRegistry.js.map +0 -1
- package/dist/api/LayoutManager.js +0 -51
- package/dist/api/LayoutManager.js.map +0 -1
- package/dist/api/PaneManager.js +0 -119
- package/dist/api/PaneManager.js.map +0 -1
- package/dist/api/ReferenceAPI.js +0 -153
- package/dist/api/ReferenceAPI.js.map +0 -1
- package/dist/api/TChart.js +0 -765
- package/dist/api/TChart.js.map +0 -1
- package/dist/api/createChart.js +0 -42
- package/dist/api/createChart.js.map +0 -1
- package/dist/api/drawing tools/fib gann menu/fibRetracement.js +0 -22
- package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +0 -1
- package/dist/api/drawing tools/lines menu/crossLine.js +0 -16
- package/dist/api/drawing tools/lines menu/crossLine.js.map +0 -1
- package/dist/api/drawing tools/lines menu/disjointChannel.js +0 -59
- package/dist/api/drawing tools/lines menu/disjointChannel.js.map +0 -1
- package/dist/api/drawing tools/lines menu/extendedLine.js +0 -17
- package/dist/api/drawing tools/lines menu/extendedLine.js.map +0 -1
- package/dist/api/drawing tools/lines menu/flatTopBottom.js +0 -41
- package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +0 -1
- package/dist/api/drawing tools/lines menu/horizontal.js +0 -19
- package/dist/api/drawing tools/lines menu/horizontal.js.map +0 -1
- package/dist/api/drawing tools/lines menu/horizontalRay.js +0 -20
- package/dist/api/drawing tools/lines menu/horizontalRay.js.map +0 -1
- package/dist/api/drawing tools/lines menu/infoLine.js +0 -107
- package/dist/api/drawing tools/lines menu/infoLine.js.map +0 -1
- package/dist/api/drawing tools/lines menu/insidePitchfork.js +0 -31
- package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +0 -1
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +0 -15
- package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +0 -1
- package/dist/api/drawing tools/lines menu/parallelChannel.js +0 -43
- package/dist/api/drawing tools/lines menu/parallelChannel.js.map +0 -1
- package/dist/api/drawing tools/lines menu/pitchfork.js +0 -12
- package/dist/api/drawing tools/lines menu/pitchfork.js.map +0 -1
- package/dist/api/drawing tools/lines menu/ray.js +0 -23
- package/dist/api/drawing tools/lines menu/ray.js.map +0 -1
- package/dist/api/drawing tools/lines menu/regressionTrend.js +0 -127
- package/dist/api/drawing tools/lines menu/regressionTrend.js.map +0 -1
- package/dist/api/drawing tools/lines menu/schiffPitchfork.js +0 -15
- package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +0 -1
- package/dist/api/drawing tools/lines menu/trendAngle.js +0 -51
- package/dist/api/drawing tools/lines menu/trendAngle.js.map +0 -1
- package/dist/api/drawing tools/lines menu/trendline.js +0 -11
- package/dist/api/drawing tools/lines menu/trendline.js.map +0 -1
- package/dist/api/drawing tools/lines menu/vertical.js +0 -11
- package/dist/api/drawing tools/lines menu/vertical.js.map +0 -1
- package/dist/api/drawing tools/pointers menu/crosshair.js +0 -16
- package/dist/api/drawing tools/pointers menu/crosshair.js.map +0 -1
- package/dist/api/drawing tools/pointers menu/cursor.js +0 -15
- package/dist/api/drawing tools/pointers menu/cursor.js.map +0 -1
- package/dist/api/drawing tools/pointers menu/demonstration.js +0 -30
- package/dist/api/drawing tools/pointers menu/demonstration.js.map +0 -1
- package/dist/api/drawing tools/pointers menu/dot.js +0 -23
- package/dist/api/drawing tools/pointers menu/dot.js.map +0 -1
- package/dist/api/drawing tools/shapes menu/rectangle.js +0 -19
- package/dist/api/drawing tools/shapes menu/rectangle.js.map +0 -1
- package/dist/api/drawing tools/shapes menu/text.js +0 -25
- package/dist/api/drawing tools/shapes menu/text.js.map +0 -1
- package/dist/api/drawingUtils.js +0 -83
- package/dist/api/drawingUtils.js.map +0 -1
- package/dist/core/CanvasLayer.js +0 -56
- package/dist/core/CanvasLayer.js.map +0 -1
- package/dist/core/Chart.js +0 -839
- package/dist/core/Chart.js.map +0 -1
- package/dist/core/CoordTransform.js +0 -224
- package/dist/core/CoordTransform.js.map +0 -1
- package/dist/core/Crosshair.js +0 -186
- package/dist/core/Crosshair.js.map +0 -1
- package/dist/core/IndicatorEngine.js +0 -181
- package/dist/core/IndicatorEngine.js.map +0 -1
- package/dist/core/InteractionManager.js +0 -698
- package/dist/core/InteractionManager.js.map +0 -1
- package/dist/core/PriceScale.js +0 -113
- package/dist/core/PriceScale.js.map +0 -1
- package/dist/core/Series.js +0 -114
- package/dist/core/Series.js.map +0 -1
- package/dist/core/TimeScale.js +0 -150
- package/dist/core/TimeScale.js.map +0 -1
- package/dist/datafeed/DatafeedConnector.js +0 -268
- package/dist/datafeed/DatafeedConnector.js.map +0 -1
- package/dist/engine/CandleEngine.js +0 -318
- package/dist/engine/CandleEngine.js.map +0 -1
- package/dist/engine/__tests__/CandleEngine.test.js +0 -300
- package/dist/engine/__tests__/CandleEngine.test.js.map +0 -1
- package/dist/engine/candleInvariants.js +0 -134
- package/dist/engine/candleInvariants.js.map +0 -1
- package/dist/engine/mergeUtils.js +0 -64
- package/dist/engine/mergeUtils.js.map +0 -1
- package/dist/engine/timeframeUtils.js +0 -100
- package/dist/engine/timeframeUtils.js.map +0 -1
- package/dist/licensing/ChartRuntimeResolver.js +0 -310
- package/dist/licensing/ChartRuntimeResolver.js.map +0 -1
- package/dist/licensing/LicenseManager.js +0 -114
- package/dist/licensing/LicenseManager.js.map +0 -1
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +0 -177
- package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +0 -1
- package/dist/licensing/__tests__/LicenseManager.test.js +0 -153
- package/dist/licensing/__tests__/LicenseManager.test.js.map +0 -1
- package/dist/licensing/licenseTypes.js +0 -2
- package/dist/licensing/licenseTypes.js.map +0 -1
- package/dist/pine/PineCompiler.js +0 -44
- package/dist/pine/PineCompiler.js.map +0 -1
- package/dist/pine/diagnostics.js +0 -11
- package/dist/pine/diagnostics.js.map +0 -1
- package/dist/pine/index.js +0 -5
- package/dist/pine/index.js.map +0 -1
- package/dist/pine/pine-ast.js +0 -19
- package/dist/pine/pine-ast.js.map +0 -1
- package/dist/pine/pine-lexer.js +0 -249
- package/dist/pine/pine-lexer.js.map +0 -1
- package/dist/pine/pine-parser.js +0 -416
- package/dist/pine/pine-parser.js.map +0 -1
- package/dist/pine/pine-transpiler.js +0 -260
- package/dist/pine/pine-transpiler.js.map +0 -1
- package/dist/pixi/LayerName.js +0 -35
- package/dist/pixi/LayerName.js.map +0 -1
- package/dist/pixi/PixiCandlestickRenderer.js +0 -107
- package/dist/pixi/PixiCandlestickRenderer.js.map +0 -1
- package/dist/pixi/PixiChart.js +0 -367
- package/dist/pixi/PixiChart.js.map +0 -1
- package/dist/pixi/PixiCrosshairRenderer.js +0 -110
- package/dist/pixi/PixiCrosshairRenderer.js.map +0 -1
- package/dist/pixi/PixiDrawingRenderer.js +0 -111
- package/dist/pixi/PixiDrawingRenderer.js.map +0 -1
- package/dist/pixi/PixiGridRenderer.js +0 -114
- package/dist/pixi/PixiGridRenderer.js.map +0 -1
- package/dist/pixi/PixiLayerManager.js +0 -92
- package/dist/pixi/PixiLayerManager.js.map +0 -1
- package/dist/react/canvas/ChartCanvas.js +0 -604
- package/dist/react/canvas/ChartCanvas.js.map +0 -1
- package/dist/react/canvas/ChartContextMenu.js +0 -5
- package/dist/react/canvas/ChartContextMenu.js.map +0 -1
- package/dist/react/canvas/ChartSettingsDialog.js +0 -28
- package/dist/react/canvas/ChartSettingsDialog.js.map +0 -1
- package/dist/react/canvas/IndicatorLabel.js +0 -196
- package/dist/react/canvas/IndicatorLabel.js.map +0 -1
- package/dist/react/canvas/IndicatorPane.js +0 -395
- package/dist/react/canvas/IndicatorPane.js.map +0 -1
- package/dist/react/canvas/PointerOverlay.js +0 -61
- package/dist/react/canvas/PointerOverlay.js.map +0 -1
- package/dist/react/canvas/toolbars/LeftToolbar.js +0 -407
- package/dist/react/canvas/toolbars/LeftToolbar.js.map +0 -1
- package/dist/react/hooks/useChartCapabilities.js +0 -66
- package/dist/react/hooks/useChartCapabilities.js.map +0 -1
- package/dist/react/shell/ManagedAppShell.js +0 -440
- package/dist/react/shell/ManagedAppShell.js.map +0 -1
- package/dist/react/trading/TradingBridge.js +0 -73
- package/dist/react/trading/TradingBridge.js.map +0 -1
- package/dist/react/workspace/ChartWorkspace.js +0 -42
- package/dist/react/workspace/ChartWorkspace.js.map +0 -1
- package/dist/react/workspace/FloatingPanel.js +0 -82
- package/dist/react/workspace/FloatingPanel.js.map +0 -1
- package/dist/react/workspace/IndicatorsDialog.js +0 -121
- package/dist/react/workspace/IndicatorsDialog.js.map +0 -1
- package/dist/react/workspace/LayoutMenu.js +0 -113
- package/dist/react/workspace/LayoutMenu.js.map +0 -1
- package/dist/react/workspace/SymbolSearchDialog.js +0 -245
- package/dist/react/workspace/SymbolSearchDialog.js.map +0 -1
- package/dist/react/workspace/TabBar.js +0 -29
- package/dist/react/workspace/TabBar.js.map +0 -1
- package/dist/react/workspace/toolbars/BottomToolbar.js +0 -236
- package/dist/react/workspace/toolbars/BottomToolbar.js.map +0 -1
- package/dist/react/workspace/toolbars/RightToolbar.js +0 -18
- package/dist/react/workspace/toolbars/RightToolbar.js.map +0 -1
- package/dist/react/workspace/toolbars/TopToolbar.js +0 -82
- package/dist/react/workspace/toolbars/TopToolbar.js.map +0 -1
- package/dist/renderers/CandlestickRenderer.js +0 -98
- package/dist/renderers/CandlestickRenderer.js.map +0 -1
- package/dist/renderers/HistogramRenderer.js +0 -50
- package/dist/renderers/HistogramRenderer.js.map +0 -1
- package/dist/renderers/LineRenderer.js +0 -64
- package/dist/renderers/LineRenderer.js.map +0 -1
- package/dist/theme/colors.js +0 -19
- package/dist/theme/colors.js.map +0 -1
- package/dist/tools/barDivergenceCheck.js +0 -200
- package/dist/tools/barDivergenceCheck.js.map +0 -1
- package/dist/trading/TradingOverlayStore.js +0 -139
- package/dist/trading/TradingOverlayStore.js.map +0 -1
- package/dist/trading/UnmanagedIngestion.js +0 -114
- package/dist/trading/UnmanagedIngestion.js.map +0 -1
- package/dist/trading/__tests__/ManagedTradingController.test.js +0 -271
- package/dist/trading/__tests__/ManagedTradingController.test.js.map +0 -1
- package/dist/trading/__tests__/TradingOverlayStore.test.js +0 -267
- package/dist/trading/__tests__/TradingOverlayStore.test.js.map +0 -1
- package/dist/trading/__tests__/UnmanagedIngestion.test.js +0 -170
- package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +0 -1
- package/dist/trading/managed/ManagedTradingController.js +0 -247
- package/dist/trading/managed/ManagedTradingController.js.map +0 -1
- package/dist/trading/managed/managedCapabilities.js +0 -79
- package/dist/trading/managed/managedCapabilities.js.map +0 -1
- package/dist/trading/managed/managedTypes.js +0 -13
- package/dist/trading/managed/managedTypes.js.map +0 -1
- package/dist/trading/tradingTypes.js +0 -8
- package/dist/trading/tradingTypes.js.map +0 -1
- package/dist/tscript/TScriptIndicator.js +0 -47
- package/dist/tscript/TScriptIndicator.js.map +0 -1
- package/dist/tscript/ast.js +0 -22
- package/dist/tscript/ast.js.map +0 -1
- package/dist/tscript/lexer.js +0 -187
- package/dist/tscript/lexer.js.map +0 -1
- package/dist/tscript/parser.js +0 -318
- package/dist/tscript/parser.js.map +0 -1
- package/dist/tscript/runtime.js +0 -475
- package/dist/tscript/runtime.js.map +0 -1
- package/dist/tscript/series.js +0 -79
- package/dist/tscript/series.js.map +0 -1
- package/dist/types/IChart.js +0 -2
- package/dist/types/IChart.js.map +0 -1
- package/dist/types/IRenderer.js +0 -2
- package/dist/types/IRenderer.js.map +0 -1
- package/dist/types/ISeries.js +0 -2
- package/dist/types/ISeries.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SymbolSearchDialog.js","sourceRoot":"","sources":["../../../src/react/workspace/SymbolSearchDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useState } from 'react';
|
|
3
|
-
export function TabBar({ tabs, activeId, onSelect, onAdd, onClose, onRename }) {
|
|
4
|
-
const [editingId, setEditingId] = useState(null);
|
|
5
|
-
const [editValue, setEditValue] = useState('');
|
|
6
|
-
const inputRef = useRef(null);
|
|
7
|
-
function startEdit(tab, e) {
|
|
8
|
-
e.stopPropagation();
|
|
9
|
-
setEditingId(tab.id);
|
|
10
|
-
setEditValue(tab.label);
|
|
11
|
-
setTimeout(() => inputRef.current?.select(), 0);
|
|
12
|
-
}
|
|
13
|
-
function commitEdit() {
|
|
14
|
-
if (editingId && editValue.trim()) {
|
|
15
|
-
onRename(editingId, editValue.trim());
|
|
16
|
-
}
|
|
17
|
-
setEditingId(null);
|
|
18
|
-
}
|
|
19
|
-
return (_jsxs("div", { className: "tab-bar", children: [tabs.map((tab) => (_jsxs("div", { className: `tab-item${tab.id === activeId ? ' active' : ''}`, onClick: () => onSelect(tab.id), onDoubleClick: (e) => startEdit(tab, e), title: "Double-click to rename", children: [editingId === tab.id ? (_jsx("input", { ref: inputRef, className: "tab-rename-input", value: editValue, onChange: (e) => setEditValue(e.target.value), onBlur: commitEdit, onKeyDown: (e) => {
|
|
20
|
-
if (e.key === 'Enter')
|
|
21
|
-
commitEdit();
|
|
22
|
-
if (e.key === 'Escape')
|
|
23
|
-
setEditingId(null);
|
|
24
|
-
}, onClick: (e) => e.stopPropagation(), autoFocus: true })) : (_jsxs("span", { className: "tab-label", children: [tab.label, tab.isSaved && _jsx("span", { className: "tab-saved-dot", title: "Saved layout" })] })), tabs.length > 1 && (_jsx("button", { className: "tab-close", title: "Close tab", onClick: (e) => {
|
|
25
|
-
e.stopPropagation();
|
|
26
|
-
onClose(tab.id);
|
|
27
|
-
}, children: "\u00D7" }))] }, tab.id))), _jsx("button", { className: "tab-add", onClick: onAdd, title: "New chart tab", children: "+" })] }));
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=TabBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../../src/react/workspace/TabBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef, useState } from 'react';
|
|
3
|
-
export const TIMEZONE_OPTIONS = [
|
|
4
|
-
{ label: 'UTC', value: 'UTC' },
|
|
5
|
-
{ label: 'Exchange', value: 'exchange' },
|
|
6
|
-
// Americas
|
|
7
|
-
{ label: '(UTC-10) Honolulu', value: 'Pacific/Honolulu' },
|
|
8
|
-
{ label: '(UTC-9) Anchorage', value: 'America/Anchorage' },
|
|
9
|
-
{ label: '(UTC-9) Juneau', value: 'America/Juneau' },
|
|
10
|
-
{ label: '(UTC-8) Los Angeles', value: 'America/Los_Angeles' },
|
|
11
|
-
{ label: '(UTC-8) Vancouver', value: 'America/Vancouver' },
|
|
12
|
-
{ label: '(UTC-7) Denver', value: 'America/Denver' },
|
|
13
|
-
{ label: '(UTC-7) Phoenix', value: 'America/Phoenix' },
|
|
14
|
-
{ label: '(UTC-6) Chicago', value: 'America/Chicago' },
|
|
15
|
-
{ label: '(UTC-6) Mexico City', value: 'America/Mexico_City' },
|
|
16
|
-
{ label: '(UTC-6) San Salvador', value: 'America/El_Salvador' },
|
|
17
|
-
{ label: '(UTC-5) Bogota', value: 'America/Bogota' },
|
|
18
|
-
{ label: '(UTC-5) Lima', value: 'America/Lima' },
|
|
19
|
-
{ label: '(UTC-5) New York', value: 'America/New_York' },
|
|
20
|
-
{ label: '(UTC-5) Toronto', value: 'America/Toronto' },
|
|
21
|
-
{ label: '(UTC-4) Caracas', value: 'America/Caracas' },
|
|
22
|
-
{ label: '(UTC-4) Halifax', value: 'America/Halifax' },
|
|
23
|
-
{ label: '(UTC-3) Buenos Aires', value: 'America/Argentina/Buenos_Aires' },
|
|
24
|
-
{ label: '(UTC-3) Santiago', value: 'America/Santiago' },
|
|
25
|
-
{ label: '(UTC-3) Sao Paulo', value: 'America/Sao_Paulo' },
|
|
26
|
-
{ label: '(UTC-2) Mid-Atlantic', value: 'Atlantic/South_Georgia' },
|
|
27
|
-
{ label: '(UTC-1) Azores', value: 'Atlantic/Azores' },
|
|
28
|
-
// Europe / Africa (UTC / UTC+0)
|
|
29
|
-
{ label: '(UTC) Casablanca', value: 'Africa/Casablanca' },
|
|
30
|
-
{ label: '(UTC) Dublin', value: 'Europe/Dublin' },
|
|
31
|
-
{ label: '(UTC) Lisbon', value: 'Europe/Lisbon' },
|
|
32
|
-
{ label: '(UTC) London', value: 'Europe/London' },
|
|
33
|
-
{ label: '(UTC) Reykjavik', value: 'Atlantic/Reykjavik' },
|
|
34
|
-
// UTC+1
|
|
35
|
-
{ label: '(UTC+1) Amsterdam', value: 'Europe/Amsterdam' },
|
|
36
|
-
{ label: '(UTC+1) Belgrade', value: 'Europe/Belgrade' },
|
|
37
|
-
{ label: '(UTC+1) Berlin', value: 'Europe/Berlin' },
|
|
38
|
-
{ label: '(UTC+1) Bratislava', value: 'Europe/Bratislava' },
|
|
39
|
-
{ label: '(UTC+1) Brussels', value: 'Europe/Brussels' },
|
|
40
|
-
{ label: '(UTC+1) Budapest', value: 'Europe/Budapest' },
|
|
41
|
-
{ label: '(UTC+1) Copenhagen', value: 'Europe/Copenhagen' },
|
|
42
|
-
{ label: '(UTC+1) Lagos', value: 'Africa/Lagos' },
|
|
43
|
-
{ label: '(UTC+1) Luxembourg', value: 'Europe/Luxembourg' },
|
|
44
|
-
{ label: '(UTC+1) Madrid', value: 'Europe/Madrid' },
|
|
45
|
-
{ label: '(UTC+1) Malta', value: 'Europe/Malta' },
|
|
46
|
-
{ label: '(UTC+1) Oslo', value: 'Europe/Oslo' },
|
|
47
|
-
{ label: '(UTC+1) Paris', value: 'Europe/Paris' },
|
|
48
|
-
{ label: '(UTC+1) Prague', value: 'Europe/Prague' },
|
|
49
|
-
{ label: '(UTC+1) Rome', value: 'Europe/Rome' },
|
|
50
|
-
{ label: '(UTC+1) Sarajevo', value: 'Europe/Sarajevo' },
|
|
51
|
-
{ label: '(UTC+1) Stockholm', value: 'Europe/Stockholm' },
|
|
52
|
-
{ label: '(UTC+1) Vienna', value: 'Europe/Vienna' },
|
|
53
|
-
{ label: '(UTC+1) Warsaw', value: 'Europe/Warsaw' },
|
|
54
|
-
{ label: '(UTC+1) Zurich', value: 'Europe/Zurich' },
|
|
55
|
-
// UTC+2
|
|
56
|
-
{ label: '(UTC+2) Athens', value: 'Europe/Athens' },
|
|
57
|
-
{ label: '(UTC+2) Bucharest', value: 'Europe/Bucharest' },
|
|
58
|
-
{ label: '(UTC+2) Cairo', value: 'Africa/Cairo' },
|
|
59
|
-
{ label: '(UTC+2) Helsinki', value: 'Europe/Helsinki' },
|
|
60
|
-
{ label: '(UTC+2) Istanbul', value: 'Europe/Istanbul' },
|
|
61
|
-
{ label: '(UTC+2) Jerusalem', value: 'Asia/Jerusalem' },
|
|
62
|
-
{ label: '(UTC+2) Johannesburg', value: 'Africa/Johannesburg' },
|
|
63
|
-
{ label: '(UTC+2) Kyiv', value: 'Europe/Kiev' },
|
|
64
|
-
{ label: '(UTC+2) Riga', value: 'Europe/Riga' },
|
|
65
|
-
{ label: '(UTC+2) Sofia', value: 'Europe/Sofia' },
|
|
66
|
-
{ label: '(UTC+2) Tallinn', value: 'Europe/Tallinn' },
|
|
67
|
-
{ label: '(UTC+2) Vilnius', value: 'Europe/Vilnius' },
|
|
68
|
-
// UTC+3
|
|
69
|
-
{ label: '(UTC+3) Baghdad', value: 'Asia/Baghdad' },
|
|
70
|
-
{ label: '(UTC+3) Kuwait', value: 'Asia/Kuwait' },
|
|
71
|
-
{ label: '(UTC+3) Moscow', value: 'Europe/Moscow' },
|
|
72
|
-
{ label: '(UTC+3) Nairobi', value: 'Africa/Nairobi' },
|
|
73
|
-
{ label: '(UTC+3) Qatar', value: 'Asia/Qatar' },
|
|
74
|
-
{ label: '(UTC+3) Riyadh', value: 'Asia/Riyadh' },
|
|
75
|
-
// UTC+3:30 / UTC+4
|
|
76
|
-
{ label: '(UTC+3:30) Tehran', value: 'Asia/Tehran' },
|
|
77
|
-
{ label: '(UTC+4) Abu Dhabi', value: 'Asia/Dubai' },
|
|
78
|
-
{ label: '(UTC+4) Baku', value: 'Asia/Baku' },
|
|
79
|
-
{ label: '(UTC+4) Dubai', value: 'Asia/Dubai' },
|
|
80
|
-
{ label: '(UTC+4) Muscat', value: 'Asia/Muscat' },
|
|
81
|
-
{ label: '(UTC+4) Tbilisi', value: 'Asia/Tbilisi' },
|
|
82
|
-
{ label: '(UTC+4:30) Kabul', value: 'Asia/Kabul' },
|
|
83
|
-
// UTC+5
|
|
84
|
-
{ label: '(UTC+5) Islamabad', value: 'Asia/Karachi' },
|
|
85
|
-
{ label: '(UTC+5) Karachi', value: 'Asia/Karachi' },
|
|
86
|
-
{ label: '(UTC+5) Tashkent', value: 'Asia/Tashkent' },
|
|
87
|
-
{ label: '(UTC+5:30) Chennai', value: 'Asia/Kolkata' },
|
|
88
|
-
{ label: '(UTC+5:30) Mumbai', value: 'Asia/Kolkata' },
|
|
89
|
-
{ label: '(UTC+5:30) New Delhi', value: 'Asia/Kolkata' },
|
|
90
|
-
{ label: '(UTC+5:45) Kathmandu', value: 'Asia/Kathmandu' },
|
|
91
|
-
// UTC+6
|
|
92
|
-
{ label: '(UTC+6) Almaty', value: 'Asia/Almaty' },
|
|
93
|
-
{ label: '(UTC+6) Dhaka', value: 'Asia/Dhaka' },
|
|
94
|
-
// UTC+7
|
|
95
|
-
{ label: '(UTC+7) Bangkok', value: 'Asia/Bangkok' },
|
|
96
|
-
{ label: '(UTC+7) Hanoi', value: 'Asia/Ho_Chi_Minh' },
|
|
97
|
-
{ label: '(UTC+7) Jakarta', value: 'Asia/Jakarta' },
|
|
98
|
-
// UTC+8
|
|
99
|
-
{ label: '(UTC+8) Beijing', value: 'Asia/Shanghai' },
|
|
100
|
-
{ label: '(UTC+8) Hong Kong', value: 'Asia/Hong_Kong' },
|
|
101
|
-
{ label: '(UTC+8) Kuala Lumpur', value: 'Asia/Kuala_Lumpur' },
|
|
102
|
-
{ label: '(UTC+8) Perth', value: 'Australia/Perth' },
|
|
103
|
-
{ label: '(UTC+8) Shanghai', value: 'Asia/Shanghai' },
|
|
104
|
-
{ label: '(UTC+8) Singapore', value: 'Asia/Singapore' },
|
|
105
|
-
{ label: '(UTC+8) Taipei', value: 'Asia/Taipei' },
|
|
106
|
-
// UTC+9
|
|
107
|
-
{ label: '(UTC+9) Osaka', value: 'Asia/Tokyo' },
|
|
108
|
-
{ label: '(UTC+9) Seoul', value: 'Asia/Seoul' },
|
|
109
|
-
{ label: '(UTC+9) Tokyo', value: 'Asia/Tokyo' },
|
|
110
|
-
{ label: '(UTC+9:30) Adelaide', value: 'Australia/Adelaide' },
|
|
111
|
-
{ label: '(UTC+9:30) Darwin', value: 'Australia/Darwin' },
|
|
112
|
-
// UTC+10
|
|
113
|
-
{ label: '(UTC+10) Brisbane', value: 'Australia/Brisbane' },
|
|
114
|
-
{ label: '(UTC+10) Canberra', value: 'Australia/Sydney' },
|
|
115
|
-
{ label: '(UTC+10) Melbourne', value: 'Australia/Melbourne' },
|
|
116
|
-
{ label: '(UTC+10) Sydney', value: 'Australia/Sydney' },
|
|
117
|
-
// UTC+12
|
|
118
|
-
{ label: '(UTC+12) Auckland', value: 'Pacific/Auckland' },
|
|
119
|
-
{ label: '(UTC+12) Fiji', value: 'Pacific/Fiji' },
|
|
120
|
-
];
|
|
121
|
-
// ─── DST-aware offset helpers ─────────────────────────────────────────────────
|
|
122
|
-
/**
|
|
123
|
-
* Returns the current UTC offset label for an IANA timezone, e.g. "(UTC-7)" or "(UTC+5:30)".
|
|
124
|
-
* Because it reads `new Date()` it is automatically DST-aware.
|
|
125
|
-
*/
|
|
126
|
-
function getUtcOffsetLabel(iana) {
|
|
127
|
-
try {
|
|
128
|
-
const parts = new Intl.DateTimeFormat('en', {
|
|
129
|
-
timeZone: iana,
|
|
130
|
-
timeZoneName: 'shortOffset',
|
|
131
|
-
}).formatToParts(new Date());
|
|
132
|
-
const tzName = parts.find((p) => p.type === 'timeZoneName')?.value ?? 'GMT';
|
|
133
|
-
const offset = tzName.replace(/^GMT/, '');
|
|
134
|
-
return offset ? `(UTC${offset})` : '(UTC)';
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
return '(UTC)';
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Returns a DST-aware display string for a timezone option.
|
|
142
|
-
* For UTC / Exchange the label is returned unchanged.
|
|
143
|
-
* For all IANA entries the offset prefix is recomputed live.
|
|
144
|
-
*/
|
|
145
|
-
function getDisplayLabel(opt) {
|
|
146
|
-
if (opt.value === 'UTC' || opt.value === 'exchange')
|
|
147
|
-
return opt.label;
|
|
148
|
-
// Extract city name from static label like "(UTC-9) Anchorage" → "Anchorage"
|
|
149
|
-
const city = opt.label.replace(/^\(UTC[^)]*\)\s*/, '');
|
|
150
|
-
return `${getUtcOffsetLabel(opt.value)} ${city}`;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Returns true when the given symbol trades on a session-aware exchange
|
|
154
|
-
* (stocks, futures, forex) where RTH/ETH distinction makes sense.
|
|
155
|
-
* Crypto exchanges trade 24/7 and have no session concept.
|
|
156
|
-
*/
|
|
157
|
-
const CRYPTO_EXCHANGES = new Set([
|
|
158
|
-
'BINANCE', 'BINANCEUS', 'BINANCEUSDM', 'BINANCECOINM',
|
|
159
|
-
'COINBASE', 'COINBASEPRO',
|
|
160
|
-
'KRAKEN', 'KRAKENFX',
|
|
161
|
-
'BYBIT', 'BITGET',
|
|
162
|
-
'OKX', 'OKEX',
|
|
163
|
-
'HUOBI', 'HTX',
|
|
164
|
-
'KUCOIN',
|
|
165
|
-
'GEMINI',
|
|
166
|
-
'BITSTAMP',
|
|
167
|
-
'BITFINEX',
|
|
168
|
-
'MEXC',
|
|
169
|
-
'GATEIO', 'GATE',
|
|
170
|
-
'BITMEX',
|
|
171
|
-
'DERIBIT',
|
|
172
|
-
]);
|
|
173
|
-
export function symbolSupportsSession(symbol) {
|
|
174
|
-
const exchange = symbol.includes(':') ? symbol.split(':')[0].toUpperCase() : '';
|
|
175
|
-
return exchange !== '' && !CRYPTO_EXCHANGES.has(exchange);
|
|
176
|
-
}
|
|
177
|
-
function useClockTime(timezone) {
|
|
178
|
-
const [time, setTime] = useState(() => _formatClock(timezone));
|
|
179
|
-
useEffect(() => {
|
|
180
|
-
setTime(_formatClock(timezone));
|
|
181
|
-
const id = setInterval(() => setTime(_formatClock(timezone)), 1000);
|
|
182
|
-
return () => clearInterval(id);
|
|
183
|
-
}, [timezone]);
|
|
184
|
-
return time;
|
|
185
|
-
}
|
|
186
|
-
function _formatClock(timezone) {
|
|
187
|
-
const tz = timezone === 'exchange' ? 'UTC' : timezone;
|
|
188
|
-
try {
|
|
189
|
-
return new Intl.DateTimeFormat('en-GB', {
|
|
190
|
-
timeZone: tz,
|
|
191
|
-
hour: '2-digit',
|
|
192
|
-
minute: '2-digit',
|
|
193
|
-
second: '2-digit',
|
|
194
|
-
hour12: false,
|
|
195
|
-
}).format(new Date());
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
return new Intl.DateTimeFormat('en-GB', {
|
|
199
|
-
timeZone: 'UTC',
|
|
200
|
-
hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false,
|
|
201
|
-
}).format(new Date());
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
export function BottomToolbar({ symbol, timezone, onTimezoneChange, session, onSessionChange, onToggleScriptDrawer, scriptDrawerOpen }) {
|
|
205
|
-
const showSession = symbolSupportsSession(symbol);
|
|
206
|
-
const [open, setOpen] = useState(false);
|
|
207
|
-
const [sessionOpen, setSessionOpen] = useState(false);
|
|
208
|
-
const rootRef = useRef(null);
|
|
209
|
-
const sessionRef = useRef(null);
|
|
210
|
-
const clockTime = useClockTime(timezone);
|
|
211
|
-
const current = TIMEZONE_OPTIONS.find((o) => o.value === timezone) ?? TIMEZONE_OPTIONS[0];
|
|
212
|
-
// Close timezone dropdown on outside click
|
|
213
|
-
useEffect(() => {
|
|
214
|
-
if (!open)
|
|
215
|
-
return;
|
|
216
|
-
const handler = (e) => {
|
|
217
|
-
if (rootRef.current && !rootRef.current.contains(e.target))
|
|
218
|
-
setOpen(false);
|
|
219
|
-
};
|
|
220
|
-
document.addEventListener('mousedown', handler);
|
|
221
|
-
return () => document.removeEventListener('mousedown', handler);
|
|
222
|
-
}, [open]);
|
|
223
|
-
// Close session dropdown on outside click
|
|
224
|
-
useEffect(() => {
|
|
225
|
-
if (!sessionOpen)
|
|
226
|
-
return;
|
|
227
|
-
const handler = (e) => {
|
|
228
|
-
if (sessionRef.current && !sessionRef.current.contains(e.target))
|
|
229
|
-
setSessionOpen(false);
|
|
230
|
-
};
|
|
231
|
-
document.addEventListener('mousedown', handler);
|
|
232
|
-
return () => document.removeEventListener('mousedown', handler);
|
|
233
|
-
}, [sessionOpen]);
|
|
234
|
-
return (_jsxs("div", { className: "bottom-bar", children: [_jsx("div", { className: "bottom-bar-left", children: _jsxs("button", { className: `bottom-bar-btn${scriptDrawerOpen ? ' active' : ''}`, onClick: onToggleScriptDrawer, title: "Script Engine", children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "11", height: "11", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", children: [_jsx("polyline", { points: "4,6 2,8 4,10" }), _jsx("polyline", { points: "12,6 14,8 12,10" }), _jsx("line", { x1: "9", y1: "3", x2: "7", y2: "13" })] }), "Script"] }) }), _jsxs("div", { className: "bottom-bar-right", children: [_jsxs("div", { ref: rootRef, style: { position: 'relative', display: 'flex', alignItems: 'center' }, children: [_jsxs("button", { className: `bottom-bar-btn${open ? ' active' : ''}`, onClick: () => setOpen((o) => !o), title: "Chart timezone", children: [_jsxs("svg", { viewBox: "0 0 14 14", width: "11", height: "11", fill: "none", stroke: "currentColor", strokeWidth: "1.2", children: [_jsx("circle", { cx: "7", cy: "7", r: "5.5" }), _jsx("path", { d: "M7 1.5C7 1.5 9 4 9 7s-2 5.5-2 5.5M7 1.5C7 1.5 5 4 5 7s2 5.5 2 5.5" }), _jsx("line", { x1: "1.5", y1: "7", x2: "12.5", y2: "7" }), _jsx("line", { x1: "2", y1: "4.5", x2: "12", y2: "4.5" }), _jsx("line", { x1: "2", y1: "9.5", x2: "12", y2: "9.5" })] }), getDisplayLabel(current)] }), _jsx("span", { className: "bottom-bar-clock", title: `Current time in ${getDisplayLabel(current)}`, children: clockTime }), open && (_jsxs("div", { className: "bottom-bar-dropdown bottom-bar-dropdown--right", children: [_jsx("div", { className: "bottom-bar-dropdown-section", children: "Timezone" }), TIMEZONE_OPTIONS.map((opt) => (_jsxs("button", { className: `bottom-bar-dropdown-item${opt.value === timezone ? ' current' : ''}`, onClick: () => { onTimezoneChange(opt.value); setOpen(false); }, children: [opt.value === timezone && (_jsx("span", { className: "bottom-bar-check", children: "\u00E2\u0153\u201C" })), getDisplayLabel(opt)] }, opt.value + opt.label)))] }))] }), showSession && _jsxs("div", { ref: sessionRef, style: { position: 'relative', display: 'flex', alignItems: 'center' }, children: [_jsxs("button", { className: `bottom-bar-btn${sessionOpen ? ' active' : ''}`, onClick: () => setSessionOpen((o) => !o), title: "Trading session", children: [_jsxs("svg", { viewBox: "0 0 14 14", width: "11", height: "11", fill: "none", stroke: "currentColor", strokeWidth: "1.2", children: [_jsx("rect", { x: "1.5", y: "2.5", width: "11", height: "9", rx: "1" }), _jsx("line", { x1: "1.5", y1: "5.5", x2: "12.5", y2: "5.5" }), _jsx("line", { x1: "4.5", y1: "2.5", x2: "4.5", y2: "1" }), _jsx("line", { x1: "9.5", y1: "2.5", x2: "9.5", y2: "1" })] }), session === 'extended' ? 'Extended hours' : 'Regular hours'] }), sessionOpen && (_jsxs("div", { className: "bottom-bar-dropdown bottom-bar-dropdown--right", children: [_jsx("div", { className: "bottom-bar-dropdown-section", children: "Sessions" }), _jsxs("button", { className: `bottom-bar-dropdown-item${session === 'regular' ? ' current' : ''}`, onClick: () => { onSessionChange('regular'); setSessionOpen(false); }, children: [session === 'regular' && _jsx("span", { className: "bottom-bar-check", children: "\u00E2\u0153\u201C" }), _jsxs("span", { className: "bottom-bar-session-label", children: [_jsx("strong", { children: "Regular trading hours" }), _jsx("span", { children: "Exchange session only (RTH) \u00E2\u20AC\u201D cleaner signals, higher liquidity" })] })] }), _jsxs("button", { className: `bottom-bar-dropdown-item${session === 'extended' ? ' current' : ''}`, onClick: () => { onSessionChange('extended'); setSessionOpen(false); }, children: [session === 'extended' && _jsx("span", { className: "bottom-bar-check", children: "\u00E2\u0153\u201C" }), _jsxs("span", { className: "bottom-bar-session-label", children: [_jsx("strong", { children: "Extended / electronic hours" }), _jsx("span", { children: "Includes pre-market & after-hours (ETH) \u00E2\u20AC\u201D full price range" })] })] })] }))] })] })] }));
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=BottomToolbar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BottomToolbar.js","sourceRoot":"","sources":["../../../../src/react/workspace/toolbars/BottomToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
const WatchListIcon = () => (_jsxs("svg", { viewBox: "0 0 16 16", width: "16", height: "16", stroke: "currentColor", fill: "none", strokeWidth: "1.5", children: [_jsx("rect", { x: "2", y: "3", width: "12", height: "1.5", rx: "0.5", fill: "currentColor", stroke: "none" }), _jsx("rect", { x: "2", y: "7", width: "9", height: "1.5", rx: "0.5", fill: "currentColor", stroke: "none" }), _jsx("rect", { x: "2", y: "11", width: "10", height: "1.5", rx: "0.5", fill: "currentColor", stroke: "none" }), _jsx("circle", { cx: "13", cy: "11.75", r: "2.5" }), _jsx("line", { x1: "13", y1: "10.75", x2: "13", y2: "12.75", strokeWidth: "1.2" }), _jsx("line", { x1: "12", y1: "11.75", x2: "14", y2: "11.75", strokeWidth: "1.2" })] }));
|
|
3
|
-
// ─── RightToolbar ────────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
export function RightToolbar({ watchlistOpen, onToggleWatchlist }) {
|
|
5
|
-
return (_jsx("div", { style: {
|
|
6
|
-
display: 'flex',
|
|
7
|
-
flexDirection: 'column',
|
|
8
|
-
alignItems: 'center',
|
|
9
|
-
gap: 2,
|
|
10
|
-
padding: '6px 4px',
|
|
11
|
-
background: 'var(--toolbar-bg)',
|
|
12
|
-
borderRadius: 8,
|
|
13
|
-
width: 40,
|
|
14
|
-
flexShrink: 0,
|
|
15
|
-
userSelect: 'none',
|
|
16
|
-
}, children: _jsx("button", { title: "Watch List", className: `drawing-tool-btn${watchlistOpen ? ' is-active' : ''}`, onClick: onToggleWatchlist, children: _jsx(WatchListIcon, {}) }) }));
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=RightToolbar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RightToolbar.js","sourceRoot":"","sources":["../../../../src/react/workspace/toolbars/RightToolbar.tsx"],"names":[],"mappings":";AAEA,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,CAC1B,eAAK,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAC,cAAc,EAAC,IAAI,EAAC,MAAM,EAAC,WAAW,EAAC,KAAK,aACjG,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,EAAC,MAAM,EAAC,MAAM,GAAG,EACvF,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,EAAC,MAAM,EAAC,MAAM,GAAG,EACtF,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,EAAC,MAAM,EAAC,MAAM,GAAG,EACxF,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,GAAG,EACrC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,GAAG,EAChE,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,GAAG,IAC5D,CACP,CAAC;AAOF,oGAAoG;AAEpG,MAAM,UAAU,YAAY,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAS;IACtE,OAAO,CACL,cACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,mBAAmB;YAC/B,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,MAAM;SACnB,YAED,iBACE,KAAK,EAAC,YAAY,EAClB,SAAS,EAAE,mBAAmB,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EACjE,OAAO,EAAE,iBAAiB,YAE1B,KAAC,aAAa,KAAG,GACV,GACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect, useRef } from 'react';
|
|
3
|
-
import { LayoutMenu } from '../LayoutMenu';
|
|
4
|
-
import { SymbolSearchDialog } from '../SymbolSearchDialog';
|
|
5
|
-
import { IndicatorsDialog } from '../IndicatorsDialog';
|
|
6
|
-
// ─── Timeframe data ───────────────────────────────────────────────────────────
|
|
7
|
-
export const DEFAULT_FAVORITES = ['1m', '5m', '15m', '30m', '1h', '4h', '1d', '1w'];
|
|
8
|
-
const TF_LABELS = {
|
|
9
|
-
'1m': '1 minute', '2m': '2 minutes', '3m': '3 minutes', '4m': '4 minutes',
|
|
10
|
-
'5m': '5 minutes', '10m': '10 minutes', '15m': '15 minutes', '20m': '20 minutes',
|
|
11
|
-
'30m': '30 minutes', '45m': '45 minutes',
|
|
12
|
-
'1h': '1 hour', '2h': '2 hours', '3h': '3 hours', '4h': '4 hours',
|
|
13
|
-
'6h': '6 hours', '8h': '8 hours', '12h': '12 hours',
|
|
14
|
-
'1d': '1 day', '2d': '2 days', '3d': '3 days', '1w': '1 week',
|
|
15
|
-
'2w': '2 weeks', '1M': '1 month', '3M': '3 months', '6M': '6 months', '12M': '12 months',
|
|
16
|
-
};
|
|
17
|
-
const TF_GROUPS_ALL = [
|
|
18
|
-
{ label: 'Minutes', items: ['1m', '2m', '3m', '4m', '5m', '10m', '15m', '20m', '30m', '45m'] },
|
|
19
|
-
{ label: 'Hours', items: ['1h', '2h', '3h', '4h', '6h', '8h', '12h'] },
|
|
20
|
-
{ label: 'Days', items: ['1d', '2d', '3d', '1w', '2w', '1M', '3M', '6M', '12M'] },
|
|
21
|
-
];
|
|
22
|
-
// ─── Timeframe dropdown ───────────────────────────────────────────────────────
|
|
23
|
-
function TimeframeDropdown({ timeframe, customTimeframes, favorites, onSelect, onToggleFavorite, onAddCustom, onClose, }) {
|
|
24
|
-
const [collapsed, setCollapsed] = useState({});
|
|
25
|
-
const [addingCustom, setAddingCustom] = useState(false);
|
|
26
|
-
const [input, setInput] = useState('');
|
|
27
|
-
const ref = useRef(null);
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
const handler = (e) => {
|
|
30
|
-
if (ref.current && !ref.current.contains(e.target))
|
|
31
|
-
onClose();
|
|
32
|
-
};
|
|
33
|
-
document.addEventListener('mousedown', handler);
|
|
34
|
-
return () => document.removeEventListener('mousedown', handler);
|
|
35
|
-
}, [onClose]);
|
|
36
|
-
const commit = () => {
|
|
37
|
-
const val = input.trim();
|
|
38
|
-
if (!val)
|
|
39
|
-
return;
|
|
40
|
-
onAddCustom(val);
|
|
41
|
-
onSelect(val);
|
|
42
|
-
setInput('');
|
|
43
|
-
onClose();
|
|
44
|
-
};
|
|
45
|
-
const toggleGroup = (label) => setCollapsed((prev) => ({ ...prev, [label]: !prev[label] }));
|
|
46
|
-
return (_jsxs("div", { ref: ref, className: "tf-dropdown", children: [_jsx("button", { className: "tf-dropdown-add-custom", onClick: () => setAddingCustom((a) => !a), children: "+ Add custom interval..." }), addingCustom && (_jsxs("div", { className: "tf-dropdown-add-row", children: [_jsx("input", { className: "tf-dropdown-input", type: "text", value: input, placeholder: "e.g. 2h, 45m", onChange: (e) => setInput(e.target.value), onKeyDown: (e) => { if (e.key === 'Enter')
|
|
47
|
-
commit(); }, autoFocus: true }), _jsx("button", { className: "tf-dropdown-add-btn", disabled: !input.trim(), onClick: commit, children: "Add" })] })), TF_GROUPS_ALL.map((group) => (_jsxs("div", { children: [_jsxs("button", { className: "tf-dropdown-group-hdr", onClick: () => toggleGroup(group.label), children: [_jsx("span", { children: group.label }), _jsx("span", { className: `tf-dropdown-chevron${collapsed[group.label] ? ' collapsed' : ''}`, children: "\u2227" })] }), !collapsed[group.label] && group.items.map((tf) => (_jsxs("button", { className: "tf-dropdown-row", onClick: () => { onSelect(tf); onClose(); }, children: [_jsx("span", { children: TF_LABELS[tf] ?? tf }), _jsx("button", { className: "tf-star-btn", title: favorites.includes(tf) ? 'Remove from toolbar' : 'Add to toolbar', onClick: (e) => { e.stopPropagation(); onToggleFavorite(tf); }, children: _jsx("span", { className: `tf-star${favorites.includes(tf) ? ' favorited' : ''}`, children: "\u2605" }) })] }, tf)))] }, group.label))), customTimeframes.length > 0 && (_jsxs("div", { children: [_jsxs("button", { className: "tf-dropdown-group-hdr", onClick: () => toggleGroup('Custom'), children: [_jsx("span", { children: "Custom" }), _jsx("span", { className: `tf-dropdown-chevron${collapsed['Custom'] ? ' collapsed' : ''}`, children: "\u2227" })] }), !collapsed['Custom'] && customTimeframes.map((tf) => (_jsx("button", { className: "tf-dropdown-row", onClick: () => { onSelect(tf); onClose(); }, children: _jsx("span", { children: tf }) }, tf)))] }))] }));
|
|
48
|
-
}
|
|
49
|
-
export function TopToolbar({ symbol, timeframe, theme, customTimeframes, favorites, onSymbolChange, onTimeframeChange, onAddCustomTimeframe, onFavoritesChange, onAddIndicator, onToggleTheme, onCopyScreenshot, onDownloadScreenshot, onFullscreen, isFullscreen, currentLayoutName, currentLayoutId, autoSave, onSaveLayout, onLoadLayout, onRenameLayout, onCopyLayout, onToggleAutoSave, onDeleteLayout, onOpenLayoutInNewTab, onFetchLayouts, symbolResolver, showTradeButton, tradeDrawerOpen, onToggleTradeDrawer, }) {
|
|
50
|
-
const [tfOpen, setTfOpen] = useState(false);
|
|
51
|
-
const [symOpen, setSymOpen] = useState(false);
|
|
52
|
-
const [indOpen, setIndOpen] = useState(false);
|
|
53
|
-
const [ssOpen, setSsOpen] = useState(false);
|
|
54
|
-
const ssRef = useRef(null);
|
|
55
|
-
const tfRef = useRef(null);
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
if (!ssOpen)
|
|
58
|
-
return;
|
|
59
|
-
const handler = (e) => {
|
|
60
|
-
if (ssRef.current && !ssRef.current.contains(e.target))
|
|
61
|
-
setSsOpen(false);
|
|
62
|
-
};
|
|
63
|
-
document.addEventListener('mousedown', handler);
|
|
64
|
-
return () => document.removeEventListener('mousedown', handler);
|
|
65
|
-
}, [ssOpen]);
|
|
66
|
-
// Close dropdown on outside click is handled inside TimeframeDropdown itself.
|
|
67
|
-
return (_jsxs("div", { style: {
|
|
68
|
-
display: 'flex',
|
|
69
|
-
alignItems: 'center',
|
|
70
|
-
gap: 8,
|
|
71
|
-
padding: '6px 12px',
|
|
72
|
-
background: 'var(--toolbar-bg)',
|
|
73
|
-
borderRadius: 8,
|
|
74
|
-
flexShrink: 0,
|
|
75
|
-
}, children: [_jsx("span", { style: { fontWeight: 700, letterSpacing: '-0.5px', color: 'var(--accent)' }, children: "ForgeCharts" }), _jsx("div", { className: "toolbar-sep" }), _jsxs("button", { className: "sym-trigger", onClick: () => setSymOpen(true), title: "Search symbols", children: [_jsxs("svg", { viewBox: "0 0 14 14", width: "12", height: "12", stroke: "currentColor", fill: "none", strokeWidth: "1.8", strokeLinecap: "round", children: [_jsx("circle", { cx: "5.5", cy: "5.5", r: "4" }), _jsx("line", { x1: "9", y1: "9", x2: "13", y2: "13" })] }), _jsx("span", { children: symbol }), _jsx("svg", { viewBox: "0 0 10 6", width: "8", height: "6", fill: "currentColor", children: _jsx("path", { d: "M0 0l5 6 5-6z" }) })] }), symOpen && (_jsx(SymbolSearchDialog, { current: symbol, onSelect: onSymbolChange, onClose: () => setSymOpen(false), symbolResolver: symbolResolver })), _jsx("div", { className: "toolbar-sep" }), _jsxs("div", { ref: tfRef, style: { display: 'flex', gap: 2, position: 'relative' }, children: [favorites.map((tf) => (_jsx("button", { className: tf === timeframe ? 'active' : undefined, onClick: () => onTimeframeChange(tf), children: tf }, tf))), !favorites.includes(timeframe) && timeframe && (_jsx("button", { className: "active", style: { fontStyle: 'italic' }, children: timeframe })), _jsx("button", { className: tfOpen ? 'active' : undefined, onClick: () => setTfOpen((o) => !o), title: "More timeframes", style: { fontSize: 11, padding: '4px 7px' }, children: "\u25BE" }), tfOpen && (_jsx(TimeframeDropdown, { timeframe: timeframe, customTimeframes: customTimeframes, favorites: favorites, onSelect: onTimeframeChange, onToggleFavorite: (tf) => {
|
|
76
|
-
const next = favorites.includes(tf)
|
|
77
|
-
? favorites.filter((f) => f !== tf)
|
|
78
|
-
: [...favorites, tf];
|
|
79
|
-
onFavoritesChange(next);
|
|
80
|
-
}, onAddCustom: onAddCustomTimeframe, onClose: () => setTfOpen(false) }))] }), _jsx("div", { className: "toolbar-sep" }), _jsxs("button", { className: `ind-trigger${indOpen ? ' active' : ''}`, onClick: () => setIndOpen((o) => !o), title: "Indicators", children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", stroke: "currentColor", fill: "none", strokeWidth: "1.6", strokeLinecap: "round", children: [_jsx("polyline", { points: "2,12 6,7 9,10 14,4" }), _jsx("line", { x1: "11", y1: "2", x2: "14", y2: "2" }), _jsx("line", { x1: "14", y1: "2", x2: "14", y2: "5" })] }), "Indicators"] }), indOpen && (_jsx(IndicatorsDialog, { onAdd: (config) => { onAddIndicator(config); }, onClose: () => setIndOpen(false) })), _jsxs("div", { style: { marginLeft: 'auto', display: 'flex', alignItems: 'center', gap: 4 }, children: [showTradeButton && (_jsxs(_Fragment, { children: [_jsxs("button", { className: `top-trade-btn${tradeDrawerOpen ? ' active' : ''}`, onClick: onToggleTradeDrawer, title: "Trade \u2014 Connect your broker", style: { display: 'inline-flex', alignItems: 'center', gap: 5, padding: '4px 8px', fontSize: 12 }, children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "11", height: "11", fill: "none", stroke: "currentColor", strokeWidth: "1.6", children: [_jsx("rect", { x: "1.5", y: "3", width: "13", height: "10", rx: "1.5" }), _jsx("line", { x1: "5", y1: "8", x2: "11", y2: "8" }), _jsx("line", { x1: "8", y1: "5", x2: "8", y2: "11" })] }), "Trade"] }), _jsx("div", { className: "toolbar-sep" })] })), _jsx(LayoutMenu, { currentName: currentLayoutName, currentLayoutId: currentLayoutId, autoSave: autoSave, onFetchLayouts: onFetchLayouts, onSave: onSaveLayout, onLoad: onLoadLayout, onRename: onRenameLayout, onCopy: onCopyLayout, onToggleAutoSave: onToggleAutoSave, onDelete: onDeleteLayout, onOpenInNewTab: onOpenLayoutInNewTab }), _jsx("button", { onClick: onToggleTheme, title: `Switch to ${theme === 'dark' ? 'light' : 'dark'} mode`, style: { fontSize: 14, padding: '4px 8px' }, children: theme === 'dark' ? '☀' : '☾' }), _jsxs("div", { ref: ssRef, style: { position: 'relative' }, children: [_jsx("button", { className: ssOpen ? 'active' : undefined, onClick: () => setSsOpen((o) => !o), title: "Screenshot", style: { display: 'inline-flex', alignItems: 'center', padding: '4px 7px' }, children: _jsxs("svg", { viewBox: "0 0 16 16", width: "14", height: "14", stroke: "currentColor", fill: "none", strokeWidth: "1.5", children: [_jsx("rect", { x: "2", y: "4", width: "12", height: "9", rx: "1" }), _jsx("circle", { cx: "8", cy: "8.5", r: "2.5" }), _jsx("path", { d: "M6 4l1-2h2l1 2" })] }) }), ssOpen && (_jsxs("div", { className: "ss-dropdown", children: [_jsxs("button", { className: "ss-dropdown-item", onClick: () => { setSsOpen(false); onCopyScreenshot(); }, children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", stroke: "currentColor", fill: "none", strokeWidth: "1.5", children: [_jsx("rect", { x: "5", y: "5", width: "9", height: "9", rx: "1" }), _jsx("path", { d: "M3 11H2a1 1 0 01-1-1V2a1 1 0 011-1h8a1 1 0 011 1v1" })] }), "Copy to Clipboard"] }), _jsxs("button", { className: "ss-dropdown-item", onClick: () => { setSsOpen(false); onDownloadScreenshot(); }, children: [_jsxs("svg", { viewBox: "0 0 16 16", width: "13", height: "13", stroke: "currentColor", fill: "none", strokeWidth: "1.5", strokeLinecap: "round", children: [_jsx("line", { x1: "8", y1: "2", x2: "8", y2: "11" }), _jsx("polyline", { points: "4,7 8,11 12,7" }), _jsx("line", { x1: "2", y1: "14", x2: "14", y2: "14" })] }), "Download PNG"] })] }))] }), _jsx("button", { onClick: onFullscreen, title: isFullscreen ? 'Exit Fullscreen' : 'Fullscreen', style: { display: 'inline-flex', alignItems: 'center', padding: '4px 7px' }, children: isFullscreen ? (_jsx("svg", { viewBox: "0 0 16 16", width: "14", height: "14", stroke: "currentColor", fill: "none", strokeWidth: "1.5", children: _jsx("path", { d: "M6 2v4H2M10 2v4h4M10 14v-4h4M6 14v-4H2" }) })) : (_jsx("svg", { viewBox: "0 0 16 16", width: "14", height: "14", stroke: "currentColor", fill: "none", strokeWidth: "1.5", children: _jsx("path", { d: "M2 6V2h4M10 2h4v4M14 10v4h-4M6 14H2v-4" }) })) })] })] }));
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=TopToolbar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TopToolbar.js","sourceRoot":"","sources":["../../../../src/react/workspace/toolbars/TopToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { mapRange } from '@forgecharts/utils';
|
|
2
|
-
/**
|
|
3
|
-
* CandlestickRenderer — draws OHLCV data as Japanese candlesticks.
|
|
4
|
-
* All rendering is pure Canvas 2D; no third-party dependencies.
|
|
5
|
-
*/
|
|
6
|
-
export class CandlestickRenderer {
|
|
7
|
-
_colors;
|
|
8
|
-
constructor(colors) {
|
|
9
|
-
this._colors = colors;
|
|
10
|
-
}
|
|
11
|
-
draw(ctx, bars, viewport, rect, options) {
|
|
12
|
-
if (options.type !== 'candlestick' && options.type !== 'heikinashi' && options.type !== 'bar') {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const plotData = options.type === 'heikinashi' ? this._toHeikinAshi(bars) : bars;
|
|
16
|
-
const upColor = 'upColor' in options ? (options.upColor ?? '#26a641') : '#26a641';
|
|
17
|
-
const downColor = 'downColor' in options ? (options.downColor ?? '#f85149') : '#f85149';
|
|
18
|
-
const wickUpColor = 'wickUpColor' in options ? (options.wickUpColor ?? upColor) : upColor;
|
|
19
|
-
const wickDownColor = 'wickDownColor' in options ? (options.wickDownColor ?? downColor) : downColor;
|
|
20
|
-
const borderVisible = 'borderVisible' in options ? (options.borderVisible ?? false) : false;
|
|
21
|
-
const plotW = rect.width - 70; // price axis reserved
|
|
22
|
-
const plotH = rect.height - 30; // time axis reserved
|
|
23
|
-
// ── Bar pitch: pixels per candle ─────────────────────────────────────────
|
|
24
|
-
// IMPORTANT: must be derived from the visible time range + candle interval,
|
|
25
|
-
// NOT from total bar count. Using bar count means pitch shrinks as you pan
|
|
26
|
-
// into history (more bars → narrower candles) and widens as you pan forward
|
|
27
|
-
// (fewer bars visible → wider candles with gaps), which is wrong.
|
|
28
|
-
// Infer candle interval from the median gap between consecutive bars.
|
|
29
|
-
let candleInterval = 0;
|
|
30
|
-
if (plotData.length >= 2) {
|
|
31
|
-
const deltas = [];
|
|
32
|
-
for (let i = 1; i < Math.min(plotData.length, 20); i++) {
|
|
33
|
-
const d = plotData[i].time - plotData[i - 1].time;
|
|
34
|
-
if (d > 0)
|
|
35
|
-
deltas.push(d);
|
|
36
|
-
}
|
|
37
|
-
if (deltas.length > 0) {
|
|
38
|
-
deltas.sort((a, b) => a - b);
|
|
39
|
-
candleInterval = deltas[Math.floor(deltas.length / 2)];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const visibleSpan = viewport.timeRange.to - viewport.timeRange.from;
|
|
43
|
-
const pixelsPerSecond = visibleSpan > 0 ? plotW / visibleSpan : 1;
|
|
44
|
-
const barPitch = candleInterval > 0
|
|
45
|
-
? candleInterval * pixelsPerSecond // correct: interval-based
|
|
46
|
-
: plotW / Math.max(1, plotData.length); // fallback for edge cases
|
|
47
|
-
const minBarWidth = 1;
|
|
48
|
-
const maxBarWidth = 20;
|
|
49
|
-
const gap = Math.max(1, Math.round(barPitch * 0.15));
|
|
50
|
-
const barWidth = Math.min(maxBarWidth, Math.max(minBarWidth, Math.floor(barPitch) - gap));
|
|
51
|
-
const halfBar = Math.max(0.5, barWidth / 2);
|
|
52
|
-
for (const bar of plotData) {
|
|
53
|
-
const x = mapRange(bar.time, viewport.timeRange.from, viewport.timeRange.to, 0, plotW);
|
|
54
|
-
if (x < -barWidth || x > plotW + barWidth)
|
|
55
|
-
continue;
|
|
56
|
-
const yOpen = mapRange(bar.open, viewport.priceRange.max, viewport.priceRange.min, 0, plotH);
|
|
57
|
-
const yClose = mapRange(bar.close, viewport.priceRange.max, viewport.priceRange.min, 0, plotH);
|
|
58
|
-
const yHigh = mapRange(bar.high, viewport.priceRange.max, viewport.priceRange.min, 0, plotH);
|
|
59
|
-
const yLow = mapRange(bar.low, viewport.priceRange.max, viewport.priceRange.min, 0, plotH);
|
|
60
|
-
const bullish = bar.close >= bar.open;
|
|
61
|
-
const bodyColor = bullish ? upColor : downColor;
|
|
62
|
-
const bodyTop = Math.min(yOpen, yClose);
|
|
63
|
-
const bodyBottom = Math.max(yOpen, yClose);
|
|
64
|
-
const bodyH = Math.max(1, bodyBottom - bodyTop);
|
|
65
|
-
// Wick
|
|
66
|
-
ctx.beginPath();
|
|
67
|
-
ctx.strokeStyle = bullish ? wickUpColor : wickDownColor;
|
|
68
|
-
ctx.lineWidth = 1;
|
|
69
|
-
ctx.moveTo(x, yHigh);
|
|
70
|
-
ctx.lineTo(x, bodyTop);
|
|
71
|
-
ctx.moveTo(x, bodyBottom);
|
|
72
|
-
ctx.lineTo(x, yLow);
|
|
73
|
-
ctx.stroke();
|
|
74
|
-
// Body
|
|
75
|
-
ctx.fillStyle = bodyColor;
|
|
76
|
-
ctx.fillRect(x - halfBar, bodyTop, barWidth, bodyH);
|
|
77
|
-
if (borderVisible) {
|
|
78
|
-
ctx.strokeStyle = bodyColor;
|
|
79
|
-
ctx.lineWidth = 1;
|
|
80
|
-
ctx.strokeRect(x - halfBar, bodyTop, barWidth, bodyH);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
_toHeikinAshi(bars) {
|
|
85
|
-
const result = [];
|
|
86
|
-
for (let i = 0; i < bars.length; i++) {
|
|
87
|
-
const bar = bars[i];
|
|
88
|
-
const prev = result[i - 1] ?? bar;
|
|
89
|
-
const haClose = (bar.open + bar.high + bar.low + bar.close) / 4;
|
|
90
|
-
const haOpen = (prev.open + prev.close) / 2;
|
|
91
|
-
const haHigh = Math.max(bar.high, haOpen, haClose);
|
|
92
|
-
const haLow = Math.min(bar.low, haOpen, haClose);
|
|
93
|
-
result.push({ time: bar.time, open: haOpen, high: haHigh, low: haLow, close: haClose, volume: bar.volume });
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=CandlestickRenderer.js.map
|