@invinite-org/chartlang-adapter-kit 1.2.1 → 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.
Files changed (153) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/README.md +7 -0
  3. package/dist/canvas/index.d.ts +5 -0
  4. package/dist/canvas/index.d.ts.map +1 -0
  5. package/dist/canvas/index.js +5 -0
  6. package/dist/canvas/index.js.map +1 -0
  7. package/dist/canvas/mockContext.d.ts +168 -0
  8. package/dist/canvas/mockContext.d.ts.map +1 -0
  9. package/dist/canvas/mockContext.js +198 -0
  10. package/dist/canvas/mockContext.js.map +1 -0
  11. package/dist/canvas/paintPrimitive.d.ts +35 -0
  12. package/dist/canvas/paintPrimitive.d.ts.map +1 -0
  13. package/dist/canvas/paintPrimitive.js +171 -0
  14. package/dist/canvas/paintPrimitive.js.map +1 -0
  15. package/dist/canvas/renderCtx.d.ts +40 -0
  16. package/dist/canvas/renderCtx.d.ts.map +1 -0
  17. package/dist/canvas/renderCtx.js +4 -0
  18. package/dist/canvas/renderCtx.js.map +1 -0
  19. package/dist/capabilities/capabilities.d.ts +9 -7
  20. package/dist/capabilities/capabilities.d.ts.map +1 -1
  21. package/dist/capabilities/capabilities.js +14 -8
  22. package/dist/capabilities/capabilities.js.map +1 -1
  23. package/dist/geometry/_lib/arrowhead.d.ts +18 -0
  24. package/dist/geometry/_lib/arrowhead.d.ts.map +1 -0
  25. package/dist/geometry/_lib/arrowhead.js +38 -0
  26. package/dist/geometry/_lib/arrowhead.js.map +1 -0
  27. package/dist/geometry/_lib/bezier.d.ts +57 -0
  28. package/dist/geometry/_lib/bezier.d.ts.map +1 -0
  29. package/dist/geometry/_lib/bezier.js +84 -0
  30. package/dist/geometry/_lib/bezier.js.map +1 -0
  31. package/dist/geometry/_lib/chevron.d.ts +29 -0
  32. package/dist/geometry/_lib/chevron.d.ts.map +1 -0
  33. package/dist/geometry/_lib/chevron.js +37 -0
  34. package/dist/geometry/_lib/chevron.js.map +1 -0
  35. package/dist/geometry/_lib/dash.d.ts +30 -0
  36. package/dist/geometry/_lib/dash.d.ts.map +1 -0
  37. package/dist/geometry/_lib/dash.js +40 -0
  38. package/dist/geometry/_lib/dash.js.map +1 -0
  39. package/dist/geometry/_lib/fibLevels.d.ts +36 -0
  40. package/dist/geometry/_lib/fibLevels.d.ts.map +1 -0
  41. package/dist/geometry/_lib/fibLevels.js +44 -0
  42. package/dist/geometry/_lib/fibLevels.js.map +1 -0
  43. package/dist/geometry/_lib/gannLevels.d.ts +54 -0
  44. package/dist/geometry/_lib/gannLevels.d.ts.map +1 -0
  45. package/dist/geometry/_lib/gannLevels.js +88 -0
  46. package/dist/geometry/_lib/gannLevels.js.map +1 -0
  47. package/dist/geometry/_lib/lineExtend.d.ts +31 -0
  48. package/dist/geometry/_lib/lineExtend.d.ts.map +1 -0
  49. package/dist/geometry/_lib/lineExtend.js +48 -0
  50. package/dist/geometry/_lib/lineExtend.js.map +1 -0
  51. package/dist/geometry/_lib/namedPolyline.d.ts +25 -0
  52. package/dist/geometry/_lib/namedPolyline.d.ts.map +1 -0
  53. package/dist/geometry/_lib/namedPolyline.js +64 -0
  54. package/dist/geometry/_lib/namedPolyline.js.map +1 -0
  55. package/dist/geometry/_lib/pitchforkGeom.d.ts +46 -0
  56. package/dist/geometry/_lib/pitchforkGeom.d.ts.map +1 -0
  57. package/dist/geometry/_lib/pitchforkGeom.js +70 -0
  58. package/dist/geometry/_lib/pitchforkGeom.js.map +1 -0
  59. package/dist/geometry/_lib/shapeStyle.d.ts +21 -0
  60. package/dist/geometry/_lib/shapeStyle.d.ts.map +1 -0
  61. package/dist/geometry/_lib/shapeStyle.js +41 -0
  62. package/dist/geometry/_lib/shapeStyle.js.map +1 -0
  63. package/dist/geometry/_lib/strokeStyle.d.ts +34 -0
  64. package/dist/geometry/_lib/strokeStyle.d.ts.map +1 -0
  65. package/dist/geometry/_lib/strokeStyle.js +26 -0
  66. package/dist/geometry/_lib/strokeStyle.js.map +1 -0
  67. package/dist/geometry/_lib/textStyle.d.ts +70 -0
  68. package/dist/geometry/_lib/textStyle.d.ts.map +1 -0
  69. package/dist/geometry/_lib/textStyle.js +78 -0
  70. package/dist/geometry/_lib/textStyle.js.map +1 -0
  71. package/dist/geometry/decompose.d.ts +28 -0
  72. package/dist/geometry/decompose.d.ts.map +1 -0
  73. package/dist/geometry/decompose.js +176 -0
  74. package/dist/geometry/decompose.js.map +1 -0
  75. package/dist/geometry/index.d.ts +4 -0
  76. package/dist/geometry/index.d.ts.map +1 -0
  77. package/dist/geometry/index.js +5 -0
  78. package/dist/geometry/index.js.map +1 -0
  79. package/dist/geometry/kinds/annotations.d.ts +77 -0
  80. package/dist/geometry/kinds/annotations.d.ts.map +1 -0
  81. package/dist/geometry/kinds/annotations.js +219 -0
  82. package/dist/geometry/kinds/annotations.js.map +1 -0
  83. package/dist/geometry/kinds/boxes.d.ts +116 -0
  84. package/dist/geometry/kinds/boxes.d.ts.map +1 -0
  85. package/dist/geometry/kinds/boxes.js +285 -0
  86. package/dist/geometry/kinds/boxes.js.map +1 -0
  87. package/dist/geometry/kinds/channels.d.ts +72 -0
  88. package/dist/geometry/kinds/channels.d.ts.map +1 -0
  89. package/dist/geometry/kinds/channels.js +148 -0
  90. package/dist/geometry/kinds/channels.js.map +1 -0
  91. package/dist/geometry/kinds/containers.d.ts +54 -0
  92. package/dist/geometry/kinds/containers.d.ts.map +1 -0
  93. package/dist/geometry/kinds/containers.js +268 -0
  94. package/dist/geometry/kinds/containers.js.map +1 -0
  95. package/dist/geometry/kinds/curves.d.ts +53 -0
  96. package/dist/geometry/kinds/curves.d.ts.map +1 -0
  97. package/dist/geometry/kinds/curves.js +110 -0
  98. package/dist/geometry/kinds/curves.js.map +1 -0
  99. package/dist/geometry/kinds/cycles.d.ts +52 -0
  100. package/dist/geometry/kinds/cycles.d.ts.map +1 -0
  101. package/dist/geometry/kinds/cycles.js +158 -0
  102. package/dist/geometry/kinds/cycles.js.map +1 -0
  103. package/dist/geometry/kinds/elliott.d.ts +73 -0
  104. package/dist/geometry/kinds/elliott.d.ts.map +1 -0
  105. package/dist/geometry/kinds/elliott.js +116 -0
  106. package/dist/geometry/kinds/elliott.js.map +1 -0
  107. package/dist/geometry/kinds/fibonacci.d.ts +166 -0
  108. package/dist/geometry/kinds/fibonacci.d.ts.map +1 -0
  109. package/dist/geometry/kinds/fibonacci.js +458 -0
  110. package/dist/geometry/kinds/fibonacci.js.map +1 -0
  111. package/dist/geometry/kinds/freehand.d.ts +53 -0
  112. package/dist/geometry/kinds/freehand.d.ts.map +1 -0
  113. package/dist/geometry/kinds/freehand.js +115 -0
  114. package/dist/geometry/kinds/freehand.js.map +1 -0
  115. package/dist/geometry/kinds/gann.d.ts +63 -0
  116. package/dist/geometry/kinds/gann.d.ts.map +1 -0
  117. package/dist/geometry/kinds/gann.js +153 -0
  118. package/dist/geometry/kinds/gann.js.map +1 -0
  119. package/dist/geometry/kinds/lines.d.ts +90 -0
  120. package/dist/geometry/kinds/lines.d.ts.map +1 -0
  121. package/dist/geometry/kinds/lines.js +201 -0
  122. package/dist/geometry/kinds/lines.js.map +1 -0
  123. package/dist/geometry/kinds/marker.d.ts +21 -0
  124. package/dist/geometry/kinds/marker.d.ts.map +1 -0
  125. package/dist/geometry/kinds/marker.js +47 -0
  126. package/dist/geometry/kinds/marker.js.map +1 -0
  127. package/dist/geometry/kinds/patterns.d.ts +85 -0
  128. package/dist/geometry/kinds/patterns.d.ts.map +1 -0
  129. package/dist/geometry/kinds/patterns.js +133 -0
  130. package/dist/geometry/kinds/patterns.js.map +1 -0
  131. package/dist/geometry/kinds/pitchforks.d.ts +36 -0
  132. package/dist/geometry/kinds/pitchforks.d.ts.map +1 -0
  133. package/dist/geometry/kinds/pitchforks.js +109 -0
  134. package/dist/geometry/kinds/pitchforks.js.map +1 -0
  135. package/dist/geometry/project.d.ts +50 -0
  136. package/dist/geometry/project.d.ts.map +1 -0
  137. package/dist/geometry/project.js +62 -0
  138. package/dist/geometry/project.js.map +1 -0
  139. package/dist/geometry/types.d.ts +146 -0
  140. package/dist/geometry/types.d.ts.map +1 -0
  141. package/dist/geometry/types.js +4 -0
  142. package/dist/geometry/types.js.map +1 -0
  143. package/dist/index.d.ts +2 -0
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +1 -0
  146. package/dist/index.js.map +1 -1
  147. package/dist/types.d.ts +54 -0
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js.map +1 -1
  150. package/dist/validation/validateEmission.d.ts.map +1 -1
  151. package/dist/validation/validateEmission.js +47 -0
  152. package/dist/validation/validateEmission.js.map +1 -1
  153. package/package.json +9 -2
