aliencharts 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/assets/aliencharts_logo_small.png +0 -0
- package/assets/aliencharts_title.svg +3 -0
- package/assets/chartdrawings.png +0 -0
- package/assets/chartgrid.png +0 -0
- package/dist/index.cjs +158 -117
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +158 -117
- package/dist/index.js.map +2 -2
- package/index.d.ts +161 -0
- package/package.json +6 -2
package/dist/index.js
CHANGED
|
@@ -309,7 +309,8 @@ function ChartToolbar({
|
|
|
309
309
|
activeDrawingTool = null,
|
|
310
310
|
onDrawingToolToggle,
|
|
311
311
|
hasDrawings = false,
|
|
312
|
-
onClearDrawingsRequest
|
|
312
|
+
onClearDrawingsRequest,
|
|
313
|
+
disableDrawings = false
|
|
313
314
|
}) {
|
|
314
315
|
return /* @__PURE__ */ React.createElement("div", { className: "absolute left-2 top-12 z-30 flex flex-col gap-0.5 rounded-sm bg-background/80 p-0 pr-3 text-foreground shadow-sm backdrop-blur" }, /* @__PURE__ */ React.createElement(
|
|
315
316
|
ToolbarAction,
|
|
@@ -328,7 +329,7 @@ function ChartToolbar({
|
|
|
328
329
|
active: rectangleZoomActive
|
|
329
330
|
},
|
|
330
331
|
/* @__PURE__ */ React.createElement(MagnifyingGlassPlusIcon, { size: 16, weight: "bold" })
|
|
331
|
-
), hasDrawings ? /* @__PURE__ */ React.createElement(
|
|
332
|
+
), !disableDrawings && hasDrawings ? /* @__PURE__ */ React.createElement(
|
|
332
333
|
ToolbarAction,
|
|
333
334
|
{
|
|
334
335
|
title: "Clear drawings",
|
|
@@ -336,7 +337,7 @@ function ChartToolbar({
|
|
|
336
337
|
onClick: onClearDrawingsRequest
|
|
337
338
|
},
|
|
338
339
|
/* @__PURE__ */ React.createElement(BroomIcon, { size: 16, weight: "bold" })
|
|
339
|
-
) : null, /* @__PURE__ */ React.createElement("div", { className: "my-1 h-px w-full" }), /* @__PURE__ */ React.createElement(
|
|
340
|
+
) : null, !disableDrawings ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "my-1 h-px w-full" }), /* @__PURE__ */ React.createElement(
|
|
340
341
|
ToolbarAction,
|
|
341
342
|
{
|
|
342
343
|
title: "Draw trendline",
|
|
@@ -372,7 +373,7 @@ function ChartToolbar({
|
|
|
372
373
|
active: activeDrawingTool === "pin"
|
|
373
374
|
},
|
|
374
375
|
/* @__PURE__ */ React.createElement(MapPinIcon, { size: 16, weight: "bold" })
|
|
375
|
-
), /* @__PURE__ */ React.createElement(
|
|
376
|
+
)) : null, !disableDrawings ? /* @__PURE__ */ React.createElement(
|
|
376
377
|
ToolbarAction,
|
|
377
378
|
{
|
|
378
379
|
title: "Toggle moving average",
|
|
@@ -381,7 +382,7 @@ function ChartToolbar({
|
|
|
381
382
|
active: movingAverageActive
|
|
382
383
|
},
|
|
383
384
|
/* @__PURE__ */ React.createElement(WaveSineIcon, { size: 16, weight: "bold" })
|
|
384
|
-
));
|
|
385
|
+
) : null);
|
|
385
386
|
}
|
|
386
387
|
|
|
387
388
|
// src/react/DrawingOptionsToolbar.jsx
|
|
@@ -1739,6 +1740,11 @@ var getYRange = (chart, xMin, xMax, width) => {
|
|
|
1739
1740
|
if (!Number.isFinite(minY) || !Number.isFinite(maxY)) {
|
|
1740
1741
|
return { minY: 0, maxY: 1, renderedPoints, bucketSize };
|
|
1741
1742
|
}
|
|
1743
|
+
const fixedMinY = Number(chart.yRange?.min);
|
|
1744
|
+
const fixedMaxY = Number(chart.yRange?.max);
|
|
1745
|
+
if (Number.isFinite(fixedMinY) && Number.isFinite(fixedMaxY) && fixedMinY < fixedMaxY) {
|
|
1746
|
+
return { minY: fixedMinY, maxY: fixedMaxY, renderedPoints, bucketSize };
|
|
1747
|
+
}
|
|
1742
1748
|
if (minY === maxY) {
|
|
1743
1749
|
minY -= 1;
|
|
1744
1750
|
maxY += 1;
|
|
@@ -1988,9 +1994,12 @@ function ChartCell({
|
|
|
1988
1994
|
onDrawingToolToggle,
|
|
1989
1995
|
hasDrawings = false,
|
|
1990
1996
|
onClearDrawingsRequest,
|
|
1997
|
+
disableDrawings = false,
|
|
1991
1998
|
height = CHART_HEIGHT,
|
|
1992
1999
|
isFullscreen = false,
|
|
1993
|
-
backgroundColor = DEFAULT_CHART_BACKGROUND
|
|
2000
|
+
backgroundColor = DEFAULT_CHART_BACKGROUND,
|
|
2001
|
+
formatXTick = formatCompactNumber,
|
|
2002
|
+
formatYValue = formatNumber
|
|
1994
2003
|
}) {
|
|
1995
2004
|
const headerBackground = withAlpha(backgroundColor, 0.82);
|
|
1996
2005
|
const controlBackground = withAlpha(backgroundColor, 0.78);
|
|
@@ -2067,7 +2076,8 @@ function ChartCell({
|
|
|
2067
2076
|
activeDrawingTool,
|
|
2068
2077
|
onDrawingToolToggle,
|
|
2069
2078
|
hasDrawings,
|
|
2070
|
-
onClearDrawingsRequest: () => onClearDrawingsRequest?.(chart.id)
|
|
2079
|
+
onClearDrawingsRequest: () => onClearDrawingsRequest?.(chart.id),
|
|
2080
|
+
disableDrawings
|
|
2071
2081
|
}
|
|
2072
2082
|
) : null,
|
|
2073
2083
|
/* @__PURE__ */ React5.createElement("div", { className: "pointer-events-none absolute inset-y-8 left-9 border-l border-border/40" }),
|
|
@@ -2106,7 +2116,7 @@ function ChartCell({
|
|
|
2106
2116
|
className: "pointer-events-none absolute left-1/2 -translate-x-1/2 -translate-y-1/2 text-center text-[11px] font-medium tabular-nums text-foreground/70 dark:text-foreground/80",
|
|
2107
2117
|
style: { top: tick.top }
|
|
2108
2118
|
},
|
|
2109
|
-
|
|
2119
|
+
formatYValue(tick.value)
|
|
2110
2120
|
)),
|
|
2111
2121
|
axisOverlay?.latestValues.map((latest) => /* @__PURE__ */ React5.createElement(
|
|
2112
2122
|
"div",
|
|
@@ -2119,7 +2129,7 @@ function ChartCell({
|
|
|
2119
2129
|
color: latest.textColor
|
|
2120
2130
|
}
|
|
2121
2131
|
},
|
|
2122
|
-
|
|
2132
|
+
formatYValue(latest.value)
|
|
2123
2133
|
))
|
|
2124
2134
|
),
|
|
2125
2135
|
/* @__PURE__ */ React5.createElement(
|
|
@@ -2141,7 +2151,7 @@ function ChartCell({
|
|
|
2141
2151
|
className: "pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2 text-center text-[11px] font-medium tabular-nums text-foreground/70 dark:text-foreground/80",
|
|
2142
2152
|
style: { left: tick.left }
|
|
2143
2153
|
},
|
|
2144
|
-
|
|
2154
|
+
formatXTick(tick.value)
|
|
2145
2155
|
))
|
|
2146
2156
|
)
|
|
2147
2157
|
);
|
|
@@ -2149,7 +2159,9 @@ function ChartCell({
|
|
|
2149
2159
|
function CrosshairOverlay({
|
|
2150
2160
|
crosshair,
|
|
2151
2161
|
height = "100%",
|
|
2152
|
-
xAxisLabel = "STEP"
|
|
2162
|
+
xAxisLabel = "STEP",
|
|
2163
|
+
formatXValue = formatNumber,
|
|
2164
|
+
formatYValue = formatNumber
|
|
2153
2165
|
}) {
|
|
2154
2166
|
if (!crosshair) return null;
|
|
2155
2167
|
return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(
|
|
@@ -2188,7 +2200,7 @@ function CrosshairOverlay({
|
|
|
2188
2200
|
top: crosshair.tooltipY
|
|
2189
2201
|
}
|
|
2190
2202
|
},
|
|
2191
|
-
/* @__PURE__ */ React5.createElement("div", { className: "mb-1 font-medium" }, xAxisLabel, ": ",
|
|
2203
|
+
/* @__PURE__ */ React5.createElement("div", { className: "mb-1 font-medium" }, xAxisLabel, ": ", formatXValue(crosshair.xValue)),
|
|
2192
2204
|
crosshair.points.map((point) => /* @__PURE__ */ React5.createElement(
|
|
2193
2205
|
"div",
|
|
2194
2206
|
{
|
|
@@ -2202,7 +2214,7 @@ function CrosshairOverlay({
|
|
|
2202
2214
|
style: { backgroundColor: point.color }
|
|
2203
2215
|
}
|
|
2204
2216
|
),
|
|
2205
|
-
/* @__PURE__ */ React5.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React5.createElement("div", { className: "truncate text-muted-foreground" }, point.name), /* @__PURE__ */ React5.createElement("div", { className: "tabular-nums" },
|
|
2217
|
+
/* @__PURE__ */ React5.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React5.createElement("div", { className: "truncate text-muted-foreground" }, point.name), /* @__PURE__ */ React5.createElement("div", { className: "tabular-nums" }, formatYValue(point.yValue)))
|
|
2206
2218
|
))
|
|
2207
2219
|
));
|
|
2208
2220
|
}
|
|
@@ -2581,7 +2593,7 @@ var drawChartLayouts = ({
|
|
|
2581
2593
|
}
|
|
2582
2594
|
return nextAxisOverlays;
|
|
2583
2595
|
};
|
|
2584
|
-
function
|
|
2596
|
+
function ChartFullscreenOverlay({
|
|
2585
2597
|
chart,
|
|
2586
2598
|
dataRevision,
|
|
2587
2599
|
renderRevision,
|
|
@@ -2612,7 +2624,11 @@ function LeanChartFullscreenOverlay({
|
|
|
2612
2624
|
onClearDrawingsRequest,
|
|
2613
2625
|
onChartContextMenu,
|
|
2614
2626
|
topMarkers = EMPTY_ARRAY,
|
|
2615
|
-
onTopMarkerClick
|
|
2627
|
+
onTopMarkerClick,
|
|
2628
|
+
disableDrawings = false,
|
|
2629
|
+
formatXTick = formatCompactNumber,
|
|
2630
|
+
formatXValue = formatNumber,
|
|
2631
|
+
formatYValue = formatNumber
|
|
2616
2632
|
}) {
|
|
2617
2633
|
const containerRef = useRef4(null);
|
|
2618
2634
|
const chartRef = useRef4(null);
|
|
@@ -2632,6 +2648,9 @@ function LeanChartFullscreenOverlay({
|
|
|
2632
2648
|
const [visible, setVisible] = useState2(false);
|
|
2633
2649
|
const [rectangleZoomActive, setRectangleZoomActive] = useState2(false);
|
|
2634
2650
|
const [rectangleZoomRect, setRectangleZoomRect] = useState2(null);
|
|
2651
|
+
const chartDrawings = disableDrawings ? EMPTY_ARRAY : drawings;
|
|
2652
|
+
const chartActiveDrawingTool = disableDrawings ? null : activeDrawingTool;
|
|
2653
|
+
const chartSelectedDrawingId = disableDrawings ? null : selectedDrawingId;
|
|
2635
2654
|
const requestRender = useCallback3(() => {
|
|
2636
2655
|
setRevision((value) => value + 1);
|
|
2637
2656
|
}, []);
|
|
@@ -2653,11 +2672,11 @@ function LeanChartFullscreenOverlay({
|
|
|
2653
2672
|
finishEditDrawing,
|
|
2654
2673
|
deleteSelectedDrawing
|
|
2655
2674
|
} = useDrawingInteractions({
|
|
2656
|
-
drawings,
|
|
2657
|
-
onDrawingsChange,
|
|
2658
|
-
activeDrawingTool,
|
|
2675
|
+
drawings: chartDrawings,
|
|
2676
|
+
onDrawingsChange: disableDrawings ? void 0 : onDrawingsChange,
|
|
2677
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
2659
2678
|
onActiveDrawingToolChange,
|
|
2660
|
-
selectedDrawingId,
|
|
2679
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
2661
2680
|
onSelectedDrawingIdChange,
|
|
2662
2681
|
createDrawingId,
|
|
2663
2682
|
onModeChange: () => {
|
|
@@ -2674,9 +2693,9 @@ function LeanChartFullscreenOverlay({
|
|
|
2674
2693
|
onActiveDrawingToolChange?.(null);
|
|
2675
2694
|
}, [clearDraft, onActiveDrawingToolChange]);
|
|
2676
2695
|
const toggleSelectedDrawingExtend = useCallback3(() => {
|
|
2677
|
-
if (!
|
|
2696
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
2678
2697
|
onDrawingsChange(
|
|
2679
|
-
updateDrawingById(
|
|
2698
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
2680
2699
|
...drawing,
|
|
2681
2700
|
style: {
|
|
2682
2701
|
...drawing.style,
|
|
@@ -2684,12 +2703,12 @@ function LeanChartFullscreenOverlay({
|
|
|
2684
2703
|
}
|
|
2685
2704
|
}))
|
|
2686
2705
|
);
|
|
2687
|
-
}, [
|
|
2706
|
+
}, [chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]);
|
|
2688
2707
|
const updateSelectedDrawingColor = useCallback3(
|
|
2689
2708
|
(color) => {
|
|
2690
|
-
if (!
|
|
2709
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
2691
2710
|
onDrawingsChange(
|
|
2692
|
-
updateDrawingById(
|
|
2711
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
2693
2712
|
...drawing,
|
|
2694
2713
|
style: {
|
|
2695
2714
|
...drawing.style,
|
|
@@ -2698,13 +2717,13 @@ function LeanChartFullscreenOverlay({
|
|
|
2698
2717
|
}))
|
|
2699
2718
|
);
|
|
2700
2719
|
},
|
|
2701
|
-
[
|
|
2720
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
2702
2721
|
);
|
|
2703
2722
|
const updateSelectedDrawingText = useCallback3(
|
|
2704
2723
|
(text) => {
|
|
2705
|
-
if (!
|
|
2724
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
2706
2725
|
onDrawingsChange(
|
|
2707
|
-
updateDrawingById(
|
|
2726
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
2708
2727
|
...drawing,
|
|
2709
2728
|
style: {
|
|
2710
2729
|
...drawing.style,
|
|
@@ -2713,7 +2732,7 @@ function LeanChartFullscreenOverlay({
|
|
|
2713
2732
|
}))
|
|
2714
2733
|
);
|
|
2715
2734
|
},
|
|
2716
|
-
[
|
|
2735
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
2717
2736
|
);
|
|
2718
2737
|
useEffect3(() => {
|
|
2719
2738
|
const frame = requestAnimationFrame(() => setVisible(true));
|
|
@@ -2912,7 +2931,7 @@ function LeanChartFullscreenOverlay({
|
|
|
2912
2931
|
const layout = getLayout();
|
|
2913
2932
|
if (!point || !layout) return;
|
|
2914
2933
|
const inPlot = point.x >= layout.plot.x && point.x <= layout.plot.x + layout.plot.width && point.y >= layout.plot.y && point.y <= layout.plot.y + layout.plot.height;
|
|
2915
|
-
if (
|
|
2934
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
2916
2935
|
if (!inPlot || event.button !== 0) return;
|
|
2917
2936
|
event.preventDefault();
|
|
2918
2937
|
const dataPoint = screenPointToDataPoint({
|
|
@@ -2924,10 +2943,10 @@ function LeanChartFullscreenOverlay({
|
|
|
2924
2943
|
yScaleRef,
|
|
2925
2944
|
yCenterOffsetRef
|
|
2926
2945
|
});
|
|
2927
|
-
if (
|
|
2946
|
+
if (chartActiveDrawingTool === "hline" || chartActiveDrawingTool === "vline" || chartActiveDrawingTool === "pin") {
|
|
2928
2947
|
commitDrawing({
|
|
2929
2948
|
chartId: chart.id,
|
|
2930
|
-
type:
|
|
2949
|
+
type: chartActiveDrawingTool,
|
|
2931
2950
|
start: dataPoint,
|
|
2932
2951
|
end: dataPoint
|
|
2933
2952
|
});
|
|
@@ -2950,12 +2969,12 @@ function LeanChartFullscreenOverlay({
|
|
|
2950
2969
|
});
|
|
2951
2970
|
return;
|
|
2952
2971
|
}
|
|
2953
|
-
if (inPlot && Array.isArray(
|
|
2954
|
-
const
|
|
2955
|
-
for (let i =
|
|
2972
|
+
if (inPlot && Array.isArray(chartDrawings) && chartDrawings.length > 0) {
|
|
2973
|
+
const hitDrawings = getDrawingsForChart(chartDrawings, chart.id);
|
|
2974
|
+
for (let i = hitDrawings.length - 1; i >= 0; i -= 1) {
|
|
2956
2975
|
const hit = hitTestDrawing({
|
|
2957
2976
|
point,
|
|
2958
|
-
drawing:
|
|
2977
|
+
drawing: hitDrawings[i],
|
|
2959
2978
|
layout,
|
|
2960
2979
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
2961
2980
|
point: dataPoint,
|
|
@@ -3046,10 +3065,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3046
3065
|
getLayout,
|
|
3047
3066
|
getLocalPoint,
|
|
3048
3067
|
initialVisiblePoints,
|
|
3049
|
-
|
|
3050
|
-
|
|
3068
|
+
chartActiveDrawingTool,
|
|
3069
|
+
chartDrawings,
|
|
3051
3070
|
commitDrawing,
|
|
3052
|
-
drawings,
|
|
3053
3071
|
onSelectedDrawingIdChange,
|
|
3054
3072
|
rectangleZoomActive,
|
|
3055
3073
|
viewStateRef,
|
|
@@ -3075,7 +3093,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3075
3093
|
yCenterOffsetRef
|
|
3076
3094
|
});
|
|
3077
3095
|
const edit = drawingEditRef.current;
|
|
3078
|
-
const nextDrawings = updateDrawingById(
|
|
3096
|
+
const nextDrawings = updateDrawingById(chartDrawings, edit.id, (drawing) => {
|
|
3079
3097
|
if (drawing.type === "hline") {
|
|
3080
3098
|
const deltaX = (drawing.end?.x ?? drawing.start.x) - drawing.start.x;
|
|
3081
3099
|
return {
|
|
@@ -3102,7 +3120,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3102
3120
|
onDrawingsChange?.(nextDrawings);
|
|
3103
3121
|
return;
|
|
3104
3122
|
}
|
|
3105
|
-
if (
|
|
3123
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
3106
3124
|
if (drawingPoint.x < drawingLayout.plot.x || drawingPoint.x > drawingLayout.plot.x + drawingLayout.plot.width || drawingPoint.y < drawingLayout.plot.y || drawingPoint.y > drawingLayout.plot.y + drawingLayout.plot.height) {
|
|
3107
3125
|
return;
|
|
3108
3126
|
}
|
|
@@ -3115,11 +3133,11 @@ function LeanChartFullscreenOverlay({
|
|
|
3115
3133
|
yScaleRef,
|
|
3116
3134
|
yCenterOffsetRef
|
|
3117
3135
|
});
|
|
3118
|
-
const startPoint =
|
|
3119
|
-
if (startPoint ||
|
|
3136
|
+
const startPoint = chartActiveDrawingTool === "trendline" ? drawingSessionRef.current.startPoint : dataPoint;
|
|
3137
|
+
if (startPoint || chartActiveDrawingTool !== "trendline") {
|
|
3120
3138
|
updateDraftDrawing({
|
|
3121
3139
|
chartId: chart.id,
|
|
3122
|
-
type:
|
|
3140
|
+
type: chartActiveDrawingTool,
|
|
3123
3141
|
start: startPoint || dataPoint,
|
|
3124
3142
|
end: dataPoint
|
|
3125
3143
|
});
|
|
@@ -3192,8 +3210,8 @@ function LeanChartFullscreenOverlay({
|
|
|
3192
3210
|
[
|
|
3193
3211
|
chart.id,
|
|
3194
3212
|
chart,
|
|
3195
|
-
|
|
3196
|
-
|
|
3213
|
+
chartActiveDrawingTool,
|
|
3214
|
+
chartDrawings,
|
|
3197
3215
|
getLayout,
|
|
3198
3216
|
getLocalPoint,
|
|
3199
3217
|
initialVisiblePoints,
|
|
@@ -3356,27 +3374,27 @@ function LeanChartFullscreenOverlay({
|
|
|
3356
3374
|
toggleRectangleZoom();
|
|
3357
3375
|
return;
|
|
3358
3376
|
}
|
|
3359
|
-
if (event.key.toLowerCase() === "m") {
|
|
3377
|
+
if (!disableDrawings && event.key.toLowerCase() === "m") {
|
|
3360
3378
|
event.preventDefault();
|
|
3361
3379
|
onMovingAverageToggle?.(chart.id);
|
|
3362
3380
|
requestRender();
|
|
3363
3381
|
return;
|
|
3364
3382
|
}
|
|
3365
|
-
if (["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
3383
|
+
if (!disableDrawings && ["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
3366
3384
|
event.preventDefault();
|
|
3367
3385
|
const toolByKey = { t: "trendline", h: "hline", v: "vline", p: "pin" };
|
|
3368
3386
|
toggleDrawingTool(toolByKey[event.key.toLowerCase()]);
|
|
3369
3387
|
return;
|
|
3370
3388
|
}
|
|
3371
3389
|
if (event.key === "Delete" || event.key === "Backspace") {
|
|
3372
|
-
if (!
|
|
3390
|
+
if (disableDrawings || !chartSelectedDrawingId) return;
|
|
3373
3391
|
event.preventDefault();
|
|
3374
3392
|
deleteSelectedDrawing();
|
|
3375
3393
|
return;
|
|
3376
3394
|
}
|
|
3377
3395
|
if (event.key === "Escape" || event.key.toLowerCase() === "f") {
|
|
3378
3396
|
event.preventDefault();
|
|
3379
|
-
if (
|
|
3397
|
+
if (chartActiveDrawingTool || draftDrawing || drawingEditRef.current) {
|
|
3380
3398
|
cancelDrawing();
|
|
3381
3399
|
return;
|
|
3382
3400
|
}
|
|
@@ -3394,23 +3412,24 @@ function LeanChartFullscreenOverlay({
|
|
|
3394
3412
|
}, [
|
|
3395
3413
|
chart.id,
|
|
3396
3414
|
closeWithTransition,
|
|
3397
|
-
|
|
3415
|
+
chartActiveDrawingTool,
|
|
3416
|
+
chartSelectedDrawingId,
|
|
3398
3417
|
cancelDrawing,
|
|
3399
3418
|
deleteSelectedDrawing,
|
|
3419
|
+
disableDrawings,
|
|
3400
3420
|
draftDrawing,
|
|
3401
3421
|
onReset,
|
|
3402
3422
|
onMovingAverageToggle,
|
|
3403
3423
|
rectangleZoomActive,
|
|
3404
3424
|
requestRender,
|
|
3405
3425
|
toggleRectangleZoom,
|
|
3406
|
-
toggleDrawingTool
|
|
3407
|
-
selectedDrawingId
|
|
3426
|
+
toggleDrawingTool
|
|
3408
3427
|
]);
|
|
3409
3428
|
const fullscreenLayout = getLayout();
|
|
3410
3429
|
const selectedDrawingLayout = getSelectedDrawingLayout(
|
|
3411
3430
|
fullscreenLayout ? [fullscreenLayout] : [],
|
|
3412
|
-
|
|
3413
|
-
|
|
3431
|
+
chartDrawings,
|
|
3432
|
+
chartSelectedDrawingId
|
|
3414
3433
|
);
|
|
3415
3434
|
return /* @__PURE__ */ React5.createElement(
|
|
3416
3435
|
"div",
|
|
@@ -3423,7 +3442,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3423
3442
|
ref: containerRef,
|
|
3424
3443
|
className: `relative h-full overflow-hidden transition-transform duration-150 ${visible ? "scale-100" : "scale-[0.985]"}`,
|
|
3425
3444
|
style: {
|
|
3426
|
-
cursor: rectangleZoomActive ||
|
|
3445
|
+
cursor: rectangleZoomActive || chartActiveDrawingTool ? "crosshair" : void 0
|
|
3427
3446
|
},
|
|
3428
3447
|
onPointerDown: handlePointerDown,
|
|
3429
3448
|
onPointerMove: handlePointerMove,
|
|
@@ -3456,12 +3475,15 @@ function LeanChartFullscreenOverlay({
|
|
|
3456
3475
|
onJumpLatest,
|
|
3457
3476
|
onRectangleZoomToggle: toggleRectangleZoom,
|
|
3458
3477
|
rectangleZoomActive,
|
|
3459
|
-
movingAverage: movingAverageByChart?.[chart.id],
|
|
3478
|
+
movingAverage: disableDrawings ? null : movingAverageByChart?.[chart.id],
|
|
3460
3479
|
onMovingAverageToggle,
|
|
3461
|
-
activeDrawingTool,
|
|
3480
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
3462
3481
|
onDrawingToolToggle: toggleDrawingTool,
|
|
3463
|
-
hasDrawings: getDrawingsForChart(
|
|
3482
|
+
hasDrawings: getDrawingsForChart(chartDrawings, chart.id).length > 0,
|
|
3464
3483
|
onClearDrawingsRequest,
|
|
3484
|
+
disableDrawings,
|
|
3485
|
+
formatXTick,
|
|
3486
|
+
formatYValue,
|
|
3465
3487
|
setRef: (node) => {
|
|
3466
3488
|
chartRef.current = node;
|
|
3467
3489
|
}
|
|
@@ -3471,9 +3493,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3471
3493
|
DrawingOverlay,
|
|
3472
3494
|
{
|
|
3473
3495
|
layouts: fullscreenLayout ? [fullscreenLayout] : [],
|
|
3474
|
-
drawings,
|
|
3475
|
-
draftDrawing,
|
|
3476
|
-
selectedDrawingId,
|
|
3496
|
+
drawings: chartDrawings,
|
|
3497
|
+
draftDrawing: disableDrawings ? null : draftDrawing,
|
|
3498
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
3477
3499
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
3478
3500
|
point: dataPoint,
|
|
3479
3501
|
layout: targetLayout,
|
|
@@ -3511,7 +3533,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3511
3533
|
onTextChange: updateSelectedDrawingText
|
|
3512
3534
|
}
|
|
3513
3535
|
) : null,
|
|
3514
|
-
fullscreenLayout && movingAverageByChart?.[chart.id]?.enabled ? /* @__PURE__ */ React5.createElement(
|
|
3536
|
+
!disableDrawings && fullscreenLayout && movingAverageByChart?.[chart.id]?.enabled ? /* @__PURE__ */ React5.createElement(
|
|
3515
3537
|
MovingAverageOptionsToolbar,
|
|
3516
3538
|
{
|
|
3517
3539
|
movingAverage: movingAverageByChart[chart.id],
|
|
@@ -3524,7 +3546,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3524
3546
|
{
|
|
3525
3547
|
crosshair,
|
|
3526
3548
|
height: "100%",
|
|
3527
|
-
xAxisLabel
|
|
3549
|
+
xAxisLabel,
|
|
3550
|
+
formatXValue,
|
|
3551
|
+
formatYValue
|
|
3528
3552
|
}
|
|
3529
3553
|
),
|
|
3530
3554
|
/* @__PURE__ */ React5.createElement(RectangleZoomOverlay, { rect: rectangleZoomRect })
|
|
@@ -3557,7 +3581,11 @@ function ChartGrid({
|
|
|
3557
3581
|
seriesOrderByChart = EMPTY_OBJECT,
|
|
3558
3582
|
topMarkers = EMPTY_ARRAY,
|
|
3559
3583
|
onTopMarkerClick,
|
|
3560
|
-
xAxisLabel = "STEP"
|
|
3584
|
+
xAxisLabel = "STEP",
|
|
3585
|
+
disableDrawings = false,
|
|
3586
|
+
formatXTick = formatCompactNumber,
|
|
3587
|
+
formatXValue = formatNumber,
|
|
3588
|
+
formatYValue = formatNumber
|
|
3561
3589
|
}) {
|
|
3562
3590
|
const containerRef = useRef4(null);
|
|
3563
3591
|
const gridRef = useRef4(null);
|
|
@@ -3585,6 +3613,9 @@ function ChartGrid({
|
|
|
3585
3613
|
const [fullscreenChartId, setFullscreenChartId] = useState2(null);
|
|
3586
3614
|
const [rectangleZoomChartId, setRectangleZoomChartId] = useState2(null);
|
|
3587
3615
|
const [rectangleZoomRect, setRectangleZoomRect] = useState2(null);
|
|
3616
|
+
const chartDrawings = disableDrawings ? EMPTY_ARRAY : drawings;
|
|
3617
|
+
const chartActiveDrawingTool = disableDrawings ? null : activeDrawingTool;
|
|
3618
|
+
const chartSelectedDrawingId = disableDrawings ? null : selectedDrawingId;
|
|
3588
3619
|
const requestRender = useCallback3(() => {
|
|
3589
3620
|
setRevision((value) => value + 1);
|
|
3590
3621
|
}, []);
|
|
@@ -3602,11 +3633,11 @@ function ChartGrid({
|
|
|
3602
3633
|
finishEditDrawing,
|
|
3603
3634
|
deleteSelectedDrawing
|
|
3604
3635
|
} = useDrawingInteractions({
|
|
3605
|
-
drawings,
|
|
3606
|
-
onDrawingsChange,
|
|
3607
|
-
activeDrawingTool,
|
|
3636
|
+
drawings: chartDrawings,
|
|
3637
|
+
onDrawingsChange: disableDrawings ? void 0 : onDrawingsChange,
|
|
3638
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
3608
3639
|
onActiveDrawingToolChange,
|
|
3609
|
-
selectedDrawingId,
|
|
3640
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
3610
3641
|
onSelectedDrawingIdChange,
|
|
3611
3642
|
createDrawingId,
|
|
3612
3643
|
focusedChartId,
|
|
@@ -3660,9 +3691,9 @@ function ChartGrid({
|
|
|
3660
3691
|
]
|
|
3661
3692
|
);
|
|
3662
3693
|
const toggleSelectedDrawingExtend = useCallback3(() => {
|
|
3663
|
-
if (!
|
|
3694
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
3664
3695
|
onDrawingsChange(
|
|
3665
|
-
updateDrawingById(
|
|
3696
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
3666
3697
|
...drawing,
|
|
3667
3698
|
style: {
|
|
3668
3699
|
...drawing.style,
|
|
@@ -3670,12 +3701,12 @@ function ChartGrid({
|
|
|
3670
3701
|
}
|
|
3671
3702
|
}))
|
|
3672
3703
|
);
|
|
3673
|
-
}, [
|
|
3704
|
+
}, [chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]);
|
|
3674
3705
|
const updateSelectedDrawingColor = useCallback3(
|
|
3675
3706
|
(color) => {
|
|
3676
|
-
if (!
|
|
3707
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
3677
3708
|
onDrawingsChange(
|
|
3678
|
-
updateDrawingById(
|
|
3709
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
3679
3710
|
...drawing,
|
|
3680
3711
|
style: {
|
|
3681
3712
|
...drawing.style,
|
|
@@ -3684,13 +3715,13 @@ function ChartGrid({
|
|
|
3684
3715
|
}))
|
|
3685
3716
|
);
|
|
3686
3717
|
},
|
|
3687
|
-
[
|
|
3718
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
3688
3719
|
);
|
|
3689
3720
|
const updateSelectedDrawingText = useCallback3(
|
|
3690
3721
|
(text) => {
|
|
3691
|
-
if (!
|
|
3722
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
3692
3723
|
onDrawingsChange(
|
|
3693
|
-
updateDrawingById(
|
|
3724
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
3694
3725
|
...drawing,
|
|
3695
3726
|
style: {
|
|
3696
3727
|
...drawing.style,
|
|
@@ -3699,7 +3730,7 @@ function ChartGrid({
|
|
|
3699
3730
|
}))
|
|
3700
3731
|
);
|
|
3701
3732
|
},
|
|
3702
|
-
[
|
|
3733
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
3703
3734
|
);
|
|
3704
3735
|
const { getAppendAnimatedPoint } = useAppendAnimations({
|
|
3705
3736
|
charts,
|
|
@@ -4151,7 +4182,7 @@ function ChartGrid({
|
|
|
4151
4182
|
const point = getLocalPoint(event);
|
|
4152
4183
|
if (!point) return;
|
|
4153
4184
|
const drawingLayout = findLayoutAt(point.x, point.y);
|
|
4154
|
-
if (drawingLayout &&
|
|
4185
|
+
if (drawingLayout && chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
4155
4186
|
if (event.button !== 0) return;
|
|
4156
4187
|
event.preventDefault();
|
|
4157
4188
|
setFocusedChartId(drawingLayout.chart.id);
|
|
@@ -4164,10 +4195,10 @@ function ChartGrid({
|
|
|
4164
4195
|
yScaleRef,
|
|
4165
4196
|
yCenterOffsetRef
|
|
4166
4197
|
});
|
|
4167
|
-
if (
|
|
4198
|
+
if (chartActiveDrawingTool === "hline" || chartActiveDrawingTool === "vline" || chartActiveDrawingTool === "pin") {
|
|
4168
4199
|
commitDrawing({
|
|
4169
4200
|
chartId: drawingLayout.chart.id,
|
|
4170
|
-
type:
|
|
4201
|
+
type: chartActiveDrawingTool,
|
|
4171
4202
|
start: dataPoint,
|
|
4172
4203
|
end: dataPoint
|
|
4173
4204
|
});
|
|
@@ -4191,15 +4222,15 @@ function ChartGrid({
|
|
|
4191
4222
|
});
|
|
4192
4223
|
return;
|
|
4193
4224
|
}
|
|
4194
|
-
if (drawingLayout && Array.isArray(
|
|
4195
|
-
const
|
|
4196
|
-
|
|
4225
|
+
if (drawingLayout && Array.isArray(chartDrawings) && chartDrawings.length > 0) {
|
|
4226
|
+
const hitDrawings = getDrawingsForChart(
|
|
4227
|
+
chartDrawings,
|
|
4197
4228
|
drawingLayout.chart.id
|
|
4198
4229
|
);
|
|
4199
|
-
for (let i =
|
|
4230
|
+
for (let i = hitDrawings.length - 1; i >= 0; i -= 1) {
|
|
4200
4231
|
const hit = hitTestDrawing({
|
|
4201
4232
|
point,
|
|
4202
|
-
drawing:
|
|
4233
|
+
drawing: hitDrawings[i],
|
|
4203
4234
|
layout: drawingLayout,
|
|
4204
4235
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
4205
4236
|
point: dataPoint,
|
|
@@ -4305,9 +4336,9 @@ function ChartGrid({
|
|
|
4305
4336
|
initialVisiblePoints,
|
|
4306
4337
|
fullscreenChartId,
|
|
4307
4338
|
rectangleZoomChartId,
|
|
4308
|
-
|
|
4339
|
+
chartActiveDrawingTool,
|
|
4340
|
+
chartDrawings,
|
|
4309
4341
|
commitDrawing,
|
|
4310
|
-
drawings,
|
|
4311
4342
|
onSelectedDrawingIdChange
|
|
4312
4343
|
]
|
|
4313
4344
|
);
|
|
@@ -4319,7 +4350,7 @@ function ChartGrid({
|
|
|
4319
4350
|
if (drawingPoint) {
|
|
4320
4351
|
if (drawingEditRef.current) {
|
|
4321
4352
|
const editLayout = getChartLayout().find(
|
|
4322
|
-
(layout) => getDrawingsForChart(
|
|
4353
|
+
(layout) => getDrawingsForChart(chartDrawings, layout.chart.id).some(
|
|
4323
4354
|
(drawing) => drawing.id === drawingEditRef.current.id
|
|
4324
4355
|
)
|
|
4325
4356
|
);
|
|
@@ -4334,7 +4365,7 @@ function ChartGrid({
|
|
|
4334
4365
|
yCenterOffsetRef
|
|
4335
4366
|
});
|
|
4336
4367
|
const edit = drawingEditRef.current;
|
|
4337
|
-
const nextDrawings = updateDrawingById(
|
|
4368
|
+
const nextDrawings = updateDrawingById(chartDrawings, edit.id, (drawing) => {
|
|
4338
4369
|
if (drawing.type === "hline") {
|
|
4339
4370
|
const deltaX = (drawing.end?.x ?? drawing.start.x) - drawing.start.x;
|
|
4340
4371
|
return {
|
|
@@ -4362,7 +4393,7 @@ function ChartGrid({
|
|
|
4362
4393
|
}
|
|
4363
4394
|
return;
|
|
4364
4395
|
}
|
|
4365
|
-
if (
|
|
4396
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
4366
4397
|
const drawingLayout = findLayoutAt(drawingPoint.x, drawingPoint.y);
|
|
4367
4398
|
if (!drawingLayout) return;
|
|
4368
4399
|
const dataPoint = screenPointToDataPoint({
|
|
@@ -4375,11 +4406,11 @@ function ChartGrid({
|
|
|
4375
4406
|
yCenterOffsetRef
|
|
4376
4407
|
});
|
|
4377
4408
|
const session = drawingSessionRef.current;
|
|
4378
|
-
const startPoint =
|
|
4379
|
-
if (startPoint ||
|
|
4409
|
+
const startPoint = chartActiveDrawingTool === "trendline" && session.chartId === drawingLayout.chart.id ? session.startPoint : dataPoint;
|
|
4410
|
+
if (startPoint || chartActiveDrawingTool !== "trendline") {
|
|
4380
4411
|
updateDraftDrawing({
|
|
4381
4412
|
chartId: drawingLayout.chart.id,
|
|
4382
|
-
type:
|
|
4413
|
+
type: chartActiveDrawingTool,
|
|
4383
4414
|
start: startPoint || dataPoint,
|
|
4384
4415
|
end: dataPoint
|
|
4385
4416
|
});
|
|
@@ -4452,8 +4483,8 @@ function ChartGrid({
|
|
|
4452
4483
|
},
|
|
4453
4484
|
[
|
|
4454
4485
|
fullscreenChartId,
|
|
4455
|
-
|
|
4456
|
-
|
|
4486
|
+
chartActiveDrawingTool,
|
|
4487
|
+
chartDrawings,
|
|
4457
4488
|
findLayoutAt,
|
|
4458
4489
|
getChartLayout,
|
|
4459
4490
|
getLocalPoint,
|
|
@@ -4658,24 +4689,24 @@ function ChartGrid({
|
|
|
4658
4689
|
toggleRectangleZoom(focusedChartId);
|
|
4659
4690
|
return;
|
|
4660
4691
|
}
|
|
4661
|
-
if (event.key.toLowerCase() === "m") {
|
|
4692
|
+
if (!disableDrawings && event.key.toLowerCase() === "m") {
|
|
4662
4693
|
event.preventDefault();
|
|
4663
4694
|
toggleMovingAverage(focusedChartId);
|
|
4664
4695
|
return;
|
|
4665
4696
|
}
|
|
4666
|
-
if (["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
4697
|
+
if (!disableDrawings && ["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
4667
4698
|
event.preventDefault();
|
|
4668
4699
|
const toolByKey = { t: "trendline", h: "hline", v: "vline", p: "pin" };
|
|
4669
4700
|
toggleDrawingTool(toolByKey[event.key.toLowerCase()]);
|
|
4670
4701
|
return;
|
|
4671
4702
|
}
|
|
4672
4703
|
if (event.key === "Delete" || event.key === "Backspace") {
|
|
4673
|
-
if (!
|
|
4704
|
+
if (disableDrawings || !chartSelectedDrawingId) return;
|
|
4674
4705
|
event.preventDefault();
|
|
4675
4706
|
deleteSelectedDrawing();
|
|
4676
4707
|
return;
|
|
4677
4708
|
}
|
|
4678
|
-
if (event.key === "Escape" && (
|
|
4709
|
+
if (event.key === "Escape" && (chartActiveDrawingTool || draftDrawing || drawingEditRef.current)) {
|
|
4679
4710
|
event.preventDefault();
|
|
4680
4711
|
cancelDrawing();
|
|
4681
4712
|
return;
|
|
@@ -4698,15 +4729,16 @@ function ChartGrid({
|
|
|
4698
4729
|
}, [
|
|
4699
4730
|
focusedChartId,
|
|
4700
4731
|
fullscreenChartId,
|
|
4701
|
-
|
|
4732
|
+
chartActiveDrawingTool,
|
|
4733
|
+
chartSelectedDrawingId,
|
|
4702
4734
|
cancelDrawing,
|
|
4703
4735
|
deleteSelectedDrawing,
|
|
4736
|
+
disableDrawings,
|
|
4704
4737
|
draftDrawing,
|
|
4705
4738
|
focusChartByKeyboard,
|
|
4706
4739
|
openFullscreen,
|
|
4707
4740
|
rectangleZoomChartId,
|
|
4708
4741
|
resetChartView,
|
|
4709
|
-
selectedDrawingId,
|
|
4710
4742
|
toggleMovingAverage,
|
|
4711
4743
|
toggleDrawingTool,
|
|
4712
4744
|
toggleRectangleZoom
|
|
@@ -4715,8 +4747,8 @@ function ChartGrid({
|
|
|
4715
4747
|
const chartLayouts = fullscreenChart ? [] : getChartLayout();
|
|
4716
4748
|
const selectedDrawingLayout = getSelectedDrawingLayout(
|
|
4717
4749
|
chartLayouts,
|
|
4718
|
-
|
|
4719
|
-
|
|
4750
|
+
chartDrawings,
|
|
4751
|
+
chartSelectedDrawingId
|
|
4720
4752
|
);
|
|
4721
4753
|
return /* @__PURE__ */ React5.createElement(
|
|
4722
4754
|
"div",
|
|
@@ -4724,7 +4756,7 @@ function ChartGrid({
|
|
|
4724
4756
|
ref: containerRef,
|
|
4725
4757
|
className: `aliencharts-root relative h-full overflow-y-auto ${className}`,
|
|
4726
4758
|
style: {
|
|
4727
|
-
cursor: rectangleZoomChartId ||
|
|
4759
|
+
cursor: rectangleZoomChartId || chartActiveDrawingTool ? "crosshair" : void 0
|
|
4728
4760
|
},
|
|
4729
4761
|
onPointerDown: handlePointerDown,
|
|
4730
4762
|
onPointerMove: handlePointerMove,
|
|
@@ -4766,12 +4798,15 @@ function ChartGrid({
|
|
|
4766
4798
|
onJumpLatest: jumpChartToLatest,
|
|
4767
4799
|
onRectangleZoomToggle: toggleRectangleZoom,
|
|
4768
4800
|
rectangleZoomActive: rectangleZoomChartId === chart.id,
|
|
4769
|
-
movingAverage: movingAverageByChart?.[chart.id],
|
|
4801
|
+
movingAverage: disableDrawings ? null : movingAverageByChart?.[chart.id],
|
|
4770
4802
|
onMovingAverageToggle: toggleMovingAverage,
|
|
4771
|
-
activeDrawingTool: focusedChartId === chart.id ?
|
|
4803
|
+
activeDrawingTool: focusedChartId === chart.id ? chartActiveDrawingTool : null,
|
|
4772
4804
|
onDrawingToolToggle: toggleDrawingTool,
|
|
4773
|
-
hasDrawings: getDrawingsForChart(
|
|
4805
|
+
hasDrawings: getDrawingsForChart(chartDrawings, chart.id).length > 0,
|
|
4774
4806
|
onClearDrawingsRequest,
|
|
4807
|
+
disableDrawings,
|
|
4808
|
+
formatXTick,
|
|
4809
|
+
formatYValue,
|
|
4775
4810
|
setRef: (node) => {
|
|
4776
4811
|
if (node) chartRefs.current.set(chart.id, node);
|
|
4777
4812
|
else chartRefs.current.delete(chart.id);
|
|
@@ -4784,16 +4819,18 @@ function ChartGrid({
|
|
|
4784
4819
|
{
|
|
4785
4820
|
crosshair: fullscreenChart ? null : crosshair,
|
|
4786
4821
|
height: containerRef.current?.scrollHeight ?? "100%",
|
|
4787
|
-
xAxisLabel
|
|
4822
|
+
xAxisLabel,
|
|
4823
|
+
formatXValue,
|
|
4824
|
+
formatYValue
|
|
4788
4825
|
}
|
|
4789
4826
|
),
|
|
4790
4827
|
/* @__PURE__ */ React5.createElement(
|
|
4791
4828
|
DrawingOverlay,
|
|
4792
4829
|
{
|
|
4793
4830
|
layouts: chartLayouts,
|
|
4794
|
-
drawings,
|
|
4795
|
-
draftDrawing: fullscreenChart ? null : draftDrawing,
|
|
4796
|
-
selectedDrawingId,
|
|
4831
|
+
drawings: chartDrawings,
|
|
4832
|
+
draftDrawing: fullscreenChart || disableDrawings ? null : draftDrawing,
|
|
4833
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
4797
4834
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
4798
4835
|
point: dataPoint,
|
|
4799
4836
|
layout: targetLayout,
|
|
@@ -4826,7 +4863,7 @@ function ChartGrid({
|
|
|
4826
4863
|
onTextChange: updateSelectedDrawingText
|
|
4827
4864
|
}
|
|
4828
4865
|
) : null,
|
|
4829
|
-
!fullscreenChart && focusedChartId && movingAverageByChart?.[focusedChartId]?.enabled ? (() => {
|
|
4866
|
+
!disableDrawings && !fullscreenChart && focusedChartId && movingAverageByChart?.[focusedChartId]?.enabled ? (() => {
|
|
4830
4867
|
const layout = chartLayouts.find(
|
|
4831
4868
|
(candidate) => candidate.chart.id === focusedChartId
|
|
4832
4869
|
);
|
|
@@ -4842,7 +4879,7 @@ function ChartGrid({
|
|
|
4842
4879
|
})() : null,
|
|
4843
4880
|
/* @__PURE__ */ React5.createElement(RectangleZoomOverlay, { rect: fullscreenChart ? null : rectangleZoomRect }),
|
|
4844
4881
|
fullscreenChart ? /* @__PURE__ */ React5.createElement(
|
|
4845
|
-
|
|
4882
|
+
ChartFullscreenOverlay,
|
|
4846
4883
|
{
|
|
4847
4884
|
chart: fullscreenChart,
|
|
4848
4885
|
dataRevision,
|
|
@@ -4864,17 +4901,21 @@ function ChartGrid({
|
|
|
4864
4901
|
onReset: resetChartView,
|
|
4865
4902
|
onJumpLatest: jumpChartToLatest,
|
|
4866
4903
|
xAxisLabel,
|
|
4867
|
-
drawings,
|
|
4904
|
+
drawings: chartDrawings,
|
|
4868
4905
|
onDrawingsChange,
|
|
4869
|
-
activeDrawingTool,
|
|
4906
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
4870
4907
|
onActiveDrawingToolChange,
|
|
4871
|
-
selectedDrawingId,
|
|
4908
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
4872
4909
|
onSelectedDrawingIdChange,
|
|
4873
4910
|
createDrawingId,
|
|
4874
4911
|
onClearDrawingsRequest,
|
|
4875
4912
|
onChartContextMenu,
|
|
4876
4913
|
topMarkers,
|
|
4877
|
-
onTopMarkerClick
|
|
4914
|
+
onTopMarkerClick,
|
|
4915
|
+
disableDrawings,
|
|
4916
|
+
formatXTick,
|
|
4917
|
+
formatXValue,
|
|
4918
|
+
formatYValue
|
|
4878
4919
|
}
|
|
4879
4920
|
) : null
|
|
4880
4921
|
);
|