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.cjs
CHANGED
|
@@ -337,7 +337,8 @@ function ChartToolbar({
|
|
|
337
337
|
activeDrawingTool = null,
|
|
338
338
|
onDrawingToolToggle,
|
|
339
339
|
hasDrawings = false,
|
|
340
|
-
onClearDrawingsRequest
|
|
340
|
+
onClearDrawingsRequest,
|
|
341
|
+
disableDrawings = false
|
|
341
342
|
}) {
|
|
342
343
|
return /* @__PURE__ */ import_react.default.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__ */ import_react.default.createElement(
|
|
343
344
|
ToolbarAction,
|
|
@@ -356,7 +357,7 @@ function ChartToolbar({
|
|
|
356
357
|
active: rectangleZoomActive
|
|
357
358
|
},
|
|
358
359
|
/* @__PURE__ */ import_react.default.createElement(import_react2.MagnifyingGlassPlusIcon, { size: 16, weight: "bold" })
|
|
359
|
-
), hasDrawings ? /* @__PURE__ */ import_react.default.createElement(
|
|
360
|
+
), !disableDrawings && hasDrawings ? /* @__PURE__ */ import_react.default.createElement(
|
|
360
361
|
ToolbarAction,
|
|
361
362
|
{
|
|
362
363
|
title: "Clear drawings",
|
|
@@ -364,7 +365,7 @@ function ChartToolbar({
|
|
|
364
365
|
onClick: onClearDrawingsRequest
|
|
365
366
|
},
|
|
366
367
|
/* @__PURE__ */ import_react.default.createElement(import_react2.BroomIcon, { size: 16, weight: "bold" })
|
|
367
|
-
) : null, /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full" }), /* @__PURE__ */ import_react.default.createElement(
|
|
368
|
+
) : null, !disableDrawings ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full" }), /* @__PURE__ */ import_react.default.createElement(
|
|
368
369
|
ToolbarAction,
|
|
369
370
|
{
|
|
370
371
|
title: "Draw trendline",
|
|
@@ -400,7 +401,7 @@ function ChartToolbar({
|
|
|
400
401
|
active: activeDrawingTool === "pin"
|
|
401
402
|
},
|
|
402
403
|
/* @__PURE__ */ import_react.default.createElement(import_react2.MapPinIcon, { size: 16, weight: "bold" })
|
|
403
|
-
), /* @__PURE__ */ import_react.default.createElement(
|
|
404
|
+
)) : null, !disableDrawings ? /* @__PURE__ */ import_react.default.createElement(
|
|
404
405
|
ToolbarAction,
|
|
405
406
|
{
|
|
406
407
|
title: "Toggle moving average",
|
|
@@ -409,7 +410,7 @@ function ChartToolbar({
|
|
|
409
410
|
active: movingAverageActive
|
|
410
411
|
},
|
|
411
412
|
/* @__PURE__ */ import_react.default.createElement(import_react2.WaveSineIcon, { size: 16, weight: "bold" })
|
|
412
|
-
));
|
|
413
|
+
) : null);
|
|
413
414
|
}
|
|
414
415
|
|
|
415
416
|
// src/react/DrawingOptionsToolbar.jsx
|
|
@@ -1767,6 +1768,11 @@ var getYRange = (chart, xMin, xMax, width) => {
|
|
|
1767
1768
|
if (!Number.isFinite(minY) || !Number.isFinite(maxY)) {
|
|
1768
1769
|
return { minY: 0, maxY: 1, renderedPoints, bucketSize };
|
|
1769
1770
|
}
|
|
1771
|
+
const fixedMinY = Number(chart.yRange?.min);
|
|
1772
|
+
const fixedMaxY = Number(chart.yRange?.max);
|
|
1773
|
+
if (Number.isFinite(fixedMinY) && Number.isFinite(fixedMaxY) && fixedMinY < fixedMaxY) {
|
|
1774
|
+
return { minY: fixedMinY, maxY: fixedMaxY, renderedPoints, bucketSize };
|
|
1775
|
+
}
|
|
1770
1776
|
if (minY === maxY) {
|
|
1771
1777
|
minY -= 1;
|
|
1772
1778
|
maxY += 1;
|
|
@@ -2016,9 +2022,12 @@ function ChartCell({
|
|
|
2016
2022
|
onDrawingToolToggle,
|
|
2017
2023
|
hasDrawings = false,
|
|
2018
2024
|
onClearDrawingsRequest,
|
|
2025
|
+
disableDrawings = false,
|
|
2019
2026
|
height = CHART_HEIGHT,
|
|
2020
2027
|
isFullscreen = false,
|
|
2021
|
-
backgroundColor = DEFAULT_CHART_BACKGROUND
|
|
2028
|
+
backgroundColor = DEFAULT_CHART_BACKGROUND,
|
|
2029
|
+
formatXTick = formatCompactNumber,
|
|
2030
|
+
formatYValue = formatNumber
|
|
2022
2031
|
}) {
|
|
2023
2032
|
const headerBackground = withAlpha(backgroundColor, 0.82);
|
|
2024
2033
|
const controlBackground = withAlpha(backgroundColor, 0.78);
|
|
@@ -2095,7 +2104,8 @@ function ChartCell({
|
|
|
2095
2104
|
activeDrawingTool,
|
|
2096
2105
|
onDrawingToolToggle,
|
|
2097
2106
|
hasDrawings,
|
|
2098
|
-
onClearDrawingsRequest: () => onClearDrawingsRequest?.(chart.id)
|
|
2107
|
+
onClearDrawingsRequest: () => onClearDrawingsRequest?.(chart.id),
|
|
2108
|
+
disableDrawings
|
|
2099
2109
|
}
|
|
2100
2110
|
) : null,
|
|
2101
2111
|
/* @__PURE__ */ import_react9.default.createElement("div", { className: "pointer-events-none absolute inset-y-8 left-9 border-l border-border/40" }),
|
|
@@ -2134,7 +2144,7 @@ function ChartCell({
|
|
|
2134
2144
|
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",
|
|
2135
2145
|
style: { top: tick.top }
|
|
2136
2146
|
},
|
|
2137
|
-
|
|
2147
|
+
formatYValue(tick.value)
|
|
2138
2148
|
)),
|
|
2139
2149
|
axisOverlay?.latestValues.map((latest) => /* @__PURE__ */ import_react9.default.createElement(
|
|
2140
2150
|
"div",
|
|
@@ -2147,7 +2157,7 @@ function ChartCell({
|
|
|
2147
2157
|
color: latest.textColor
|
|
2148
2158
|
}
|
|
2149
2159
|
},
|
|
2150
|
-
|
|
2160
|
+
formatYValue(latest.value)
|
|
2151
2161
|
))
|
|
2152
2162
|
),
|
|
2153
2163
|
/* @__PURE__ */ import_react9.default.createElement(
|
|
@@ -2169,7 +2179,7 @@ function ChartCell({
|
|
|
2169
2179
|
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",
|
|
2170
2180
|
style: { left: tick.left }
|
|
2171
2181
|
},
|
|
2172
|
-
|
|
2182
|
+
formatXTick(tick.value)
|
|
2173
2183
|
))
|
|
2174
2184
|
)
|
|
2175
2185
|
);
|
|
@@ -2177,7 +2187,9 @@ function ChartCell({
|
|
|
2177
2187
|
function CrosshairOverlay({
|
|
2178
2188
|
crosshair,
|
|
2179
2189
|
height = "100%",
|
|
2180
|
-
xAxisLabel = "STEP"
|
|
2190
|
+
xAxisLabel = "STEP",
|
|
2191
|
+
formatXValue = formatNumber,
|
|
2192
|
+
formatYValue = formatNumber
|
|
2181
2193
|
}) {
|
|
2182
2194
|
if (!crosshair) return null;
|
|
2183
2195
|
return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement(
|
|
@@ -2216,7 +2228,7 @@ function CrosshairOverlay({
|
|
|
2216
2228
|
top: crosshair.tooltipY
|
|
2217
2229
|
}
|
|
2218
2230
|
},
|
|
2219
|
-
/* @__PURE__ */ import_react9.default.createElement("div", { className: "mb-1 font-medium" }, xAxisLabel, ": ",
|
|
2231
|
+
/* @__PURE__ */ import_react9.default.createElement("div", { className: "mb-1 font-medium" }, xAxisLabel, ": ", formatXValue(crosshair.xValue)),
|
|
2220
2232
|
crosshair.points.map((point) => /* @__PURE__ */ import_react9.default.createElement(
|
|
2221
2233
|
"div",
|
|
2222
2234
|
{
|
|
@@ -2230,7 +2242,7 @@ function CrosshairOverlay({
|
|
|
2230
2242
|
style: { backgroundColor: point.color }
|
|
2231
2243
|
}
|
|
2232
2244
|
),
|
|
2233
|
-
/* @__PURE__ */ import_react9.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "truncate text-muted-foreground" }, point.name), /* @__PURE__ */ import_react9.default.createElement("div", { className: "tabular-nums" },
|
|
2245
|
+
/* @__PURE__ */ import_react9.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "truncate text-muted-foreground" }, point.name), /* @__PURE__ */ import_react9.default.createElement("div", { className: "tabular-nums" }, formatYValue(point.yValue)))
|
|
2234
2246
|
))
|
|
2235
2247
|
));
|
|
2236
2248
|
}
|
|
@@ -2609,7 +2621,7 @@ var drawChartLayouts = ({
|
|
|
2609
2621
|
}
|
|
2610
2622
|
return nextAxisOverlays;
|
|
2611
2623
|
};
|
|
2612
|
-
function
|
|
2624
|
+
function ChartFullscreenOverlay({
|
|
2613
2625
|
chart,
|
|
2614
2626
|
dataRevision,
|
|
2615
2627
|
renderRevision,
|
|
@@ -2640,7 +2652,11 @@ function LeanChartFullscreenOverlay({
|
|
|
2640
2652
|
onClearDrawingsRequest,
|
|
2641
2653
|
onChartContextMenu,
|
|
2642
2654
|
topMarkers = EMPTY_ARRAY,
|
|
2643
|
-
onTopMarkerClick
|
|
2655
|
+
onTopMarkerClick,
|
|
2656
|
+
disableDrawings = false,
|
|
2657
|
+
formatXTick = formatCompactNumber,
|
|
2658
|
+
formatXValue = formatNumber,
|
|
2659
|
+
formatYValue = formatNumber
|
|
2644
2660
|
}) {
|
|
2645
2661
|
const containerRef = (0, import_react9.useRef)(null);
|
|
2646
2662
|
const chartRef = (0, import_react9.useRef)(null);
|
|
@@ -2660,6 +2676,9 @@ function LeanChartFullscreenOverlay({
|
|
|
2660
2676
|
const [visible, setVisible] = (0, import_react9.useState)(false);
|
|
2661
2677
|
const [rectangleZoomActive, setRectangleZoomActive] = (0, import_react9.useState)(false);
|
|
2662
2678
|
const [rectangleZoomRect, setRectangleZoomRect] = (0, import_react9.useState)(null);
|
|
2679
|
+
const chartDrawings = disableDrawings ? EMPTY_ARRAY : drawings;
|
|
2680
|
+
const chartActiveDrawingTool = disableDrawings ? null : activeDrawingTool;
|
|
2681
|
+
const chartSelectedDrawingId = disableDrawings ? null : selectedDrawingId;
|
|
2663
2682
|
const requestRender = (0, import_react9.useCallback)(() => {
|
|
2664
2683
|
setRevision((value) => value + 1);
|
|
2665
2684
|
}, []);
|
|
@@ -2681,11 +2700,11 @@ function LeanChartFullscreenOverlay({
|
|
|
2681
2700
|
finishEditDrawing,
|
|
2682
2701
|
deleteSelectedDrawing
|
|
2683
2702
|
} = useDrawingInteractions({
|
|
2684
|
-
drawings,
|
|
2685
|
-
onDrawingsChange,
|
|
2686
|
-
activeDrawingTool,
|
|
2703
|
+
drawings: chartDrawings,
|
|
2704
|
+
onDrawingsChange: disableDrawings ? void 0 : onDrawingsChange,
|
|
2705
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
2687
2706
|
onActiveDrawingToolChange,
|
|
2688
|
-
selectedDrawingId,
|
|
2707
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
2689
2708
|
onSelectedDrawingIdChange,
|
|
2690
2709
|
createDrawingId,
|
|
2691
2710
|
onModeChange: () => {
|
|
@@ -2702,9 +2721,9 @@ function LeanChartFullscreenOverlay({
|
|
|
2702
2721
|
onActiveDrawingToolChange?.(null);
|
|
2703
2722
|
}, [clearDraft, onActiveDrawingToolChange]);
|
|
2704
2723
|
const toggleSelectedDrawingExtend = (0, import_react9.useCallback)(() => {
|
|
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,
|
|
@@ -2712,12 +2731,12 @@ function LeanChartFullscreenOverlay({
|
|
|
2712
2731
|
}
|
|
2713
2732
|
}))
|
|
2714
2733
|
);
|
|
2715
|
-
}, [
|
|
2734
|
+
}, [chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]);
|
|
2716
2735
|
const updateSelectedDrawingColor = (0, import_react9.useCallback)(
|
|
2717
2736
|
(color) => {
|
|
2718
|
-
if (!
|
|
2737
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
2719
2738
|
onDrawingsChange(
|
|
2720
|
-
updateDrawingById(
|
|
2739
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
2721
2740
|
...drawing,
|
|
2722
2741
|
style: {
|
|
2723
2742
|
...drawing.style,
|
|
@@ -2726,13 +2745,13 @@ function LeanChartFullscreenOverlay({
|
|
|
2726
2745
|
}))
|
|
2727
2746
|
);
|
|
2728
2747
|
},
|
|
2729
|
-
[
|
|
2748
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
2730
2749
|
);
|
|
2731
2750
|
const updateSelectedDrawingText = (0, import_react9.useCallback)(
|
|
2732
2751
|
(text) => {
|
|
2733
|
-
if (!
|
|
2752
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
2734
2753
|
onDrawingsChange(
|
|
2735
|
-
updateDrawingById(
|
|
2754
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
2736
2755
|
...drawing,
|
|
2737
2756
|
style: {
|
|
2738
2757
|
...drawing.style,
|
|
@@ -2741,7 +2760,7 @@ function LeanChartFullscreenOverlay({
|
|
|
2741
2760
|
}))
|
|
2742
2761
|
);
|
|
2743
2762
|
},
|
|
2744
|
-
[
|
|
2763
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
2745
2764
|
);
|
|
2746
2765
|
(0, import_react9.useEffect)(() => {
|
|
2747
2766
|
const frame = requestAnimationFrame(() => setVisible(true));
|
|
@@ -2940,7 +2959,7 @@ function LeanChartFullscreenOverlay({
|
|
|
2940
2959
|
const layout = getLayout();
|
|
2941
2960
|
if (!point || !layout) return;
|
|
2942
2961
|
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;
|
|
2943
|
-
if (
|
|
2962
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
2944
2963
|
if (!inPlot || event.button !== 0) return;
|
|
2945
2964
|
event.preventDefault();
|
|
2946
2965
|
const dataPoint = screenPointToDataPoint({
|
|
@@ -2952,10 +2971,10 @@ function LeanChartFullscreenOverlay({
|
|
|
2952
2971
|
yScaleRef,
|
|
2953
2972
|
yCenterOffsetRef
|
|
2954
2973
|
});
|
|
2955
|
-
if (
|
|
2974
|
+
if (chartActiveDrawingTool === "hline" || chartActiveDrawingTool === "vline" || chartActiveDrawingTool === "pin") {
|
|
2956
2975
|
commitDrawing({
|
|
2957
2976
|
chartId: chart.id,
|
|
2958
|
-
type:
|
|
2977
|
+
type: chartActiveDrawingTool,
|
|
2959
2978
|
start: dataPoint,
|
|
2960
2979
|
end: dataPoint
|
|
2961
2980
|
});
|
|
@@ -2978,12 +2997,12 @@ function LeanChartFullscreenOverlay({
|
|
|
2978
2997
|
});
|
|
2979
2998
|
return;
|
|
2980
2999
|
}
|
|
2981
|
-
if (inPlot && Array.isArray(
|
|
2982
|
-
const
|
|
2983
|
-
for (let i =
|
|
3000
|
+
if (inPlot && Array.isArray(chartDrawings) && chartDrawings.length > 0) {
|
|
3001
|
+
const hitDrawings = getDrawingsForChart(chartDrawings, chart.id);
|
|
3002
|
+
for (let i = hitDrawings.length - 1; i >= 0; i -= 1) {
|
|
2984
3003
|
const hit = hitTestDrawing({
|
|
2985
3004
|
point,
|
|
2986
|
-
drawing:
|
|
3005
|
+
drawing: hitDrawings[i],
|
|
2987
3006
|
layout,
|
|
2988
3007
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
2989
3008
|
point: dataPoint,
|
|
@@ -3074,10 +3093,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3074
3093
|
getLayout,
|
|
3075
3094
|
getLocalPoint,
|
|
3076
3095
|
initialVisiblePoints,
|
|
3077
|
-
|
|
3078
|
-
|
|
3096
|
+
chartActiveDrawingTool,
|
|
3097
|
+
chartDrawings,
|
|
3079
3098
|
commitDrawing,
|
|
3080
|
-
drawings,
|
|
3081
3099
|
onSelectedDrawingIdChange,
|
|
3082
3100
|
rectangleZoomActive,
|
|
3083
3101
|
viewStateRef,
|
|
@@ -3103,7 +3121,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3103
3121
|
yCenterOffsetRef
|
|
3104
3122
|
});
|
|
3105
3123
|
const edit = drawingEditRef.current;
|
|
3106
|
-
const nextDrawings = updateDrawingById(
|
|
3124
|
+
const nextDrawings = updateDrawingById(chartDrawings, edit.id, (drawing) => {
|
|
3107
3125
|
if (drawing.type === "hline") {
|
|
3108
3126
|
const deltaX = (drawing.end?.x ?? drawing.start.x) - drawing.start.x;
|
|
3109
3127
|
return {
|
|
@@ -3130,7 +3148,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3130
3148
|
onDrawingsChange?.(nextDrawings);
|
|
3131
3149
|
return;
|
|
3132
3150
|
}
|
|
3133
|
-
if (
|
|
3151
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
3134
3152
|
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) {
|
|
3135
3153
|
return;
|
|
3136
3154
|
}
|
|
@@ -3143,11 +3161,11 @@ function LeanChartFullscreenOverlay({
|
|
|
3143
3161
|
yScaleRef,
|
|
3144
3162
|
yCenterOffsetRef
|
|
3145
3163
|
});
|
|
3146
|
-
const startPoint =
|
|
3147
|
-
if (startPoint ||
|
|
3164
|
+
const startPoint = chartActiveDrawingTool === "trendline" ? drawingSessionRef.current.startPoint : dataPoint;
|
|
3165
|
+
if (startPoint || chartActiveDrawingTool !== "trendline") {
|
|
3148
3166
|
updateDraftDrawing({
|
|
3149
3167
|
chartId: chart.id,
|
|
3150
|
-
type:
|
|
3168
|
+
type: chartActiveDrawingTool,
|
|
3151
3169
|
start: startPoint || dataPoint,
|
|
3152
3170
|
end: dataPoint
|
|
3153
3171
|
});
|
|
@@ -3220,8 +3238,8 @@ function LeanChartFullscreenOverlay({
|
|
|
3220
3238
|
[
|
|
3221
3239
|
chart.id,
|
|
3222
3240
|
chart,
|
|
3223
|
-
|
|
3224
|
-
|
|
3241
|
+
chartActiveDrawingTool,
|
|
3242
|
+
chartDrawings,
|
|
3225
3243
|
getLayout,
|
|
3226
3244
|
getLocalPoint,
|
|
3227
3245
|
initialVisiblePoints,
|
|
@@ -3384,27 +3402,27 @@ function LeanChartFullscreenOverlay({
|
|
|
3384
3402
|
toggleRectangleZoom();
|
|
3385
3403
|
return;
|
|
3386
3404
|
}
|
|
3387
|
-
if (event.key.toLowerCase() === "m") {
|
|
3405
|
+
if (!disableDrawings && event.key.toLowerCase() === "m") {
|
|
3388
3406
|
event.preventDefault();
|
|
3389
3407
|
onMovingAverageToggle?.(chart.id);
|
|
3390
3408
|
requestRender();
|
|
3391
3409
|
return;
|
|
3392
3410
|
}
|
|
3393
|
-
if (["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
3411
|
+
if (!disableDrawings && ["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
3394
3412
|
event.preventDefault();
|
|
3395
3413
|
const toolByKey = { t: "trendline", h: "hline", v: "vline", p: "pin" };
|
|
3396
3414
|
toggleDrawingTool(toolByKey[event.key.toLowerCase()]);
|
|
3397
3415
|
return;
|
|
3398
3416
|
}
|
|
3399
3417
|
if (event.key === "Delete" || event.key === "Backspace") {
|
|
3400
|
-
if (!
|
|
3418
|
+
if (disableDrawings || !chartSelectedDrawingId) return;
|
|
3401
3419
|
event.preventDefault();
|
|
3402
3420
|
deleteSelectedDrawing();
|
|
3403
3421
|
return;
|
|
3404
3422
|
}
|
|
3405
3423
|
if (event.key === "Escape" || event.key.toLowerCase() === "f") {
|
|
3406
3424
|
event.preventDefault();
|
|
3407
|
-
if (
|
|
3425
|
+
if (chartActiveDrawingTool || draftDrawing || drawingEditRef.current) {
|
|
3408
3426
|
cancelDrawing();
|
|
3409
3427
|
return;
|
|
3410
3428
|
}
|
|
@@ -3422,23 +3440,24 @@ function LeanChartFullscreenOverlay({
|
|
|
3422
3440
|
}, [
|
|
3423
3441
|
chart.id,
|
|
3424
3442
|
closeWithTransition,
|
|
3425
|
-
|
|
3443
|
+
chartActiveDrawingTool,
|
|
3444
|
+
chartSelectedDrawingId,
|
|
3426
3445
|
cancelDrawing,
|
|
3427
3446
|
deleteSelectedDrawing,
|
|
3447
|
+
disableDrawings,
|
|
3428
3448
|
draftDrawing,
|
|
3429
3449
|
onReset,
|
|
3430
3450
|
onMovingAverageToggle,
|
|
3431
3451
|
rectangleZoomActive,
|
|
3432
3452
|
requestRender,
|
|
3433
3453
|
toggleRectangleZoom,
|
|
3434
|
-
toggleDrawingTool
|
|
3435
|
-
selectedDrawingId
|
|
3454
|
+
toggleDrawingTool
|
|
3436
3455
|
]);
|
|
3437
3456
|
const fullscreenLayout = getLayout();
|
|
3438
3457
|
const selectedDrawingLayout = getSelectedDrawingLayout(
|
|
3439
3458
|
fullscreenLayout ? [fullscreenLayout] : [],
|
|
3440
|
-
|
|
3441
|
-
|
|
3459
|
+
chartDrawings,
|
|
3460
|
+
chartSelectedDrawingId
|
|
3442
3461
|
);
|
|
3443
3462
|
return /* @__PURE__ */ import_react9.default.createElement(
|
|
3444
3463
|
"div",
|
|
@@ -3451,7 +3470,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3451
3470
|
ref: containerRef,
|
|
3452
3471
|
className: `relative h-full overflow-hidden transition-transform duration-150 ${visible ? "scale-100" : "scale-[0.985]"}`,
|
|
3453
3472
|
style: {
|
|
3454
|
-
cursor: rectangleZoomActive ||
|
|
3473
|
+
cursor: rectangleZoomActive || chartActiveDrawingTool ? "crosshair" : void 0
|
|
3455
3474
|
},
|
|
3456
3475
|
onPointerDown: handlePointerDown,
|
|
3457
3476
|
onPointerMove: handlePointerMove,
|
|
@@ -3484,12 +3503,15 @@ function LeanChartFullscreenOverlay({
|
|
|
3484
3503
|
onJumpLatest,
|
|
3485
3504
|
onRectangleZoomToggle: toggleRectangleZoom,
|
|
3486
3505
|
rectangleZoomActive,
|
|
3487
|
-
movingAverage: movingAverageByChart?.[chart.id],
|
|
3506
|
+
movingAverage: disableDrawings ? null : movingAverageByChart?.[chart.id],
|
|
3488
3507
|
onMovingAverageToggle,
|
|
3489
|
-
activeDrawingTool,
|
|
3508
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
3490
3509
|
onDrawingToolToggle: toggleDrawingTool,
|
|
3491
|
-
hasDrawings: getDrawingsForChart(
|
|
3510
|
+
hasDrawings: getDrawingsForChart(chartDrawings, chart.id).length > 0,
|
|
3492
3511
|
onClearDrawingsRequest,
|
|
3512
|
+
disableDrawings,
|
|
3513
|
+
formatXTick,
|
|
3514
|
+
formatYValue,
|
|
3493
3515
|
setRef: (node) => {
|
|
3494
3516
|
chartRef.current = node;
|
|
3495
3517
|
}
|
|
@@ -3499,9 +3521,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3499
3521
|
DrawingOverlay,
|
|
3500
3522
|
{
|
|
3501
3523
|
layouts: fullscreenLayout ? [fullscreenLayout] : [],
|
|
3502
|
-
drawings,
|
|
3503
|
-
draftDrawing,
|
|
3504
|
-
selectedDrawingId,
|
|
3524
|
+
drawings: chartDrawings,
|
|
3525
|
+
draftDrawing: disableDrawings ? null : draftDrawing,
|
|
3526
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
3505
3527
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
3506
3528
|
point: dataPoint,
|
|
3507
3529
|
layout: targetLayout,
|
|
@@ -3539,7 +3561,7 @@ function LeanChartFullscreenOverlay({
|
|
|
3539
3561
|
onTextChange: updateSelectedDrawingText
|
|
3540
3562
|
}
|
|
3541
3563
|
) : null,
|
|
3542
|
-
fullscreenLayout && movingAverageByChart?.[chart.id]?.enabled ? /* @__PURE__ */ import_react9.default.createElement(
|
|
3564
|
+
!disableDrawings && fullscreenLayout && movingAverageByChart?.[chart.id]?.enabled ? /* @__PURE__ */ import_react9.default.createElement(
|
|
3543
3565
|
MovingAverageOptionsToolbar,
|
|
3544
3566
|
{
|
|
3545
3567
|
movingAverage: movingAverageByChart[chart.id],
|
|
@@ -3552,7 +3574,9 @@ function LeanChartFullscreenOverlay({
|
|
|
3552
3574
|
{
|
|
3553
3575
|
crosshair,
|
|
3554
3576
|
height: "100%",
|
|
3555
|
-
xAxisLabel
|
|
3577
|
+
xAxisLabel,
|
|
3578
|
+
formatXValue,
|
|
3579
|
+
formatYValue
|
|
3556
3580
|
}
|
|
3557
3581
|
),
|
|
3558
3582
|
/* @__PURE__ */ import_react9.default.createElement(RectangleZoomOverlay, { rect: rectangleZoomRect })
|
|
@@ -3585,7 +3609,11 @@ function ChartGrid({
|
|
|
3585
3609
|
seriesOrderByChart = EMPTY_OBJECT,
|
|
3586
3610
|
topMarkers = EMPTY_ARRAY,
|
|
3587
3611
|
onTopMarkerClick,
|
|
3588
|
-
xAxisLabel = "STEP"
|
|
3612
|
+
xAxisLabel = "STEP",
|
|
3613
|
+
disableDrawings = false,
|
|
3614
|
+
formatXTick = formatCompactNumber,
|
|
3615
|
+
formatXValue = formatNumber,
|
|
3616
|
+
formatYValue = formatNumber
|
|
3589
3617
|
}) {
|
|
3590
3618
|
const containerRef = (0, import_react9.useRef)(null);
|
|
3591
3619
|
const gridRef = (0, import_react9.useRef)(null);
|
|
@@ -3613,6 +3641,9 @@ function ChartGrid({
|
|
|
3613
3641
|
const [fullscreenChartId, setFullscreenChartId] = (0, import_react9.useState)(null);
|
|
3614
3642
|
const [rectangleZoomChartId, setRectangleZoomChartId] = (0, import_react9.useState)(null);
|
|
3615
3643
|
const [rectangleZoomRect, setRectangleZoomRect] = (0, import_react9.useState)(null);
|
|
3644
|
+
const chartDrawings = disableDrawings ? EMPTY_ARRAY : drawings;
|
|
3645
|
+
const chartActiveDrawingTool = disableDrawings ? null : activeDrawingTool;
|
|
3646
|
+
const chartSelectedDrawingId = disableDrawings ? null : selectedDrawingId;
|
|
3616
3647
|
const requestRender = (0, import_react9.useCallback)(() => {
|
|
3617
3648
|
setRevision((value) => value + 1);
|
|
3618
3649
|
}, []);
|
|
@@ -3630,11 +3661,11 @@ function ChartGrid({
|
|
|
3630
3661
|
finishEditDrawing,
|
|
3631
3662
|
deleteSelectedDrawing
|
|
3632
3663
|
} = useDrawingInteractions({
|
|
3633
|
-
drawings,
|
|
3634
|
-
onDrawingsChange,
|
|
3635
|
-
activeDrawingTool,
|
|
3664
|
+
drawings: chartDrawings,
|
|
3665
|
+
onDrawingsChange: disableDrawings ? void 0 : onDrawingsChange,
|
|
3666
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
3636
3667
|
onActiveDrawingToolChange,
|
|
3637
|
-
selectedDrawingId,
|
|
3668
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
3638
3669
|
onSelectedDrawingIdChange,
|
|
3639
3670
|
createDrawingId,
|
|
3640
3671
|
focusedChartId,
|
|
@@ -3688,9 +3719,9 @@ function ChartGrid({
|
|
|
3688
3719
|
]
|
|
3689
3720
|
);
|
|
3690
3721
|
const toggleSelectedDrawingExtend = (0, import_react9.useCallback)(() => {
|
|
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,
|
|
@@ -3698,12 +3729,12 @@ function ChartGrid({
|
|
|
3698
3729
|
}
|
|
3699
3730
|
}))
|
|
3700
3731
|
);
|
|
3701
|
-
}, [
|
|
3732
|
+
}, [chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]);
|
|
3702
3733
|
const updateSelectedDrawingColor = (0, import_react9.useCallback)(
|
|
3703
3734
|
(color) => {
|
|
3704
|
-
if (!
|
|
3735
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
3705
3736
|
onDrawingsChange(
|
|
3706
|
-
updateDrawingById(
|
|
3737
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
3707
3738
|
...drawing,
|
|
3708
3739
|
style: {
|
|
3709
3740
|
...drawing.style,
|
|
@@ -3712,13 +3743,13 @@ function ChartGrid({
|
|
|
3712
3743
|
}))
|
|
3713
3744
|
);
|
|
3714
3745
|
},
|
|
3715
|
-
[
|
|
3746
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
3716
3747
|
);
|
|
3717
3748
|
const updateSelectedDrawingText = (0, import_react9.useCallback)(
|
|
3718
3749
|
(text) => {
|
|
3719
|
-
if (!
|
|
3750
|
+
if (disableDrawings || !chartSelectedDrawingId || !onDrawingsChange) return;
|
|
3720
3751
|
onDrawingsChange(
|
|
3721
|
-
updateDrawingById(
|
|
3752
|
+
updateDrawingById(chartDrawings, chartSelectedDrawingId, (drawing) => ({
|
|
3722
3753
|
...drawing,
|
|
3723
3754
|
style: {
|
|
3724
3755
|
...drawing.style,
|
|
@@ -3727,7 +3758,7 @@ function ChartGrid({
|
|
|
3727
3758
|
}))
|
|
3728
3759
|
);
|
|
3729
3760
|
},
|
|
3730
|
-
[
|
|
3761
|
+
[chartDrawings, chartSelectedDrawingId, disableDrawings, onDrawingsChange]
|
|
3731
3762
|
);
|
|
3732
3763
|
const { getAppendAnimatedPoint } = useAppendAnimations({
|
|
3733
3764
|
charts,
|
|
@@ -4179,7 +4210,7 @@ function ChartGrid({
|
|
|
4179
4210
|
const point = getLocalPoint(event);
|
|
4180
4211
|
if (!point) return;
|
|
4181
4212
|
const drawingLayout = findLayoutAt(point.x, point.y);
|
|
4182
|
-
if (drawingLayout &&
|
|
4213
|
+
if (drawingLayout && chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
4183
4214
|
if (event.button !== 0) return;
|
|
4184
4215
|
event.preventDefault();
|
|
4185
4216
|
setFocusedChartId(drawingLayout.chart.id);
|
|
@@ -4192,10 +4223,10 @@ function ChartGrid({
|
|
|
4192
4223
|
yScaleRef,
|
|
4193
4224
|
yCenterOffsetRef
|
|
4194
4225
|
});
|
|
4195
|
-
if (
|
|
4226
|
+
if (chartActiveDrawingTool === "hline" || chartActiveDrawingTool === "vline" || chartActiveDrawingTool === "pin") {
|
|
4196
4227
|
commitDrawing({
|
|
4197
4228
|
chartId: drawingLayout.chart.id,
|
|
4198
|
-
type:
|
|
4229
|
+
type: chartActiveDrawingTool,
|
|
4199
4230
|
start: dataPoint,
|
|
4200
4231
|
end: dataPoint
|
|
4201
4232
|
});
|
|
@@ -4219,15 +4250,15 @@ function ChartGrid({
|
|
|
4219
4250
|
});
|
|
4220
4251
|
return;
|
|
4221
4252
|
}
|
|
4222
|
-
if (drawingLayout && Array.isArray(
|
|
4223
|
-
const
|
|
4224
|
-
|
|
4253
|
+
if (drawingLayout && Array.isArray(chartDrawings) && chartDrawings.length > 0) {
|
|
4254
|
+
const hitDrawings = getDrawingsForChart(
|
|
4255
|
+
chartDrawings,
|
|
4225
4256
|
drawingLayout.chart.id
|
|
4226
4257
|
);
|
|
4227
|
-
for (let i =
|
|
4258
|
+
for (let i = hitDrawings.length - 1; i >= 0; i -= 1) {
|
|
4228
4259
|
const hit = hitTestDrawing({
|
|
4229
4260
|
point,
|
|
4230
|
-
drawing:
|
|
4261
|
+
drawing: hitDrawings[i],
|
|
4231
4262
|
layout: drawingLayout,
|
|
4232
4263
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
4233
4264
|
point: dataPoint,
|
|
@@ -4333,9 +4364,9 @@ function ChartGrid({
|
|
|
4333
4364
|
initialVisiblePoints,
|
|
4334
4365
|
fullscreenChartId,
|
|
4335
4366
|
rectangleZoomChartId,
|
|
4336
|
-
|
|
4367
|
+
chartActiveDrawingTool,
|
|
4368
|
+
chartDrawings,
|
|
4337
4369
|
commitDrawing,
|
|
4338
|
-
drawings,
|
|
4339
4370
|
onSelectedDrawingIdChange
|
|
4340
4371
|
]
|
|
4341
4372
|
);
|
|
@@ -4347,7 +4378,7 @@ function ChartGrid({
|
|
|
4347
4378
|
if (drawingPoint) {
|
|
4348
4379
|
if (drawingEditRef.current) {
|
|
4349
4380
|
const editLayout = getChartLayout().find(
|
|
4350
|
-
(layout) => getDrawingsForChart(
|
|
4381
|
+
(layout) => getDrawingsForChart(chartDrawings, layout.chart.id).some(
|
|
4351
4382
|
(drawing) => drawing.id === drawingEditRef.current.id
|
|
4352
4383
|
)
|
|
4353
4384
|
);
|
|
@@ -4362,7 +4393,7 @@ function ChartGrid({
|
|
|
4362
4393
|
yCenterOffsetRef
|
|
4363
4394
|
});
|
|
4364
4395
|
const edit = drawingEditRef.current;
|
|
4365
|
-
const nextDrawings = updateDrawingById(
|
|
4396
|
+
const nextDrawings = updateDrawingById(chartDrawings, edit.id, (drawing) => {
|
|
4366
4397
|
if (drawing.type === "hline") {
|
|
4367
4398
|
const deltaX = (drawing.end?.x ?? drawing.start.x) - drawing.start.x;
|
|
4368
4399
|
return {
|
|
@@ -4390,7 +4421,7 @@ function ChartGrid({
|
|
|
4390
4421
|
}
|
|
4391
4422
|
return;
|
|
4392
4423
|
}
|
|
4393
|
-
if (
|
|
4424
|
+
if (chartActiveDrawingTool && DRAWING_TOOLS.has(chartActiveDrawingTool)) {
|
|
4394
4425
|
const drawingLayout = findLayoutAt(drawingPoint.x, drawingPoint.y);
|
|
4395
4426
|
if (!drawingLayout) return;
|
|
4396
4427
|
const dataPoint = screenPointToDataPoint({
|
|
@@ -4403,11 +4434,11 @@ function ChartGrid({
|
|
|
4403
4434
|
yCenterOffsetRef
|
|
4404
4435
|
});
|
|
4405
4436
|
const session = drawingSessionRef.current;
|
|
4406
|
-
const startPoint =
|
|
4407
|
-
if (startPoint ||
|
|
4437
|
+
const startPoint = chartActiveDrawingTool === "trendline" && session.chartId === drawingLayout.chart.id ? session.startPoint : dataPoint;
|
|
4438
|
+
if (startPoint || chartActiveDrawingTool !== "trendline") {
|
|
4408
4439
|
updateDraftDrawing({
|
|
4409
4440
|
chartId: drawingLayout.chart.id,
|
|
4410
|
-
type:
|
|
4441
|
+
type: chartActiveDrawingTool,
|
|
4411
4442
|
start: startPoint || dataPoint,
|
|
4412
4443
|
end: dataPoint
|
|
4413
4444
|
});
|
|
@@ -4480,8 +4511,8 @@ function ChartGrid({
|
|
|
4480
4511
|
},
|
|
4481
4512
|
[
|
|
4482
4513
|
fullscreenChartId,
|
|
4483
|
-
|
|
4484
|
-
|
|
4514
|
+
chartActiveDrawingTool,
|
|
4515
|
+
chartDrawings,
|
|
4485
4516
|
findLayoutAt,
|
|
4486
4517
|
getChartLayout,
|
|
4487
4518
|
getLocalPoint,
|
|
@@ -4686,24 +4717,24 @@ function ChartGrid({
|
|
|
4686
4717
|
toggleRectangleZoom(focusedChartId);
|
|
4687
4718
|
return;
|
|
4688
4719
|
}
|
|
4689
|
-
if (event.key.toLowerCase() === "m") {
|
|
4720
|
+
if (!disableDrawings && event.key.toLowerCase() === "m") {
|
|
4690
4721
|
event.preventDefault();
|
|
4691
4722
|
toggleMovingAverage(focusedChartId);
|
|
4692
4723
|
return;
|
|
4693
4724
|
}
|
|
4694
|
-
if (["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
4725
|
+
if (!disableDrawings && ["t", "h", "v", "p"].includes(event.key.toLowerCase())) {
|
|
4695
4726
|
event.preventDefault();
|
|
4696
4727
|
const toolByKey = { t: "trendline", h: "hline", v: "vline", p: "pin" };
|
|
4697
4728
|
toggleDrawingTool(toolByKey[event.key.toLowerCase()]);
|
|
4698
4729
|
return;
|
|
4699
4730
|
}
|
|
4700
4731
|
if (event.key === "Delete" || event.key === "Backspace") {
|
|
4701
|
-
if (!
|
|
4732
|
+
if (disableDrawings || !chartSelectedDrawingId) return;
|
|
4702
4733
|
event.preventDefault();
|
|
4703
4734
|
deleteSelectedDrawing();
|
|
4704
4735
|
return;
|
|
4705
4736
|
}
|
|
4706
|
-
if (event.key === "Escape" && (
|
|
4737
|
+
if (event.key === "Escape" && (chartActiveDrawingTool || draftDrawing || drawingEditRef.current)) {
|
|
4707
4738
|
event.preventDefault();
|
|
4708
4739
|
cancelDrawing();
|
|
4709
4740
|
return;
|
|
@@ -4726,15 +4757,16 @@ function ChartGrid({
|
|
|
4726
4757
|
}, [
|
|
4727
4758
|
focusedChartId,
|
|
4728
4759
|
fullscreenChartId,
|
|
4729
|
-
|
|
4760
|
+
chartActiveDrawingTool,
|
|
4761
|
+
chartSelectedDrawingId,
|
|
4730
4762
|
cancelDrawing,
|
|
4731
4763
|
deleteSelectedDrawing,
|
|
4764
|
+
disableDrawings,
|
|
4732
4765
|
draftDrawing,
|
|
4733
4766
|
focusChartByKeyboard,
|
|
4734
4767
|
openFullscreen,
|
|
4735
4768
|
rectangleZoomChartId,
|
|
4736
4769
|
resetChartView,
|
|
4737
|
-
selectedDrawingId,
|
|
4738
4770
|
toggleMovingAverage,
|
|
4739
4771
|
toggleDrawingTool,
|
|
4740
4772
|
toggleRectangleZoom
|
|
@@ -4743,8 +4775,8 @@ function ChartGrid({
|
|
|
4743
4775
|
const chartLayouts = fullscreenChart ? [] : getChartLayout();
|
|
4744
4776
|
const selectedDrawingLayout = getSelectedDrawingLayout(
|
|
4745
4777
|
chartLayouts,
|
|
4746
|
-
|
|
4747
|
-
|
|
4778
|
+
chartDrawings,
|
|
4779
|
+
chartSelectedDrawingId
|
|
4748
4780
|
);
|
|
4749
4781
|
return /* @__PURE__ */ import_react9.default.createElement(
|
|
4750
4782
|
"div",
|
|
@@ -4752,7 +4784,7 @@ function ChartGrid({
|
|
|
4752
4784
|
ref: containerRef,
|
|
4753
4785
|
className: `aliencharts-root relative h-full overflow-y-auto ${className}`,
|
|
4754
4786
|
style: {
|
|
4755
|
-
cursor: rectangleZoomChartId ||
|
|
4787
|
+
cursor: rectangleZoomChartId || chartActiveDrawingTool ? "crosshair" : void 0
|
|
4756
4788
|
},
|
|
4757
4789
|
onPointerDown: handlePointerDown,
|
|
4758
4790
|
onPointerMove: handlePointerMove,
|
|
@@ -4794,12 +4826,15 @@ function ChartGrid({
|
|
|
4794
4826
|
onJumpLatest: jumpChartToLatest,
|
|
4795
4827
|
onRectangleZoomToggle: toggleRectangleZoom,
|
|
4796
4828
|
rectangleZoomActive: rectangleZoomChartId === chart.id,
|
|
4797
|
-
movingAverage: movingAverageByChart?.[chart.id],
|
|
4829
|
+
movingAverage: disableDrawings ? null : movingAverageByChart?.[chart.id],
|
|
4798
4830
|
onMovingAverageToggle: toggleMovingAverage,
|
|
4799
|
-
activeDrawingTool: focusedChartId === chart.id ?
|
|
4831
|
+
activeDrawingTool: focusedChartId === chart.id ? chartActiveDrawingTool : null,
|
|
4800
4832
|
onDrawingToolToggle: toggleDrawingTool,
|
|
4801
|
-
hasDrawings: getDrawingsForChart(
|
|
4833
|
+
hasDrawings: getDrawingsForChart(chartDrawings, chart.id).length > 0,
|
|
4802
4834
|
onClearDrawingsRequest,
|
|
4835
|
+
disableDrawings,
|
|
4836
|
+
formatXTick,
|
|
4837
|
+
formatYValue,
|
|
4803
4838
|
setRef: (node) => {
|
|
4804
4839
|
if (node) chartRefs.current.set(chart.id, node);
|
|
4805
4840
|
else chartRefs.current.delete(chart.id);
|
|
@@ -4812,16 +4847,18 @@ function ChartGrid({
|
|
|
4812
4847
|
{
|
|
4813
4848
|
crosshair: fullscreenChart ? null : crosshair,
|
|
4814
4849
|
height: containerRef.current?.scrollHeight ?? "100%",
|
|
4815
|
-
xAxisLabel
|
|
4850
|
+
xAxisLabel,
|
|
4851
|
+
formatXValue,
|
|
4852
|
+
formatYValue
|
|
4816
4853
|
}
|
|
4817
4854
|
),
|
|
4818
4855
|
/* @__PURE__ */ import_react9.default.createElement(
|
|
4819
4856
|
DrawingOverlay,
|
|
4820
4857
|
{
|
|
4821
4858
|
layouts: chartLayouts,
|
|
4822
|
-
drawings,
|
|
4823
|
-
draftDrawing: fullscreenChart ? null : draftDrawing,
|
|
4824
|
-
selectedDrawingId,
|
|
4859
|
+
drawings: chartDrawings,
|
|
4860
|
+
draftDrawing: fullscreenChart || disableDrawings ? null : draftDrawing,
|
|
4861
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
4825
4862
|
projectPoint: (dataPoint, targetLayout) => projectDataPointToScreenPoint({
|
|
4826
4863
|
point: dataPoint,
|
|
4827
4864
|
layout: targetLayout,
|
|
@@ -4854,7 +4891,7 @@ function ChartGrid({
|
|
|
4854
4891
|
onTextChange: updateSelectedDrawingText
|
|
4855
4892
|
}
|
|
4856
4893
|
) : null,
|
|
4857
|
-
!fullscreenChart && focusedChartId && movingAverageByChart?.[focusedChartId]?.enabled ? (() => {
|
|
4894
|
+
!disableDrawings && !fullscreenChart && focusedChartId && movingAverageByChart?.[focusedChartId]?.enabled ? (() => {
|
|
4858
4895
|
const layout = chartLayouts.find(
|
|
4859
4896
|
(candidate) => candidate.chart.id === focusedChartId
|
|
4860
4897
|
);
|
|
@@ -4870,7 +4907,7 @@ function ChartGrid({
|
|
|
4870
4907
|
})() : null,
|
|
4871
4908
|
/* @__PURE__ */ import_react9.default.createElement(RectangleZoomOverlay, { rect: fullscreenChart ? null : rectangleZoomRect }),
|
|
4872
4909
|
fullscreenChart ? /* @__PURE__ */ import_react9.default.createElement(
|
|
4873
|
-
|
|
4910
|
+
ChartFullscreenOverlay,
|
|
4874
4911
|
{
|
|
4875
4912
|
chart: fullscreenChart,
|
|
4876
4913
|
dataRevision,
|
|
@@ -4892,17 +4929,21 @@ function ChartGrid({
|
|
|
4892
4929
|
onReset: resetChartView,
|
|
4893
4930
|
onJumpLatest: jumpChartToLatest,
|
|
4894
4931
|
xAxisLabel,
|
|
4895
|
-
drawings,
|
|
4932
|
+
drawings: chartDrawings,
|
|
4896
4933
|
onDrawingsChange,
|
|
4897
|
-
activeDrawingTool,
|
|
4934
|
+
activeDrawingTool: chartActiveDrawingTool,
|
|
4898
4935
|
onActiveDrawingToolChange,
|
|
4899
|
-
selectedDrawingId,
|
|
4936
|
+
selectedDrawingId: chartSelectedDrawingId,
|
|
4900
4937
|
onSelectedDrawingIdChange,
|
|
4901
4938
|
createDrawingId,
|
|
4902
4939
|
onClearDrawingsRequest,
|
|
4903
4940
|
onChartContextMenu,
|
|
4904
4941
|
topMarkers,
|
|
4905
|
-
onTopMarkerClick
|
|
4942
|
+
onTopMarkerClick,
|
|
4943
|
+
disableDrawings,
|
|
4944
|
+
formatXTick,
|
|
4945
|
+
formatXValue,
|
|
4946
|
+
formatYValue
|
|
4906
4947
|
}
|
|
4907
4948
|
) : null
|
|
4908
4949
|
);
|