@invinite-org/chartlang-adapter-kit 1.3.0 → 1.4.0
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/CHANGELOG.md +52 -0
- package/README.md +7 -0
- package/dist/canvas/index.d.ts +5 -0
- package/dist/canvas/index.d.ts.map +1 -0
- package/dist/canvas/index.js +5 -0
- package/dist/canvas/index.js.map +1 -0
- package/dist/canvas/mockContext.d.ts +168 -0
- package/dist/canvas/mockContext.d.ts.map +1 -0
- package/dist/canvas/mockContext.js +198 -0
- package/dist/canvas/mockContext.js.map +1 -0
- package/dist/canvas/paintPrimitive.d.ts +35 -0
- package/dist/canvas/paintPrimitive.d.ts.map +1 -0
- package/dist/canvas/paintPrimitive.js +171 -0
- package/dist/canvas/paintPrimitive.js.map +1 -0
- package/dist/canvas/renderCtx.d.ts +40 -0
- package/dist/canvas/renderCtx.d.ts.map +1 -0
- package/dist/canvas/renderCtx.js +4 -0
- package/dist/canvas/renderCtx.js.map +1 -0
- package/dist/geometry/_lib/arrowhead.d.ts +18 -0
- package/dist/geometry/_lib/arrowhead.d.ts.map +1 -0
- package/dist/geometry/_lib/arrowhead.js +38 -0
- package/dist/geometry/_lib/arrowhead.js.map +1 -0
- package/dist/geometry/_lib/bezier.d.ts +57 -0
- package/dist/geometry/_lib/bezier.d.ts.map +1 -0
- package/dist/geometry/_lib/bezier.js +84 -0
- package/dist/geometry/_lib/bezier.js.map +1 -0
- package/dist/geometry/_lib/chevron.d.ts +29 -0
- package/dist/geometry/_lib/chevron.d.ts.map +1 -0
- package/dist/geometry/_lib/chevron.js +37 -0
- package/dist/geometry/_lib/chevron.js.map +1 -0
- package/dist/geometry/_lib/dash.d.ts +30 -0
- package/dist/geometry/_lib/dash.d.ts.map +1 -0
- package/dist/geometry/_lib/dash.js +40 -0
- package/dist/geometry/_lib/dash.js.map +1 -0
- package/dist/geometry/_lib/fibLevels.d.ts +36 -0
- package/dist/geometry/_lib/fibLevels.d.ts.map +1 -0
- package/dist/geometry/_lib/fibLevels.js +44 -0
- package/dist/geometry/_lib/fibLevels.js.map +1 -0
- package/dist/geometry/_lib/gannLevels.d.ts +54 -0
- package/dist/geometry/_lib/gannLevels.d.ts.map +1 -0
- package/dist/geometry/_lib/gannLevels.js +88 -0
- package/dist/geometry/_lib/gannLevels.js.map +1 -0
- package/dist/geometry/_lib/lineExtend.d.ts +31 -0
- package/dist/geometry/_lib/lineExtend.d.ts.map +1 -0
- package/dist/geometry/_lib/lineExtend.js +48 -0
- package/dist/geometry/_lib/lineExtend.js.map +1 -0
- package/dist/geometry/_lib/namedPolyline.d.ts +25 -0
- package/dist/geometry/_lib/namedPolyline.d.ts.map +1 -0
- package/dist/geometry/_lib/namedPolyline.js +64 -0
- package/dist/geometry/_lib/namedPolyline.js.map +1 -0
- package/dist/geometry/_lib/pitchforkGeom.d.ts +46 -0
- package/dist/geometry/_lib/pitchforkGeom.d.ts.map +1 -0
- package/dist/geometry/_lib/pitchforkGeom.js +70 -0
- package/dist/geometry/_lib/pitchforkGeom.js.map +1 -0
- package/dist/geometry/_lib/shapeStyle.d.ts +21 -0
- package/dist/geometry/_lib/shapeStyle.d.ts.map +1 -0
- package/dist/geometry/_lib/shapeStyle.js +41 -0
- package/dist/geometry/_lib/shapeStyle.js.map +1 -0
- package/dist/geometry/_lib/strokeStyle.d.ts +34 -0
- package/dist/geometry/_lib/strokeStyle.d.ts.map +1 -0
- package/dist/geometry/_lib/strokeStyle.js +26 -0
- package/dist/geometry/_lib/strokeStyle.js.map +1 -0
- package/dist/geometry/_lib/textStyle.d.ts +70 -0
- package/dist/geometry/_lib/textStyle.d.ts.map +1 -0
- package/dist/geometry/_lib/textStyle.js +78 -0
- package/dist/geometry/_lib/textStyle.js.map +1 -0
- package/dist/geometry/decompose.d.ts +28 -0
- package/dist/geometry/decompose.d.ts.map +1 -0
- package/dist/geometry/decompose.js +176 -0
- package/dist/geometry/decompose.js.map +1 -0
- package/dist/geometry/index.d.ts +4 -0
- package/dist/geometry/index.d.ts.map +1 -0
- package/dist/geometry/index.js +5 -0
- package/dist/geometry/index.js.map +1 -0
- package/dist/geometry/kinds/annotations.d.ts +77 -0
- package/dist/geometry/kinds/annotations.d.ts.map +1 -0
- package/dist/geometry/kinds/annotations.js +219 -0
- package/dist/geometry/kinds/annotations.js.map +1 -0
- package/dist/geometry/kinds/boxes.d.ts +116 -0
- package/dist/geometry/kinds/boxes.d.ts.map +1 -0
- package/dist/geometry/kinds/boxes.js +285 -0
- package/dist/geometry/kinds/boxes.js.map +1 -0
- package/dist/geometry/kinds/channels.d.ts +72 -0
- package/dist/geometry/kinds/channels.d.ts.map +1 -0
- package/dist/geometry/kinds/channels.js +148 -0
- package/dist/geometry/kinds/channels.js.map +1 -0
- package/dist/geometry/kinds/containers.d.ts +54 -0
- package/dist/geometry/kinds/containers.d.ts.map +1 -0
- package/dist/geometry/kinds/containers.js +268 -0
- package/dist/geometry/kinds/containers.js.map +1 -0
- package/dist/geometry/kinds/curves.d.ts +53 -0
- package/dist/geometry/kinds/curves.d.ts.map +1 -0
- package/dist/geometry/kinds/curves.js +110 -0
- package/dist/geometry/kinds/curves.js.map +1 -0
- package/dist/geometry/kinds/cycles.d.ts +52 -0
- package/dist/geometry/kinds/cycles.d.ts.map +1 -0
- package/dist/geometry/kinds/cycles.js +158 -0
- package/dist/geometry/kinds/cycles.js.map +1 -0
- package/dist/geometry/kinds/elliott.d.ts +73 -0
- package/dist/geometry/kinds/elliott.d.ts.map +1 -0
- package/dist/geometry/kinds/elliott.js +116 -0
- package/dist/geometry/kinds/elliott.js.map +1 -0
- package/dist/geometry/kinds/fibonacci.d.ts +166 -0
- package/dist/geometry/kinds/fibonacci.d.ts.map +1 -0
- package/dist/geometry/kinds/fibonacci.js +458 -0
- package/dist/geometry/kinds/fibonacci.js.map +1 -0
- package/dist/geometry/kinds/freehand.d.ts +53 -0
- package/dist/geometry/kinds/freehand.d.ts.map +1 -0
- package/dist/geometry/kinds/freehand.js +115 -0
- package/dist/geometry/kinds/freehand.js.map +1 -0
- package/dist/geometry/kinds/gann.d.ts +63 -0
- package/dist/geometry/kinds/gann.d.ts.map +1 -0
- package/dist/geometry/kinds/gann.js +153 -0
- package/dist/geometry/kinds/gann.js.map +1 -0
- package/dist/geometry/kinds/lines.d.ts +90 -0
- package/dist/geometry/kinds/lines.d.ts.map +1 -0
- package/dist/geometry/kinds/lines.js +201 -0
- package/dist/geometry/kinds/lines.js.map +1 -0
- package/dist/geometry/kinds/marker.d.ts +21 -0
- package/dist/geometry/kinds/marker.d.ts.map +1 -0
- package/dist/geometry/kinds/marker.js +47 -0
- package/dist/geometry/kinds/marker.js.map +1 -0
- package/dist/geometry/kinds/patterns.d.ts +85 -0
- package/dist/geometry/kinds/patterns.d.ts.map +1 -0
- package/dist/geometry/kinds/patterns.js +133 -0
- package/dist/geometry/kinds/patterns.js.map +1 -0
- package/dist/geometry/kinds/pitchforks.d.ts +36 -0
- package/dist/geometry/kinds/pitchforks.d.ts.map +1 -0
- package/dist/geometry/kinds/pitchforks.js +109 -0
- package/dist/geometry/kinds/pitchforks.js.map +1 -0
- package/dist/geometry/project.d.ts +50 -0
- package/dist/geometry/project.d.ts.map +1 -0
- package/dist/geometry/project.js +62 -0
- package/dist/geometry/project.js.map +1 -0
- package/dist/geometry/types.d.ts +146 -0
- package/dist/geometry/types.d.ts.map +1 -0
- package/dist/geometry/types.js +4 -0
- package/dist/geometry/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
//
|
|
4
|
+
// Elliott-wave geometry moved from the canvas2d adapter's per-kind
|
|
5
|
+
// renderers
|
|
6
|
+
// examples/canvas2d-adapter/src/render/draw/{elliottImpulseWave,
|
|
7
|
+
// elliottCorrectionWave,elliottTriangleWave,elliottDoubleCombo,
|
|
8
|
+
// elliottTripleCombo}.ts.
|
|
9
|
+
// The originating math is invinite's elliott-wave tools (commit
|
|
10
|
+
// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite); re-licensed
|
|
11
|
+
// MIT for chartlang.
|
|
12
|
+
import { namedPolylinePrimitives } from "../_lib/namedPolyline.js";
|
|
13
|
+
import { worldPointToPixel } from "../project.js";
|
|
14
|
+
const ELLIOTT_DEFAULT_COLOR = "#14b8a6";
|
|
15
|
+
const IMPULSE_LABELS = ["1", "2", "3", "4", "5"];
|
|
16
|
+
const CORRECTION_LABELS = ["A", "B", "C"];
|
|
17
|
+
const TRIANGLE_LABELS = ["a", "b", "c", "d", "e"];
|
|
18
|
+
const DOUBLE_COMBO_LABELS = ["S", "W", "x1", "X", "x2", "Yi", "Y"];
|
|
19
|
+
const TRIPLE_COMBO_LABELS = ["S", "W", "X1", "Y", "X2", "Zi", "Z"];
|
|
20
|
+
/**
|
|
21
|
+
* Shared elliott-wave decomposer: project the anchors, choose
|
|
22
|
+
* `state.labels` when present and length-matching (else `defaults`), and
|
|
23
|
+
* emit a labelled open polyline. The teal default colour is applied
|
|
24
|
+
* unless `style.color` overrides it — mirroring the source's
|
|
25
|
+
* `{ color: "#14b8a6", ...state.style }` spread.
|
|
26
|
+
*/
|
|
27
|
+
function decomposeElliott(points, labels, defaults, style) {
|
|
28
|
+
const resolved = labels !== undefined && labels.length === points.length ? labels : defaults;
|
|
29
|
+
return namedPolylinePrimitives(points, resolved, { color: ELLIOTT_DEFAULT_COLOR, ...style });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Decompose an `elliott-impulse-wave` drawing — a 4-leg labelled open
|
|
33
|
+
* polyline through the 5 anchors (1-2-3-4-5). `state.labels` overrides
|
|
34
|
+
* the default `["1","2","3","4","5"]` when present and length-matching.
|
|
35
|
+
*
|
|
36
|
+
* @since 1.3
|
|
37
|
+
* @stable
|
|
38
|
+
* @example
|
|
39
|
+
* declare const s: ElliottImpulseWaveState;
|
|
40
|
+
* declare const v: Viewport;
|
|
41
|
+
* const prims = decomposeElliottImpulseWave(s, v);
|
|
42
|
+
* void prims;
|
|
43
|
+
*/
|
|
44
|
+
export function decomposeElliottImpulseWave(state, view) {
|
|
45
|
+
const points = state.anchors.map((p) => worldPointToPixel(p, view));
|
|
46
|
+
return decomposeElliott(points, state.labels, IMPULSE_LABELS, state.style);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Decompose an `elliott-correction-wave` drawing — a 2-leg labelled open
|
|
50
|
+
* polyline through the 3 anchors (A-B-C). `state.labels` overrides the
|
|
51
|
+
* default `["A","B","C"]` when present and length-matching.
|
|
52
|
+
*
|
|
53
|
+
* @since 1.3
|
|
54
|
+
* @stable
|
|
55
|
+
* @example
|
|
56
|
+
* declare const s: ElliottCorrectionWaveState;
|
|
57
|
+
* declare const v: Viewport;
|
|
58
|
+
* const prims = decomposeElliottCorrectionWave(s, v);
|
|
59
|
+
* void prims;
|
|
60
|
+
*/
|
|
61
|
+
export function decomposeElliottCorrectionWave(state, view) {
|
|
62
|
+
const points = state.anchors.map((p) => worldPointToPixel(p, view));
|
|
63
|
+
return decomposeElliott(points, state.labels, CORRECTION_LABELS, state.style);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Decompose an `elliott-triangle-wave` drawing — a 4-leg labelled open
|
|
67
|
+
* polyline through the 5 anchors (a-b-c-d-e). `state.labels` overrides
|
|
68
|
+
* the default `["a","b","c","d","e"]` when present and length-matching.
|
|
69
|
+
*
|
|
70
|
+
* @since 1.3
|
|
71
|
+
* @stable
|
|
72
|
+
* @example
|
|
73
|
+
* declare const s: ElliottTriangleWaveState;
|
|
74
|
+
* declare const v: Viewport;
|
|
75
|
+
* const prims = decomposeElliottTriangleWave(s, v);
|
|
76
|
+
* void prims;
|
|
77
|
+
*/
|
|
78
|
+
export function decomposeElliottTriangleWave(state, view) {
|
|
79
|
+
const points = state.anchors.map((p) => worldPointToPixel(p, view));
|
|
80
|
+
return decomposeElliott(points, state.labels, TRIANGLE_LABELS, state.style);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decompose an `elliott-double-combo` drawing — a 6-leg labelled open
|
|
84
|
+
* polyline through the 7 anchors. `state.labels` overrides the default
|
|
85
|
+
* `["S","W","x1","X","x2","Yi","Y"]` when present and length-matching.
|
|
86
|
+
*
|
|
87
|
+
* @since 1.3
|
|
88
|
+
* @stable
|
|
89
|
+
* @example
|
|
90
|
+
* declare const s: ElliottDoubleComboState;
|
|
91
|
+
* declare const v: Viewport;
|
|
92
|
+
* const prims = decomposeElliottDoubleCombo(s, v);
|
|
93
|
+
* void prims;
|
|
94
|
+
*/
|
|
95
|
+
export function decomposeElliottDoubleCombo(state, view) {
|
|
96
|
+
const points = state.anchors.map((p) => worldPointToPixel(p, view));
|
|
97
|
+
return decomposeElliott(points, state.labels, DOUBLE_COMBO_LABELS, state.style);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Decompose an `elliott-triple-combo` drawing — a 6-leg labelled open
|
|
101
|
+
* polyline through the 7 anchors. `state.labels` overrides the default
|
|
102
|
+
* `["S","W","X1","Y","X2","Zi","Z"]` when present and length-matching.
|
|
103
|
+
*
|
|
104
|
+
* @since 1.3
|
|
105
|
+
* @stable
|
|
106
|
+
* @example
|
|
107
|
+
* declare const s: ElliottTripleComboState;
|
|
108
|
+
* declare const v: Viewport;
|
|
109
|
+
* const prims = decomposeElliottTripleCombo(s, v);
|
|
110
|
+
* void prims;
|
|
111
|
+
*/
|
|
112
|
+
export function decomposeElliottTripleCombo(state, view) {
|
|
113
|
+
const points = state.anchors.map((p) => worldPointToPixel(p, view));
|
|
114
|
+
return decomposeElliott(points, state.labels, TRIPLE_COMBO_LABELS, state.style);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=elliott.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elliott.js","sourceRoot":"","sources":["../../../src/geometry/kinds/elliott.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Elliott-wave geometry moved from the canvas2d adapter's per-kind\n// renderers\n// examples/canvas2d-adapter/src/render/draw/{elliottImpulseWave,\n// elliottCorrectionWave,elliottTriangleWave,elliottDoubleCombo,\n// elliottTripleCombo}.ts.\n// The originating math is invinite's elliott-wave tools (commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite); re-licensed\n// MIT for chartlang.\n\nimport type {\n ElliottCorrectionWaveState,\n ElliottDoubleComboState,\n ElliottImpulseWaveState,\n ElliottTriangleWaveState,\n ElliottTripleComboState,\n LineDrawStyle,\n} from \"@invinite-org/chartlang-core\";\n\nimport { namedPolylinePrimitives } from \"../_lib/namedPolyline.js\";\nimport { worldPointToPixel } from \"../project.js\";\nimport type { DrawPrimitive, Point2, Viewport } from \"../types.js\";\n\nconst ELLIOTT_DEFAULT_COLOR = \"#14b8a6\";\n\nconst IMPULSE_LABELS: ReadonlyArray<string> = [\"1\", \"2\", \"3\", \"4\", \"5\"];\nconst CORRECTION_LABELS: ReadonlyArray<string> = [\"A\", \"B\", \"C\"];\nconst TRIANGLE_LABELS: ReadonlyArray<string> = [\"a\", \"b\", \"c\", \"d\", \"e\"];\nconst DOUBLE_COMBO_LABELS: ReadonlyArray<string> = [\"S\", \"W\", \"x1\", \"X\", \"x2\", \"Yi\", \"Y\"];\nconst TRIPLE_COMBO_LABELS: ReadonlyArray<string> = [\"S\", \"W\", \"X1\", \"Y\", \"X2\", \"Zi\", \"Z\"];\n\n/**\n * Shared elliott-wave decomposer: project the anchors, choose\n * `state.labels` when present and length-matching (else `defaults`), and\n * emit a labelled open polyline. The teal default colour is applied\n * unless `style.color` overrides it — mirroring the source's\n * `{ color: \"#14b8a6\", ...state.style }` spread.\n */\nfunction decomposeElliott(\n points: ReadonlyArray<Point2>,\n labels: ReadonlyArray<string> | undefined,\n defaults: ReadonlyArray<string>,\n style: LineDrawStyle,\n): ReadonlyArray<DrawPrimitive> {\n const resolved = labels !== undefined && labels.length === points.length ? labels : defaults;\n return namedPolylinePrimitives(points, resolved, { color: ELLIOTT_DEFAULT_COLOR, ...style });\n}\n\n/**\n * Decompose an `elliott-impulse-wave` drawing — a 4-leg labelled open\n * polyline through the 5 anchors (1-2-3-4-5). `state.labels` overrides\n * the default `[\"1\",\"2\",\"3\",\"4\",\"5\"]` when present and length-matching.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const s: ElliottImpulseWaveState;\n * declare const v: Viewport;\n * const prims = decomposeElliottImpulseWave(s, v);\n * void prims;\n */\nexport function decomposeElliottImpulseWave(\n state: ElliottImpulseWaveState,\n view: Viewport,\n): ReadonlyArray<DrawPrimitive> {\n const points = state.anchors.map((p) => worldPointToPixel(p, view));\n return decomposeElliott(points, state.labels, IMPULSE_LABELS, state.style);\n}\n\n/**\n * Decompose an `elliott-correction-wave` drawing — a 2-leg labelled open\n * polyline through the 3 anchors (A-B-C). `state.labels` overrides the\n * default `[\"A\",\"B\",\"C\"]` when present and length-matching.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const s: ElliottCorrectionWaveState;\n * declare const v: Viewport;\n * const prims = decomposeElliottCorrectionWave(s, v);\n * void prims;\n */\nexport function decomposeElliottCorrectionWave(\n state: ElliottCorrectionWaveState,\n view: Viewport,\n): ReadonlyArray<DrawPrimitive> {\n const points = state.anchors.map((p) => worldPointToPixel(p, view));\n return decomposeElliott(points, state.labels, CORRECTION_LABELS, state.style);\n}\n\n/**\n * Decompose an `elliott-triangle-wave` drawing — a 4-leg labelled open\n * polyline through the 5 anchors (a-b-c-d-e). `state.labels` overrides\n * the default `[\"a\",\"b\",\"c\",\"d\",\"e\"]` when present and length-matching.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const s: ElliottTriangleWaveState;\n * declare const v: Viewport;\n * const prims = decomposeElliottTriangleWave(s, v);\n * void prims;\n */\nexport function decomposeElliottTriangleWave(\n state: ElliottTriangleWaveState,\n view: Viewport,\n): ReadonlyArray<DrawPrimitive> {\n const points = state.anchors.map((p) => worldPointToPixel(p, view));\n return decomposeElliott(points, state.labels, TRIANGLE_LABELS, state.style);\n}\n\n/**\n * Decompose an `elliott-double-combo` drawing — a 6-leg labelled open\n * polyline through the 7 anchors. `state.labels` overrides the default\n * `[\"S\",\"W\",\"x1\",\"X\",\"x2\",\"Yi\",\"Y\"]` when present and length-matching.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const s: ElliottDoubleComboState;\n * declare const v: Viewport;\n * const prims = decomposeElliottDoubleCombo(s, v);\n * void prims;\n */\nexport function decomposeElliottDoubleCombo(\n state: ElliottDoubleComboState,\n view: Viewport,\n): ReadonlyArray<DrawPrimitive> {\n const points = state.anchors.map((p) => worldPointToPixel(p, view));\n return decomposeElliott(points, state.labels, DOUBLE_COMBO_LABELS, state.style);\n}\n\n/**\n * Decompose an `elliott-triple-combo` drawing — a 6-leg labelled open\n * polyline through the 7 anchors. `state.labels` overrides the default\n * `[\"S\",\"W\",\"X1\",\"Y\",\"X2\",\"Zi\",\"Z\"]` when present and length-matching.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const s: ElliottTripleComboState;\n * declare const v: Viewport;\n * const prims = decomposeElliottTripleCombo(s, v);\n * void prims;\n */\nexport function decomposeElliottTripleCombo(\n state: ElliottTripleComboState,\n view: Viewport,\n): ReadonlyArray<DrawPrimitive> {\n const points = state.anchors.map((p) => worldPointToPixel(p, view));\n return decomposeElliott(points, state.labels, TRIPLE_COMBO_LABELS, state.style);\n}\n"]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { FibChannelState, FibCirclesState, FibRetracementState, FibSpeedArcsState, FibSpeedFanState, FibSpiralState, FibTimeZoneState, FibTrendExtensionState, FibTrendTimeState, FibWedgeState } from "@invinite-org/chartlang-core";
|
|
2
|
+
import type { DrawPrimitive, Viewport } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Decompose a `fib-retracement` drawing — one horizontal level line per
|
|
5
|
+
* Fibonacci ratio between `anchors[0].price` and `anchors[1].price`,
|
|
6
|
+
* each honouring `style.extendLeft` / `style.extendRight` via
|
|
7
|
+
* {@link extendLineSegment}. `style.levels` overrides {@link FIB_LEVELS};
|
|
8
|
+
* `style.showLabels === true` appends a right-edge `formatLevel` label
|
|
9
|
+
* per rail.
|
|
10
|
+
*
|
|
11
|
+
* @since 1.3
|
|
12
|
+
* @stable
|
|
13
|
+
* @example
|
|
14
|
+
* declare const s: FibRetracementState;
|
|
15
|
+
* declare const v: Viewport;
|
|
16
|
+
* const prims = decomposeFibRetracement(s, v);
|
|
17
|
+
* void prims;
|
|
18
|
+
*/
|
|
19
|
+
export declare function decomposeFibRetracement(state: FibRetracementState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
20
|
+
/**
|
|
21
|
+
* Decompose a `fib-trend-extension` drawing — projects fib-ratio
|
|
22
|
+
* extensions from `anchors[2].price` using the A→B leg's price delta
|
|
23
|
+
* (`anchors[1].price − anchors[0].price`). Each projected price is one
|
|
24
|
+
* horizontal line from `timeToX(anchors[2].time)` rightward to the
|
|
25
|
+
* viewport edge. `style.levels` overrides {@link FIB_LEVELS};
|
|
26
|
+
* `showLabels` appends a label past the right edge.
|
|
27
|
+
*
|
|
28
|
+
* @since 1.3
|
|
29
|
+
* @stable
|
|
30
|
+
* @example
|
|
31
|
+
* declare const s: FibTrendExtensionState;
|
|
32
|
+
* declare const v: Viewport;
|
|
33
|
+
* const prims = decomposeFibTrendExtension(s, v);
|
|
34
|
+
* void prims;
|
|
35
|
+
*/
|
|
36
|
+
export declare function decomposeFibTrendExtension(state: FibTrendExtensionState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
37
|
+
/**
|
|
38
|
+
* Decompose a `fib-channel` drawing — one parallel rail per Fibonacci
|
|
39
|
+
* ratio: each rail translates the primary `(anchors[0], anchors[1])`
|
|
40
|
+
* line by `level · (anchors[2].y − anchors[0].y)` in pixel space.
|
|
41
|
+
* `style.levels` overrides {@link FIB_LEVELS}; `showLabels` appends a
|
|
42
|
+
* label at the rail's right endpoint.
|
|
43
|
+
*
|
|
44
|
+
* @since 1.3
|
|
45
|
+
* @stable
|
|
46
|
+
* @example
|
|
47
|
+
* declare const s: FibChannelState;
|
|
48
|
+
* declare const v: Viewport;
|
|
49
|
+
* const prims = decomposeFibChannel(s, v);
|
|
50
|
+
* void prims;
|
|
51
|
+
*/
|
|
52
|
+
export declare function decomposeFibChannel(state: FibChannelState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
53
|
+
/**
|
|
54
|
+
* Decompose a `fib-time-zone` drawing — vertical lines at fib-ratio
|
|
55
|
+
* spaced times `anchors[0].time + level · (anchors[1].time −
|
|
56
|
+
* anchors[0].time)`, each spanning the full viewport height.
|
|
57
|
+
* `style.levels` overrides {@link FIB_LEVELS}; `showLabels` appends a
|
|
58
|
+
* top-anchored label.
|
|
59
|
+
*
|
|
60
|
+
* @since 1.3
|
|
61
|
+
* @stable
|
|
62
|
+
* @example
|
|
63
|
+
* declare const s: FibTimeZoneState;
|
|
64
|
+
* declare const v: Viewport;
|
|
65
|
+
* const prims = decomposeFibTimeZone(s, v);
|
|
66
|
+
* void prims;
|
|
67
|
+
*/
|
|
68
|
+
export declare function decomposeFibTimeZone(state: FibTimeZoneState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
69
|
+
/**
|
|
70
|
+
* Decompose a `fib-trend-time` drawing — vertical lines at fib-spaced
|
|
71
|
+
* times anchored at `anchors[2]`: `t = C.time + level · (B.time −
|
|
72
|
+
* A.time)`. Mirrors `fib-time-zone` but uses the A→B leg as the
|
|
73
|
+
* time-delta unit projected from C. `showLabels` appends a top label.
|
|
74
|
+
*
|
|
75
|
+
* @since 1.3
|
|
76
|
+
* @stable
|
|
77
|
+
* @example
|
|
78
|
+
* declare const s: FibTrendTimeState;
|
|
79
|
+
* declare const v: Viewport;
|
|
80
|
+
* const prims = decomposeFibTrendTime(s, v);
|
|
81
|
+
* void prims;
|
|
82
|
+
*/
|
|
83
|
+
export declare function decomposeFibTrendTime(state: FibTrendTimeState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
84
|
+
/**
|
|
85
|
+
* Decompose a `fib-wedge` drawing — a fan of rays from `anchors[0]` (the
|
|
86
|
+
* pivot) at fib-ratio-interpolated angles between the pivot→`anchors[1]`
|
|
87
|
+
* and pivot→`anchors[2]` direction vectors. Ray length is
|
|
88
|
+
* `max(pxWidth, pxHeight) · 2` so strokes always exit the viewport; a
|
|
89
|
+
* degenerate (zero-magnitude) direction skips that level. `showLabels`
|
|
90
|
+
* appends a label a quarter of the way along each ray.
|
|
91
|
+
*
|
|
92
|
+
* @since 1.3
|
|
93
|
+
* @stable
|
|
94
|
+
* @example
|
|
95
|
+
* declare const s: FibWedgeState;
|
|
96
|
+
* declare const v: Viewport;
|
|
97
|
+
* const prims = decomposeFibWedge(s, v);
|
|
98
|
+
* void prims;
|
|
99
|
+
*/
|
|
100
|
+
export declare function decomposeFibWedge(state: FibWedgeState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
101
|
+
/**
|
|
102
|
+
* Decompose a `fib-speed-fan` drawing — a fan of rays from `anchors[0]`.
|
|
103
|
+
* Each ray scales the A→B y-delta by a fib ratio while keeping the
|
|
104
|
+
* x-delta constant. Ray length is `max(pxWidth, pxHeight) · 2`; a
|
|
105
|
+
* degenerate direction skips that level. `showLabels` appends a label a
|
|
106
|
+
* quarter of the way along each ray.
|
|
107
|
+
*
|
|
108
|
+
* @since 1.3
|
|
109
|
+
* @stable
|
|
110
|
+
* @example
|
|
111
|
+
* declare const s: FibSpeedFanState;
|
|
112
|
+
* declare const v: Viewport;
|
|
113
|
+
* const prims = decomposeFibSpeedFan(s, v);
|
|
114
|
+
* void prims;
|
|
115
|
+
*/
|
|
116
|
+
export declare function decomposeFibSpeedFan(state: FibSpeedFanState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
117
|
+
/**
|
|
118
|
+
* Decompose a `fib-speed-arcs` drawing — concentric full circles centred
|
|
119
|
+
* at `anchors[0]` with radii `level · R₀`, `R₀ = |anchors[1] −
|
|
120
|
+
* anchors[0]|` in pixel space. Always-full-circle (half-disk variant
|
|
121
|
+
* deferred). `showLabels` appends a label to the right of each arc.
|
|
122
|
+
*
|
|
123
|
+
* @since 1.3
|
|
124
|
+
* @stable
|
|
125
|
+
* @example
|
|
126
|
+
* declare const s: FibSpeedArcsState;
|
|
127
|
+
* declare const v: Viewport;
|
|
128
|
+
* const prims = decomposeFibSpeedArcs(s, v);
|
|
129
|
+
* void prims;
|
|
130
|
+
*/
|
|
131
|
+
export declare function decomposeFibSpeedArcs(state: FibSpeedArcsState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
132
|
+
/**
|
|
133
|
+
* Decompose a `fib-circles` drawing — concentric full circles centred at
|
|
134
|
+
* `anchors[0]` with radii `level · R₀`, `R₀ = |anchors[1] − anchors[0]|`
|
|
135
|
+
* (the radius-point distance) in pixel space. Uses fib ratios (not the
|
|
136
|
+
* integer Fibonacci sequence). `showLabels` appends a label to the right
|
|
137
|
+
* of each circle.
|
|
138
|
+
*
|
|
139
|
+
* @since 1.3
|
|
140
|
+
* @stable
|
|
141
|
+
* @example
|
|
142
|
+
* declare const s: FibCirclesState;
|
|
143
|
+
* declare const v: Viewport;
|
|
144
|
+
* const prims = decomposeFibCircles(s, v);
|
|
145
|
+
* void prims;
|
|
146
|
+
*/
|
|
147
|
+
export declare function decomposeFibCircles(state: FibCirclesState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
148
|
+
/**
|
|
149
|
+
* Decompose a `fib-spiral` drawing — a chained cubic-Bezier
|
|
150
|
+
* approximation of a golden spiral as one open polyline. Each
|
|
151
|
+
* quarter-turn is one cubic Bezier with the classical `k ≈ 0.5523` arc
|
|
152
|
+
* factor; the radius shrinks by `1/φ` per quarter. Centre =
|
|
153
|
+
* `anchors[0]`; initial radius `|anchors[1] − anchors[0]|` in pixel
|
|
154
|
+
* space. A zero initial radius returns `[]` (matching the source's
|
|
155
|
+
* `if (r === 0) return`).
|
|
156
|
+
*
|
|
157
|
+
* @since 1.3
|
|
158
|
+
* @stable
|
|
159
|
+
* @example
|
|
160
|
+
* declare const s: FibSpiralState;
|
|
161
|
+
* declare const v: Viewport;
|
|
162
|
+
* const prims = decomposeFibSpiral(s, v);
|
|
163
|
+
* void prims;
|
|
164
|
+
*/
|
|
165
|
+
export declare function decomposeFibSpiral(state: FibSpiralState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
166
|
+
//# sourceMappingURL=fibonacci.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibonacci.d.ts","sourceRoot":"","sources":["../../../src/geometry/kinds/fibonacci.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACR,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EAChB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,aAAa,EAAU,QAAQ,EAAE,MAAM,aAAa,CAAC;AA0BnE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CA+B9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACtC,KAAK,EAAE,sBAAsB,EAC7B,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAyB9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CA0B9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAwB9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAwB9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAsC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAkC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAO9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAO9B;AAoDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAiC9B"}
|