@@ -0,0 +1,171 @@
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
+ * The canvas `textAlign` value a {@link DrawPrimitive} `text.align`
5
+ * maps to. The IR uses the narrower `left | center | right`.
6
+ */
7
+ const ALIGN_TO_CANVAS = { left: "left", center: "center", right: "right" };
8
+ /**
9
+ * The canvas `textBaseline` value a {@link DrawPrimitive} `text.baseline`
10
+ * maps to. The IR uses the narrower `top | middle | bottom`.
11
+ */
12
+ const BASELINE_TO_CANVAS = { top: "top", middle: "middle", bottom: "bottom" };
13
+ function applyFill(ctx, fill) {
14
+ ctx.fillStyle = fill.color;
15
+ ctx.globalAlpha = fill.alpha;
16
+ ctx.fill();
17
+ ctx.globalAlpha = 1;
18
+ }
19
+ function applyStrokeStyle(ctx, stroke) {
20
+ ctx.strokeStyle = stroke.color;
21
+ ctx.lineWidth = stroke.width;
22
+ ctx.setLineDash(stroke.dash);
23
+ }
24
+ /**
25
+ * Stroke the current path, bracketing the `stroke()` call in
26
+ * `globalAlpha` when `stroke.alpha` is set (the `highlighter`
27
+ * translucency), then resetting the dash. When `alpha` is omitted the
28
+ * call sequence is exactly `stroke()` → `setLineDash([])` — byte-identical
29
+ * to the Task-1 painter — so no-alpha strokes never re-hash.
30
+ */
31
+ function strokeWithAlpha(ctx, stroke) {
32
+ if (stroke.alpha !== undefined) {
33
+ ctx.globalAlpha = stroke.alpha;
34
+ ctx.stroke();
35
+ ctx.globalAlpha = 1;
36
+ }
37
+ else {
38
+ ctx.stroke();
39
+ }
40
+ ctx.setLineDash([]);
41
+ }
42
+ /**
43
+ * Paint one {@link DrawPrimitive} into a {@link RenderCtx}. The canvas
44
+ * sink shared by the canvas2d, lightweight-charts, and uplot adapters.
45
+ * For each primitive the painter applies the stroke style (when set),
46
+ * builds the path, fills before stroking (so the outline draws on top
47
+ * of the band), and resets `setLineDash([])` + `globalAlpha = 1` after
48
+ * use so downstream draws are unaffected — matching the per-kind
49
+ * renderer conventions the IR replaces. A `stroke.alpha` (the
50
+ * `highlighter` translucency) brackets the `stroke()` in `globalAlpha`;
51
+ * an omitted `alpha` emits no `globalAlpha` mutation, keeping the
52
+ * sequence byte-identical to a Task-1 stroke.
53
+ *
54
+ * `text.bgColor` is carried on the IR but NOT painted here (the
55
+ * structural `RenderCtx` exposes neither `measureText` nor a
56
+ * background-rect path), mirroring the source renderers. The IR
57
+ * `marker` primitive is painted as a sized glyph; no basic kind emits
58
+ * it today, but adapters / future kinds rely on the painter covering
59
+ * every IR shape.
60
+ *
61
+ * @since 1.3
62
+ * @stable
63
+ * @example
64
+ * declare const ctx: RenderCtx;
65
+ * paintPrimitive(ctx, {
66
+ * kind: "polyline",
67
+ * points: [{ x: 0, y: 0 }, { x: 10, y: 10 }],
68
+ * closed: false,
69
+ * stroke: { color: "#000000", width: 1, dash: [] },
70
+ * });
71
+ * void paintPrimitive;
72
+ */
73
+ export function paintPrimitive(ctx, p) {
74
+ switch (p.kind) {
75
+ case "polyline": {
76
+ if (p.points.length === 0)
77
+ return;
78
+ if (p.stroke !== undefined)
79
+ applyStrokeStyle(ctx, p.stroke);
80
+ ctx.beginPath();
81
+ ctx.moveTo(p.points[0].x, p.points[0].y);
82
+ for (let i = 1; i < p.points.length; i++) {
83
+ ctx.lineTo(p.points[i].x, p.points[i].y);
84
+ }
85
+ if (p.closed)
86
+ ctx.closePath();
87
+ if (p.fill !== undefined)
88
+ applyFill(ctx, p.fill);
89
+ if (p.stroke !== undefined)
90
+ strokeWithAlpha(ctx, p.stroke);
91
+ return;
92
+ }
93
+ case "arc": {
94
+ if (p.stroke !== undefined)
95
+ applyStrokeStyle(ctx, p.stroke);
96
+ ctx.beginPath();
97
+ ctx.arc(p.cx, p.cy, p.r, p.start, p.end);
98
+ if (p.closed)
99
+ ctx.closePath();
100
+ if (p.fill !== undefined)
101
+ applyFill(ctx, p.fill);
102
+ if (p.stroke !== undefined)
103
+ strokeWithAlpha(ctx, p.stroke);
104
+ return;
105
+ }
106
+ case "text": {
107
+ ctx.font = p.font;
108
+ ctx.textAlign = ALIGN_TO_CANVAS[p.align];
109
+ ctx.textBaseline = BASELINE_TO_CANVAS[p.baseline];
110
+ ctx.fillStyle = p.color;
111
+ ctx.fillText(p.text, p.x, p.y);
112
+ return;
113
+ }
114
+ case "marker": {
115
+ const polygon = markerPolygon(p.shape, p.x, p.y, p.size);
116
+ if (p.stroke !== undefined)
117
+ applyStrokeStyle(ctx, p.stroke);
118
+ ctx.beginPath();
119
+ ctx.moveTo(polygon[0].x, polygon[0].y);
120
+ for (let i = 1; i < polygon.length; i++) {
121
+ ctx.lineTo(polygon[i].x, polygon[i].y);
122
+ }
123
+ ctx.closePath();
124
+ if (p.fill !== undefined)
125
+ applyFill(ctx, p.fill);
126
+ if (p.stroke !== undefined)
127
+ strokeWithAlpha(ctx, p.stroke);
128
+ return;
129
+ }
130
+ }
131
+ }
132
+ /**
133
+ * Vertices of a sized marker glyph centred on `(x, y)`. `circle` is
134
+ * approximated as a square for the closed-polygon painter — the IR
135
+ * `marker` is emitted by no basic kind today, so the approximation only
136
+ * matters once an adapter / later task uses it; the contract is a
137
+ * non-empty closed polygon for every shape.
138
+ */
139
+ function markerPolygon(shape, x, y, size) {
140
+ const h = size / 2;
141
+ switch (shape) {
142
+ case "circle":
143
+ case "square":
144
+ return [
145
+ { x: x - h, y: y - h },
146
+ { x: x + h, y: y - h },
147
+ { x: x + h, y: y + h },
148
+ { x: x - h, y: y + h },
149
+ ];
150
+ case "diamond":
151
+ return [
152
+ { x, y: y - h },
153
+ { x: x + h, y },
154
+ { x, y: y + h },
155
+ { x: x - h, y },
156
+ ];
157
+ case "triangle-up":
158
+ return [
159
+ { x, y: y - h },
160
+ { x: x + h, y: y + h },
161
+ { x: x - h, y: y + h },
162
+ ];
163
+ case "triangle-down":
164
+ return [
165
+ { x, y: y + h },
166
+ { x: x + h, y: y - h },
167
+ { x: x - h, y: y - h },
168
+ ];
169
+ }
170
+ }
171
+ //# sourceMappingURL=paintPrimitive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paintPrimitive.js","sourceRoot":"","sources":["../../src/canvas/paintPrimitive.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 { DrawPrimitive, FillStyle, StrokeStyle } from \"../geometry/types.js\";\nimport type { RenderCtx } from \"./renderCtx.js\";\n\n/**\n * The canvas `textAlign` value a {@link DrawPrimitive} `text.align`\n * maps to. The IR uses the narrower `left | center | right`.\n */\nconst ALIGN_TO_CANVAS: Readonly<Record<\"left\" | \"center\" | \"right\", \"left\" | \"center\" | \"right\">> =\n { left: \"left\", center: \"center\", right: \"right\" };\n\n/**\n * The canvas `textBaseline` value a {@link DrawPrimitive} `text.baseline`\n * maps to. The IR uses the narrower `top | middle | bottom`.\n */\nconst BASELINE_TO_CANVAS: Readonly<\n Record<\"top\" | \"middle\" | \"bottom\", \"top\" | \"middle\" | \"bottom\">\n> = { top: \"top\", middle: \"middle\", bottom: \"bottom\" };\n\nfunction applyFill(ctx: RenderCtx, fill: FillStyle): void {\n ctx.fillStyle = fill.color;\n ctx.globalAlpha = fill.alpha;\n ctx.fill();\n ctx.globalAlpha = 1;\n}\n\nfunction applyStrokeStyle(ctx: RenderCtx, stroke: StrokeStyle): void {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = stroke.width;\n ctx.setLineDash(stroke.dash);\n}\n\n/**\n * Stroke the current path, bracketing the `stroke()` call in\n * `globalAlpha` when `stroke.alpha` is set (the `highlighter`\n * translucency), then resetting the dash. When `alpha` is omitted the\n * call sequence is exactly `stroke()` → `setLineDash([])` — byte-identical\n * to the Task-1 painter — so no-alpha strokes never re-hash.\n */\nfunction strokeWithAlpha(ctx: RenderCtx, stroke: StrokeStyle): void {\n if (stroke.alpha !== undefined) {\n ctx.globalAlpha = stroke.alpha;\n ctx.stroke();\n ctx.globalAlpha = 1;\n } else {\n ctx.stroke();\n }\n ctx.setLineDash([]);\n}\n\n/**\n * Paint one {@link DrawPrimitive} into a {@link RenderCtx}. The canvas\n * sink shared by the canvas2d, lightweight-charts, and uplot adapters.\n * For each primitive the painter applies the stroke style (when set),\n * builds the path, fills before stroking (so the outline draws on top\n * of the band), and resets `setLineDash([])` + `globalAlpha = 1` after\n * use so downstream draws are unaffected — matching the per-kind\n * renderer conventions the IR replaces. A `stroke.alpha` (the\n * `highlighter` translucency) brackets the `stroke()` in `globalAlpha`;\n * an omitted `alpha` emits no `globalAlpha` mutation, keeping the\n * sequence byte-identical to a Task-1 stroke.\n *\n * `text.bgColor` is carried on the IR but NOT painted here (the\n * structural `RenderCtx` exposes neither `measureText` nor a\n * background-rect path), mirroring the source renderers. The IR\n * `marker` primitive is painted as a sized glyph; no basic kind emits\n * it today, but adapters / future kinds rely on the painter covering\n * every IR shape.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const ctx: RenderCtx;\n * paintPrimitive(ctx, {\n * kind: \"polyline\",\n * points: [{ x: 0, y: 0 }, { x: 10, y: 10 }],\n * closed: false,\n * stroke: { color: \"#000000\", width: 1, dash: [] },\n * });\n * void paintPrimitive;\n */\nexport function paintPrimitive(ctx: RenderCtx, p: DrawPrimitive): void {\n switch (p.kind) {\n case \"polyline\": {\n if (p.points.length === 0) return;\n if (p.stroke !== undefined) applyStrokeStyle(ctx, p.stroke);\n ctx.beginPath();\n ctx.moveTo(p.points[0].x, p.points[0].y);\n for (let i = 1; i < p.points.length; i++) {\n ctx.lineTo(p.points[i].x, p.points[i].y);\n }\n if (p.closed) ctx.closePath();\n if (p.fill !== undefined) applyFill(ctx, p.fill);\n if (p.stroke !== undefined) strokeWithAlpha(ctx, p.stroke);\n return;\n }\n case \"arc\": {\n if (p.stroke !== undefined) applyStrokeStyle(ctx, p.stroke);\n ctx.beginPath();\n ctx.arc(p.cx, p.cy, p.r, p.start, p.end);\n if (p.closed) ctx.closePath();\n if (p.fill !== undefined) applyFill(ctx, p.fill);\n if (p.stroke !== undefined) strokeWithAlpha(ctx, p.stroke);\n return;\n }\n case \"text\": {\n ctx.font = p.font;\n ctx.textAlign = ALIGN_TO_CANVAS[p.align];\n ctx.textBaseline = BASELINE_TO_CANVAS[p.baseline];\n ctx.fillStyle = p.color;\n ctx.fillText(p.text, p.x, p.y);\n return;\n }\n case \"marker\": {\n const polygon = markerPolygon(p.shape, p.x, p.y, p.size);\n if (p.stroke !== undefined) applyStrokeStyle(ctx, p.stroke);\n ctx.beginPath();\n ctx.moveTo(polygon[0].x, polygon[0].y);\n for (let i = 1; i < polygon.length; i++) {\n ctx.lineTo(polygon[i].x, polygon[i].y);\n }\n ctx.closePath();\n if (p.fill !== undefined) applyFill(ctx, p.fill);\n if (p.stroke !== undefined) strokeWithAlpha(ctx, p.stroke);\n return;\n }\n }\n}\n\n/**\n * Vertices of a sized marker glyph centred on `(x, y)`. `circle` is\n * approximated as a square for the closed-polygon painter — the IR\n * `marker` is emitted by no basic kind today, so the approximation only\n * matters once an adapter / later task uses it; the contract is a\n * non-empty closed polygon for every shape.\n */\nfunction markerPolygon(\n shape: \"circle\" | \"square\" | \"diamond\" | \"triangle-up\" | \"triangle-down\",\n x: number,\n y: number,\n size: number,\n): ReadonlyArray<{ readonly x: number; readonly y: number }> {\n const h = size / 2;\n switch (shape) {\n case \"circle\":\n case \"square\":\n return [\n { x: x - h, y: y - h },\n { x: x + h, y: y - h },\n { x: x + h, y: y + h },\n { x: x - h, y: y + h },\n ];\n case \"diamond\":\n return [\n { x, y: y - h },\n { x: x + h, y },\n { x, y: y + h },\n { x: x - h, y },\n ];\n case \"triangle-up\":\n return [\n { x, y: y - h },\n { x: x + h, y: y + h },\n { x: x - h, y: y + h },\n ];\n case \"triangle-down\":\n return [\n { x, y: y + h },\n { x: x + h, y: y - h },\n { x: x - h, y: y - h },\n ];\n }\n}\n"]}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Minimal `CanvasRenderingContext2D` subset the canvas-family sink
3
+ * touches. Declared here (and re-used by {@link import("./paintPrimitive").paintPrimitive}
4
+ * and {@link import("./mockContext").MockCanvasContext}) so production
5
+ * `CanvasRenderingContext2D`, `OffscreenCanvasRenderingContext2D`, and
6
+ * the test `MockCanvasContext` all satisfy one structural type. Moved
7
+ * from the canvas2d adapter's `render/clear.ts` so lightweight-charts /
8
+ * uplot / canvas2d share one painter and one mock.
9
+ *
10
+ * @since 1.3
11
+ * @stable
12
+ * @example
13
+ * declare const ctx: RenderCtx;
14
+ * ctx.clearRect(0, 0, 1, 1);
15
+ * void ctx;
16
+ */
17
+ export type RenderCtx = {
18
+ clearRect(x: number, y: number, w: number, h: number): void;
19
+ translate(x: number, y: number): void;
20
+ save(): void;
21
+ restore(): void;
22
+ beginPath(): void;
23
+ moveTo(x: number, y: number): void;
24
+ lineTo(x: number, y: number): void;
25
+ stroke(): void;
26
+ fillRect(x: number, y: number, w: number, h: number): void;
27
+ fill(): void;
28
+ arc(x: number, y: number, radius: number, start: number, end: number): void;
29
+ closePath(): void;
30
+ setLineDash(segments: ReadonlyArray<number>): void;
31
+ fillText(text: string, x: number, y: number): void;
32
+ strokeStyle: string;
33
+ fillStyle: string;
34
+ lineWidth: number;
35
+ globalAlpha: number;
36
+ font: string;
37
+ textAlign: "start" | "center" | "end" | "left" | "right";
38
+ textBaseline: "top" | "middle" | "bottom" | "alphabetic" | "hanging";
39
+ };
40
+ //# sourceMappingURL=renderCtx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderCtx.d.ts","sourceRoot":"","sources":["../../src/canvas/renderCtx.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5D,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,IAAI,IAAI,CAAC;IAClB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,IAAI,IAAI,CAAC;IACf,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,IAAI,IAAI,IAAI,CAAC;IACb,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,SAAS,IAAI,IAAI,CAAC;IAClB,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;CACxE,CAAC"}
@@ -0,0 +1,4 @@
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 {};
4
+ //# sourceMappingURL=renderCtx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderCtx.js","sourceRoot":"","sources":["../../src/canvas/renderCtx.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D","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/**\n * Minimal `CanvasRenderingContext2D` subset the canvas-family sink\n * touches. Declared here (and re-used by {@link import(\"./paintPrimitive\").paintPrimitive}\n * and {@link import(\"./mockContext\").MockCanvasContext}) so production\n * `CanvasRenderingContext2D`, `OffscreenCanvasRenderingContext2D`, and\n * the test `MockCanvasContext` all satisfy one structural type. Moved\n * from the canvas2d adapter's `render/clear.ts` so lightweight-charts /\n * uplot / canvas2d share one painter and one mock.\n *\n * @since 1.3\n * @stable\n * @example\n * declare const ctx: RenderCtx;\n * ctx.clearRect(0, 0, 1, 1);\n * void ctx;\n */\nexport type RenderCtx = {\n clearRect(x: number, y: number, w: number, h: number): void;\n translate(x: number, y: number): void;\n save(): void;\n restore(): void;\n beginPath(): void;\n moveTo(x: number, y: number): void;\n lineTo(x: number, y: number): void;\n stroke(): void;\n fillRect(x: number, y: number, w: number, h: number): void;\n fill(): void;\n arc(x: number, y: number, radius: number, start: number, end: number): void;\n closePath(): void;\n setLineDash(segments: ReadonlyArray<number>): void;\n fillText(text: string, x: number, y: number): void;\n strokeStyle: string;\n fillStyle: string;\n lineWidth: number;\n globalAlpha: number;\n font: string;\n textAlign: \"start\" | \"center\" | \"end\" | \"left\" | \"right\";\n textBaseline: \"top\" | \"middle\" | \"bottom\" | \"alphabetic\" | \"hanging\";\n};\n"]}
@@ -187,6 +187,8 @@ export declare const capabilities: {
187
187
  drawEllipse(): ReadonlySet<DrawingKind>;
188
188
  /** Phase-3 `path` drawing kind. @since 0.3 @stable */
189
189
  drawPath(): ReadonlySet<DrawingKind>;
190
+ /** `fill-between` filled-ribbon drawing kind. @since 0.4 @stable */
191
+ drawFillBetween(): ReadonlySet<DrawingKind>;
190
192
  /** Phase-3 `marker` drawing kind. @since 0.3 @stable */
191
193
  drawMarker(): ReadonlySet<DrawingKind>;
192
194
  /** Phase-3 `arc` drawing kind. @since 0.3 @stable */
@@ -288,14 +290,14 @@ export declare const capabilities: {
288
290
  /** All 6 line / ray drawing kinds. @since 0.3 @stable */
289
291
  allLineDrawings(): ReadonlySet<DrawingKind>;
290
292
  /**
291
- * All 8 box / shape drawing kinds. @since 0.3 @stable
293
+ * All 9 box / shape drawing kinds. @since 0.3 @stable
292
294
  *
293
295
  * @remarks Capability categories are orthogonal to budget buckets:
294
- * `polyline` and `path` are budgeted under the `polylines` bucket
295
- * and `marker` under `labels` — not the `boxes` bucket (see
296
- * `bucketFor` in `@invinite-org/chartlang-core`). An adapter that
297
- * declares this set must size those buckets accordingly or those
298
- * three kinds drop with `drawing-budget-exceeded`.
296
+ * `polyline`, `path`, and `fill-between` are budgeted under the
297
+ * `polylines` bucket and `marker` under `labels` — not the `boxes`
298
+ * bucket (see `bucketFor` in `@invinite-org/chartlang-core`). An
299
+ * adapter that declares this set must size those buckets accordingly
300
+ * or those four kinds drop with `drawing-budget-exceeded`.
299
301
  */
300
302
  allBoxDrawings(): ReadonlySet<DrawingKind>;
301
303
  /** All 3 curve drawing kinds. @since 0.3 @stable */
@@ -324,7 +326,7 @@ export declare const capabilities: {
324
326
  * Every drawing kind that ships in Phase 3 — the union of every
325
327
  * category group above. Canvas2d declares this set as its
326
328
  * `Capabilities.drawings` (Task 4) so the conformance suite
327
- * covers all 61 kinds end-to-end.
329
+ * covers all 62 non-table kinds end-to-end.
328
330
  *
329
331
  * @since 0.3
330
332
  * @stable
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/capabilities/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/capabilities/capabilities.ts"],"names":[],"mappings":"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"}
@@ -221,7 +221,8 @@ export const capabilities = {
221
221
  return { logs: enabled };
222
222
  },
223
223
  // ------------------------------------------------------------
224
- // Phase 3 — per-kind drawing builders (61). Each returns a
224
+ // Phase 3 — per-kind drawing builders (62, incl. the Phase-2
225
+ // `fill-between` ribbon). Each returns a
225
226
  // single-element `Set<DrawingKind>` so adapters can compose via
226
227
  // `capabilities.union(...)`. The 13 category-group builders +
227
228
  // `allPhase3Drawings()` below are the canonical user-facing
@@ -280,6 +281,10 @@ export const capabilities = {
280
281
  drawPath() {
281
282
  return new Set(["path"]);
282
283
  },
284
+ /** `fill-between` filled-ribbon drawing kind. @since 0.4 @stable */
285
+ drawFillBetween() {
286
+ return new Set(["fill-between"]);
287
+ },
283
288
  /** Phase-3 `marker` drawing kind. @since 0.3 @stable */
284
289
  drawMarker() {
285
290
  return new Set(["marker"]);
@@ -494,14 +499,14 @@ export const capabilities = {
494
499
  ]);
495
500
  },
496
501
  /**
497
- * All 8 box / shape drawing kinds. @since 0.3 @stable
502
+ * All 9 box / shape drawing kinds. @since 0.3 @stable
498
503
  *
499
504
  * @remarks Capability categories are orthogonal to budget buckets:
500
- * `polyline` and `path` are budgeted under the `polylines` bucket
501
- * and `marker` under `labels` — not the `boxes` bucket (see
502
- * `bucketFor` in `@invinite-org/chartlang-core`). An adapter that
503
- * declares this set must size those buckets accordingly or those
504
- * three kinds drop with `drawing-budget-exceeded`.
505
+ * `polyline`, `path`, and `fill-between` are budgeted under the
506
+ * `polylines` bucket and `marker` under `labels` — not the `boxes`
507
+ * bucket (see `bucketFor` in `@invinite-org/chartlang-core`). An
508
+ * adapter that declares this set must size those buckets accordingly
509
+ * or those four kinds drop with `drawing-budget-exceeded`.
505
510
  */
506
511
  allBoxDrawings() {
507
512
  return new Set([
@@ -512,6 +517,7 @@ export const capabilities = {
512
517
  "circle",
513
518
  "ellipse",
514
519
  "path",
520
+ "fill-between",
515
521
  "marker",
516
522
  ]);
517
523
  },
@@ -598,7 +604,7 @@ export const capabilities = {
598
604
  * Every drawing kind that ships in Phase 3 — the union of every
599
605
  * category group above. Canvas2d declares this set as its
600
606
  * `Capabilities.drawings` (Task 4) so the conformance suite
601
- * covers all 61 kinds end-to-end.
607
+ * covers all 62 non-table kinds end-to-end.
602
608
  *
603
609
  * @since 0.3
604
610
  * @stable
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/capabilities/capabilities.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 { DRAWING_KINDS } from \"@invinite-org/chartlang-core\";\n\nimport type { DrawingCounts, IntervalDescriptor } from \"@invinite-org/chartlang-core\";\n\nimport type { AlertChannel, DrawingKind, PlotKind, SymInfoField } from \"../types.js\";\n\n/**\n * Canonical Phase-5 plot-kind set. Adapters that can render the full\n * script-facing plot inventory can pass this directly to\n * `Capabilities.plots`.\n *\n * @since 0.5\n * @stable\n * @example\n * import { PHASE_5_PLOT_KINDS } from \"@invinite-org/chartlang-adapter-kit\";\n * const plots = new Set(PHASE_5_PLOT_KINDS);\n * void plots;\n */\nexport const PHASE_5_PLOT_KINDS: ReadonlyArray<PlotKind> = Object.freeze([\n \"line\",\n \"step-line\",\n \"horizontal-line\",\n \"histogram\",\n \"area\",\n \"filled-band\",\n \"label\",\n \"marker\",\n \"shape\",\n \"character\",\n \"arrow\",\n \"candle-override\",\n \"bar-override\",\n \"bg-color\",\n \"bar-color\",\n \"horizontal-histogram\",\n]);\n\n/**\n * Helpers that assemble the `ReadonlySet` pieces of a `Capabilities`\n * bag. Phase 1 shipped the three line variants + an alert-channel\n * builder + a generic `union` combinator. Phase 2 adds one builder per\n * new `PlotKind` (`histogram`, `area`, `filledBand`, `label`,\n * `marker`) plus `allPhase2Plots()` — the union of every Phase-1 +\n * Phase-2 kind.\n *\n * @since 0.1\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const plots = capabilities.allPhase2Plots();\n * const alerts = capabilities.alerts(\"toast\", \"log\");\n * const merged = capabilities.union(plots, capabilities.label());\n * void merged;\n */\nexport const capabilities = {\n line(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"line\"]);\n },\n stepLine(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"step-line\"]);\n },\n horizontalLine(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"horizontal-line\"]);\n },\n allLines(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"line\", \"step-line\", \"horizontal-line\"]);\n },\n /** Phase-2 histogram plot kind. @since 0.2 @stable */\n histogram(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"histogram\"]);\n },\n /** Phase-2 filled-area plot kind. @since 0.2 @stable */\n area(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"area\"]);\n },\n /** Phase-2 filled-band (between two polylines) plot kind.\n * @since 0.2 @stable */\n filledBand(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"filled-band\"]);\n },\n /** Phase-2 text-label plot kind. @since 0.2 @stable */\n label(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"label\"]);\n },\n /** Phase-2 discrete-marker plot kind. @since 0.2 @stable */\n marker(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"marker\"]);\n },\n /** Union of every plot kind that ships through Phase 2 — `line`,\n * `step-line`, `horizontal-line`, `histogram`, `area`,\n * `filled-band`, `label`, `marker`. Phase-5 kinds are deliberately\n * excluded; the bundled `capabilities.union(...)` combinator\n * composes additional sets when needed.\n * @since 0.2 @stable */\n allPhase2Plots(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\n \"line\",\n \"step-line\",\n \"horizontal-line\",\n \"histogram\",\n \"area\",\n \"filled-band\",\n \"label\",\n \"marker\",\n ]);\n },\n /** Union of every plot kind that ships through Phase 5.\n * @since 0.5 @stable */\n allPhase5Plots(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>(PHASE_5_PLOT_KINDS);\n },\n alerts(...channels: ReadonlyArray<AlertChannel>): ReadonlySet<AlertChannel> {\n return new Set<AlertChannel>(channels);\n },\n union<T>(...sets: ReadonlyArray<ReadonlySet<T>>): ReadonlySet<T> {\n const out = new Set<T>();\n for (const s of sets) {\n for (const v of s) {\n out.add(v);\n }\n }\n return out;\n },\n /**\n * Timeframe descriptors this adapter can deliver, preserving picker order.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.intervals([\n * { value: \"1D\", label: \"1 day\", group: \"daily\" },\n * ]);\n * void partial;\n */\n intervals(list: ReadonlyArray<IntervalDescriptor>): {\n intervals: ReadonlyArray<IntervalDescriptor>;\n } {\n return { intervals: Object.freeze(list.slice()) };\n },\n /**\n * Declares whether the adapter can deliver secondary candle streams.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.multiTimeframe(false);\n * void partial;\n */\n multiTimeframe(enabled: boolean): { multiTimeframe: boolean } {\n return { multiTimeframe: enabled };\n },\n /**\n * Declares the maximum supported sub-pane count for one script.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.subPanes(Number.MAX_SAFE_INTEGER);\n * void partial;\n */\n subPanes(max: number): { subPanes: number } {\n return { subPanes: max };\n },\n /**\n * Declares which `syminfo.*` fields this adapter populates.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.symInfoFields([\"ticker\", \"mintick\"]);\n * void partial;\n */\n symInfoFields(fields: ReadonlyArray<SymInfoField>): {\n symInfoFields: ReadonlySet<SymInfoField>;\n } {\n return { symInfoFields: new Set(fields) };\n },\n /**\n * Declares the adapter's per-script drawing-emission budget.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.maxDrawingsPerScript({\n * lines: 50, labels: 50, boxes: 50, polylines: 50, other: 50,\n * });\n * void partial;\n */\n maxDrawingsPerScript(counts: DrawingCounts): { maxDrawingsPerScript: DrawingCounts } {\n return { maxDrawingsPerScript: Object.freeze({ ...counts }) };\n },\n /**\n * Declares whether user-wired alert conditions are supported.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.alertConditions(false);\n * void partial;\n */\n alertConditions(enabled: boolean): { alertConditions: boolean } {\n return { alertConditions: enabled };\n },\n /**\n * Declares whether runtime log messages are rendered by the adapter.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.logs(false);\n * void partial;\n */\n logs(enabled: boolean): { logs: boolean } {\n return { logs: enabled };\n },\n\n // ------------------------------------------------------------\n // Phase 3 — per-kind drawing builders (61). Each returns a\n // single-element `Set<DrawingKind>` so adapters can compose via\n // `capabilities.union(...)`. The 13 category-group builders +\n // `allPhase3Drawings()` below are the canonical user-facing\n // surface; per-kind builders exist for precision opt-in.\n // @since 0.3 @stable\n // ------------------------------------------------------------\n\n /** Phase-3 `line` drawing kind. @since 0.3 @stable */\n drawLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"line\"]);\n },\n /** Phase-3 `horizontal-line` drawing kind. @since 0.3 @stable */\n drawHorizontalLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"horizontal-line\"]);\n },\n /** Phase-3 `horizontal-ray` drawing kind. @since 0.3 @stable */\n drawHorizontalRay(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"horizontal-ray\"]);\n },\n /** Phase-3 `vertical-line` drawing kind. @since 0.3 @stable */\n drawVerticalLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"vertical-line\"]);\n },\n /** Phase-3 `cross-line` drawing kind. @since 0.3 @stable */\n drawCrossLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cross-line\"]);\n },\n /** Phase-3 `trend-angle` drawing kind. @since 0.3 @stable */\n drawTrendAngle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"trend-angle\"]);\n },\n /** Phase-3 `rectangle` drawing kind. @since 0.3 @stable */\n drawRectangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"rectangle\"]);\n },\n /** Phase-3 `rotated-rectangle` drawing kind. @since 0.3 @stable */\n drawRotatedRectangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"rotated-rectangle\"]);\n },\n /** Phase-3 `triangle` drawing kind. @since 0.3 @stable */\n drawTriangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"triangle\"]);\n },\n /** Phase-3 `polyline` drawing kind. @since 0.3 @stable */\n drawPolyline(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"polyline\"]);\n },\n /** Phase-3 `circle` drawing kind. @since 0.3 @stable */\n drawCircle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"circle\"]);\n },\n /** Phase-3 `ellipse` drawing kind. @since 0.3 @stable */\n drawEllipse(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"ellipse\"]);\n },\n /** Phase-3 `path` drawing kind. @since 0.3 @stable */\n drawPath(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"path\"]);\n },\n /** Phase-3 `marker` drawing kind. @since 0.3 @stable */\n drawMarker(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"marker\"]);\n },\n /** Phase-3 `arc` drawing kind. @since 0.3 @stable */\n drawArc(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arc\"]);\n },\n /** Phase-3 `curve` drawing kind. @since 0.3 @stable */\n drawCurve(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"curve\"]);\n },\n /** Phase-3 `double-curve` drawing kind. @since 0.3 @stable */\n drawDoubleCurve(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"double-curve\"]);\n },\n /** Phase-3 `pen` drawing kind. @since 0.3 @stable */\n drawPen(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pen\"]);\n },\n /** Phase-3 `highlighter` drawing kind. @since 0.3 @stable */\n drawHighlighter(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"highlighter\"]);\n },\n /** Phase-3 `brush` drawing kind. @since 0.3 @stable */\n drawBrush(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"brush\"]);\n },\n /** Phase-3 `text` drawing kind. @since 0.3 @stable */\n drawText(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"text\"]);\n },\n /** Phase-3 `arrow` drawing kind. @since 0.3 @stable */\n drawArrow(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow\"]);\n },\n /** Phase-3 `arrow-marker` drawing kind. @since 0.3 @stable */\n drawArrowMarker(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-marker\"]);\n },\n /** Phase-3 `arrow-mark-up` drawing kind. @since 0.3 @stable */\n drawArrowMarkUp(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-mark-up\"]);\n },\n /** Phase-3 `arrow-mark-down` drawing kind. @since 0.3 @stable */\n drawArrowMarkDown(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-mark-down\"]);\n },\n /** Phase-3 `trend-channel` drawing kind. @since 0.3 @stable */\n drawTrendChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"trend-channel\"]);\n },\n /** Phase-3 `flat-top-bottom` drawing kind. @since 0.3 @stable */\n drawFlatTopBottom(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"flat-top-bottom\"]);\n },\n /** Phase-3 `disjoint-channel` drawing kind. @since 0.3 @stable */\n drawDisjointChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"disjoint-channel\"]);\n },\n /** Phase-3 `regression-trend` drawing kind. @since 0.3 @stable */\n drawRegressionTrend(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"regression-trend\"]);\n },\n /** Phase-3 `fib-retracement` drawing kind. @since 0.3 @stable */\n drawFibRetracement(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-retracement\"]);\n },\n /** Phase-3 `fib-trend-extension` drawing kind. @since 0.3 @stable */\n drawFibTrendExtension(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-trend-extension\"]);\n },\n /** Phase-3 `fib-channel` drawing kind. @since 0.3 @stable */\n drawFibChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-channel\"]);\n },\n /** Phase-3 `fib-time-zone` drawing kind. @since 0.3 @stable */\n drawFibTimeZone(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-time-zone\"]);\n },\n /** Phase-3 `fib-wedge` drawing kind. @since 0.3 @stable */\n drawFibWedge(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-wedge\"]);\n },\n /** Phase-3 `fib-speed-fan` drawing kind. @since 0.3 @stable */\n drawFibSpeedFan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-speed-fan\"]);\n },\n /** Phase-3 `fib-speed-arcs` drawing kind. @since 0.3 @stable */\n drawFibSpeedArcs(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-speed-arcs\"]);\n },\n /** Phase-3 `fib-spiral` drawing kind. @since 0.3 @stable */\n drawFibSpiral(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-spiral\"]);\n },\n /** Phase-3 `fib-circles` drawing kind. @since 0.3 @stable */\n drawFibCircles(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-circles\"]);\n },\n /** Phase-3 `fib-trend-time` drawing kind. @since 0.3 @stable */\n drawFibTrendTime(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-trend-time\"]);\n },\n /** Phase-3 `gann-box` drawing kind. @since 0.3 @stable */\n drawGannBox(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-box\"]);\n },\n /** Phase-3 `gann-square-fixed` drawing kind. @since 0.3 @stable */\n drawGannSquareFixed(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-square-fixed\"]);\n },\n /** Phase-3 `gann-square` drawing kind. @since 0.3 @stable */\n drawGannSquare(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-square\"]);\n },\n /** Phase-3 `gann-fan` drawing kind. @since 0.3 @stable */\n drawGannFan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-fan\"]);\n },\n /** Phase-3 `pitchfork` drawing kind. @since 0.3 @stable */\n drawPitchfork(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfork\"]);\n },\n /** Phase-3 `pitchfan` drawing kind. @since 0.3 @stable */\n drawPitchfan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfan\"]);\n },\n /** Phase-3 `xabcd-pattern` drawing kind. @since 0.3 @stable */\n drawXabcdPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"xabcd-pattern\"]);\n },\n /** Phase-3 `cypher-pattern` drawing kind. @since 0.3 @stable */\n drawCypherPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cypher-pattern\"]);\n },\n /** Phase-3 `head-and-shoulders` drawing kind. @since 0.3 @stable */\n drawHeadAndShoulders(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"head-and-shoulders\"]);\n },\n /** Phase-3 `abcd-pattern` drawing kind. @since 0.3 @stable */\n drawAbcdPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"abcd-pattern\"]);\n },\n /** Phase-3 `triangle-pattern` drawing kind. @since 0.3 @stable */\n drawTrianglePattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"triangle-pattern\"]);\n },\n /** Phase-3 `three-drives-pattern` drawing kind. @since 0.3 @stable */\n drawThreeDrivesPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"three-drives-pattern\"]);\n },\n /** Phase-3 `elliott-impulse-wave` drawing kind. @since 0.3 @stable */\n drawElliottImpulseWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-impulse-wave\"]);\n },\n /** Phase-3 `elliott-correction-wave` drawing kind. @since 0.3 @stable */\n drawElliottCorrectionWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-correction-wave\"]);\n },\n /** Phase-3 `elliott-triangle-wave` drawing kind. @since 0.3 @stable */\n drawElliottTriangleWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-triangle-wave\"]);\n },\n /** Phase-3 `elliott-double-combo` drawing kind. @since 0.3 @stable */\n drawElliottDoubleCombo(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-double-combo\"]);\n },\n /** Phase-3 `elliott-triple-combo` drawing kind. @since 0.3 @stable */\n drawElliottTripleCombo(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-triple-combo\"]);\n },\n /** Phase-3 `cyclic-lines` drawing kind. @since 0.3 @stable */\n drawCyclicLines(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cyclic-lines\"]);\n },\n /** Phase-3 `time-cycles` drawing kind. @since 0.3 @stable */\n drawTimeCycles(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"time-cycles\"]);\n },\n /** Phase-3 `sine-line` drawing kind. @since 0.3 @stable */\n drawSineLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"sine-line\"]);\n },\n /** Phase-3 `group` drawing kind. @since 0.3 @stable */\n drawGroup(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"group\"]);\n },\n /** Phase-3 `frame` drawing kind. @since 0.3 @stable */\n drawFrame(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"frame\"]);\n },\n /** Phase-5 `table` drawing kind. @since 0.5 @stable */\n drawTable(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"table\"]);\n },\n\n // ------------------------------------------------------------\n // Phase 3 — category-group builders (13). Each covers the kinds\n // of one §10.2 category. Combine via `union(...)` for adapters\n // that support multiple categories.\n // @since 0.3 @stable\n // ------------------------------------------------------------\n\n /** All 6 line / ray drawing kinds. @since 0.3 @stable */\n allLineDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"line\",\n \"horizontal-line\",\n \"horizontal-ray\",\n \"vertical-line\",\n \"cross-line\",\n \"trend-angle\",\n ]);\n },\n /**\n * All 8 box / shape drawing kinds. @since 0.3 @stable\n *\n * @remarks Capability categories are orthogonal to budget buckets:\n * `polyline` and `path` are budgeted under the `polylines` bucket\n * and `marker` under `labels` — not the `boxes` bucket (see\n * `bucketFor` in `@invinite-org/chartlang-core`). An adapter that\n * declares this set must size those buckets accordingly or those\n * three kinds drop with `drawing-budget-exceeded`.\n */\n allBoxDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"rectangle\",\n \"rotated-rectangle\",\n \"triangle\",\n \"polyline\",\n \"circle\",\n \"ellipse\",\n \"path\",\n \"marker\",\n ]);\n },\n /** All 3 curve drawing kinds. @since 0.3 @stable */\n allCurveDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arc\", \"curve\", \"double-curve\"]);\n },\n /** All 3 freehand drawing kinds. @since 0.3 @stable */\n allFreehandDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pen\", \"highlighter\", \"brush\"]);\n },\n /** All 5 annotation drawing kinds. @since 0.3 @stable */\n allAnnotationDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"text\",\n \"arrow\",\n \"arrow-marker\",\n \"arrow-mark-up\",\n \"arrow-mark-down\",\n ]);\n },\n /** All 4 channel drawing kinds. @since 0.3 @stable */\n allChannelDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"trend-channel\",\n \"flat-top-bottom\",\n \"disjoint-channel\",\n \"regression-trend\",\n ]);\n },\n /** All 10 fibonacci drawing kinds. @since 0.3 @stable */\n allFibDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"fib-retracement\",\n \"fib-trend-extension\",\n \"fib-channel\",\n \"fib-time-zone\",\n \"fib-wedge\",\n \"fib-speed-fan\",\n \"fib-speed-arcs\",\n \"fib-spiral\",\n \"fib-circles\",\n \"fib-trend-time\",\n ]);\n },\n /** All 4 gann drawing kinds. @since 0.3 @stable */\n allGannDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-box\", \"gann-square-fixed\", \"gann-square\", \"gann-fan\"]);\n },\n /** All 2 pitchfork drawing kinds. @since 0.3 @stable */\n allPitchforkDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfork\", \"pitchfan\"]);\n },\n /** All 6 harmonic-pattern drawing kinds. @since 0.3 @stable */\n allPatternDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"xabcd-pattern\",\n \"cypher-pattern\",\n \"head-and-shoulders\",\n \"abcd-pattern\",\n \"triangle-pattern\",\n \"three-drives-pattern\",\n ]);\n },\n /** All 5 elliott-wave drawing kinds. @since 0.3 @stable */\n allElliottDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"elliott-impulse-wave\",\n \"elliott-correction-wave\",\n \"elliott-triangle-wave\",\n \"elliott-double-combo\",\n \"elliott-triple-combo\",\n ]);\n },\n /** All 3 cycle drawing kinds. @since 0.3 @stable */\n allCycleDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cyclic-lines\", \"time-cycles\", \"sine-line\"]);\n },\n /** All 2 container drawing kinds. @since 0.3 @stable */\n allContainerDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"group\", \"frame\"]);\n },\n\n /**\n * Every drawing kind that ships in Phase 3 — the union of every\n * category group above. Canvas2d declares this set as its\n * `Capabilities.drawings` (Task 4) so the conformance suite\n * covers all 61 kinds end-to-end.\n *\n * @since 0.3\n * @stable\n */\n allPhase3Drawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>(DRAWING_KINDS.filter((kind) => kind !== \"table\"));\n },\n};\n"]}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/capabilities/capabilities.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 { DRAWING_KINDS } from \"@invinite-org/chartlang-core\";\n\nimport type { DrawingCounts, IntervalDescriptor } from \"@invinite-org/chartlang-core\";\n\nimport type { AlertChannel, DrawingKind, PlotKind, SymInfoField } from \"../types.js\";\n\n/**\n * Canonical Phase-5 plot-kind set. Adapters that can render the full\n * script-facing plot inventory can pass this directly to\n * `Capabilities.plots`.\n *\n * @since 0.5\n * @stable\n * @example\n * import { PHASE_5_PLOT_KINDS } from \"@invinite-org/chartlang-adapter-kit\";\n * const plots = new Set(PHASE_5_PLOT_KINDS);\n * void plots;\n */\nexport const PHASE_5_PLOT_KINDS: ReadonlyArray<PlotKind> = Object.freeze([\n \"line\",\n \"step-line\",\n \"horizontal-line\",\n \"histogram\",\n \"area\",\n \"filled-band\",\n \"label\",\n \"marker\",\n \"shape\",\n \"character\",\n \"arrow\",\n \"candle-override\",\n \"bar-override\",\n \"bg-color\",\n \"bar-color\",\n \"horizontal-histogram\",\n]);\n\n/**\n * Helpers that assemble the `ReadonlySet` pieces of a `Capabilities`\n * bag. Phase 1 shipped the three line variants + an alert-channel\n * builder + a generic `union` combinator. Phase 2 adds one builder per\n * new `PlotKind` (`histogram`, `area`, `filledBand`, `label`,\n * `marker`) plus `allPhase2Plots()` — the union of every Phase-1 +\n * Phase-2 kind.\n *\n * @since 0.1\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const plots = capabilities.allPhase2Plots();\n * const alerts = capabilities.alerts(\"toast\", \"log\");\n * const merged = capabilities.union(plots, capabilities.label());\n * void merged;\n */\nexport const capabilities = {\n line(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"line\"]);\n },\n stepLine(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"step-line\"]);\n },\n horizontalLine(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"horizontal-line\"]);\n },\n allLines(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"line\", \"step-line\", \"horizontal-line\"]);\n },\n /** Phase-2 histogram plot kind. @since 0.2 @stable */\n histogram(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"histogram\"]);\n },\n /** Phase-2 filled-area plot kind. @since 0.2 @stable */\n area(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"area\"]);\n },\n /** Phase-2 filled-band (between two polylines) plot kind.\n * @since 0.2 @stable */\n filledBand(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"filled-band\"]);\n },\n /** Phase-2 text-label plot kind. @since 0.2 @stable */\n label(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"label\"]);\n },\n /** Phase-2 discrete-marker plot kind. @since 0.2 @stable */\n marker(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\"marker\"]);\n },\n /** Union of every plot kind that ships through Phase 2 — `line`,\n * `step-line`, `horizontal-line`, `histogram`, `area`,\n * `filled-band`, `label`, `marker`. Phase-5 kinds are deliberately\n * excluded; the bundled `capabilities.union(...)` combinator\n * composes additional sets when needed.\n * @since 0.2 @stable */\n allPhase2Plots(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>([\n \"line\",\n \"step-line\",\n \"horizontal-line\",\n \"histogram\",\n \"area\",\n \"filled-band\",\n \"label\",\n \"marker\",\n ]);\n },\n /** Union of every plot kind that ships through Phase 5.\n * @since 0.5 @stable */\n allPhase5Plots(): ReadonlySet<PlotKind> {\n return new Set<PlotKind>(PHASE_5_PLOT_KINDS);\n },\n alerts(...channels: ReadonlyArray<AlertChannel>): ReadonlySet<AlertChannel> {\n return new Set<AlertChannel>(channels);\n },\n union<T>(...sets: ReadonlyArray<ReadonlySet<T>>): ReadonlySet<T> {\n const out = new Set<T>();\n for (const s of sets) {\n for (const v of s) {\n out.add(v);\n }\n }\n return out;\n },\n /**\n * Timeframe descriptors this adapter can deliver, preserving picker order.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.intervals([\n * { value: \"1D\", label: \"1 day\", group: \"daily\" },\n * ]);\n * void partial;\n */\n intervals(list: ReadonlyArray<IntervalDescriptor>): {\n intervals: ReadonlyArray<IntervalDescriptor>;\n } {\n return { intervals: Object.freeze(list.slice()) };\n },\n /**\n * Declares whether the adapter can deliver secondary candle streams.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.multiTimeframe(false);\n * void partial;\n */\n multiTimeframe(enabled: boolean): { multiTimeframe: boolean } {\n return { multiTimeframe: enabled };\n },\n /**\n * Declares the maximum supported sub-pane count for one script.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.subPanes(Number.MAX_SAFE_INTEGER);\n * void partial;\n */\n subPanes(max: number): { subPanes: number } {\n return { subPanes: max };\n },\n /**\n * Declares which `syminfo.*` fields this adapter populates.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.symInfoFields([\"ticker\", \"mintick\"]);\n * void partial;\n */\n symInfoFields(fields: ReadonlyArray<SymInfoField>): {\n symInfoFields: ReadonlySet<SymInfoField>;\n } {\n return { symInfoFields: new Set(fields) };\n },\n /**\n * Declares the adapter's per-script drawing-emission budget.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.maxDrawingsPerScript({\n * lines: 50, labels: 50, boxes: 50, polylines: 50, other: 50,\n * });\n * void partial;\n */\n maxDrawingsPerScript(counts: DrawingCounts): { maxDrawingsPerScript: DrawingCounts } {\n return { maxDrawingsPerScript: Object.freeze({ ...counts }) };\n },\n /**\n * Declares whether user-wired alert conditions are supported.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.alertConditions(false);\n * void partial;\n */\n alertConditions(enabled: boolean): { alertConditions: boolean } {\n return { alertConditions: enabled };\n },\n /**\n * Declares whether runtime log messages are rendered by the adapter.\n *\n * @since 0.4\n * @stable\n * @example\n * import { capabilities } from \"@invinite-org/chartlang-adapter-kit\";\n *\n * const partial = capabilities.logs(false);\n * void partial;\n */\n logs(enabled: boolean): { logs: boolean } {\n return { logs: enabled };\n },\n\n // ------------------------------------------------------------\n // Phase 3 — per-kind drawing builders (62, incl. the Phase-2\n // `fill-between` ribbon). Each returns a\n // single-element `Set<DrawingKind>` so adapters can compose via\n // `capabilities.union(...)`. The 13 category-group builders +\n // `allPhase3Drawings()` below are the canonical user-facing\n // surface; per-kind builders exist for precision opt-in.\n // @since 0.3 @stable\n // ------------------------------------------------------------\n\n /** Phase-3 `line` drawing kind. @since 0.3 @stable */\n drawLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"line\"]);\n },\n /** Phase-3 `horizontal-line` drawing kind. @since 0.3 @stable */\n drawHorizontalLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"horizontal-line\"]);\n },\n /** Phase-3 `horizontal-ray` drawing kind. @since 0.3 @stable */\n drawHorizontalRay(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"horizontal-ray\"]);\n },\n /** Phase-3 `vertical-line` drawing kind. @since 0.3 @stable */\n drawVerticalLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"vertical-line\"]);\n },\n /** Phase-3 `cross-line` drawing kind. @since 0.3 @stable */\n drawCrossLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cross-line\"]);\n },\n /** Phase-3 `trend-angle` drawing kind. @since 0.3 @stable */\n drawTrendAngle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"trend-angle\"]);\n },\n /** Phase-3 `rectangle` drawing kind. @since 0.3 @stable */\n drawRectangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"rectangle\"]);\n },\n /** Phase-3 `rotated-rectangle` drawing kind. @since 0.3 @stable */\n drawRotatedRectangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"rotated-rectangle\"]);\n },\n /** Phase-3 `triangle` drawing kind. @since 0.3 @stable */\n drawTriangle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"triangle\"]);\n },\n /** Phase-3 `polyline` drawing kind. @since 0.3 @stable */\n drawPolyline(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"polyline\"]);\n },\n /** Phase-3 `circle` drawing kind. @since 0.3 @stable */\n drawCircle(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"circle\"]);\n },\n /** Phase-3 `ellipse` drawing kind. @since 0.3 @stable */\n drawEllipse(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"ellipse\"]);\n },\n /** Phase-3 `path` drawing kind. @since 0.3 @stable */\n drawPath(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"path\"]);\n },\n /** `fill-between` filled-ribbon drawing kind. @since 0.4 @stable */\n drawFillBetween(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fill-between\"]);\n },\n /** Phase-3 `marker` drawing kind. @since 0.3 @stable */\n drawMarker(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"marker\"]);\n },\n /** Phase-3 `arc` drawing kind. @since 0.3 @stable */\n drawArc(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arc\"]);\n },\n /** Phase-3 `curve` drawing kind. @since 0.3 @stable */\n drawCurve(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"curve\"]);\n },\n /** Phase-3 `double-curve` drawing kind. @since 0.3 @stable */\n drawDoubleCurve(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"double-curve\"]);\n },\n /** Phase-3 `pen` drawing kind. @since 0.3 @stable */\n drawPen(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pen\"]);\n },\n /** Phase-3 `highlighter` drawing kind. @since 0.3 @stable */\n drawHighlighter(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"highlighter\"]);\n },\n /** Phase-3 `brush` drawing kind. @since 0.3 @stable */\n drawBrush(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"brush\"]);\n },\n /** Phase-3 `text` drawing kind. @since 0.3 @stable */\n drawText(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"text\"]);\n },\n /** Phase-3 `arrow` drawing kind. @since 0.3 @stable */\n drawArrow(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow\"]);\n },\n /** Phase-3 `arrow-marker` drawing kind. @since 0.3 @stable */\n drawArrowMarker(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-marker\"]);\n },\n /** Phase-3 `arrow-mark-up` drawing kind. @since 0.3 @stable */\n drawArrowMarkUp(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-mark-up\"]);\n },\n /** Phase-3 `arrow-mark-down` drawing kind. @since 0.3 @stable */\n drawArrowMarkDown(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arrow-mark-down\"]);\n },\n /** Phase-3 `trend-channel` drawing kind. @since 0.3 @stable */\n drawTrendChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"trend-channel\"]);\n },\n /** Phase-3 `flat-top-bottom` drawing kind. @since 0.3 @stable */\n drawFlatTopBottom(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"flat-top-bottom\"]);\n },\n /** Phase-3 `disjoint-channel` drawing kind. @since 0.3 @stable */\n drawDisjointChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"disjoint-channel\"]);\n },\n /** Phase-3 `regression-trend` drawing kind. @since 0.3 @stable */\n drawRegressionTrend(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"regression-trend\"]);\n },\n /** Phase-3 `fib-retracement` drawing kind. @since 0.3 @stable */\n drawFibRetracement(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-retracement\"]);\n },\n /** Phase-3 `fib-trend-extension` drawing kind. @since 0.3 @stable */\n drawFibTrendExtension(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-trend-extension\"]);\n },\n /** Phase-3 `fib-channel` drawing kind. @since 0.3 @stable */\n drawFibChannel(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-channel\"]);\n },\n /** Phase-3 `fib-time-zone` drawing kind. @since 0.3 @stable */\n drawFibTimeZone(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-time-zone\"]);\n },\n /** Phase-3 `fib-wedge` drawing kind. @since 0.3 @stable */\n drawFibWedge(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-wedge\"]);\n },\n /** Phase-3 `fib-speed-fan` drawing kind. @since 0.3 @stable */\n drawFibSpeedFan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-speed-fan\"]);\n },\n /** Phase-3 `fib-speed-arcs` drawing kind. @since 0.3 @stable */\n drawFibSpeedArcs(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-speed-arcs\"]);\n },\n /** Phase-3 `fib-spiral` drawing kind. @since 0.3 @stable */\n drawFibSpiral(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-spiral\"]);\n },\n /** Phase-3 `fib-circles` drawing kind. @since 0.3 @stable */\n drawFibCircles(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-circles\"]);\n },\n /** Phase-3 `fib-trend-time` drawing kind. @since 0.3 @stable */\n drawFibTrendTime(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"fib-trend-time\"]);\n },\n /** Phase-3 `gann-box` drawing kind. @since 0.3 @stable */\n drawGannBox(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-box\"]);\n },\n /** Phase-3 `gann-square-fixed` drawing kind. @since 0.3 @stable */\n drawGannSquareFixed(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-square-fixed\"]);\n },\n /** Phase-3 `gann-square` drawing kind. @since 0.3 @stable */\n drawGannSquare(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-square\"]);\n },\n /** Phase-3 `gann-fan` drawing kind. @since 0.3 @stable */\n drawGannFan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-fan\"]);\n },\n /** Phase-3 `pitchfork` drawing kind. @since 0.3 @stable */\n drawPitchfork(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfork\"]);\n },\n /** Phase-3 `pitchfan` drawing kind. @since 0.3 @stable */\n drawPitchfan(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfan\"]);\n },\n /** Phase-3 `xabcd-pattern` drawing kind. @since 0.3 @stable */\n drawXabcdPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"xabcd-pattern\"]);\n },\n /** Phase-3 `cypher-pattern` drawing kind. @since 0.3 @stable */\n drawCypherPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cypher-pattern\"]);\n },\n /** Phase-3 `head-and-shoulders` drawing kind. @since 0.3 @stable */\n drawHeadAndShoulders(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"head-and-shoulders\"]);\n },\n /** Phase-3 `abcd-pattern` drawing kind. @since 0.3 @stable */\n drawAbcdPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"abcd-pattern\"]);\n },\n /** Phase-3 `triangle-pattern` drawing kind. @since 0.3 @stable */\n drawTrianglePattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"triangle-pattern\"]);\n },\n /** Phase-3 `three-drives-pattern` drawing kind. @since 0.3 @stable */\n drawThreeDrivesPattern(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"three-drives-pattern\"]);\n },\n /** Phase-3 `elliott-impulse-wave` drawing kind. @since 0.3 @stable */\n drawElliottImpulseWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-impulse-wave\"]);\n },\n /** Phase-3 `elliott-correction-wave` drawing kind. @since 0.3 @stable */\n drawElliottCorrectionWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-correction-wave\"]);\n },\n /** Phase-3 `elliott-triangle-wave` drawing kind. @since 0.3 @stable */\n drawElliottTriangleWave(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-triangle-wave\"]);\n },\n /** Phase-3 `elliott-double-combo` drawing kind. @since 0.3 @stable */\n drawElliottDoubleCombo(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-double-combo\"]);\n },\n /** Phase-3 `elliott-triple-combo` drawing kind. @since 0.3 @stable */\n drawElliottTripleCombo(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"elliott-triple-combo\"]);\n },\n /** Phase-3 `cyclic-lines` drawing kind. @since 0.3 @stable */\n drawCyclicLines(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cyclic-lines\"]);\n },\n /** Phase-3 `time-cycles` drawing kind. @since 0.3 @stable */\n drawTimeCycles(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"time-cycles\"]);\n },\n /** Phase-3 `sine-line` drawing kind. @since 0.3 @stable */\n drawSineLine(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"sine-line\"]);\n },\n /** Phase-3 `group` drawing kind. @since 0.3 @stable */\n drawGroup(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"group\"]);\n },\n /** Phase-3 `frame` drawing kind. @since 0.3 @stable */\n drawFrame(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"frame\"]);\n },\n /** Phase-5 `table` drawing kind. @since 0.5 @stable */\n drawTable(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"table\"]);\n },\n\n // ------------------------------------------------------------\n // Phase 3 — category-group builders (13). Each covers the kinds\n // of one §10.2 category. Combine via `union(...)` for adapters\n // that support multiple categories.\n // @since 0.3 @stable\n // ------------------------------------------------------------\n\n /** All 6 line / ray drawing kinds. @since 0.3 @stable */\n allLineDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"line\",\n \"horizontal-line\",\n \"horizontal-ray\",\n \"vertical-line\",\n \"cross-line\",\n \"trend-angle\",\n ]);\n },\n /**\n * All 9 box / shape drawing kinds. @since 0.3 @stable\n *\n * @remarks Capability categories are orthogonal to budget buckets:\n * `polyline`, `path`, and `fill-between` are budgeted under the\n * `polylines` bucket and `marker` under `labels` — not the `boxes`\n * bucket (see `bucketFor` in `@invinite-org/chartlang-core`). An\n * adapter that declares this set must size those buckets accordingly\n * or those four kinds drop with `drawing-budget-exceeded`.\n */\n allBoxDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"rectangle\",\n \"rotated-rectangle\",\n \"triangle\",\n \"polyline\",\n \"circle\",\n \"ellipse\",\n \"path\",\n \"fill-between\",\n \"marker\",\n ]);\n },\n /** All 3 curve drawing kinds. @since 0.3 @stable */\n allCurveDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"arc\", \"curve\", \"double-curve\"]);\n },\n /** All 3 freehand drawing kinds. @since 0.3 @stable */\n allFreehandDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pen\", \"highlighter\", \"brush\"]);\n },\n /** All 5 annotation drawing kinds. @since 0.3 @stable */\n allAnnotationDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"text\",\n \"arrow\",\n \"arrow-marker\",\n \"arrow-mark-up\",\n \"arrow-mark-down\",\n ]);\n },\n /** All 4 channel drawing kinds. @since 0.3 @stable */\n allChannelDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"trend-channel\",\n \"flat-top-bottom\",\n \"disjoint-channel\",\n \"regression-trend\",\n ]);\n },\n /** All 10 fibonacci drawing kinds. @since 0.3 @stable */\n allFibDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"fib-retracement\",\n \"fib-trend-extension\",\n \"fib-channel\",\n \"fib-time-zone\",\n \"fib-wedge\",\n \"fib-speed-fan\",\n \"fib-speed-arcs\",\n \"fib-spiral\",\n \"fib-circles\",\n \"fib-trend-time\",\n ]);\n },\n /** All 4 gann drawing kinds. @since 0.3 @stable */\n allGannDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"gann-box\", \"gann-square-fixed\", \"gann-square\", \"gann-fan\"]);\n },\n /** All 2 pitchfork drawing kinds. @since 0.3 @stable */\n allPitchforkDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"pitchfork\", \"pitchfan\"]);\n },\n /** All 6 harmonic-pattern drawing kinds. @since 0.3 @stable */\n allPatternDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"xabcd-pattern\",\n \"cypher-pattern\",\n \"head-and-shoulders\",\n \"abcd-pattern\",\n \"triangle-pattern\",\n \"three-drives-pattern\",\n ]);\n },\n /** All 5 elliott-wave drawing kinds. @since 0.3 @stable */\n allElliottDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\n \"elliott-impulse-wave\",\n \"elliott-correction-wave\",\n \"elliott-triangle-wave\",\n \"elliott-double-combo\",\n \"elliott-triple-combo\",\n ]);\n },\n /** All 3 cycle drawing kinds. @since 0.3 @stable */\n allCycleDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"cyclic-lines\", \"time-cycles\", \"sine-line\"]);\n },\n /** All 2 container drawing kinds. @since 0.3 @stable */\n allContainerDrawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>([\"group\", \"frame\"]);\n },\n\n /**\n * Every drawing kind that ships in Phase 3 — the union of every\n * category group above. Canvas2d declares this set as its\n * `Capabilities.drawings` (Task 4) so the conformance suite\n * covers all 62 non-table kinds end-to-end.\n *\n * @since 0.3\n * @stable\n */\n allPhase3Drawings(): ReadonlySet<DrawingKind> {\n return new Set<DrawingKind>(DRAWING_KINDS.filter((kind) => kind !== \"table\"));\n },\n};\n"]}
@@ -0,0 +1,18 @@
1
+ import type { Point2 } from "../types.js";
2
+ /**
3
+ * Return the three vertices of a filled isoceles-triangle arrowhead at
4
+ * `to` pointing along the `from → to` direction. The order is
5
+ * `[tip, leftWing, rightWing]` so a caller paints a closed polyline
6
+ * `moveTo(tip) → lineTo(left) → lineTo(right) → close`. Pure — no `ctx`.
7
+ *
8
+ * `size` defaults to 8 CSS px (the wing length).
9
+ *
10
+ * @since 1.3
11
+ * @stable
12
+ * @example
13
+ * const tri = arrowheadPolygon({ x: 0, y: 0 }, { x: 100, y: 0 });
14
+ * // tri[0] === { x: 100, y: 0 } (tip)
15
+ * void tri;
16
+ */
17
+ export declare function arrowheadPolygon(from: Point2, to: Point2, size?: number): ReadonlyArray<Point2>;
18
+ //# sourceMappingURL=arrowhead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrowhead.d.ts","sourceRoot":"","sources":["../../../src/geometry/_lib/arrowhead.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAA+B,GACtC,aAAa,CAAC,MAAM,CAAC,CAWvB"}
@@ -0,0 +1,38 @@
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
+ // Arrowhead geometry ported from
5
+ // invinite/src/components/trading-chart/tools/arrow-tool.ts,
6
+ // invinite/src/components/trading-chart/tools/arrow-marker-tool.ts,
7
+ // commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
+ // Re-licensed MIT for chartlang.
9
+ const DEFAULT_ARROWHEAD_SIZE = 8;
10
+ const ARROWHEAD_HALF_ANGLE = Math.PI / 6; // 30° each side → 60° total
11
+ /**
12
+ * Return the three vertices of a filled isoceles-triangle arrowhead at
13
+ * `to` pointing along the `from → to` direction. The order is
14
+ * `[tip, leftWing, rightWing]` so a caller paints a closed polyline
15
+ * `moveTo(tip) → lineTo(left) → lineTo(right) → close`. Pure — no `ctx`.
16
+ *
17
+ * `size` defaults to 8 CSS px (the wing length).
18
+ *
19
+ * @since 1.3
20
+ * @stable
21
+ * @example
22
+ * const tri = arrowheadPolygon({ x: 0, y: 0 }, { x: 100, y: 0 });
23
+ * // tri[0] === { x: 100, y: 0 } (tip)
24
+ * void tri;
25
+ */
26
+ export function arrowheadPolygon(from, to, size = DEFAULT_ARROWHEAD_SIZE) {
27
+ const angle = Math.atan2(to.y - from.y, to.x - from.x);
28
+ const left = {
29
+ x: to.x - size * Math.cos(angle - ARROWHEAD_HALF_ANGLE),
30
+ y: to.y - size * Math.sin(angle - ARROWHEAD_HALF_ANGLE),
31
+ };
32
+ const right = {
33
+ x: to.x - size * Math.cos(angle + ARROWHEAD_HALF_ANGLE),
34
+ y: to.y - size * Math.sin(angle + ARROWHEAD_HALF_ANGLE),
35
+ };
36
+ return [to, left, right];
37
+ }
38
+ //# sourceMappingURL=arrowhead.js.map