@invinite-org/chartlang-adapter-kit 1.3.0 → 1.5.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 +68 -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 +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interaction/domWiring.d.ts +90 -0
- package/dist/interaction/domWiring.d.ts.map +1 -0
- package/dist/interaction/domWiring.js +113 -0
- package/dist/interaction/domWiring.js.map +1 -0
- package/dist/interaction/index.d.ts +5 -0
- package/dist/interaction/index.d.ts.map +1 -0
- package/dist/interaction/index.js +5 -0
- package/dist/interaction/index.js.map +1 -0
- package/dist/interaction/viewController.d.ts +120 -0
- package/dist/interaction/viewController.d.ts.map +1 -0
- package/dist/interaction/viewController.js +112 -0
- package/dist/interaction/viewController.js.map +1 -0
- package/package.json +8 -1
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
// Stroke + fill semantics ported from the per-tool style application
|
|
5
|
+
// in invinite/src/components/trading-chart/tools/rectangle-tool.ts,
|
|
6
|
+
// triangle-tool.ts, rotated-rectangle-tool.ts (commit
|
|
7
|
+
// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite). Re-licensed
|
|
8
|
+
// MIT for chartlang.
|
|
9
|
+
import { dashPattern } from "./dash.js";
|
|
10
|
+
const DEFAULT_STROKE = "#000000";
|
|
11
|
+
const DEFAULT_LINE_WIDTH = 1;
|
|
12
|
+
const DEFAULT_FILL_ALPHA = 1;
|
|
13
|
+
/**
|
|
14
|
+
* Resolved {@link ShapeStyle} → IR styles. `stroke` is always present
|
|
15
|
+
* (defaults `"#000000"` / `1` / solid); `fill` is present only when the
|
|
16
|
+
* source `style.fill` is set, with `alpha` defaulting to `1`. The
|
|
17
|
+
* box / shape decomposers map this straight onto a `polyline` / `arc`
|
|
18
|
+
* primitive's `stroke` / `fill`. Pure — no `ctx`.
|
|
19
|
+
*
|
|
20
|
+
* @since 1.3
|
|
21
|
+
* @stable
|
|
22
|
+
* @example
|
|
23
|
+
* const r = resolveShapeStyle({ stroke: "#3b82f6", fill: "#dbeafe", fillAlpha: 0.4 });
|
|
24
|
+
* // r.stroke.color === "#3b82f6"; r.fill?.alpha === 0.4
|
|
25
|
+
* void r;
|
|
26
|
+
*/
|
|
27
|
+
export function resolveShapeStyle(style) {
|
|
28
|
+
const stroke = {
|
|
29
|
+
color: style.stroke ?? DEFAULT_STROKE,
|
|
30
|
+
width: style.lineWidth ?? DEFAULT_LINE_WIDTH,
|
|
31
|
+
dash: dashPattern(style.lineStyle ?? "solid"),
|
|
32
|
+
};
|
|
33
|
+
if (style.fill === undefined) {
|
|
34
|
+
return { stroke };
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
stroke,
|
|
38
|
+
fill: { color: style.fill, alpha: style.fillAlpha ?? DEFAULT_FILL_ALPHA },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=shapeStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapeStyle.js","sourceRoot":"","sources":["../../../src/geometry/_lib/shapeStyle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,sDAAsD;AACtD,qEAAqE;AACrE,qBAAqB;AAKrB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IAI/C,MAAM,MAAM,GAAgB;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACrC,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,kBAAkB;QAC5C,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;KAChD,CAAC;IACF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IACtB,CAAC;IACD,OAAO;QACH,MAAM;QACN,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,kBAAkB,EAAE;KAC5E,CAAC;AACN,CAAC","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// Stroke + fill semantics ported from the per-tool style application\n// in invinite/src/components/trading-chart/tools/rectangle-tool.ts,\n// triangle-tool.ts, rotated-rectangle-tool.ts (commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite). Re-licensed\n// MIT for chartlang.\n\nimport type { ShapeStyle } from \"@invinite-org/chartlang-core\";\n\nimport type { FillStyle, StrokeStyle } from \"../types.js\";\nimport { dashPattern } from \"./dash.js\";\n\nconst DEFAULT_STROKE = \"#000000\";\nconst DEFAULT_LINE_WIDTH = 1;\nconst DEFAULT_FILL_ALPHA = 1;\n\n/**\n * Resolved {@link ShapeStyle} → IR styles. `stroke` is always present\n * (defaults `\"#000000\"` / `1` / solid); `fill` is present only when the\n * source `style.fill` is set, with `alpha` defaulting to `1`. The\n * box / shape decomposers map this straight onto a `polyline` / `arc`\n * primitive's `stroke` / `fill`. Pure — no `ctx`.\n *\n * @since 1.3\n * @stable\n * @example\n * const r = resolveShapeStyle({ stroke: \"#3b82f6\", fill: \"#dbeafe\", fillAlpha: 0.4 });\n * // r.stroke.color === \"#3b82f6\"; r.fill?.alpha === 0.4\n * void r;\n */\nexport function resolveShapeStyle(style: ShapeStyle): {\n readonly stroke: StrokeStyle;\n readonly fill?: FillStyle;\n} {\n const stroke: StrokeStyle = {\n color: style.stroke ?? DEFAULT_STROKE,\n width: style.lineWidth ?? DEFAULT_LINE_WIDTH,\n dash: dashPattern(style.lineStyle ?? \"solid\"),\n };\n if (style.fill === undefined) {\n return { stroke };\n }\n return {\n stroke,\n fill: { color: style.fill, alpha: style.fillAlpha ?? DEFAULT_FILL_ALPHA },\n };\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { StrokeStyle } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The line-style inputs every line-family decomposer reads off its
|
|
4
|
+
* drawing state — the structural shape shared by `lines`, `curves`,
|
|
5
|
+
* `channels`, and `cycles`.
|
|
6
|
+
*
|
|
7
|
+
* @since 1.3
|
|
8
|
+
* @stable
|
|
9
|
+
* @example
|
|
10
|
+
* const style: LineStyleInput = { color: "#000000", lineStyle: "dashed" };
|
|
11
|
+
* void style;
|
|
12
|
+
*/
|
|
13
|
+
export type LineStyleInput = {
|
|
14
|
+
readonly color?: string | undefined;
|
|
15
|
+
readonly lineWidth?: number | undefined;
|
|
16
|
+
readonly lineStyle?: "solid" | "dashed" | "dotted" | undefined;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a {@link LineStyleInput} into a {@link StrokeStyle}, applying
|
|
20
|
+
* the family defaults: colour falls back to `defaultColor` (black for
|
|
21
|
+
* most kinds; the `cycles` decomposers pass their own accent), width to
|
|
22
|
+
* `1`, and the dash array is derived from `lineStyle` via
|
|
23
|
+
* {@link dashPattern}. Extracted so the four line-family `kinds/` files
|
|
24
|
+
* share one resolver instead of byte-identical copies.
|
|
25
|
+
*
|
|
26
|
+
* @since 1.3
|
|
27
|
+
* @stable
|
|
28
|
+
* @example
|
|
29
|
+
* const s = strokeOf({ lineStyle: "dashed" });
|
|
30
|
+
* // { color: "#000000", width: 1, dash: [6, 4] }
|
|
31
|
+
* void s;
|
|
32
|
+
*/
|
|
33
|
+
export declare function strokeOf(style: LineStyleInput, defaultColor?: string): StrokeStyle;
|
|
34
|
+
//# sourceMappingURL=strokeStyle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strokeStyle.d.ts","sourceRoot":"","sources":["../../../src/geometry/_lib/strokeStyle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,SAAY,GAAG,WAAW,CAMrF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
import { dashPattern } from "./dash.js";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a {@link LineStyleInput} into a {@link StrokeStyle}, applying
|
|
6
|
+
* the family defaults: colour falls back to `defaultColor` (black for
|
|
7
|
+
* most kinds; the `cycles` decomposers pass their own accent), width to
|
|
8
|
+
* `1`, and the dash array is derived from `lineStyle` via
|
|
9
|
+
* {@link dashPattern}. Extracted so the four line-family `kinds/` files
|
|
10
|
+
* share one resolver instead of byte-identical copies.
|
|
11
|
+
*
|
|
12
|
+
* @since 1.3
|
|
13
|
+
* @stable
|
|
14
|
+
* @example
|
|
15
|
+
* const s = strokeOf({ lineStyle: "dashed" });
|
|
16
|
+
* // { color: "#000000", width: 1, dash: [6, 4] }
|
|
17
|
+
* void s;
|
|
18
|
+
*/
|
|
19
|
+
export function strokeOf(style, defaultColor = "#000000") {
|
|
20
|
+
return {
|
|
21
|
+
color: style.color ?? defaultColor,
|
|
22
|
+
width: style.lineWidth ?? 1,
|
|
23
|
+
dash: dashPattern(style.lineStyle ?? "solid"),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=strokeStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strokeStyle.js","sourceRoot":"","sources":["../../../src/geometry/_lib/strokeStyle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAmBxC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAqB,EAAE,YAAY,GAAG,SAAS;IACpE,OAAO;QACH,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,YAAY;QAClC,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;QAC3B,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;KAChD,CAAC;AACN,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { StrokeStyle } from \"../types.js\";\nimport { dashPattern } from \"./dash.js\";\n\n/**\n * The line-style inputs every line-family decomposer reads off its\n * drawing state — the structural shape shared by `lines`, `curves`,\n * `channels`, and `cycles`.\n *\n * @since 1.3\n * @stable\n * @example\n * const style: LineStyleInput = { color: \"#000000\", lineStyle: \"dashed\" };\n * void style;\n */\nexport type LineStyleInput = {\n readonly color?: string | undefined;\n readonly lineWidth?: number | undefined;\n readonly lineStyle?: \"solid\" | \"dashed\" | \"dotted\" | undefined;\n};\n\n/**\n * Resolve a {@link LineStyleInput} into a {@link StrokeStyle}, applying\n * the family defaults: colour falls back to `defaultColor` (black for\n * most kinds; the `cycles` decomposers pass their own accent), width to\n * `1`, and the dash array is derived from `lineStyle` via\n * {@link dashPattern}. Extracted so the four line-family `kinds/` files\n * share one resolver instead of byte-identical copies.\n *\n * @since 1.3\n * @stable\n * @example\n * const s = strokeOf({ lineStyle: \"dashed\" });\n * // { color: \"#000000\", width: 1, dash: [6, 4] }\n * void s;\n */\nexport function strokeOf(style: LineStyleInput, defaultColor = \"#000000\"): StrokeStyle {\n return {\n color: style.color ?? defaultColor,\n width: style.lineWidth ?? 1,\n dash: dashPattern(style.lineStyle ?? \"solid\"),\n };\n}\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { TextOpts } from "@invinite-org/chartlang-core";
|
|
2
|
+
/**
|
|
3
|
+
* Pixel size each named {@link TextOpts.size} keyword maps to.
|
|
4
|
+
* `"normal"` (12 px) is the default when `size` is omitted.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.3
|
|
7
|
+
* @stable
|
|
8
|
+
* @example
|
|
9
|
+
* const px = SIZE_TO_PX.normal; // 12
|
|
10
|
+
* void px;
|
|
11
|
+
*/
|
|
12
|
+
export declare const SIZE_TO_PX: Readonly<Record<NonNullable<TextOpts["size"]>, number>>;
|
|
13
|
+
/**
|
|
14
|
+
* Map each {@link TextOpts.halign} keyword to the IR `text` primitive's
|
|
15
|
+
* `align` value.
|
|
16
|
+
*
|
|
17
|
+
* @since 1.3
|
|
18
|
+
* @stable
|
|
19
|
+
* @example
|
|
20
|
+
* const a = HALIGN_TO_TEXTALIGN.center; // "center"
|
|
21
|
+
* void a;
|
|
22
|
+
*/
|
|
23
|
+
export declare const HALIGN_TO_TEXTALIGN: Readonly<Record<NonNullable<TextOpts["halign"]>, "left" | "center" | "right">>;
|
|
24
|
+
/**
|
|
25
|
+
* Map each {@link TextOpts.valign} keyword to the IR `text` primitive's
|
|
26
|
+
* `baseline` value.
|
|
27
|
+
*
|
|
28
|
+
* @since 1.3
|
|
29
|
+
* @stable
|
|
30
|
+
* @example
|
|
31
|
+
* const b = VALIGN_TO_TEXTBASELINE.middle; // "middle"
|
|
32
|
+
* void b;
|
|
33
|
+
*/
|
|
34
|
+
export declare const VALIGN_TO_TEXTBASELINE: Readonly<Record<NonNullable<TextOpts["valign"]>, "top" | "middle" | "bottom">>;
|
|
35
|
+
/**
|
|
36
|
+
* Concrete text-state derived from {@link TextOpts}, mapped directly
|
|
37
|
+
* onto the IR `text` primitive's `font` / `align` / `baseline` /
|
|
38
|
+
* `color` fields.
|
|
39
|
+
*
|
|
40
|
+
* @since 1.3
|
|
41
|
+
* @stable
|
|
42
|
+
* @example
|
|
43
|
+
* const s: ResolvedTextOpts = {
|
|
44
|
+
* font: "12px sans-serif",
|
|
45
|
+
* align: "center",
|
|
46
|
+
* baseline: "middle",
|
|
47
|
+
* color: "#000000",
|
|
48
|
+
* };
|
|
49
|
+
* void s;
|
|
50
|
+
*/
|
|
51
|
+
export type ResolvedTextOpts = {
|
|
52
|
+
readonly font: string;
|
|
53
|
+
readonly align: "left" | "center" | "right";
|
|
54
|
+
readonly baseline: "top" | "middle" | "bottom";
|
|
55
|
+
readonly color: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a {@link TextOpts} bag into the four IR text-state values.
|
|
59
|
+
* Missing fields fall back to `"normal"` size (12 px), `"center"`
|
|
60
|
+
* halign, `"middle"` valign, and `"#000000"` color. Pure — no `ctx`.
|
|
61
|
+
*
|
|
62
|
+
* @since 1.3
|
|
63
|
+
* @stable
|
|
64
|
+
* @example
|
|
65
|
+
* const r = resolveTextOpts({ size: "large", color: "#10b981" });
|
|
66
|
+
* // r.font === "16px sans-serif"
|
|
67
|
+
* void r;
|
|
68
|
+
*/
|
|
69
|
+
export declare function resolveTextOpts(opts: TextOpts): ResolvedTextOpts;
|
|
70
|
+
//# sourceMappingURL=textStyle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textStyle.d.ts","sourceRoot":"","sources":["../../../src/geometry/_lib/textStyle.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAI7D;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAM9E,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CACtC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAKvE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CACzC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAKvE,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAQhE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
// `TextOpts` → text-state derivation ported from
|
|
5
|
+
// invinite/src/components/trading-chart/tools/text-tool.ts,
|
|
6
|
+
// invinite/src/components/trading-chart/tools/marker-tool.ts,
|
|
7
|
+
// commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
|
|
8
|
+
// Re-licensed MIT for chartlang.
|
|
9
|
+
const DEFAULT_COLOR = "#000000";
|
|
10
|
+
/**
|
|
11
|
+
* Pixel size each named {@link TextOpts.size} keyword maps to.
|
|
12
|
+
* `"normal"` (12 px) is the default when `size` is omitted.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.3
|
|
15
|
+
* @stable
|
|
16
|
+
* @example
|
|
17
|
+
* const px = SIZE_TO_PX.normal; // 12
|
|
18
|
+
* void px;
|
|
19
|
+
*/
|
|
20
|
+
export const SIZE_TO_PX = {
|
|
21
|
+
tiny: 8,
|
|
22
|
+
small: 10,
|
|
23
|
+
normal: 12,
|
|
24
|
+
large: 16,
|
|
25
|
+
huge: 20,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Map each {@link TextOpts.halign} keyword to the IR `text` primitive's
|
|
29
|
+
* `align` value.
|
|
30
|
+
*
|
|
31
|
+
* @since 1.3
|
|
32
|
+
* @stable
|
|
33
|
+
* @example
|
|
34
|
+
* const a = HALIGN_TO_TEXTALIGN.center; // "center"
|
|
35
|
+
* void a;
|
|
36
|
+
*/
|
|
37
|
+
export const HALIGN_TO_TEXTALIGN = {
|
|
38
|
+
left: "left",
|
|
39
|
+
center: "center",
|
|
40
|
+
right: "right",
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Map each {@link TextOpts.valign} keyword to the IR `text` primitive's
|
|
44
|
+
* `baseline` value.
|
|
45
|
+
*
|
|
46
|
+
* @since 1.3
|
|
47
|
+
* @stable
|
|
48
|
+
* @example
|
|
49
|
+
* const b = VALIGN_TO_TEXTBASELINE.middle; // "middle"
|
|
50
|
+
* void b;
|
|
51
|
+
*/
|
|
52
|
+
export const VALIGN_TO_TEXTBASELINE = {
|
|
53
|
+
top: "top",
|
|
54
|
+
middle: "middle",
|
|
55
|
+
bottom: "bottom",
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a {@link TextOpts} bag into the four IR text-state values.
|
|
59
|
+
* Missing fields fall back to `"normal"` size (12 px), `"center"`
|
|
60
|
+
* halign, `"middle"` valign, and `"#000000"` color. Pure — no `ctx`.
|
|
61
|
+
*
|
|
62
|
+
* @since 1.3
|
|
63
|
+
* @stable
|
|
64
|
+
* @example
|
|
65
|
+
* const r = resolveTextOpts({ size: "large", color: "#10b981" });
|
|
66
|
+
* // r.font === "16px sans-serif"
|
|
67
|
+
* void r;
|
|
68
|
+
*/
|
|
69
|
+
export function resolveTextOpts(opts) {
|
|
70
|
+
const sizePx = SIZE_TO_PX[opts.size ?? "normal"];
|
|
71
|
+
return {
|
|
72
|
+
font: `${sizePx}px sans-serif`,
|
|
73
|
+
align: HALIGN_TO_TEXTALIGN[opts.halign ?? "center"],
|
|
74
|
+
baseline: VALIGN_TO_TEXTBASELINE[opts.valign ?? "middle"],
|
|
75
|
+
color: opts.color ?? DEFAULT_COLOR,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=textStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textStyle.js","sourceRoot":"","sources":["../../../src/geometry/_lib/textStyle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,iDAAiD;AACjD,8DAA8D;AAC9D,gEAAgE;AAChE,iEAAiE;AACjE,iCAAiC;AAIjC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAA4D;IAC/E,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAE5B;IACA,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAE/B;IACA,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACnB,CAAC;AAyBF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;IACjD,OAAO;QACH,IAAI,EAAE,GAAG,MAAM,eAAe;QAC9B,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;QACnD,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;QACzD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,aAAa;KACrC,CAAC;AACN,CAAC","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// `TextOpts` → text-state derivation ported from\n// invinite/src/components/trading-chart/tools/text-tool.ts,\n// invinite/src/components/trading-chart/tools/marker-tool.ts,\n// commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Re-licensed MIT for chartlang.\n\nimport type { TextOpts } from \"@invinite-org/chartlang-core\";\n\nconst DEFAULT_COLOR = \"#000000\";\n\n/**\n * Pixel size each named {@link TextOpts.size} keyword maps to.\n * `\"normal\"` (12 px) is the default when `size` is omitted.\n *\n * @since 1.3\n * @stable\n * @example\n * const px = SIZE_TO_PX.normal; // 12\n * void px;\n */\nexport const SIZE_TO_PX: Readonly<Record<NonNullable<TextOpts[\"size\"]>, number>> = {\n tiny: 8,\n small: 10,\n normal: 12,\n large: 16,\n huge: 20,\n};\n\n/**\n * Map each {@link TextOpts.halign} keyword to the IR `text` primitive's\n * `align` value.\n *\n * @since 1.3\n * @stable\n * @example\n * const a = HALIGN_TO_TEXTALIGN.center; // \"center\"\n * void a;\n */\nexport const HALIGN_TO_TEXTALIGN: Readonly<\n Record<NonNullable<TextOpts[\"halign\"]>, \"left\" | \"center\" | \"right\">\n> = {\n left: \"left\",\n center: \"center\",\n right: \"right\",\n};\n\n/**\n * Map each {@link TextOpts.valign} keyword to the IR `text` primitive's\n * `baseline` value.\n *\n * @since 1.3\n * @stable\n * @example\n * const b = VALIGN_TO_TEXTBASELINE.middle; // \"middle\"\n * void b;\n */\nexport const VALIGN_TO_TEXTBASELINE: Readonly<\n Record<NonNullable<TextOpts[\"valign\"]>, \"top\" | \"middle\" | \"bottom\">\n> = {\n top: \"top\",\n middle: \"middle\",\n bottom: \"bottom\",\n};\n\n/**\n * Concrete text-state derived from {@link TextOpts}, mapped directly\n * onto the IR `text` primitive's `font` / `align` / `baseline` /\n * `color` fields.\n *\n * @since 1.3\n * @stable\n * @example\n * const s: ResolvedTextOpts = {\n * font: \"12px sans-serif\",\n * align: \"center\",\n * baseline: \"middle\",\n * color: \"#000000\",\n * };\n * void s;\n */\nexport type ResolvedTextOpts = {\n readonly font: string;\n readonly align: \"left\" | \"center\" | \"right\";\n readonly baseline: \"top\" | \"middle\" | \"bottom\";\n readonly color: string;\n};\n\n/**\n * Resolve a {@link TextOpts} bag into the four IR text-state values.\n * Missing fields fall back to `\"normal\"` size (12 px), `\"center\"`\n * halign, `\"middle\"` valign, and `\"#000000\"` color. Pure — no `ctx`.\n *\n * @since 1.3\n * @stable\n * @example\n * const r = resolveTextOpts({ size: \"large\", color: \"#10b981\" });\n * // r.font === \"16px sans-serif\"\n * void r;\n */\nexport function resolveTextOpts(opts: TextOpts): ResolvedTextOpts {\n const sizePx = SIZE_TO_PX[opts.size ?? \"normal\"];\n return {\n font: `${sizePx}px sans-serif`,\n align: HALIGN_TO_TEXTALIGN[opts.halign ?? \"center\"],\n baseline: VALIGN_TO_TEXTBASELINE[opts.valign ?? \"middle\"],\n color: opts.color ?? DEFAULT_COLOR,\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DrawingEmission } from "../types.js";
|
|
2
|
+
import type { DrawPrimitive, Viewport } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Reduce a {@link DrawingEmission} to a flat, renderer-agnostic
|
|
5
|
+
* {@link DrawPrimitive} list against `view`. Pure — no `ctx`, no library
|
|
6
|
+
* types — so every adapter shares one geometry derivation and paints
|
|
7
|
+
* the result with its own sink.
|
|
8
|
+
*
|
|
9
|
+
* The switch is **exhaustive over all 63 `DrawingKind`s**: the 20 basic
|
|
10
|
+
* kinds (Task 1), the 20 curve / freehand / channel / fibonacci kinds
|
|
11
|
+
* (Task 2), and the 23 gann / pitchfork / pattern / elliott / cycle /
|
|
12
|
+
* container / table kinds (Task 3). The `default` arm is a `const
|
|
13
|
+
* _exhaustive: never` guard — it compiles only because every literal has
|
|
14
|
+
* a `case`, so adding a future `DrawingKind` to core fails `pnpm
|
|
15
|
+
* typecheck` here until a decomposer is added. `op: "remove"` is handled
|
|
16
|
+
* by each adapter's drawing-state map (this function operates on whatever
|
|
17
|
+
* `state` it is handed).
|
|
18
|
+
*
|
|
19
|
+
* @since 1.3
|
|
20
|
+
* @stable
|
|
21
|
+
* @example
|
|
22
|
+
* declare const e: DrawingEmission;
|
|
23
|
+
* declare const v: Viewport;
|
|
24
|
+
* const prims = decomposeDrawing(e, v);
|
|
25
|
+
* void prims;
|
|
26
|
+
*/
|
|
27
|
+
export declare function decomposeDrawing(e: DrawingEmission, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
28
|
+
//# sourceMappingURL=decompose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompose.d.ts","sourceRoot":"","sources":["../../src/geometry/decompose.ts"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAuEnD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,CAsIjG"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
import { decomposeArrow, decomposeArrowMarkDown, decomposeArrowMarkUp, decomposeArrowMarker, decomposeText, } from "./kinds/annotations.js";
|
|
4
|
+
import { decomposeCircle, decomposeEllipse, decomposeFillBetween, decomposePath, decomposePolyline, decomposeRectangle, decomposeRotatedRectangle, decomposeTriangle, } from "./kinds/boxes.js";
|
|
5
|
+
import { decomposeDisjointChannel, decomposeFlatTopBottom, decomposeRegressionTrend, decomposeTrendChannel, } from "./kinds/channels.js";
|
|
6
|
+
import { decomposeFrame, decomposeGroup, decomposeTable } from "./kinds/containers.js";
|
|
7
|
+
import { decomposeArc, decomposeCurve, decomposeDoubleCurve } from "./kinds/curves.js";
|
|
8
|
+
import { decomposeCyclicLines, decomposeSineLine, decomposeTimeCycles } from "./kinds/cycles.js";
|
|
9
|
+
import { decomposeElliottCorrectionWave, decomposeElliottDoubleCombo, decomposeElliottImpulseWave, decomposeElliottTriangleWave, decomposeElliottTripleCombo, } from "./kinds/elliott.js";
|
|
10
|
+
import { decomposeFibChannel, decomposeFibCircles, decomposeFibRetracement, decomposeFibSpeedArcs, decomposeFibSpeedFan, decomposeFibSpiral, decomposeFibTimeZone, decomposeFibTrendExtension, decomposeFibTrendTime, decomposeFibWedge, } from "./kinds/fibonacci.js";
|
|
11
|
+
import { decomposeBrush, decomposeHighlighter, decomposePen } from "./kinds/freehand.js";
|
|
12
|
+
import { decomposeGannBox, decomposeGannFan, decomposeGannSquare, decomposeGannSquareFixed, } from "./kinds/gann.js";
|
|
13
|
+
import { decomposeCrossLine, decomposeHorizontalLine, decomposeHorizontalRay, decomposeLine, decomposeTrendAngle, decomposeVerticalLine, } from "./kinds/lines.js";
|
|
14
|
+
import { decomposeMarker } from "./kinds/marker.js";
|
|
15
|
+
import { decomposeAbcdPattern, decomposeCypherPattern, decomposeHeadAndShoulders, decomposeThreeDrivesPattern, decomposeTrianglePattern, decomposeXabcdPattern, } from "./kinds/patterns.js";
|
|
16
|
+
import { decomposePitchfan, decomposePitchfork } from "./kinds/pitchforks.js";
|
|
17
|
+
/**
|
|
18
|
+
* Reduce a {@link DrawingEmission} to a flat, renderer-agnostic
|
|
19
|
+
* {@link DrawPrimitive} list against `view`. Pure — no `ctx`, no library
|
|
20
|
+
* types — so every adapter shares one geometry derivation and paints
|
|
21
|
+
* the result with its own sink.
|
|
22
|
+
*
|
|
23
|
+
* The switch is **exhaustive over all 63 `DrawingKind`s**: the 20 basic
|
|
24
|
+
* kinds (Task 1), the 20 curve / freehand / channel / fibonacci kinds
|
|
25
|
+
* (Task 2), and the 23 gann / pitchfork / pattern / elliott / cycle /
|
|
26
|
+
* container / table kinds (Task 3). The `default` arm is a `const
|
|
27
|
+
* _exhaustive: never` guard — it compiles only because every literal has
|
|
28
|
+
* a `case`, so adding a future `DrawingKind` to core fails `pnpm
|
|
29
|
+
* typecheck` here until a decomposer is added. `op: "remove"` is handled
|
|
30
|
+
* by each adapter's drawing-state map (this function operates on whatever
|
|
31
|
+
* `state` it is handed).
|
|
32
|
+
*
|
|
33
|
+
* @since 1.3
|
|
34
|
+
* @stable
|
|
35
|
+
* @example
|
|
36
|
+
* declare const e: DrawingEmission;
|
|
37
|
+
* declare const v: Viewport;
|
|
38
|
+
* const prims = decomposeDrawing(e, v);
|
|
39
|
+
* void prims;
|
|
40
|
+
*/
|
|
41
|
+
export function decomposeDrawing(e, view) {
|
|
42
|
+
switch (e.drawingKind) {
|
|
43
|
+
case "line":
|
|
44
|
+
return decomposeLine(e.state, view);
|
|
45
|
+
case "horizontal-line":
|
|
46
|
+
return decomposeHorizontalLine(e.state, view);
|
|
47
|
+
case "horizontal-ray":
|
|
48
|
+
return decomposeHorizontalRay(e.state, view);
|
|
49
|
+
case "vertical-line":
|
|
50
|
+
return decomposeVerticalLine(e.state, view);
|
|
51
|
+
case "cross-line":
|
|
52
|
+
return decomposeCrossLine(e.state, view);
|
|
53
|
+
case "trend-angle":
|
|
54
|
+
return decomposeTrendAngle(e.state, view);
|
|
55
|
+
case "rectangle":
|
|
56
|
+
return decomposeRectangle(e.state, view);
|
|
57
|
+
case "rotated-rectangle":
|
|
58
|
+
return decomposeRotatedRectangle(e.state, view);
|
|
59
|
+
case "triangle":
|
|
60
|
+
return decomposeTriangle(e.state, view);
|
|
61
|
+
case "polyline":
|
|
62
|
+
return decomposePolyline(e.state, view);
|
|
63
|
+
case "circle":
|
|
64
|
+
return decomposeCircle(e.state, view);
|
|
65
|
+
case "ellipse":
|
|
66
|
+
return decomposeEllipse(e.state, view);
|
|
67
|
+
case "path":
|
|
68
|
+
return decomposePath(e.state, view);
|
|
69
|
+
case "fill-between":
|
|
70
|
+
return decomposeFillBetween(e.state, view);
|
|
71
|
+
case "marker":
|
|
72
|
+
return decomposeMarker(e.state, view);
|
|
73
|
+
case "text":
|
|
74
|
+
return decomposeText(e.state, view);
|
|
75
|
+
case "arrow":
|
|
76
|
+
return decomposeArrow(e.state, view);
|
|
77
|
+
case "arrow-marker":
|
|
78
|
+
return decomposeArrowMarker(e.state, view);
|
|
79
|
+
case "arrow-mark-up":
|
|
80
|
+
return decomposeArrowMarkUp(e.state, view);
|
|
81
|
+
case "arrow-mark-down":
|
|
82
|
+
return decomposeArrowMarkDown(e.state, view);
|
|
83
|
+
case "arc":
|
|
84
|
+
return decomposeArc(e.state, view);
|
|
85
|
+
case "curve":
|
|
86
|
+
return decomposeCurve(e.state, view);
|
|
87
|
+
case "double-curve":
|
|
88
|
+
return decomposeDoubleCurve(e.state, view);
|
|
89
|
+
case "pen":
|
|
90
|
+
return decomposePen(e.state, view);
|
|
91
|
+
case "highlighter":
|
|
92
|
+
return decomposeHighlighter(e.state, view);
|
|
93
|
+
case "brush":
|
|
94
|
+
return decomposeBrush(e.state, view);
|
|
95
|
+
case "trend-channel":
|
|
96
|
+
return decomposeTrendChannel(e.state, view);
|
|
97
|
+
case "flat-top-bottom":
|
|
98
|
+
return decomposeFlatTopBottom(e.state, view);
|
|
99
|
+
case "disjoint-channel":
|
|
100
|
+
return decomposeDisjointChannel(e.state, view);
|
|
101
|
+
case "regression-trend":
|
|
102
|
+
return decomposeRegressionTrend(e.state, view);
|
|
103
|
+
case "fib-retracement":
|
|
104
|
+
return decomposeFibRetracement(e.state, view);
|
|
105
|
+
case "fib-trend-extension":
|
|
106
|
+
return decomposeFibTrendExtension(e.state, view);
|
|
107
|
+
case "fib-channel":
|
|
108
|
+
return decomposeFibChannel(e.state, view);
|
|
109
|
+
case "fib-time-zone":
|
|
110
|
+
return decomposeFibTimeZone(e.state, view);
|
|
111
|
+
case "fib-wedge":
|
|
112
|
+
return decomposeFibWedge(e.state, view);
|
|
113
|
+
case "fib-speed-fan":
|
|
114
|
+
return decomposeFibSpeedFan(e.state, view);
|
|
115
|
+
case "fib-speed-arcs":
|
|
116
|
+
return decomposeFibSpeedArcs(e.state, view);
|
|
117
|
+
case "fib-spiral":
|
|
118
|
+
return decomposeFibSpiral(e.state, view);
|
|
119
|
+
case "fib-circles":
|
|
120
|
+
return decomposeFibCircles(e.state, view);
|
|
121
|
+
case "fib-trend-time":
|
|
122
|
+
return decomposeFibTrendTime(e.state, view);
|
|
123
|
+
case "gann-box":
|
|
124
|
+
return decomposeGannBox(e.state, view);
|
|
125
|
+
case "gann-square-fixed":
|
|
126
|
+
return decomposeGannSquareFixed(e.state, view);
|
|
127
|
+
case "gann-square":
|
|
128
|
+
return decomposeGannSquare(e.state, view);
|
|
129
|
+
case "gann-fan":
|
|
130
|
+
return decomposeGannFan(e.state, view);
|
|
131
|
+
case "pitchfork":
|
|
132
|
+
return decomposePitchfork(e.state, view);
|
|
133
|
+
case "pitchfan":
|
|
134
|
+
return decomposePitchfan(e.state, view);
|
|
135
|
+
case "xabcd-pattern":
|
|
136
|
+
return decomposeXabcdPattern(e.state, view);
|
|
137
|
+
case "cypher-pattern":
|
|
138
|
+
return decomposeCypherPattern(e.state, view);
|
|
139
|
+
case "head-and-shoulders":
|
|
140
|
+
return decomposeHeadAndShoulders(e.state, view);
|
|
141
|
+
case "abcd-pattern":
|
|
142
|
+
return decomposeAbcdPattern(e.state, view);
|
|
143
|
+
case "triangle-pattern":
|
|
144
|
+
return decomposeTrianglePattern(e.state, view);
|
|
145
|
+
case "three-drives-pattern":
|
|
146
|
+
return decomposeThreeDrivesPattern(e.state, view);
|
|
147
|
+
case "elliott-impulse-wave":
|
|
148
|
+
return decomposeElliottImpulseWave(e.state, view);
|
|
149
|
+
case "elliott-correction-wave":
|
|
150
|
+
return decomposeElliottCorrectionWave(e.state, view);
|
|
151
|
+
case "elliott-triangle-wave":
|
|
152
|
+
return decomposeElliottTriangleWave(e.state, view);
|
|
153
|
+
case "elliott-double-combo":
|
|
154
|
+
return decomposeElliottDoubleCombo(e.state, view);
|
|
155
|
+
case "elliott-triple-combo":
|
|
156
|
+
return decomposeElliottTripleCombo(e.state, view);
|
|
157
|
+
case "cyclic-lines":
|
|
158
|
+
return decomposeCyclicLines(e.state, view);
|
|
159
|
+
case "time-cycles":
|
|
160
|
+
return decomposeTimeCycles(e.state, view);
|
|
161
|
+
case "sine-line":
|
|
162
|
+
return decomposeSineLine(e.state, view);
|
|
163
|
+
case "group":
|
|
164
|
+
return decomposeGroup(e.state, view);
|
|
165
|
+
case "frame":
|
|
166
|
+
return decomposeFrame(e.state, view);
|
|
167
|
+
case "table":
|
|
168
|
+
return decomposeTable(e.state, view);
|
|
169
|
+
default: {
|
|
170
|
+
const _exhaustive = e.drawingKind;
|
|
171
|
+
void _exhaustive;
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=decompose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompose.js","sourceRoot":"","sources":["../../src/geometry/decompose.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\nimport type {\n AbcdPatternState,\n ArcState,\n ArrowMarkDownState,\n ArrowMarkUpState,\n ArrowMarkerState,\n ArrowState,\n BrushState,\n CircleState,\n CrossLineState,\n CurveState,\n CyclicLinesState,\n CypherPatternState,\n DisjointChannelState,\n DoubleCurveState,\n ElliottCorrectionWaveState,\n ElliottDoubleComboState,\n ElliottImpulseWaveState,\n ElliottTriangleWaveState,\n ElliottTripleComboState,\n EllipseState,\n FibChannelState,\n FibCirclesState,\n FibRetracementState,\n FibSpeedArcsState,\n FibSpeedFanState,\n FibSpiralState,\n FibTimeZoneState,\n FibTrendExtensionState,\n FibTrendTimeState,\n FibWedgeState,\n FillBetweenState,\n FlatTopBottomState,\n FrameState,\n GannBoxState,\n GannFanState,\n GannSquareFixedState,\n GannSquareState,\n GroupState,\n HeadAndShouldersState,\n HighlighterState,\n HorizontalLineState,\n HorizontalRayState,\n LineState,\n MarkerState,\n PathState,\n PenState,\n PitchfanState,\n PitchforkState,\n PolylineState,\n RectangleState,\n RegressionTrendState,\n RotatedRectangleState,\n SineLineState,\n TableState,\n TextState,\n ThreeDrivesPatternState,\n TimeCyclesState,\n TrendAngleState,\n TrendChannelState,\n TrianglePatternState,\n TriangleState,\n VerticalLineState,\n XabcdPatternState,\n} from \"@invinite-org/chartlang-core\";\n\nimport type { DrawingEmission } from \"../types.js\";\nimport {\n decomposeArrow,\n decomposeArrowMarkDown,\n decomposeArrowMarkUp,\n decomposeArrowMarker,\n decomposeText,\n} from \"./kinds/annotations.js\";\nimport {\n decomposeCircle,\n decomposeEllipse,\n decomposeFillBetween,\n decomposePath,\n decomposePolyline,\n decomposeRectangle,\n decomposeRotatedRectangle,\n decomposeTriangle,\n} from \"./kinds/boxes.js\";\nimport {\n decomposeDisjointChannel,\n decomposeFlatTopBottom,\n decomposeRegressionTrend,\n decomposeTrendChannel,\n} from \"./kinds/channels.js\";\nimport { decomposeFrame, decomposeGroup, decomposeTable } from \"./kinds/containers.js\";\nimport { decomposeArc, decomposeCurve, decomposeDoubleCurve } from \"./kinds/curves.js\";\nimport { decomposeCyclicLines, decomposeSineLine, decomposeTimeCycles } from \"./kinds/cycles.js\";\nimport {\n decomposeElliottCorrectionWave,\n decomposeElliottDoubleCombo,\n decomposeElliottImpulseWave,\n decomposeElliottTriangleWave,\n decomposeElliottTripleCombo,\n} from \"./kinds/elliott.js\";\nimport {\n decomposeFibChannel,\n decomposeFibCircles,\n decomposeFibRetracement,\n decomposeFibSpeedArcs,\n decomposeFibSpeedFan,\n decomposeFibSpiral,\n decomposeFibTimeZone,\n decomposeFibTrendExtension,\n decomposeFibTrendTime,\n decomposeFibWedge,\n} from \"./kinds/fibonacci.js\";\nimport { decomposeBrush, decomposeHighlighter, decomposePen } from \"./kinds/freehand.js\";\nimport {\n decomposeGannBox,\n decomposeGannFan,\n decomposeGannSquare,\n decomposeGannSquareFixed,\n} from \"./kinds/gann.js\";\nimport {\n decomposeCrossLine,\n decomposeHorizontalLine,\n decomposeHorizontalRay,\n decomposeLine,\n decomposeTrendAngle,\n decomposeVerticalLine,\n} from \"./kinds/lines.js\";\nimport { decomposeMarker } from \"./kinds/marker.js\";\nimport {\n decomposeAbcdPattern,\n decomposeCypherPattern,\n decomposeHeadAndShoulders,\n decomposeThreeDrivesPattern,\n decomposeTrianglePattern,\n decomposeXabcdPattern,\n} from \"./kinds/patterns.js\";\nimport { decomposePitchfan, decomposePitchfork } from \"./kinds/pitchforks.js\";\nimport type { DrawPrimitive, Viewport } from \"./types.js\";\n\n/**\n * Reduce a {@link DrawingEmission} to a flat, renderer-agnostic\n * {@link DrawPrimitive} list against `view`. Pure — no `ctx`, no library\n * types — so every adapter shares one geometry derivation and paints\n * the result with its own sink.\n *\n * The switch is **exhaustive over all 63 `DrawingKind`s**: the 20 basic\n * kinds (Task 1), the 20 curve / freehand / channel / fibonacci kinds\n * (Task 2), and the 23 gann / pitchfork / pattern / elliott / cycle /\n * container / table kinds (Task 3). The `default` arm is a `const\n * _exhaustive: never` guard — it compiles only because every literal has\n * a `case`, so adding a future `DrawingKind` to core fails `pnpm\n * typecheck` here until a decomposer is added. `op: \"remove\"` is handled\n * by each adapter's drawing-state map (this function operates on whatever\n * `state` it is handed).\n *\n * @since 1.3\n * @stable\n * @example\n * declare const e: DrawingEmission;\n * declare const v: Viewport;\n * const prims = decomposeDrawing(e, v);\n * void prims;\n */\nexport function decomposeDrawing(e: DrawingEmission, view: Viewport): ReadonlyArray<DrawPrimitive> {\n switch (e.drawingKind) {\n case \"line\":\n return decomposeLine(e.state as LineState, view);\n case \"horizontal-line\":\n return decomposeHorizontalLine(e.state as HorizontalLineState, view);\n case \"horizontal-ray\":\n return decomposeHorizontalRay(e.state as HorizontalRayState, view);\n case \"vertical-line\":\n return decomposeVerticalLine(e.state as VerticalLineState, view);\n case \"cross-line\":\n return decomposeCrossLine(e.state as CrossLineState, view);\n case \"trend-angle\":\n return decomposeTrendAngle(e.state as TrendAngleState, view);\n case \"rectangle\":\n return decomposeRectangle(e.state as RectangleState, view);\n case \"rotated-rectangle\":\n return decomposeRotatedRectangle(e.state as RotatedRectangleState, view);\n case \"triangle\":\n return decomposeTriangle(e.state as TriangleState, view);\n case \"polyline\":\n return decomposePolyline(e.state as PolylineState, view);\n case \"circle\":\n return decomposeCircle(e.state as CircleState, view);\n case \"ellipse\":\n return decomposeEllipse(e.state as EllipseState, view);\n case \"path\":\n return decomposePath(e.state as PathState, view);\n case \"fill-between\":\n return decomposeFillBetween(e.state as FillBetweenState, view);\n case \"marker\":\n return decomposeMarker(e.state as MarkerState, view);\n case \"text\":\n return decomposeText(e.state as TextState, view);\n case \"arrow\":\n return decomposeArrow(e.state as ArrowState, view);\n case \"arrow-marker\":\n return decomposeArrowMarker(e.state as ArrowMarkerState, view);\n case \"arrow-mark-up\":\n return decomposeArrowMarkUp(e.state as ArrowMarkUpState, view);\n case \"arrow-mark-down\":\n return decomposeArrowMarkDown(e.state as ArrowMarkDownState, view);\n case \"arc\":\n return decomposeArc(e.state as ArcState, view);\n case \"curve\":\n return decomposeCurve(e.state as CurveState, view);\n case \"double-curve\":\n return decomposeDoubleCurve(e.state as DoubleCurveState, view);\n case \"pen\":\n return decomposePen(e.state as PenState, view);\n case \"highlighter\":\n return decomposeHighlighter(e.state as HighlighterState, view);\n case \"brush\":\n return decomposeBrush(e.state as BrushState, view);\n case \"trend-channel\":\n return decomposeTrendChannel(e.state as TrendChannelState, view);\n case \"flat-top-bottom\":\n return decomposeFlatTopBottom(e.state as FlatTopBottomState, view);\n case \"disjoint-channel\":\n return decomposeDisjointChannel(e.state as DisjointChannelState, view);\n case \"regression-trend\":\n return decomposeRegressionTrend(e.state as RegressionTrendState, view);\n case \"fib-retracement\":\n return decomposeFibRetracement(e.state as FibRetracementState, view);\n case \"fib-trend-extension\":\n return decomposeFibTrendExtension(e.state as FibTrendExtensionState, view);\n case \"fib-channel\":\n return decomposeFibChannel(e.state as FibChannelState, view);\n case \"fib-time-zone\":\n return decomposeFibTimeZone(e.state as FibTimeZoneState, view);\n case \"fib-wedge\":\n return decomposeFibWedge(e.state as FibWedgeState, view);\n case \"fib-speed-fan\":\n return decomposeFibSpeedFan(e.state as FibSpeedFanState, view);\n case \"fib-speed-arcs\":\n return decomposeFibSpeedArcs(e.state as FibSpeedArcsState, view);\n case \"fib-spiral\":\n return decomposeFibSpiral(e.state as FibSpiralState, view);\n case \"fib-circles\":\n return decomposeFibCircles(e.state as FibCirclesState, view);\n case \"fib-trend-time\":\n return decomposeFibTrendTime(e.state as FibTrendTimeState, view);\n case \"gann-box\":\n return decomposeGannBox(e.state as GannBoxState, view);\n case \"gann-square-fixed\":\n return decomposeGannSquareFixed(e.state as GannSquareFixedState, view);\n case \"gann-square\":\n return decomposeGannSquare(e.state as GannSquareState, view);\n case \"gann-fan\":\n return decomposeGannFan(e.state as GannFanState, view);\n case \"pitchfork\":\n return decomposePitchfork(e.state as PitchforkState, view);\n case \"pitchfan\":\n return decomposePitchfan(e.state as PitchfanState, view);\n case \"xabcd-pattern\":\n return decomposeXabcdPattern(e.state as XabcdPatternState, view);\n case \"cypher-pattern\":\n return decomposeCypherPattern(e.state as CypherPatternState, view);\n case \"head-and-shoulders\":\n return decomposeHeadAndShoulders(e.state as HeadAndShouldersState, view);\n case \"abcd-pattern\":\n return decomposeAbcdPattern(e.state as AbcdPatternState, view);\n case \"triangle-pattern\":\n return decomposeTrianglePattern(e.state as TrianglePatternState, view);\n case \"three-drives-pattern\":\n return decomposeThreeDrivesPattern(e.state as ThreeDrivesPatternState, view);\n case \"elliott-impulse-wave\":\n return decomposeElliottImpulseWave(e.state as ElliottImpulseWaveState, view);\n case \"elliott-correction-wave\":\n return decomposeElliottCorrectionWave(e.state as ElliottCorrectionWaveState, view);\n case \"elliott-triangle-wave\":\n return decomposeElliottTriangleWave(e.state as ElliottTriangleWaveState, view);\n case \"elliott-double-combo\":\n return decomposeElliottDoubleCombo(e.state as ElliottDoubleComboState, view);\n case \"elliott-triple-combo\":\n return decomposeElliottTripleCombo(e.state as ElliottTripleComboState, view);\n case \"cyclic-lines\":\n return decomposeCyclicLines(e.state as CyclicLinesState, view);\n case \"time-cycles\":\n return decomposeTimeCycles(e.state as TimeCyclesState, view);\n case \"sine-line\":\n return decomposeSineLine(e.state as SineLineState, view);\n case \"group\":\n return decomposeGroup(e.state as GroupState, view);\n case \"frame\":\n return decomposeFrame(e.state as FrameState, view);\n case \"table\":\n return decomposeTable(e.state as TableState, view);\n default: {\n const _exhaustive: never = e.drawingKind;\n void _exhaustive;\n return [];\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/geometry/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
export { decomposeDrawing } from "./decompose.js";
|
|
4
|
+
export { priceToY, timeToX, worldPointToPixel } from "./project.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/geometry/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nexport { decomposeDrawing } from \"./decompose.js\";\nexport { priceToY, timeToX, worldPointToPixel } from \"./project.js\";\nexport type { DrawPrimitive, FillStyle, Point2, StrokeStyle, Viewport } from \"./types.js\";\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { ArrowMarkDownState, ArrowMarkUpState, ArrowMarkerState, ArrowState, TextState } from "@invinite-org/chartlang-core";
|
|
2
|
+
import type { DrawPrimitive, Viewport } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Decompose a `text` drawing — a single label at the projected anchor,
|
|
5
|
+
* its font / alignment / colour resolved from `TextOpts`. `bgColor` is
|
|
6
|
+
* carried through onto the IR `text` primitive (adapters that can paint
|
|
7
|
+
* a background rect may use it; the canvas sink ignores it).
|
|
8
|
+
*
|
|
9
|
+
* @since 1.3
|
|
10
|
+
* @stable
|
|
11
|
+
* @example
|
|
12
|
+
* declare const s: TextState;
|
|
13
|
+
* declare const v: Viewport;
|
|
14
|
+
* const prims = decomposeText(s, v);
|
|
15
|
+
* // prims[0].kind === "text"
|
|
16
|
+
* void prims;
|
|
17
|
+
*/
|
|
18
|
+
export declare function decomposeText(state: TextState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
19
|
+
/**
|
|
20
|
+
* Decompose an `arrow` drawing — a stroked shaft, a filled arrowhead
|
|
21
|
+
* triangle at the head anchor, and an optional label at the shaft
|
|
22
|
+
* midpoint. Stroke and arrowhead fill share `style.color`.
|
|
23
|
+
*
|
|
24
|
+
* @since 1.3
|
|
25
|
+
* @stable
|
|
26
|
+
* @example
|
|
27
|
+
* declare const s: ArrowState;
|
|
28
|
+
* declare const v: Viewport;
|
|
29
|
+
* const prims = decomposeArrow(s, v);
|
|
30
|
+
* // prims[0].kind === "polyline"; prims[1].kind === "polyline"
|
|
31
|
+
* void prims;
|
|
32
|
+
*/
|
|
33
|
+
export declare function decomposeArrow(state: ArrowState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
34
|
+
/**
|
|
35
|
+
* Decompose an `arrow-marker` drawing — a self-contained compact glyph
|
|
36
|
+
* at the anchor: a filled dot, a short stub up + right, a filled
|
|
37
|
+
* arrowhead at the stub end, and optional text to the right. Default
|
|
38
|
+
* colour is `"#3b82f6"` (invinite toolbar blue).
|
|
39
|
+
*
|
|
40
|
+
* @since 1.3
|
|
41
|
+
* @stable
|
|
42
|
+
* @example
|
|
43
|
+
* declare const s: ArrowMarkerState;
|
|
44
|
+
* declare const v: Viewport;
|
|
45
|
+
* const prims = decomposeArrowMarker(s, v);
|
|
46
|
+
* void prims;
|
|
47
|
+
*/
|
|
48
|
+
export declare function decomposeArrowMarker(state: ArrowMarkerState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
49
|
+
/**
|
|
50
|
+
* Decompose an `arrow-mark-up` drawing — a filled up-chevron glyph at
|
|
51
|
+
* the anchor. Default fill colour is `"#22c55e"` (green); an explicit
|
|
52
|
+
* `style.color` overrides.
|
|
53
|
+
*
|
|
54
|
+
* @since 1.3
|
|
55
|
+
* @stable
|
|
56
|
+
* @example
|
|
57
|
+
* declare const s: ArrowMarkUpState;
|
|
58
|
+
* declare const v: Viewport;
|
|
59
|
+
* const prims = decomposeArrowMarkUp(s, v);
|
|
60
|
+
* void prims;
|
|
61
|
+
*/
|
|
62
|
+
export declare function decomposeArrowMarkUp(state: ArrowMarkUpState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
63
|
+
/**
|
|
64
|
+
* Decompose an `arrow-mark-down` drawing — a filled down-chevron glyph
|
|
65
|
+
* at the anchor. Default fill colour is `"#ef4444"` (red); an explicit
|
|
66
|
+
* `style.color` overrides.
|
|
67
|
+
*
|
|
68
|
+
* @since 1.3
|
|
69
|
+
* @stable
|
|
70
|
+
* @example
|
|
71
|
+
* declare const s: ArrowMarkDownState;
|
|
72
|
+
* declare const v: Viewport;
|
|
73
|
+
* const prims = decomposeArrowMarkDown(s, v);
|
|
74
|
+
* void prims;
|
|
75
|
+
*/
|
|
76
|
+
export declare function decomposeArrowMarkDown(state: ArrowMarkDownState, view: Viewport): ReadonlyArray<DrawPrimitive>;
|
|
77
|
+
//# sourceMappingURL=annotations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/geometry/kinds/annotations.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACZ,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiB3D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,CAgB5F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,CAmC9F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAyC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAW9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,QAAQ,GACf,aAAa,CAAC,aAAa,CAAC,CAW9B"}
|