hyperprop-charting-library 0.1.90 → 0.1.92
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/hyperprop-charting-library.cjs +30 -0
- package/dist/hyperprop-charting-library.d.ts +1 -0
- package/dist/hyperprop-charting-library.js +30 -0
- package/dist/index.cjs +30 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +30 -0
- package/docs/API.md +1 -0
- package/package.json +1 -1
|
@@ -4855,6 +4855,22 @@ function createChart(element, options = {}) {
|
|
|
4855
4855
|
canvas.addEventListener("wheel", onWheel, { passive: false });
|
|
4856
4856
|
canvas.addEventListener("dblclick", onDoubleClick);
|
|
4857
4857
|
canvas.addEventListener("contextmenu", onContextMenu);
|
|
4858
|
+
const onModifierKeyChange = (event) => {
|
|
4859
|
+
const active = event.metaKey || event.ctrlKey;
|
|
4860
|
+
if (active !== magnetModifierActive) {
|
|
4861
|
+
magnetModifierActive = active;
|
|
4862
|
+
if (draftDrawing) draw();
|
|
4863
|
+
}
|
|
4864
|
+
};
|
|
4865
|
+
const onWindowBlurMagnet = () => {
|
|
4866
|
+
magnetModifierActive = false;
|
|
4867
|
+
};
|
|
4868
|
+
const hasWindow = typeof window !== "undefined";
|
|
4869
|
+
if (hasWindow) {
|
|
4870
|
+
window.addEventListener("keydown", onModifierKeyChange);
|
|
4871
|
+
window.addEventListener("keyup", onModifierKeyChange);
|
|
4872
|
+
window.addEventListener("blur", onWindowBlurMagnet);
|
|
4873
|
+
}
|
|
4858
4874
|
const updateOptions = (nextOptions) => {
|
|
4859
4875
|
const wasTickerSmoothingEnabled = mergedOptions.tickerLine?.smoothing ?? false;
|
|
4860
4876
|
const previousWidth = width;
|
|
@@ -5094,6 +5110,14 @@ function createChart(element, options = {}) {
|
|
|
5094
5110
|
draw();
|
|
5095
5111
|
};
|
|
5096
5112
|
const getActiveDrawingTool = () => activeDrawingTool;
|
|
5113
|
+
const cancelDrawing = () => {
|
|
5114
|
+
if (draftDrawing) {
|
|
5115
|
+
draftDrawing = null;
|
|
5116
|
+
draw();
|
|
5117
|
+
return true;
|
|
5118
|
+
}
|
|
5119
|
+
return false;
|
|
5120
|
+
};
|
|
5097
5121
|
const setMagnetMode = (mode) => {
|
|
5098
5122
|
magnetMode = mode;
|
|
5099
5123
|
};
|
|
@@ -5163,6 +5187,11 @@ function createChart(element, options = {}) {
|
|
|
5163
5187
|
canvas.removeEventListener("wheel", onWheel);
|
|
5164
5188
|
canvas.removeEventListener("dblclick", onDoubleClick);
|
|
5165
5189
|
canvas.removeEventListener("contextmenu", onContextMenu);
|
|
5190
|
+
if (hasWindow) {
|
|
5191
|
+
window.removeEventListener("keydown", onModifierKeyChange);
|
|
5192
|
+
window.removeEventListener("keyup", onModifierKeyChange);
|
|
5193
|
+
window.removeEventListener("blur", onWindowBlurMagnet);
|
|
5194
|
+
}
|
|
5166
5195
|
element.innerHTML = "";
|
|
5167
5196
|
};
|
|
5168
5197
|
draw();
|
|
@@ -5208,6 +5237,7 @@ function createChart(element, options = {}) {
|
|
|
5208
5237
|
onDrawingEditText,
|
|
5209
5238
|
setMagnetMode,
|
|
5210
5239
|
getMagnetMode,
|
|
5240
|
+
cancelDrawing,
|
|
5211
5241
|
setSelectedDrawing,
|
|
5212
5242
|
onDrawingHover,
|
|
5213
5243
|
setDrawingDefaults,
|
|
@@ -432,6 +432,7 @@ interface ChartInstance {
|
|
|
432
432
|
onDrawingEditText: (handler: ((event: DrawingSelectEvent) => void) | null) => void;
|
|
433
433
|
setMagnetMode: (mode: "none" | "weak" | "strong") => void;
|
|
434
434
|
getMagnetMode: () => "none" | "weak" | "strong";
|
|
435
|
+
cancelDrawing: () => boolean;
|
|
435
436
|
onDrawingHover: (handler: ((event: DrawingHoverEvent) => void) | null) => void;
|
|
436
437
|
setDrawingDefaults: (tool: DrawingToolType, defaults: DrawingDefaults | null) => void;
|
|
437
438
|
setSelectedDrawing: (id: string | null) => void;
|
|
@@ -4829,6 +4829,22 @@ function createChart(element, options = {}) {
|
|
|
4829
4829
|
canvas.addEventListener("wheel", onWheel, { passive: false });
|
|
4830
4830
|
canvas.addEventListener("dblclick", onDoubleClick);
|
|
4831
4831
|
canvas.addEventListener("contextmenu", onContextMenu);
|
|
4832
|
+
const onModifierKeyChange = (event) => {
|
|
4833
|
+
const active = event.metaKey || event.ctrlKey;
|
|
4834
|
+
if (active !== magnetModifierActive) {
|
|
4835
|
+
magnetModifierActive = active;
|
|
4836
|
+
if (draftDrawing) draw();
|
|
4837
|
+
}
|
|
4838
|
+
};
|
|
4839
|
+
const onWindowBlurMagnet = () => {
|
|
4840
|
+
magnetModifierActive = false;
|
|
4841
|
+
};
|
|
4842
|
+
const hasWindow = typeof window !== "undefined";
|
|
4843
|
+
if (hasWindow) {
|
|
4844
|
+
window.addEventListener("keydown", onModifierKeyChange);
|
|
4845
|
+
window.addEventListener("keyup", onModifierKeyChange);
|
|
4846
|
+
window.addEventListener("blur", onWindowBlurMagnet);
|
|
4847
|
+
}
|
|
4832
4848
|
const updateOptions = (nextOptions) => {
|
|
4833
4849
|
const wasTickerSmoothingEnabled = mergedOptions.tickerLine?.smoothing ?? false;
|
|
4834
4850
|
const previousWidth = width;
|
|
@@ -5068,6 +5084,14 @@ function createChart(element, options = {}) {
|
|
|
5068
5084
|
draw();
|
|
5069
5085
|
};
|
|
5070
5086
|
const getActiveDrawingTool = () => activeDrawingTool;
|
|
5087
|
+
const cancelDrawing = () => {
|
|
5088
|
+
if (draftDrawing) {
|
|
5089
|
+
draftDrawing = null;
|
|
5090
|
+
draw();
|
|
5091
|
+
return true;
|
|
5092
|
+
}
|
|
5093
|
+
return false;
|
|
5094
|
+
};
|
|
5071
5095
|
const setMagnetMode = (mode) => {
|
|
5072
5096
|
magnetMode = mode;
|
|
5073
5097
|
};
|
|
@@ -5137,6 +5161,11 @@ function createChart(element, options = {}) {
|
|
|
5137
5161
|
canvas.removeEventListener("wheel", onWheel);
|
|
5138
5162
|
canvas.removeEventListener("dblclick", onDoubleClick);
|
|
5139
5163
|
canvas.removeEventListener("contextmenu", onContextMenu);
|
|
5164
|
+
if (hasWindow) {
|
|
5165
|
+
window.removeEventListener("keydown", onModifierKeyChange);
|
|
5166
|
+
window.removeEventListener("keyup", onModifierKeyChange);
|
|
5167
|
+
window.removeEventListener("blur", onWindowBlurMagnet);
|
|
5168
|
+
}
|
|
5140
5169
|
element.innerHTML = "";
|
|
5141
5170
|
};
|
|
5142
5171
|
draw();
|
|
@@ -5182,6 +5211,7 @@ function createChart(element, options = {}) {
|
|
|
5182
5211
|
onDrawingEditText,
|
|
5183
5212
|
setMagnetMode,
|
|
5184
5213
|
getMagnetMode,
|
|
5214
|
+
cancelDrawing,
|
|
5185
5215
|
setSelectedDrawing,
|
|
5186
5216
|
onDrawingHover,
|
|
5187
5217
|
setDrawingDefaults,
|
package/dist/index.cjs
CHANGED
|
@@ -4855,6 +4855,22 @@ function createChart(element, options = {}) {
|
|
|
4855
4855
|
canvas.addEventListener("wheel", onWheel, { passive: false });
|
|
4856
4856
|
canvas.addEventListener("dblclick", onDoubleClick);
|
|
4857
4857
|
canvas.addEventListener("contextmenu", onContextMenu);
|
|
4858
|
+
const onModifierKeyChange = (event) => {
|
|
4859
|
+
const active = event.metaKey || event.ctrlKey;
|
|
4860
|
+
if (active !== magnetModifierActive) {
|
|
4861
|
+
magnetModifierActive = active;
|
|
4862
|
+
if (draftDrawing) draw();
|
|
4863
|
+
}
|
|
4864
|
+
};
|
|
4865
|
+
const onWindowBlurMagnet = () => {
|
|
4866
|
+
magnetModifierActive = false;
|
|
4867
|
+
};
|
|
4868
|
+
const hasWindow = typeof window !== "undefined";
|
|
4869
|
+
if (hasWindow) {
|
|
4870
|
+
window.addEventListener("keydown", onModifierKeyChange);
|
|
4871
|
+
window.addEventListener("keyup", onModifierKeyChange);
|
|
4872
|
+
window.addEventListener("blur", onWindowBlurMagnet);
|
|
4873
|
+
}
|
|
4858
4874
|
const updateOptions = (nextOptions) => {
|
|
4859
4875
|
const wasTickerSmoothingEnabled = mergedOptions.tickerLine?.smoothing ?? false;
|
|
4860
4876
|
const previousWidth = width;
|
|
@@ -5094,6 +5110,14 @@ function createChart(element, options = {}) {
|
|
|
5094
5110
|
draw();
|
|
5095
5111
|
};
|
|
5096
5112
|
const getActiveDrawingTool = () => activeDrawingTool;
|
|
5113
|
+
const cancelDrawing = () => {
|
|
5114
|
+
if (draftDrawing) {
|
|
5115
|
+
draftDrawing = null;
|
|
5116
|
+
draw();
|
|
5117
|
+
return true;
|
|
5118
|
+
}
|
|
5119
|
+
return false;
|
|
5120
|
+
};
|
|
5097
5121
|
const setMagnetMode = (mode) => {
|
|
5098
5122
|
magnetMode = mode;
|
|
5099
5123
|
};
|
|
@@ -5163,6 +5187,11 @@ function createChart(element, options = {}) {
|
|
|
5163
5187
|
canvas.removeEventListener("wheel", onWheel);
|
|
5164
5188
|
canvas.removeEventListener("dblclick", onDoubleClick);
|
|
5165
5189
|
canvas.removeEventListener("contextmenu", onContextMenu);
|
|
5190
|
+
if (hasWindow) {
|
|
5191
|
+
window.removeEventListener("keydown", onModifierKeyChange);
|
|
5192
|
+
window.removeEventListener("keyup", onModifierKeyChange);
|
|
5193
|
+
window.removeEventListener("blur", onWindowBlurMagnet);
|
|
5194
|
+
}
|
|
5166
5195
|
element.innerHTML = "";
|
|
5167
5196
|
};
|
|
5168
5197
|
draw();
|
|
@@ -5208,6 +5237,7 @@ function createChart(element, options = {}) {
|
|
|
5208
5237
|
onDrawingEditText,
|
|
5209
5238
|
setMagnetMode,
|
|
5210
5239
|
getMagnetMode,
|
|
5240
|
+
cancelDrawing,
|
|
5211
5241
|
setSelectedDrawing,
|
|
5212
5242
|
onDrawingHover,
|
|
5213
5243
|
setDrawingDefaults,
|
package/dist/index.d.cts
CHANGED
|
@@ -432,6 +432,7 @@ interface ChartInstance {
|
|
|
432
432
|
onDrawingEditText: (handler: ((event: DrawingSelectEvent) => void) | null) => void;
|
|
433
433
|
setMagnetMode: (mode: "none" | "weak" | "strong") => void;
|
|
434
434
|
getMagnetMode: () => "none" | "weak" | "strong";
|
|
435
|
+
cancelDrawing: () => boolean;
|
|
435
436
|
onDrawingHover: (handler: ((event: DrawingHoverEvent) => void) | null) => void;
|
|
436
437
|
setDrawingDefaults: (tool: DrawingToolType, defaults: DrawingDefaults | null) => void;
|
|
437
438
|
setSelectedDrawing: (id: string | null) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -432,6 +432,7 @@ interface ChartInstance {
|
|
|
432
432
|
onDrawingEditText: (handler: ((event: DrawingSelectEvent) => void) | null) => void;
|
|
433
433
|
setMagnetMode: (mode: "none" | "weak" | "strong") => void;
|
|
434
434
|
getMagnetMode: () => "none" | "weak" | "strong";
|
|
435
|
+
cancelDrawing: () => boolean;
|
|
435
436
|
onDrawingHover: (handler: ((event: DrawingHoverEvent) => void) | null) => void;
|
|
436
437
|
setDrawingDefaults: (tool: DrawingToolType, defaults: DrawingDefaults | null) => void;
|
|
437
438
|
setSelectedDrawing: (id: string | null) => void;
|
package/dist/index.js
CHANGED
|
@@ -4829,6 +4829,22 @@ function createChart(element, options = {}) {
|
|
|
4829
4829
|
canvas.addEventListener("wheel", onWheel, { passive: false });
|
|
4830
4830
|
canvas.addEventListener("dblclick", onDoubleClick);
|
|
4831
4831
|
canvas.addEventListener("contextmenu", onContextMenu);
|
|
4832
|
+
const onModifierKeyChange = (event) => {
|
|
4833
|
+
const active = event.metaKey || event.ctrlKey;
|
|
4834
|
+
if (active !== magnetModifierActive) {
|
|
4835
|
+
magnetModifierActive = active;
|
|
4836
|
+
if (draftDrawing) draw();
|
|
4837
|
+
}
|
|
4838
|
+
};
|
|
4839
|
+
const onWindowBlurMagnet = () => {
|
|
4840
|
+
magnetModifierActive = false;
|
|
4841
|
+
};
|
|
4842
|
+
const hasWindow = typeof window !== "undefined";
|
|
4843
|
+
if (hasWindow) {
|
|
4844
|
+
window.addEventListener("keydown", onModifierKeyChange);
|
|
4845
|
+
window.addEventListener("keyup", onModifierKeyChange);
|
|
4846
|
+
window.addEventListener("blur", onWindowBlurMagnet);
|
|
4847
|
+
}
|
|
4832
4848
|
const updateOptions = (nextOptions) => {
|
|
4833
4849
|
const wasTickerSmoothingEnabled = mergedOptions.tickerLine?.smoothing ?? false;
|
|
4834
4850
|
const previousWidth = width;
|
|
@@ -5068,6 +5084,14 @@ function createChart(element, options = {}) {
|
|
|
5068
5084
|
draw();
|
|
5069
5085
|
};
|
|
5070
5086
|
const getActiveDrawingTool = () => activeDrawingTool;
|
|
5087
|
+
const cancelDrawing = () => {
|
|
5088
|
+
if (draftDrawing) {
|
|
5089
|
+
draftDrawing = null;
|
|
5090
|
+
draw();
|
|
5091
|
+
return true;
|
|
5092
|
+
}
|
|
5093
|
+
return false;
|
|
5094
|
+
};
|
|
5071
5095
|
const setMagnetMode = (mode) => {
|
|
5072
5096
|
magnetMode = mode;
|
|
5073
5097
|
};
|
|
@@ -5137,6 +5161,11 @@ function createChart(element, options = {}) {
|
|
|
5137
5161
|
canvas.removeEventListener("wheel", onWheel);
|
|
5138
5162
|
canvas.removeEventListener("dblclick", onDoubleClick);
|
|
5139
5163
|
canvas.removeEventListener("contextmenu", onContextMenu);
|
|
5164
|
+
if (hasWindow) {
|
|
5165
|
+
window.removeEventListener("keydown", onModifierKeyChange);
|
|
5166
|
+
window.removeEventListener("keyup", onModifierKeyChange);
|
|
5167
|
+
window.removeEventListener("blur", onWindowBlurMagnet);
|
|
5168
|
+
}
|
|
5140
5169
|
element.innerHTML = "";
|
|
5141
5170
|
};
|
|
5142
5171
|
draw();
|
|
@@ -5182,6 +5211,7 @@ function createChart(element, options = {}) {
|
|
|
5182
5211
|
onDrawingEditText,
|
|
5183
5212
|
setMagnetMode,
|
|
5184
5213
|
getMagnetMode,
|
|
5214
|
+
cancelDrawing,
|
|
5185
5215
|
setSelectedDrawing,
|
|
5186
5216
|
onDrawingHover,
|
|
5187
5217
|
setDrawingDefaults,
|
package/docs/API.md
CHANGED
|
@@ -484,6 +484,7 @@ Use `getDrawings()` / `setDrawings()` for persistence.
|
|
|
484
484
|
- `setSelectedDrawing(id: string | null): void` (marks a drawing selected; only the selected/drafted drawing renders its handles, and position tools render their lines/labels only while selected)
|
|
485
485
|
- `onDrawingDoubleClick(handler): void` (fires when a drawing is double-clicked; use it to open a settings dialog, e.g. for position tools)
|
|
486
486
|
- `onDrawingEditText(handler): void` (fires when a `text`/`note` tool is placed or double-clicked; use it to show an inline text editor at `{x, y}` and write the result back via `updateDrawing(id, { label })`). `text`/`note` drawings store their content in `label` and size in `fontSize`.
|
|
487
|
+
- `cancelDrawing(): boolean` — abort an in-progress multi-click drawing (between the first click and the final point, e.g. a half-drawn trendline/ray/fib). Returns `true` if a draft was cancelled. Wire it to Escape.
|
|
487
488
|
- `setMagnetMode(mode): void` / `getMagnetMode()` — magnet/snap for all drawing tools. `"none"` off, `"weak"` snaps to a candle's OHLC only when the cursor is near a value, `"strong"` always snaps to the nearest OHLC of the bar under the cursor. Holding Cmd/Ctrl while drawing/dragging forces strong snapping regardless of the mode.
|
|
488
489
|
- `setActiveDrawingTool(tool: DrawingToolType | null): void` (`DrawingToolType` = `"horizontal-line" | "vertical-line" | "trendline" | "ray" | "fib-retracement"`)
|
|
489
490
|
- `getActiveDrawingTool(): DrawingToolType | null`
|