@invinite-org/chartlang-runtime 1.0.2 → 1.1.1

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 (567) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +10 -2
  3. package/dist/buildComputeContext.js.map +1 -1
  4. package/dist/createScriptRunner.d.ts +55 -4
  5. package/dist/createScriptRunner.d.ts.map +1 -1
  6. package/dist/createScriptRunner.js +103 -35
  7. package/dist/createScriptRunner.js.map +1 -1
  8. package/dist/dep/DepOutputStore.d.ts +92 -0
  9. package/dist/dep/DepOutputStore.d.ts.map +1 -0
  10. package/dist/dep/DepOutputStore.js +0 -0
  11. package/dist/dep/DepOutputStore.js.map +1 -0
  12. package/dist/dep/DepRunner.d.ts +146 -0
  13. package/dist/dep/DepRunner.d.ts.map +1 -0
  14. package/dist/dep/DepRunner.js +243 -0
  15. package/dist/dep/DepRunner.js.map +1 -0
  16. package/dist/dep/depOutput.d.ts +50 -0
  17. package/dist/dep/depOutput.d.ts.map +1 -0
  18. package/dist/dep/depOutput.js +92 -0
  19. package/dist/dep/depOutput.js.map +1 -0
  20. package/dist/dep/emissionFilter.d.ts +70 -0
  21. package/dist/dep/emissionFilter.d.ts.map +1 -0
  22. package/dist/dep/emissionFilter.js +105 -0
  23. package/dist/dep/emissionFilter.js.map +1 -0
  24. package/dist/dep/index.d.ts +8 -0
  25. package/dist/dep/index.d.ts.map +1 -0
  26. package/dist/dep/index.js +7 -0
  27. package/dist/dep/index.js.map +1 -0
  28. package/dist/emit/alert.js.map +1 -1
  29. package/dist/emit/alertConditionEmission.js.map +1 -1
  30. package/dist/emit/applyPlotOverride.d.ts +24 -0
  31. package/dist/emit/applyPlotOverride.d.ts.map +1 -0
  32. package/dist/emit/applyPlotOverride.js +48 -0
  33. package/dist/emit/applyPlotOverride.js.map +1 -0
  34. package/dist/emit/draw/annotations/arrow.js +1 -1
  35. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  36. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  37. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  38. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  39. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  40. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  41. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  42. package/dist/emit/draw/annotations/text.js +1 -1
  43. package/dist/emit/draw/annotations/text.js.map +1 -1
  44. package/dist/emit/draw/boxes/circle.js +1 -1
  45. package/dist/emit/draw/boxes/circle.js.map +1 -1
  46. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  47. package/dist/emit/draw/boxes/ellipse.js +1 -1
  48. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  49. package/dist/emit/draw/boxes/marker.js +1 -1
  50. package/dist/emit/draw/boxes/marker.js.map +1 -1
  51. package/dist/emit/draw/boxes/path.d.ts +1 -1
  52. package/dist/emit/draw/boxes/path.js +1 -1
  53. package/dist/emit/draw/boxes/path.js.map +1 -1
  54. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  55. package/dist/emit/draw/boxes/polyline.js +1 -1
  56. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  57. package/dist/emit/draw/boxes/rectangle.js +1 -1
  58. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  59. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  60. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  61. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  62. package/dist/emit/draw/boxes/triangle.js +1 -1
  63. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  64. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  65. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  66. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  67. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  69. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  70. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  71. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  72. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  73. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  74. package/dist/emit/draw/channels/trendChannel.js +1 -1
  75. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  76. package/dist/emit/draw/containers/frame.d.ts +1 -1
  77. package/dist/emit/draw/containers/frame.js +2 -2
  78. package/dist/emit/draw/containers/frame.js.map +1 -1
  79. package/dist/emit/draw/containers/group.d.ts +1 -2
  80. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  81. package/dist/emit/draw/containers/group.js +2 -2
  82. package/dist/emit/draw/containers/group.js.map +1 -1
  83. package/dist/emit/draw/curves/arc.js +1 -1
  84. package/dist/emit/draw/curves/arc.js.map +1 -1
  85. package/dist/emit/draw/curves/brush.js +1 -1
  86. package/dist/emit/draw/curves/brush.js.map +1 -1
  87. package/dist/emit/draw/curves/curve.js +1 -1
  88. package/dist/emit/draw/curves/curve.js.map +1 -1
  89. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  90. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  91. package/dist/emit/draw/curves/highlighter.js +1 -1
  92. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  93. package/dist/emit/draw/curves/pen.js +1 -1
  94. package/dist/emit/draw/curves/pen.js.map +1 -1
  95. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  96. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  97. package/dist/emit/draw/cycles/sineLine.js +1 -1
  98. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  99. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  100. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  104. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  106. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  107. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  108. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  109. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  110. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  112. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  113. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  114. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  116. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  117. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  118. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  119. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  120. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  121. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  122. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  124. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  125. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  126. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  128. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  134. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  135. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  136. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  137. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  138. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  139. package/dist/emit/draw/gann/gannBox.js +1 -1
  140. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  141. package/dist/emit/draw/gann/gannFan.js +1 -1
  142. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  143. package/dist/emit/draw/gann/gannSquare.js +1 -1
  144. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  145. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  146. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  147. package/dist/emit/draw/handle.d.ts +2 -2
  148. package/dist/emit/draw/handle.js +2 -2
  149. package/dist/emit/draw/handle.js.map +1 -1
  150. package/dist/emit/draw/index.js.map +1 -1
  151. package/dist/emit/draw/lines/crossLine.js +1 -1
  152. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  154. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  155. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  156. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  157. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  158. package/dist/emit/draw/lines/line.d.ts +1 -1
  159. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  160. package/dist/emit/draw/lines/line.js +2 -3
  161. package/dist/emit/draw/lines/line.js.map +1 -1
  162. package/dist/emit/draw/lines/trendAngle.js +1 -1
  163. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  164. package/dist/emit/draw/lines/verticalLine.js +1 -1
  165. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  166. package/dist/emit/draw/namespace.d.ts +1 -1
  167. package/dist/emit/draw/namespace.js +1 -1
  168. package/dist/emit/draw/namespace.js.map +1 -1
  169. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  170. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  172. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  173. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  174. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  175. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  176. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  177. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  178. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  180. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  181. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  182. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  183. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  186. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  187. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  188. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  189. package/dist/emit/draw/pushDrawing.js.map +1 -1
  190. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  191. package/dist/emit/draw/subIdAllocator.js +1 -1
  192. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  193. package/dist/emit/draw/table/table.d.ts +1 -1
  194. package/dist/emit/draw/table/table.js.map +1 -1
  195. package/dist/emit/emissionsQueue.js.map +1 -1
  196. package/dist/emit/hash.js.map +1 -1
  197. package/dist/emit/hline.d.ts +6 -4
  198. package/dist/emit/hline.d.ts.map +1 -1
  199. package/dist/emit/hline.js +5 -2
  200. package/dist/emit/hline.js.map +1 -1
  201. package/dist/emit/index.d.ts +2 -1
  202. package/dist/emit/index.d.ts.map +1 -1
  203. package/dist/emit/index.js +2 -1
  204. package/dist/emit/index.js.map +1 -1
  205. package/dist/emit/logEmission.js.map +1 -1
  206. package/dist/emit/paneResolver.d.ts +52 -11
  207. package/dist/emit/paneResolver.d.ts.map +1 -1
  208. package/dist/emit/paneResolver.js +69 -26
  209. package/dist/emit/paneResolver.js.map +1 -1
  210. package/dist/emit/plot.d.ts.map +1 -1
  211. package/dist/emit/plot.js +2 -1
  212. package/dist/emit/plot.js.map +1 -1
  213. package/dist/emit/runtimeError.js.map +1 -1
  214. package/dist/execution/dispose.d.ts.map +1 -1
  215. package/dist/execution/dispose.js +7 -0
  216. package/dist/execution/dispose.js.map +1 -1
  217. package/dist/execution/drain.js.map +1 -1
  218. package/dist/execution/index.js.map +1 -1
  219. package/dist/execution/onBarClose.d.ts +9 -13
  220. package/dist/execution/onBarClose.d.ts.map +1 -1
  221. package/dist/execution/onBarClose.js +28 -59
  222. package/dist/execution/onBarClose.js.map +1 -1
  223. package/dist/execution/onBarTick.d.ts +4 -10
  224. package/dist/execution/onBarTick.d.ts.map +1 -1
  225. package/dist/execution/onBarTick.js +24 -57
  226. package/dist/execution/onBarTick.js.map +1 -1
  227. package/dist/execution/onHistory.js.map +1 -1
  228. package/dist/execution/runComputeStep.d.ts +68 -0
  229. package/dist/execution/runComputeStep.d.ts.map +1 -0
  230. package/dist/execution/runComputeStep.js +96 -0
  231. package/dist/execution/runComputeStep.js.map +1 -0
  232. package/dist/execution/secondaryStream.js.map +1 -1
  233. package/dist/index.d.ts +3 -1
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +2 -1
  236. package/dist/index.js.map +1 -1
  237. package/dist/inputs/index.js.map +1 -1
  238. package/dist/inputs/resolveInputs.js.map +1 -1
  239. package/dist/internal.d.ts +12 -0
  240. package/dist/internal.d.ts.map +1 -0
  241. package/dist/internal.js +14 -0
  242. package/dist/internal.js.map +1 -0
  243. package/dist/persistentStateStore.js.map +1 -1
  244. package/dist/persistentStateStore.runtime.d.ts +18 -4
  245. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  246. package/dist/persistentStateStore.runtime.js +111 -18
  247. package/dist/persistentStateStore.runtime.js.map +1 -1
  248. package/dist/persistentStateStore.validate.d.ts +11 -1
  249. package/dist/persistentStateStore.validate.d.ts.map +1 -1
  250. package/dist/persistentStateStore.validate.js +32 -3
  251. package/dist/persistentStateStore.validate.js.map +1 -1
  252. package/dist/primitives.js.map +1 -1
  253. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  254. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  255. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  256. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  257. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  258. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  259. package/dist/request/index.js.map +1 -1
  260. package/dist/request/lowerTf.js.map +1 -1
  261. package/dist/request/pushOnce.js.map +1 -1
  262. package/dist/request/requestNamespace.js.map +1 -1
  263. package/dist/request/security.js.map +1 -1
  264. package/dist/request/streamBars.js.map +1 -1
  265. package/dist/ringBuffer.d.ts +2 -2
  266. package/dist/ringBuffer.js +1 -1
  267. package/dist/ringBuffer.js.map +1 -1
  268. package/dist/runtimeContext.d.ts +65 -7
  269. package/dist/runtimeContext.d.ts.map +1 -1
  270. package/dist/runtimeContext.js.map +1 -1
  271. package/dist/seriesView.d.ts +1 -1
  272. package/dist/seriesView.js +1 -1
  273. package/dist/seriesView.js.map +1 -1
  274. package/dist/state/index.js.map +1 -1
  275. package/dist/state/lifecycle.js.map +1 -1
  276. package/dist/state/stateNamespace.d.ts.map +1 -1
  277. package/dist/state/stateNamespace.js +13 -2
  278. package/dist/state/stateNamespace.js.map +1 -1
  279. package/dist/state/stateSlot.js.map +1 -1
  280. package/dist/stateStore.d.ts +7 -4
  281. package/dist/stateStore.d.ts.map +1 -1
  282. package/dist/stateStore.js.map +1 -1
  283. package/dist/streamState.d.ts +1 -1
  284. package/dist/streamState.js +1 -1
  285. package/dist/streamState.js.map +1 -1
  286. package/dist/ta/adl.js +2 -2
  287. package/dist/ta/adl.js.map +1 -1
  288. package/dist/ta/adr.d.ts +3 -3
  289. package/dist/ta/adr.js +5 -5
  290. package/dist/ta/adr.js.map +1 -1
  291. package/dist/ta/adx.d.ts +1 -1
  292. package/dist/ta/adx.js +3 -3
  293. package/dist/ta/adx.js.map +1 -1
  294. package/dist/ta/alma.d.ts +3 -3
  295. package/dist/ta/alma.js +5 -5
  296. package/dist/ta/alma.js.map +1 -1
  297. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  298. package/dist/ta/anchoredVwap.d.ts +1 -1
  299. package/dist/ta/anchoredVwap.js +3 -3
  300. package/dist/ta/anchoredVwap.js.map +1 -1
  301. package/dist/ta/ao.js +2 -2
  302. package/dist/ta/ao.js.map +1 -1
  303. package/dist/ta/aroon.js +2 -2
  304. package/dist/ta/aroon.js.map +1 -1
  305. package/dist/ta/aroonOsc.js +2 -2
  306. package/dist/ta/aroonOsc.js.map +1 -1
  307. package/dist/ta/atr.d.ts +1 -1
  308. package/dist/ta/atr.js +3 -3
  309. package/dist/ta/atr.js.map +1 -1
  310. package/dist/ta/barssince.js +1 -1
  311. package/dist/ta/barssince.js.map +1 -1
  312. package/dist/ta/bb.d.ts +1 -1
  313. package/dist/ta/bb.js +3 -3
  314. package/dist/ta/bb.js.map +1 -1
  315. package/dist/ta/bbPercentB.js +2 -2
  316. package/dist/ta/bbPercentB.js.map +1 -1
  317. package/dist/ta/bbw.js +2 -2
  318. package/dist/ta/bbw.js.map +1 -1
  319. package/dist/ta/bop.js +2 -2
  320. package/dist/ta/bop.js.map +1 -1
  321. package/dist/ta/cci.js +2 -2
  322. package/dist/ta/cci.js.map +1 -1
  323. package/dist/ta/chaikinOsc.d.ts +1 -1
  324. package/dist/ta/chaikinOsc.js +3 -3
  325. package/dist/ta/chaikinOsc.js.map +1 -1
  326. package/dist/ta/chandeKrollStop.d.ts +1 -1
  327. package/dist/ta/chandeKrollStop.js +3 -3
  328. package/dist/ta/chandeKrollStop.js.map +1 -1
  329. package/dist/ta/chandelier.d.ts +1 -1
  330. package/dist/ta/chandelier.js +3 -3
  331. package/dist/ta/chandelier.js.map +1 -1
  332. package/dist/ta/change.js +1 -1
  333. package/dist/ta/change.js.map +1 -1
  334. package/dist/ta/chop.js +2 -2
  335. package/dist/ta/chop.js.map +1 -1
  336. package/dist/ta/cmf.js +2 -2
  337. package/dist/ta/cmf.js.map +1 -1
  338. package/dist/ta/cmo.js +2 -2
  339. package/dist/ta/cmo.js.map +1 -1
  340. package/dist/ta/connorsRsi.d.ts +1 -1
  341. package/dist/ta/connorsRsi.js +3 -3
  342. package/dist/ta/connorsRsi.js.map +1 -1
  343. package/dist/ta/coppock.js +2 -2
  344. package/dist/ta/coppock.js.map +1 -1
  345. package/dist/ta/crossover.d.ts +1 -1
  346. package/dist/ta/crossover.js +2 -2
  347. package/dist/ta/crossover.js.map +1 -1
  348. package/dist/ta/crossunder.d.ts +1 -1
  349. package/dist/ta/crossunder.js +2 -2
  350. package/dist/ta/crossunder.js.map +1 -1
  351. package/dist/ta/dema.js +2 -2
  352. package/dist/ta/dema.js.map +1 -1
  353. package/dist/ta/dmi.d.ts +1 -1
  354. package/dist/ta/dmi.js +3 -3
  355. package/dist/ta/dmi.js.map +1 -1
  356. package/dist/ta/donchian.js +2 -2
  357. package/dist/ta/donchian.js.map +1 -1
  358. package/dist/ta/dpo.js +2 -2
  359. package/dist/ta/dpo.js.map +1 -1
  360. package/dist/ta/ema.d.ts +1 -1
  361. package/dist/ta/ema.js +3 -3
  362. package/dist/ta/ema.js.map +1 -1
  363. package/dist/ta/envelope.js +2 -2
  364. package/dist/ta/envelope.js.map +1 -1
  365. package/dist/ta/eom.d.ts +1 -1
  366. package/dist/ta/eom.js +3 -3
  367. package/dist/ta/eom.js.map +1 -1
  368. package/dist/ta/fisher.js +2 -2
  369. package/dist/ta/fisher.js.map +1 -1
  370. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  371. package/dist/ta/highest.js +1 -1
  372. package/dist/ta/highest.js.map +1 -1
  373. package/dist/ta/historicalVolatility.d.ts +1 -1
  374. package/dist/ta/historicalVolatility.js +3 -3
  375. package/dist/ta/historicalVolatility.js.map +1 -1
  376. package/dist/ta/hma.js +2 -2
  377. package/dist/ta/hma.js.map +1 -1
  378. package/dist/ta/ichimoku.d.ts +1 -1
  379. package/dist/ta/ichimoku.js +3 -3
  380. package/dist/ta/ichimoku.js.map +1 -1
  381. package/dist/ta/index.js.map +1 -1
  382. package/dist/ta/kama.js +2 -2
  383. package/dist/ta/kama.js.map +1 -1
  384. package/dist/ta/keltner.js +2 -2
  385. package/dist/ta/keltner.js.map +1 -1
  386. package/dist/ta/klinger.js +2 -2
  387. package/dist/ta/klinger.js.map +1 -1
  388. package/dist/ta/kst.js +2 -2
  389. package/dist/ta/kst.js.map +1 -1
  390. package/dist/ta/lib/adxFromDi.js +2 -2
  391. package/dist/ta/lib/adxFromDi.js.map +1 -1
  392. package/dist/ta/lib/applyOffset.js +2 -2
  393. package/dist/ta/lib/applyOffset.js.map +1 -1
  394. package/dist/ta/lib/computeMa.js +2 -2
  395. package/dist/ta/lib/computeMa.js.map +1 -1
  396. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  397. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  398. package/dist/ta/lib/directionalState.js +2 -2
  399. package/dist/ta/lib/directionalState.js.map +1 -1
  400. package/dist/ta/lib/donchianMid.js +2 -2
  401. package/dist/ta/lib/donchianMid.js.map +1 -1
  402. package/dist/ta/lib/emaFloat64.js +2 -2
  403. package/dist/ta/lib/emaFloat64.js.map +1 -1
  404. package/dist/ta/lib/linearRegression.js +2 -2
  405. package/dist/ta/lib/linearRegression.js.map +1 -1
  406. package/dist/ta/lib/maTypes.js.map +1 -1
  407. package/dist/ta/lib/pearson.js +2 -2
  408. package/dist/ta/lib/pearson.js.map +1 -1
  409. package/dist/ta/lib/pickCandleSource.js +2 -2
  410. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  411. package/dist/ta/lib/readSourceField.js +2 -2
  412. package/dist/ta/lib/readSourceField.js.map +1 -1
  413. package/dist/ta/lib/rollingStddev.js +2 -2
  414. package/dist/ta/lib/rollingStddev.js.map +1 -1
  415. package/dist/ta/lib/smaFloat64.js +2 -2
  416. package/dist/ta/lib/smaFloat64.js.map +1 -1
  417. package/dist/ta/lib/smmaFloat64.js +2 -2
  418. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  419. package/dist/ta/lib/sourceValue.js.map +1 -1
  420. package/dist/ta/lib/trSeries.js +2 -2
  421. package/dist/ta/lib/trSeries.js.map +1 -1
  422. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  423. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  424. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  425. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  426. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  427. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  428. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  429. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  430. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  431. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  432. package/dist/ta/lib/vwmaFloat64.js +2 -2
  433. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  434. package/dist/ta/lib/wilderDirectional.js +2 -2
  435. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  436. package/dist/ta/lib/wilderSmoothing.js +2 -2
  437. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  438. package/dist/ta/lib/wmaFloat64.js +2 -2
  439. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  440. package/dist/ta/lowest.js +1 -1
  441. package/dist/ta/lowest.js.map +1 -1
  442. package/dist/ta/lsma.js +2 -2
  443. package/dist/ta/lsma.js.map +1 -1
  444. package/dist/ta/maRibbon.js +2 -2
  445. package/dist/ta/maRibbon.js.map +1 -1
  446. package/dist/ta/macd.d.ts +1 -1
  447. package/dist/ta/macd.js +4 -4
  448. package/dist/ta/macd.js.map +1 -1
  449. package/dist/ta/massIndex.d.ts +1 -1
  450. package/dist/ta/massIndex.js +3 -3
  451. package/dist/ta/massIndex.js.map +1 -1
  452. package/dist/ta/mcginley.js +2 -2
  453. package/dist/ta/mcginley.js.map +1 -1
  454. package/dist/ta/median.js +2 -2
  455. package/dist/ta/median.js.map +1 -1
  456. package/dist/ta/mfi.d.ts +1 -1
  457. package/dist/ta/mfi.js +3 -3
  458. package/dist/ta/mfi.js.map +1 -1
  459. package/dist/ta/momentum.js +2 -2
  460. package/dist/ta/momentum.js.map +1 -1
  461. package/dist/ta/netVolume.d.ts +1 -1
  462. package/dist/ta/netVolume.js +3 -3
  463. package/dist/ta/netVolume.js.map +1 -1
  464. package/dist/ta/nvi.d.ts +1 -1
  465. package/dist/ta/nvi.js +3 -3
  466. package/dist/ta/nvi.js.map +1 -1
  467. package/dist/ta/nz.js +1 -1
  468. package/dist/ta/nz.js.map +1 -1
  469. package/dist/ta/obv.js +2 -2
  470. package/dist/ta/obv.js.map +1 -1
  471. package/dist/ta/persistence.js.map +1 -1
  472. package/dist/ta/pivotsHighLow.js +2 -2
  473. package/dist/ta/pivotsHighLow.js.map +1 -1
  474. package/dist/ta/pivotsStandard.d.ts +1 -1
  475. package/dist/ta/pivotsStandard.js +3 -3
  476. package/dist/ta/pivotsStandard.js.map +1 -1
  477. package/dist/ta/pmo.js +2 -2
  478. package/dist/ta/pmo.js.map +1 -1
  479. package/dist/ta/ppo.d.ts +1 -1
  480. package/dist/ta/ppo.js +3 -3
  481. package/dist/ta/ppo.js.map +1 -1
  482. package/dist/ta/psar.js +2 -2
  483. package/dist/ta/psar.js.map +1 -1
  484. package/dist/ta/pvi.d.ts +1 -1
  485. package/dist/ta/pvi.js +3 -3
  486. package/dist/ta/pvi.js.map +1 -1
  487. package/dist/ta/pvo.d.ts +1 -1
  488. package/dist/ta/pvo.js +3 -3
  489. package/dist/ta/pvo.js.map +1 -1
  490. package/dist/ta/pvt.d.ts +1 -1
  491. package/dist/ta/pvt.js +3 -3
  492. package/dist/ta/pvt.js.map +1 -1
  493. package/dist/ta/registry.js.map +1 -1
  494. package/dist/ta/roc.js +2 -2
  495. package/dist/ta/roc.js.map +1 -1
  496. package/dist/ta/rsi.d.ts +1 -1
  497. package/dist/ta/rsi.js +3 -3
  498. package/dist/ta/rsi.js.map +1 -1
  499. package/dist/ta/rvgi.js +2 -2
  500. package/dist/ta/rvgi.js.map +1 -1
  501. package/dist/ta/rvi.d.ts +1 -1
  502. package/dist/ta/rvi.js +3 -3
  503. package/dist/ta/rvi.js.map +1 -1
  504. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  505. package/dist/ta/sma.d.ts +1 -1
  506. package/dist/ta/sma.js +3 -3
  507. package/dist/ta/sma.js.map +1 -1
  508. package/dist/ta/smi.js +2 -2
  509. package/dist/ta/smi.js.map +1 -1
  510. package/dist/ta/smma.js +2 -2
  511. package/dist/ta/smma.js.map +1 -1
  512. package/dist/ta/stdev.d.ts +1 -1
  513. package/dist/ta/stdev.js +3 -3
  514. package/dist/ta/stdev.js.map +1 -1
  515. package/dist/ta/stoch.js +2 -2
  516. package/dist/ta/stoch.js.map +1 -1
  517. package/dist/ta/stochRsi.js +2 -2
  518. package/dist/ta/stochRsi.js.map +1 -1
  519. package/dist/ta/supertrend.d.ts +1 -1
  520. package/dist/ta/supertrend.js +3 -3
  521. package/dist/ta/supertrend.js.map +1 -1
  522. package/dist/ta/tema.js +2 -2
  523. package/dist/ta/tema.js.map +1 -1
  524. package/dist/ta/trendStrengthIndex.d.ts +2 -2
  525. package/dist/ta/trendStrengthIndex.js +4 -4
  526. package/dist/ta/trendStrengthIndex.js.map +1 -1
  527. package/dist/ta/trix.d.ts +1 -1
  528. package/dist/ta/trix.js +3 -3
  529. package/dist/ta/trix.js.map +1 -1
  530. package/dist/ta/tsi.js +2 -2
  531. package/dist/ta/tsi.js.map +1 -1
  532. package/dist/ta/ulcerIndex.js +2 -2
  533. package/dist/ta/ulcerIndex.js.map +1 -1
  534. package/dist/ta/ultimateOsc.js +2 -2
  535. package/dist/ta/ultimateOsc.js.map +1 -1
  536. package/dist/ta/valuewhen.js +1 -1
  537. package/dist/ta/valuewhen.js.map +1 -1
  538. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  539. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  540. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  541. package/dist/ta/vol.js +2 -2
  542. package/dist/ta/vol.js.map +1 -1
  543. package/dist/ta/volatilityStop.d.ts +1 -1
  544. package/dist/ta/volatilityStop.js +3 -3
  545. package/dist/ta/volatilityStop.js.map +1 -1
  546. package/dist/ta/vortex.d.ts +1 -1
  547. package/dist/ta/vortex.js +3 -3
  548. package/dist/ta/vortex.js.map +1 -1
  549. package/dist/ta/vwap.d.ts +3 -3
  550. package/dist/ta/vwap.js +5 -5
  551. package/dist/ta/vwap.js.map +1 -1
  552. package/dist/ta/vwma.js +2 -2
  553. package/dist/ta/vwma.js.map +1 -1
  554. package/dist/ta/williamsFractal.js +2 -2
  555. package/dist/ta/williamsFractal.js.map +1 -1
  556. package/dist/ta/williamsR.js +2 -2
  557. package/dist/ta/williamsR.js.map +1 -1
  558. package/dist/ta/wma.js +2 -2
  559. package/dist/ta/wma.js.map +1 -1
  560. package/dist/ta/zigZag.js +2 -2
  561. package/dist/ta/zigZag.js.map +1 -1
  562. package/dist/views/barstateView.js.map +1 -1
  563. package/dist/views/index.js.map +1 -1
  564. package/dist/views/refreshRuntimeViews.js.map +1 -1
  565. package/dist/views/symInfoView.js.map +1 -1
  566. package/dist/views/timeframeView.js.map +1 -1
  567. package/package.json +7 -3
@@ -0,0 +1,70 @@
1
+ import type { MutableRunnerEmissions } from "../runtimeContext.js";
2
+ import type { DepOutputStore } from "./DepOutputStore.js";
3
+ /**
4
+ * View of a `DepRunner` the emission filter reads. Carries the
5
+ * dep-specific slot-id prefix, the declared output titles (for NaN
6
+ * padding), and the runner's own emission queue.
7
+ *
8
+ * @since 0.7
9
+ * @stable
10
+ * @example
11
+ * const v: DepRunnerLike = {
12
+ * kind: "dep",
13
+ * localId: "fastTrend",
14
+ * slotIdPrefix: "dep:fastTrend/",
15
+ * declaredOutputs: ["line"],
16
+ * emissions: { plots: [], drawings: [], alerts: [], alertConditions: [], logs: [], diagnostics: [], fromBar: 0, toBar: 0 },
17
+ * };
18
+ * void v;
19
+ */
20
+ export type DepRunnerLike = Readonly<{
21
+ readonly kind: "dep";
22
+ readonly localId: string;
23
+ readonly slotIdPrefix: string;
24
+ readonly declaredOutputs: ReadonlyArray<string>;
25
+ readonly emissions: MutableRunnerEmissions;
26
+ }>;
27
+ /**
28
+ * View of a `SiblingRunner` the emission filter reads. Same shape as
29
+ * `DepRunnerLike` but keyed by the sibling's exported binding name and
30
+ * with a different slot-id prefix.
31
+ *
32
+ * @since 0.7
33
+ * @stable
34
+ * @example
35
+ * const v: SiblingRunnerLike = {
36
+ * kind: "sibling",
37
+ * exportName: "slowTrend",
38
+ * slotIdPrefix: "export:slowTrend/",
39
+ * declaredOutputs: ["line"],
40
+ * emissions: { plots: [], drawings: [], alerts: [], alertConditions: [], logs: [], diagnostics: [], fromBar: 0, toBar: 0 },
41
+ * };
42
+ * void v;
43
+ */
44
+ export type SiblingRunnerLike = Readonly<{
45
+ readonly kind: "sibling";
46
+ readonly exportName: string;
47
+ readonly slotIdPrefix: string;
48
+ readonly declaredOutputs: ReadonlyArray<string>;
49
+ readonly emissions: MutableRunnerEmissions;
50
+ }>;
51
+ /**
52
+ * Apply the dep / sibling emission policy. Captures titled plots into
53
+ * the shared {@link DepOutputStore}, drops private-dep visuals, prefixes
54
+ * sibling emissions with `export:<exportName>/`, and namespaces every
55
+ * diagnostic with the runner's slot-id prefix. Always resets the
56
+ * runner's queue at the end so the next bar starts clean.
57
+ *
58
+ * Per-bar NaN padding: for every declared output that the runner did
59
+ * NOT call `plot(value, { title: "<output>" })` on this bar, the
60
+ * filter appends a NaN to the store so the consumer's series stays
61
+ * continuous (NaN gaps where the producer skipped).
62
+ *
63
+ * @since 0.7
64
+ * @stable
65
+ * @example
66
+ * // import { applyDepEmissionPolicy } from "@invinite-org/chartlang-runtime";
67
+ * // applyDepEmissionPolicy(dep, parentEmissions, depOutputStore);
68
+ */
69
+ export declare function applyDepEmissionPolicy(runner: DepRunnerLike | SiblingRunnerLike, parentEmissions: MutableRunnerEmissions, depOutputStore: DepOutputStore): void;
70
+ //# sourceMappingURL=emissionFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissionFilter.d.ts","sourceRoot":"","sources":["../../src/dep/emissionFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;CAC9C,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;CAC9C,CAAC,CAAC;AAuBH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EACzC,eAAe,EAAE,sBAAsB,EACvC,cAAc,EAAE,cAAc,GAC/B,IAAI,CAwEN"}
@@ -0,0 +1,105 @@
1
+ // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
+ // See the LICENSE file in the repo root for full license text.
3
+ function prefixSlotId(slotId, prefix) {
4
+ return `${prefix}${slotId}`;
5
+ }
6
+ function prefixNullableSlotId(slotId, prefix) {
7
+ return slotId === null ? null : prefixSlotId(slotId, prefix);
8
+ }
9
+ function resetEmissions(emissions) {
10
+ emissions.plots = [];
11
+ emissions.drawings = [];
12
+ emissions.alerts = [];
13
+ emissions.alertConditions = [];
14
+ emissions.logs = [];
15
+ emissions.diagnostics = [];
16
+ }
17
+ function producerIdOf(runner) {
18
+ return runner.kind === "dep" ? runner.localId : runner.exportName;
19
+ }
20
+ /**
21
+ * Apply the dep / sibling emission policy. Captures titled plots into
22
+ * the shared {@link DepOutputStore}, drops private-dep visuals, prefixes
23
+ * sibling emissions with `export:<exportName>/`, and namespaces every
24
+ * diagnostic with the runner's slot-id prefix. Always resets the
25
+ * runner's queue at the end so the next bar starts clean.
26
+ *
27
+ * Per-bar NaN padding: for every declared output that the runner did
28
+ * NOT call `plot(value, { title: "<output>" })` on this bar, the
29
+ * filter appends a NaN to the store so the consumer's series stays
30
+ * continuous (NaN gaps where the producer skipped).
31
+ *
32
+ * @since 0.7
33
+ * @stable
34
+ * @example
35
+ * // import { applyDepEmissionPolicy } from "@invinite-org/chartlang-runtime";
36
+ * // applyDepEmissionPolicy(dep, parentEmissions, depOutputStore);
37
+ */
38
+ export function applyDepEmissionPolicy(runner, parentEmissions, depOutputStore) {
39
+ const producerId = producerIdOf(runner);
40
+ const declared = new Set(runner.declaredOutputs);
41
+ const pushedTitles = new Set();
42
+ for (const plot of runner.emissions.plots) {
43
+ const title = plot.title;
44
+ if (declared.has(title)) {
45
+ depOutputStore.push(producerId, title, plot.value ?? Number.NaN);
46
+ pushedTitles.add(title);
47
+ }
48
+ else if (runner.kind === "dep") {
49
+ // Untitled / unknown-title plot in a private dep — surface as
50
+ // a diagnostic; the visual is still dropped.
51
+ const diag = {
52
+ kind: "diagnostic",
53
+ severity: "warning",
54
+ code: "dep-output-not-titled",
55
+ message: title === ""
56
+ ? `dep "${runner.localId}" emitted an untitled plot`
57
+ : `dep "${runner.localId}" emitted plot with undeclared title "${title}"`,
58
+ slotId: prefixSlotId(plot.slotId, runner.slotIdPrefix),
59
+ bar: plot.bar,
60
+ };
61
+ parentEmissions.diagnostics.push(diag);
62
+ }
63
+ if (runner.kind === "sibling") {
64
+ parentEmissions.plots.push({
65
+ ...plot,
66
+ slotId: prefixSlotId(plot.slotId, runner.slotIdPrefix),
67
+ });
68
+ }
69
+ }
70
+ if (runner.kind === "sibling") {
71
+ for (const drawing of runner.emissions.drawings) {
72
+ parentEmissions.drawings.push(drawing);
73
+ }
74
+ for (const alert of runner.emissions.alerts) {
75
+ parentEmissions.alerts.push({
76
+ ...alert,
77
+ slotId: prefixSlotId(alert.slotId, runner.slotIdPrefix),
78
+ });
79
+ }
80
+ const siblingConditions = runner.emissions.alertConditions ?? [];
81
+ if (siblingConditions.length > 0) {
82
+ const target = parentEmissions.alertConditions ?? [];
83
+ parentEmissions.alertConditions = target;
84
+ for (const condition of siblingConditions) {
85
+ target.push(condition);
86
+ }
87
+ }
88
+ for (const log of runner.emissions.logs) {
89
+ parentEmissions.logs.push(log);
90
+ }
91
+ }
92
+ for (const diag of runner.emissions.diagnostics) {
93
+ parentEmissions.diagnostics.push({
94
+ ...diag,
95
+ slotId: prefixNullableSlotId(diag.slotId, runner.slotIdPrefix),
96
+ });
97
+ }
98
+ for (const title of declared) {
99
+ if (!pushedTitles.has(title)) {
100
+ depOutputStore.push(producerId, title, Number.NaN);
101
+ }
102
+ }
103
+ resetEmissions(runner.emissions);
104
+ }
105
+ //# sourceMappingURL=emissionFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissionFilter.js","sourceRoot":"","sources":["../../src/dep/emissionFilter.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 { RuntimeDiagnostic } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport type { MutableRunnerEmissions } from \"../runtimeContext.js\";\nimport type { DepOutputStore } from \"./DepOutputStore.js\";\n\n/**\n * View of a `DepRunner` the emission filter reads. Carries the\n * dep-specific slot-id prefix, the declared output titles (for NaN\n * padding), and the runner's own emission queue.\n *\n * @since 0.7\n * @stable\n * @example\n * const v: DepRunnerLike = {\n * kind: \"dep\",\n * localId: \"fastTrend\",\n * slotIdPrefix: \"dep:fastTrend/\",\n * declaredOutputs: [\"line\"],\n * emissions: { plots: [], drawings: [], alerts: [], alertConditions: [], logs: [], diagnostics: [], fromBar: 0, toBar: 0 },\n * };\n * void v;\n */\nexport type DepRunnerLike = Readonly<{\n readonly kind: \"dep\";\n readonly localId: string;\n readonly slotIdPrefix: string;\n readonly declaredOutputs: ReadonlyArray<string>;\n readonly emissions: MutableRunnerEmissions;\n}>;\n\n/**\n * View of a `SiblingRunner` the emission filter reads. Same shape as\n * `DepRunnerLike` but keyed by the sibling's exported binding name and\n * with a different slot-id prefix.\n *\n * @since 0.7\n * @stable\n * @example\n * const v: SiblingRunnerLike = {\n * kind: \"sibling\",\n * exportName: \"slowTrend\",\n * slotIdPrefix: \"export:slowTrend/\",\n * declaredOutputs: [\"line\"],\n * emissions: { plots: [], drawings: [], alerts: [], alertConditions: [], logs: [], diagnostics: [], fromBar: 0, toBar: 0 },\n * };\n * void v;\n */\nexport type SiblingRunnerLike = Readonly<{\n readonly kind: \"sibling\";\n readonly exportName: string;\n readonly slotIdPrefix: string;\n readonly declaredOutputs: ReadonlyArray<string>;\n readonly emissions: MutableRunnerEmissions;\n}>;\n\nfunction prefixSlotId(slotId: string, prefix: string): string {\n return `${prefix}${slotId}`;\n}\n\nfunction prefixNullableSlotId(slotId: string | null, prefix: string): string | null {\n return slotId === null ? null : prefixSlotId(slotId, prefix);\n}\n\nfunction resetEmissions(emissions: MutableRunnerEmissions): void {\n emissions.plots = [];\n emissions.drawings = [];\n emissions.alerts = [];\n emissions.alertConditions = [];\n emissions.logs = [];\n emissions.diagnostics = [];\n}\n\nfunction producerIdOf(runner: DepRunnerLike | SiblingRunnerLike): string {\n return runner.kind === \"dep\" ? runner.localId : runner.exportName;\n}\n\n/**\n * Apply the dep / sibling emission policy. Captures titled plots into\n * the shared {@link DepOutputStore}, drops private-dep visuals, prefixes\n * sibling emissions with `export:<exportName>/`, and namespaces every\n * diagnostic with the runner's slot-id prefix. Always resets the\n * runner's queue at the end so the next bar starts clean.\n *\n * Per-bar NaN padding: for every declared output that the runner did\n * NOT call `plot(value, { title: \"<output>\" })` on this bar, the\n * filter appends a NaN to the store so the consumer's series stays\n * continuous (NaN gaps where the producer skipped).\n *\n * @since 0.7\n * @stable\n * @example\n * // import { applyDepEmissionPolicy } from \"@invinite-org/chartlang-runtime\";\n * // applyDepEmissionPolicy(dep, parentEmissions, depOutputStore);\n */\nexport function applyDepEmissionPolicy(\n runner: DepRunnerLike | SiblingRunnerLike,\n parentEmissions: MutableRunnerEmissions,\n depOutputStore: DepOutputStore,\n): void {\n const producerId = producerIdOf(runner);\n const declared = new Set(runner.declaredOutputs);\n const pushedTitles = new Set<string>();\n\n for (const plot of runner.emissions.plots) {\n const title = plot.title;\n if (declared.has(title)) {\n depOutputStore.push(producerId, title, plot.value ?? Number.NaN);\n pushedTitles.add(title);\n } else if (runner.kind === \"dep\") {\n // Untitled / unknown-title plot in a private dep — surface as\n // a diagnostic; the visual is still dropped.\n const diag: RuntimeDiagnostic = {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"dep-output-not-titled\",\n message:\n title === \"\"\n ? `dep \"${runner.localId}\" emitted an untitled plot`\n : `dep \"${runner.localId}\" emitted plot with undeclared title \"${title}\"`,\n slotId: prefixSlotId(plot.slotId, runner.slotIdPrefix),\n bar: plot.bar,\n };\n parentEmissions.diagnostics.push(diag);\n }\n\n if (runner.kind === \"sibling\") {\n parentEmissions.plots.push({\n ...plot,\n slotId: prefixSlotId(plot.slotId, runner.slotIdPrefix),\n });\n }\n }\n\n if (runner.kind === \"sibling\") {\n for (const drawing of runner.emissions.drawings) {\n parentEmissions.drawings.push(drawing);\n }\n for (const alert of runner.emissions.alerts) {\n parentEmissions.alerts.push({\n ...alert,\n slotId: prefixSlotId(alert.slotId, runner.slotIdPrefix),\n });\n }\n const siblingConditions = runner.emissions.alertConditions ?? [];\n if (siblingConditions.length > 0) {\n const target = parentEmissions.alertConditions ?? [];\n parentEmissions.alertConditions = target;\n for (const condition of siblingConditions) {\n target.push(condition);\n }\n }\n for (const log of runner.emissions.logs) {\n parentEmissions.logs.push(log);\n }\n }\n\n for (const diag of runner.emissions.diagnostics) {\n parentEmissions.diagnostics.push({\n ...diag,\n slotId: prefixNullableSlotId(diag.slotId, runner.slotIdPrefix),\n });\n }\n\n for (const title of declared) {\n if (!pushedTitles.has(title)) {\n depOutputStore.push(producerId, title, Number.NaN);\n }\n }\n\n resetEmissions(runner.emissions);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export type { DepOutputDeclaration, DepOutputStore } from "./DepOutputStore.js";
2
+ export { createDepOutputStore } from "./DepOutputStore.js";
3
+ export type { CreateDepRunnerArgs, DepRunner, SiblingRunner, } from "./DepRunner.js";
4
+ export { createDepRunner, createSiblingRunner, runDepStep, runSiblingStep, } from "./DepRunner.js";
5
+ export type { DepRunnerLike, SiblingRunnerLike, } from "./emissionFilter.js";
6
+ export { applyDepEmissionPolicy } from "./emissionFilter.js";
7
+ export { DEP_OUTPUT_GLOBAL_KEY, __chartlang_depOutput, installDepOutputGlobal, } from "./depOutput.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dep/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EACR,mBAAmB,EACnB,SAAS,EACT,aAAa,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,cAAc,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,aAAa,EACb,iBAAiB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACzB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
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 { createDepOutputStore } from "./DepOutputStore.js";
4
+ export { createDepRunner, createSiblingRunner, runDepStep, runSiblingStep, } from "./DepRunner.js";
5
+ export { applyDepEmissionPolicy } from "./emissionFilter.js";
6
+ export { DEP_OUTPUT_GLOBAL_KEY, __chartlang_depOutput, installDepOutputGlobal, } from "./depOutput.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dep/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAM3D,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,cAAc,GACjB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACzB,MAAM,gBAAgB,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 type { DepOutputDeclaration, DepOutputStore } from \"./DepOutputStore.js\";\nexport { createDepOutputStore } from \"./DepOutputStore.js\";\nexport type {\n CreateDepRunnerArgs,\n DepRunner,\n SiblingRunner,\n} from \"./DepRunner.js\";\nexport {\n createDepRunner,\n createSiblingRunner,\n runDepStep,\n runSiblingStep,\n} from \"./DepRunner.js\";\nexport type {\n DepRunnerLike,\n SiblingRunnerLike,\n} from \"./emissionFilter.js\";\nexport { applyDepEmissionPolicy } from \"./emissionFilter.js\";\nexport {\n DEP_OUTPUT_GLOBAL_KEY,\n __chartlang_depOutput,\n installDepOutputGlobal,\n} from \"./depOutput.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../src/emit/alert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../src/emit/alert.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 { AlertOpts, JsonValue } from \"@invinite-org/chartlang-core\";\nimport type { AlertChannel, AlertEmission } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { pushAlert, pushDiagnostic } from \"./emissionsQueue.js\";\nimport { hashStringStable } from \"./hash.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"alert called outside an active script step\";\n\nfunction computeDedupeKey(\n slotId: string,\n bar: number,\n message: string,\n meta: Readonly<Record<string, JsonValue>>,\n): string {\n return `${slotId}::${bar}::${hashStringStable(message + JSON.stringify(meta))}`;\n}\n\nfunction snapshotUnknown(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => snapshotUnknown(item));\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, snapshotUnknown(item)]),\n );\n }\n return value;\n}\n\nfunction snapshotMeta(\n meta: Readonly<Record<string, JsonValue>>,\n): Readonly<Record<string, JsonValue>> {\n return snapshotUnknown(meta) as Readonly<Record<string, JsonValue>>;\n}\n\nfunction alertImpl(ctx: RuntimeContext, slotId: string, message: string, opts: AlertOpts): void {\n if (ctx.capabilities.alerts.size === 0) {\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"unsupported-alert-channel\",\n message: \"Adapter declares no alert channels; alert dropped.\",\n slotId,\n bar: ctx.barIndex(),\n });\n return;\n }\n\n const channels: AlertChannel[] = Array.from(ctx.capabilities.alerts);\n const bar = ctx.barIndex();\n const meta = snapshotMeta(opts.meta ?? {});\n\n const emission: AlertEmission = {\n kind: \"alert\",\n slotId,\n severity: opts.severity ?? \"info\",\n message,\n bar,\n time: ctx.stream.bar.time,\n meta,\n channels: Object.freeze(channels.slice()),\n dedupeKey: computeDedupeKey(slotId, bar, message, meta),\n };\n\n pushAlert(ctx.emissions, emission);\n}\n\n/**\n * Emit an `AlertEmission` for the current bar (script-facing overload).\n *\n * Same dual-signature contract as {@link plot}: scripts call\n * `alert(message, opts?)`; the compiler injects the slot id as the\n * leading argument (see the sibling `alert(slotId, message, opts?)`\n * overload). Direct invocation without a slot id throws the sentinel\n * error.\n *\n * `dedupeKey` is computed as\n * `${slotId}::${bar}::FNV1a(message + JSON.stringify(meta))` and is\n * stable across machines — adapters that dispatch via async channels\n * use it for idempotency. `channels` is a snapshot of\n * `capabilities.alerts` at emission time; adapters that gate on\n * specific channels filter downstream.\n *\n * @since 0.1\n * @example\n * import { defineIndicator, alert, ta } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"EMA cross\",\n * apiVersion: 1,\n * compute({ bar }) {\n * const fast = ta.ema(bar.close, 12);\n * const slow = ta.ema(bar.close, 26);\n * if (ta.crossover(fast, slow).current) {\n * alert(\"Fast EMA crossed above slow EMA\", { severity: \"info\" });\n * }\n * },\n * });\n */\nexport function alert(message: string, opts?: AlertOpts): void;\n/**\n * Emit an `AlertEmission` (compiler-injected overload). Task 2's\n * transformer rewrites script-side `alert(msg)` into\n * `alert(slotId, msg)`.\n *\n * @since 0.1\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof alert = alert;\n * // void fn;\n */\nexport function alert(slotId: string, message: string, opts?: AlertOpts): void;\n/**\n * Implementation signature for {@link alert}. Branches on\n * `typeof arg2 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.1\n * @example\n * // const fn: typeof alert = alert;\n * // void fn;\n */\nexport function alert(arg1: string, arg2?: string | AlertOpts, arg3?: AlertOpts): void {\n if (typeof arg2 !== \"string\") {\n // No slot id present — direct script-author invocation or\n // missing compiler injection. Surface the sentinel.\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (!ctx) throw new Error(OUTSIDE_CTX_MESSAGE);\n alertImpl(ctx, arg1, arg2, arg3 ?? {});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"alertConditionEmission.js","sourceRoot":"","sources":["../../src/emit/alertConditionEmission.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,SAAS,YAAY,CACjB,GAAmB,EACnB,IAAkE,EAClE,WAAmB,EACnB,OAAe;IAEf,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,WAAW,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,2BAA2B,CAAC;IAClD,IAAI,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1B,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,SAAS;QACnB,IAAI;QACJ,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAmB,EAAE,WAAmB,EAAE,KAAc;IACvF,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACpC,YAAY,CACR,GAAG,EACH,gCAAgC,EAChC,WAAW,EACX,4DAA4D,CAC/D,CAAC;QACF,OAAO;IACX,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,YAAY,CACR,GAAG,EACH,yBAAyB,EACzB,WAAW,EACX,oBAAoB,WAAW,2CAA2C,CAC7E,CAAC;QACF,OAAO;IACX,CAAC;IACD,MAAM,QAAQ,GAA2B;QACrC,IAAI,EAAE,iBAAiB;QACvB,WAAW;QACX,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,KAAK;QACL,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;QACnB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;KAC5B,CAAC;IACF,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"alertConditionEmission.js","sourceRoot":"","sources":["../../src/emit/alertConditionEmission.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,SAAS,YAAY,CACjB,GAAmB,EACnB,IAAkE,EAClE,WAAmB,EACnB,OAAe;IAEf,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,WAAW,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,2BAA2B,CAAC;IAClD,IAAI,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1B,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,SAAS;QACnB,IAAI;QACJ,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAmB,EAAE,WAAmB,EAAE,KAAc;IACvF,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACpC,YAAY,CACR,GAAG,EACH,gCAAgC,EAChC,WAAW,EACX,4DAA4D,CAC/D,CAAC;QACF,OAAO;IACX,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,YAAY,CACR,GAAG,EACH,yBAAyB,EACzB,WAAW,EACX,oBAAoB,WAAW,2CAA2C,CAC7E,CAAC;QACF,OAAO;IACX,CAAC;IACD,MAAM,QAAQ,GAA2B;QACrC,IAAI,EAAE,iBAAiB;QACvB,WAAW;QACX,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,KAAK;QACL,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;QACnB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;KAC5B,CAAC;IACF,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChD,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 { AlertConditionEmission } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport type { RuntimeContext } from \"../runtimeContext.js\";\nimport { pushAlertCondition, pushDiagnostic } from \"./emissionsQueue.js\";\n\nfunction diagnoseOnce(\n ctx: RuntimeContext,\n code: \"alert-conditions-not-supported\" | \"unknown-alert-condition\",\n conditionId: string,\n message: string,\n): void {\n const key = `${code}|${conditionId}`;\n const diagnosed = ctx.diagnosedAlertConditionKeys;\n if (diagnosed?.has(key)) return;\n diagnosed?.add(key);\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code,\n message,\n slotId: null,\n bar: ctx.barIndex(),\n });\n}\n\n/**\n * Emit one alert-condition state transition for the current bar.\n * `fired: false` is emitted deliberately so adapters can render falling\n * edges and \"currently inactive\" state without remembering prior bars.\n *\n * @since 0.5\n * @stable\n * @example\n * // emitAlertCondition(ctx, \"up\", true);\n * const fn: typeof emitAlertCondition = emitAlertCondition;\n * void fn;\n */\nexport function emitAlertCondition(ctx: RuntimeContext, conditionId: string, fired: boolean): void {\n if (!ctx.capabilities.alertConditions) {\n diagnoseOnce(\n ctx,\n \"alert-conditions-not-supported\",\n conditionId,\n \"Adapter does not support alert conditions; signal dropped.\",\n );\n return;\n }\n const condition = ctx.alertConditions?.get(conditionId);\n if (condition === undefined) {\n diagnoseOnce(\n ctx,\n \"unknown-alert-condition\",\n conditionId,\n `Alert condition \"${conditionId}\" is not declared in the script manifest.`,\n );\n return;\n }\n const emission: AlertConditionEmission = {\n kind: \"alert-condition\",\n conditionId,\n title: condition.title,\n description: condition.description,\n defaultMessage: condition.defaultMessage,\n fired,\n bar: ctx.barIndex(),\n time: ctx.stream.bar.time,\n };\n pushAlertCondition(ctx.emissions, emission);\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import type { PlotEmission, PlotOverride } from "@invinite-org/chartlang-adapter-kit";
2
+ /**
3
+ * Apply a `PlotOverride` to a built `PlotEmission`. Pure / immutable —
4
+ * returns the input unchanged when `override` is `undefined`, sets
5
+ * `visible: false` only when `override.visible === false`, overwrites
6
+ * `color`, and merges `lineWidth` / `lineStyle` into `style` only
7
+ * when the emission's `style.kind` is line-family
8
+ * (`line | step-line | horizontal-line | area`). Non-line kinds
9
+ * ignore width/style silently (no diagnostic). `visible` is only ever
10
+ * written as `false` (never `true`), so no-override and visible-override
11
+ * emissions stay byte-identical to today.
12
+ *
13
+ * @since 0.8
14
+ * @stable
15
+ * @example
16
+ * const emission: PlotEmission = {
17
+ * kind: "plot", slotId: "s", title: "", style: { kind: "line", lineWidth: 1, lineStyle: "solid" },
18
+ * bar: 0, time: 0, value: 1, color: null, meta: {}, pane: "overlay",
19
+ * };
20
+ * const next = applyPlotOverride(emission, { color: "#f00" });
21
+ * void next;
22
+ */
23
+ export declare function applyPlotOverride(emission: PlotEmission, override: PlotOverride | undefined): PlotEmission;
24
+ //# sourceMappingURL=applyPlotOverride.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPlotOverride.d.ts","sourceRoot":"","sources":["../../src/emit/applyPlotOverride.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAQtF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,GAAG,SAAS,GACnC,YAAY,CAmBd"}
@@ -0,0 +1,48 @@
1
+ // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
+ // See the LICENSE file in the repo root for full license text.
3
+ function isLineFamily(kind) {
4
+ return kind === "line" || kind === "step-line" || kind === "horizontal-line" || kind === "area";
5
+ }
6
+ /**
7
+ * Apply a `PlotOverride` to a built `PlotEmission`. Pure / immutable —
8
+ * returns the input unchanged when `override` is `undefined`, sets
9
+ * `visible: false` only when `override.visible === false`, overwrites
10
+ * `color`, and merges `lineWidth` / `lineStyle` into `style` only
11
+ * when the emission's `style.kind` is line-family
12
+ * (`line | step-line | horizontal-line | area`). Non-line kinds
13
+ * ignore width/style silently (no diagnostic). `visible` is only ever
14
+ * written as `false` (never `true`), so no-override and visible-override
15
+ * emissions stay byte-identical to today.
16
+ *
17
+ * @since 0.8
18
+ * @stable
19
+ * @example
20
+ * const emission: PlotEmission = {
21
+ * kind: "plot", slotId: "s", title: "", style: { kind: "line", lineWidth: 1, lineStyle: "solid" },
22
+ * bar: 0, time: 0, value: 1, color: null, meta: {}, pane: "overlay",
23
+ * };
24
+ * const next = applyPlotOverride(emission, { color: "#f00" });
25
+ * void next;
26
+ */
27
+ export function applyPlotOverride(emission, override) {
28
+ if (override === undefined)
29
+ return emission;
30
+ let next = emission;
31
+ if (override.visible === false)
32
+ next = { ...next, visible: false };
33
+ if (override.color !== undefined)
34
+ next = { ...next, color: override.color };
35
+ if ((override.lineWidth !== undefined || override.lineStyle !== undefined) &&
36
+ isLineFamily(next.style.kind)) {
37
+ next = {
38
+ ...next,
39
+ style: {
40
+ ...next.style,
41
+ ...(override.lineWidth !== undefined ? { lineWidth: override.lineWidth } : {}),
42
+ ...(override.lineStyle !== undefined ? { lineStyle: override.lineStyle } : {}),
43
+ },
44
+ };
45
+ }
46
+ return next;
47
+ }
48
+ //# sourceMappingURL=applyPlotOverride.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPlotOverride.js","sourceRoot":"","sources":["../../src/emit/applyPlotOverride.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,SAAS,YAAY,CACjB,IAAmC;IAEnC,OAAO,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,MAAM,CAAC;AACpG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,iBAAiB,CAC7B,QAAsB,EACtB,QAAkC;IAElC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK;QAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnE,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC5E,IACI,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC;QACtE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAC/B,CAAC;QACC,IAAI,GAAG;YACH,GAAG,IAAI;YACP,KAAK,EAAE;gBACH,GAAG,IAAI,CAAC,KAAK;gBACb,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF;SACJ,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,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 { PlotEmission, PlotOverride } from \"@invinite-org/chartlang-adapter-kit\";\n\nfunction isLineFamily(\n kind: PlotEmission[\"style\"][\"kind\"],\n): kind is \"line\" | \"step-line\" | \"horizontal-line\" | \"area\" {\n return kind === \"line\" || kind === \"step-line\" || kind === \"horizontal-line\" || kind === \"area\";\n}\n\n/**\n * Apply a `PlotOverride` to a built `PlotEmission`. Pure / immutable —\n * returns the input unchanged when `override` is `undefined`, sets\n * `visible: false` only when `override.visible === false`, overwrites\n * `color`, and merges `lineWidth` / `lineStyle` into `style` only\n * when the emission's `style.kind` is line-family\n * (`line | step-line | horizontal-line | area`). Non-line kinds\n * ignore width/style silently (no diagnostic). `visible` is only ever\n * written as `false` (never `true`), so no-override and visible-override\n * emissions stay byte-identical to today.\n *\n * @since 0.8\n * @stable\n * @example\n * const emission: PlotEmission = {\n * kind: \"plot\", slotId: \"s\", title: \"\", style: { kind: \"line\", lineWidth: 1, lineStyle: \"solid\" },\n * bar: 0, time: 0, value: 1, color: null, meta: {}, pane: \"overlay\",\n * };\n * const next = applyPlotOverride(emission, { color: \"#f00\" });\n * void next;\n */\nexport function applyPlotOverride(\n emission: PlotEmission,\n override: PlotOverride | undefined,\n): PlotEmission {\n if (override === undefined) return emission;\n let next = emission;\n if (override.visible === false) next = { ...next, visible: false };\n if (override.color !== undefined) next = { ...next, color: override.color };\n if (\n (override.lineWidth !== undefined || override.lineStyle !== undefined) &&\n isLineFamily(next.style.kind)\n ) {\n next = {\n ...next,\n style: {\n ...next.style,\n ...(override.lineWidth !== undefined ? { lineWidth: override.lineWidth } : {}),\n ...(override.lineStyle !== undefined ? { lineStyle: override.lineStyle } : {}),\n },\n };\n }\n return next;\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/arrow-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"arrow.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrow.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,6BAA6B;AAC7B,4DAA4D;AAC5D,iBAAiB;AACjB,+DAA+D;AAC/D,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,iDAAiD,CAAC;AAE9E,SAAS,SAAS,CAAC,MAAc,EAAE,CAAa,EAAE,CAAa,EAAE,IAAe;IAC5E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC1E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC;AA+CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CACjB,IAAyB,EACzB,IAAiB,EACjB,IAA6B,EAC7B,IAAgB;IAEhB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"arrow.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrow.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,6BAA6B;AAC7B,4DAA4D;AAC5D,iBAAiB;AACjB,+DAA+D;AAC/D,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,iDAAiD,CAAC;AAE9E,SAAS,SAAS,CAAC,MAAc,EAAE,CAAa,EAAE,CAAa,EAAE,IAAe;IAC5E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC1E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC;AA+CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CACjB,IAAyB,EACzB,IAAiB,EACjB,IAA6B,EAC7B,IAAgB;IAEhB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (ArrowDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/arrow-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n ArrowOpts,\n ArrowState,\n DrawingHandle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.arrow called outside an active script step\";\n\nfunction arrowImpl(slotId: string, a: WorldPoint, b: WorldPoint, opts: ArrowOpts): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: ArrowState = { kind: \"arrow\", anchors: [a, b], style: opts };\n return createDrawingHandle(slotId, subId, \"arrow\", state);\n}\n\n/**\n * Draw a directional arrow from `a` (tail) to `b` (head) with an\n * optional axis-aligned label centred near the shaft midpoint. The\n * arrowhead at `b` points along the shaft direction. Inherits every\n * {@link import(\"@invinite-org/chartlang-core\").LineDrawStyle} field\n * (color, lineWidth, lineStyle, extendLeft, extendRight) plus the\n * arrow-specific `label?: string`. Mirrors invinite's `arrow-tool.ts`\n * shape.\n *\n * @anchors `a`, `b` — tail and head `WorldPoint`s\n * @anchorCount 2\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.arrow demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.arrow(\n * { time: bar.time, price: bar.low },\n * { time: bar.time, price: bar.high },\n * { color: \"#dc2626\", lineWidth: 2, label: \"Sell\" },\n * );\n * },\n * });\n */\nexport function arrow(a: WorldPoint, b: WorldPoint, opts?: ArrowOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof arrow = arrow;\n * // void fn;\n */\nexport function arrow(\n slotId: string,\n a: WorldPoint,\n b: WorldPoint,\n opts?: ArrowOpts,\n): DrawingHandle;\n/**\n * Implementation signature for {@link arrow}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof arrow = arrow;\n * // void fn;\n */\nexport function arrow(\n arg1: string | WorldPoint,\n arg2?: WorldPoint,\n arg3?: WorldPoint | ArrowOpts,\n arg4?: ArrowOpts,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined || arg3 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return arrowImpl(arg1, arg2, arg3 as WorldPoint, arg4 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/arrow-mark-down-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"arrowMarkDown.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarkDown.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,qCAAqC;AACrC,4DAA4D;AAC5D,iBAAiB;AACjB,yEAAyE;AACzE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,yDAAyD,CAAC;AAEtF,SAAS,iBAAiB,CACtB,MAAc,EACd,MAAkB,EAClB,IAAqB;IAErB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACnF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACxE,CAAC;AAwCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CACzB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"arrowMarkDown.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarkDown.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,qCAAqC;AACrC,4DAA4D;AAC5D,iBAAiB;AACjB,yEAAyE;AACzE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,yDAAyD,CAAC;AAEtF,SAAS,iBAAiB,CACtB,MAAc,EACd,MAAkB,EAClB,IAAqB;IAErB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACnF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACxE,CAAC;AAwCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CACzB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACnE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (ArrowMarkDownDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/arrow-mark-down-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n ArrowMarkDownState,\n ArrowMarkerOpts,\n DrawingHandle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.arrowMarkDown called outside an active script step\";\n\nfunction arrowMarkDownImpl(\n slotId: string,\n anchor: WorldPoint,\n opts: ArrowMarkerOpts,\n): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: ArrowMarkDownState = { kind: \"arrow-mark-down\", anchor, style: opts };\n return createDrawingHandle(slotId, subId, \"arrow-mark-down\", state);\n}\n\n/**\n * Draw a bearish down-chevron glyph at a single world anchor. The\n * canvas2d renderer paints a filled triangle pointing down; the default\n * fill colour is `\"#ef4444\"` (red) when `style.color` is omitted. Pine\n * equivalent: `plotshape(condition, style=shape.triangledown)`. Mirrors\n * invinite's `arrow-mark-down-tool.ts` shape.\n *\n * @anchors `anchor` — single `WorldPoint`\n * @anchorCount 1\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.arrowMarkDown demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.arrowMarkDown({ time: bar.time, price: bar.high });\n * },\n * });\n */\nexport function arrowMarkDown(anchor: WorldPoint, opts?: ArrowMarkerOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof arrowMarkDown = arrowMarkDown;\n * // void fn;\n */\nexport function arrowMarkDown(\n slotId: string,\n anchor: WorldPoint,\n opts?: ArrowMarkerOpts,\n): DrawingHandle;\n/**\n * Implementation signature for {@link arrowMarkDown}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof arrowMarkDown = arrowMarkDown;\n * // void fn;\n */\nexport function arrowMarkDown(\n arg1: string | WorldPoint,\n arg2?: WorldPoint | ArrowMarkerOpts,\n arg3?: ArrowMarkerOpts,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return arrowMarkDownImpl(arg1, arg2 as WorldPoint, arg3 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/arrow-mark-up-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"arrowMarkUp.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarkUp.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,mCAAmC;AACnC,4DAA4D;AAC5D,iBAAiB;AACjB,uEAAuE;AACvE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,uDAAuD,CAAC;AAEpF,SAAS,eAAe,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAqB;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAqB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AAwCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACvB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"arrowMarkUp.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarkUp.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,mCAAmC;AACnC,4DAA4D;AAC5D,iBAAiB;AACjB,uEAAuE;AACvE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,uDAAuD,CAAC;AAEpF,SAAS,eAAe,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAqB;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAqB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AAwCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACvB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (ArrowMarkUpDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/arrow-mark-up-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n ArrowMarkUpState,\n ArrowMarkerOpts,\n DrawingHandle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.arrowMarkUp called outside an active script step\";\n\nfunction arrowMarkUpImpl(slotId: string, anchor: WorldPoint, opts: ArrowMarkerOpts): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: ArrowMarkUpState = { kind: \"arrow-mark-up\", anchor, style: opts };\n return createDrawingHandle(slotId, subId, \"arrow-mark-up\", state);\n}\n\n/**\n * Draw a bullish up-chevron glyph at a single world anchor. The\n * canvas2d renderer paints a filled triangle pointing up; the default\n * fill colour is `\"#22c55e\"` (green) when `style.color` is omitted.\n * Pine equivalent: `plotshape(condition, style=shape.triangleup)`.\n * Mirrors invinite's `arrow-mark-up-tool.ts` shape.\n *\n * @anchors `anchor` — single `WorldPoint`\n * @anchorCount 1\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.arrowMarkUp demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.arrowMarkUp({ time: bar.time, price: bar.low });\n * },\n * });\n */\nexport function arrowMarkUp(anchor: WorldPoint, opts?: ArrowMarkerOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof arrowMarkUp = arrowMarkUp;\n * // void fn;\n */\nexport function arrowMarkUp(\n slotId: string,\n anchor: WorldPoint,\n opts?: ArrowMarkerOpts,\n): DrawingHandle;\n/**\n * Implementation signature for {@link arrowMarkUp}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof arrowMarkUp = arrowMarkUp;\n * // void fn;\n */\nexport function arrowMarkUp(\n arg1: string | WorldPoint,\n arg2?: WorldPoint | ArrowMarkerOpts,\n arg3?: ArrowMarkerOpts,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return arrowMarkUpImpl(arg1, arg2 as WorldPoint, arg3 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/arrow-marker-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"arrowMarker.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,mCAAmC;AACnC,4DAA4D;AAC5D,iBAAiB;AACjB,sEAAsE;AACtE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,uDAAuD,CAAC;AAEpF,SAAS,eAAe,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAqB;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AA4CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACvB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"arrowMarker.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/arrowMarker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,mCAAmC;AACnC,4DAA4D;AAC5D,iBAAiB;AACjB,sEAAsE;AACtE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,uDAAuD,CAAC;AAEpF,SAAS,eAAe,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAqB;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AA4CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACvB,IAAyB,EACzB,IAAmC,EACnC,IAAsB;IAEtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (ArrowMarkerDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/arrow-marker-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n ArrowMarkerOpts,\n ArrowMarkerState,\n DrawingHandle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.arrowMarker called outside an active script step\";\n\nfunction arrowMarkerImpl(slotId: string, anchor: WorldPoint, opts: ArrowMarkerOpts): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: ArrowMarkerState = { kind: \"arrow-marker\", anchor, style: opts };\n return createDrawingHandle(slotId, subId, \"arrow-marker\", state);\n}\n\n/**\n * Draw a compact arrow-marker glyph at a single world anchor. The\n * canvas2d renderer paints a small filled dot at the anchor, a short\n * stub line, and an arrowhead — a self-contained \"annotation lives\n * here\" marker. Optional `style.text` paints next to the dot. Default\n * color is `\"#3b82f6\"` (invinite toolbar blue). Mirrors invinite's\n * `arrow-marker-tool.ts` shape.\n *\n * @anchors `anchor` — single `WorldPoint`\n * @anchorCount 1\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.arrowMarker demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.arrowMarker(\n * { time: bar.time, price: bar.close },\n * { color: \"#10b981\", text: \"Long\" },\n * );\n * },\n * });\n */\nexport function arrowMarker(anchor: WorldPoint, opts?: ArrowMarkerOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof arrowMarker = arrowMarker;\n * // void fn;\n */\nexport function arrowMarker(\n slotId: string,\n anchor: WorldPoint,\n opts?: ArrowMarkerOpts,\n): DrawingHandle;\n/**\n * Implementation signature for {@link arrowMarker}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof arrowMarker = arrowMarker;\n * // void fn;\n */\nexport function arrowMarker(\n arg1: string | WorldPoint,\n arg2?: WorldPoint | ArrowMarkerOpts,\n arg3?: ArrowMarkerOpts,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return arrowMarkerImpl(arg1, arg2 as WorldPoint, arg3 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/text-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/text.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,4BAA4B;AAC5B,4DAA4D;AAC5D,iBAAiB;AACjB,8DAA8D;AAC9D,4DAA4D;AAI5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,gDAAgD,CAAC;AAE7E,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAY,EAAE,IAAc;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACrE,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AA8CD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,IAAI,CAChB,IAAyB,EACzB,IAA0B,EAC1B,IAAwB,EACxB,IAAe;IAEf,IACI,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,SAAS;QAClB,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,KAAK,QAAQ,EAC1B,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/emit/draw/annotations/text.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,4BAA4B;AAC5B,4DAA4D;AAC5D,iBAAiB;AACjB,8DAA8D;AAC9D,iCAAiC;AAIjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,gDAAgD,CAAC;AAE7E,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAY,EAAE,IAAc;IAC9E,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACrE,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AA8CD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,IAAI,CAChB,IAAyB,EACzB,IAA0B,EAC1B,IAAwB,EACxB,IAAe;IAEf,IACI,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,SAAS;QAClB,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,KAAK,QAAQ,EAC1B,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAClD,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (TextDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/text-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type { DrawingHandle, TextOpts, TextState, WorldPoint } from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.text called outside an active script step\";\n\nfunction textImpl(slotId: string, anchor: WorldPoint, body: string, opts: TextOpts): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: TextState = { kind: \"text\", anchor, body, style: opts };\n return createDrawingHandle(slotId, subId, \"text\", state);\n}\n\n/**\n * Draw a freeform text annotation anchored at a single world point.\n * The `body` string surfaces in the rendered glyph; the validator pins\n * it as a non-empty string of length ≤ 256 (longer than the 128 cap on\n * plot labels — annotation strings carry short rationales like\n * \"Inverse Head and Shoulders Confirmed\"). Mirrors invinite's\n * `text-tool.ts` shape.\n *\n * @anchors `anchor` — single `WorldPoint`\n * @anchorCount 1\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.text demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.text(\n * { time: bar.time, price: bar.high },\n * \"Peak\",\n * { color: \"#1e293b\", size: \"normal\" },\n * );\n * },\n * });\n */\nexport function text(anchor: WorldPoint, body: string, opts?: TextOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof text = text;\n * // void fn;\n */\nexport function text(\n slotId: string,\n anchor: WorldPoint,\n body: string,\n opts?: TextOpts,\n): DrawingHandle;\n/**\n * Implementation signature for {@link text}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload. Unique among Task-9 emit fns in that it\n * carries four arguments (slot id + anchor + body + opts).\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof text = text;\n * // void fn;\n */\nexport function text(\n arg1: string | WorldPoint,\n arg2?: WorldPoint | string,\n arg3?: string | TextOpts,\n arg4?: TextOpts,\n): DrawingHandle {\n if (\n typeof arg1 !== \"string\" ||\n arg2 === undefined ||\n typeof arg2 === \"string\" ||\n typeof arg3 !== \"string\"\n ) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return textImpl(arg1, arg2, arg3, arg4 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/circle-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"circle.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/circle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,8BAA8B;AAC9B,4DAA4D;AAC5D,iBAAiB;AACjB,gEAAgE;AAChE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAE/E,SAAS,UAAU,CACf,MAAc,EACd,MAAkB,EAClB,YAAwB,EACxB,IAAgB;IAEhB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;QAC/B,KAAK,EAAE,IAAI;KACd,CAAC;IACF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAmDD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAClB,IAAyB,EACzB,IAAiB,EACjB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"circle.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/circle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,8BAA8B;AAC9B,4DAA4D;AAC5D,iBAAiB;AACjB,gEAAgE;AAChE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAE/E,SAAS,UAAU,CACf,MAAc,EACd,MAAkB,EAClB,YAAwB,EACxB,IAAgB;IAEhB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;QAC/B,KAAK,EAAE,IAAI;KACd,CAAC;IACF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAmDD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAClB,IAAyB,EACzB,IAAiB,EACjB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAClE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (CircleDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/circle-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n CircleState,\n DrawingHandle,\n ShapeStyle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.circle called outside an active script step\";\n\nfunction circleImpl(\n slotId: string,\n centre: WorldPoint,\n radiusAnchor: WorldPoint,\n opts: ShapeStyle,\n): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: CircleState = {\n kind: \"circle\",\n anchors: [centre, radiusAnchor],\n style: opts,\n };\n return createDrawingHandle(slotId, subId, \"circle\", state);\n}\n\n/**\n * Draw a circle defined by a centre + an edge anchor. The radius is\n * derived in canvas-pixel space at render time from the projected\n * distance between the two anchors (`|edge - centre|`) — persisting\n * two world points keeps round-trip fidelity across zoom changes\n * (matches invinite's `circle-tool.ts`).\n *\n * @anchors `centre`, `radiusAnchor` — two `WorldPoint`s\n * @anchorCount 2\n * @bucket boxes\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.circle demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.circle(\n * { time: bar.time, price: bar.close },\n * { time: bar.time, price: bar.high },\n * { stroke: \"#3b82f6\", fill: \"#dbeafe\", fillAlpha: 0.3 },\n * );\n * },\n * });\n */\nexport function circle(\n centre: WorldPoint,\n radiusAnchor: WorldPoint,\n opts?: ShapeStyle,\n): DrawingHandle;\n/**\n * Compiler-injected overload — the callsite-id transformer rewrites\n * every script-side `draw.circle(centre, radiusAnchor, opts)` into\n * `draw.circle(slotId, centre, radiusAnchor, opts)`.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof circle = circle;\n * // void fn;\n */\nexport function circle(\n slotId: string,\n centre: WorldPoint,\n radiusAnchor: WorldPoint,\n opts?: ShapeStyle,\n): DrawingHandle;\n/**\n * Implementation signature for {@link circle}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof circle = circle;\n * // void fn;\n */\nexport function circle(\n arg1: string | WorldPoint,\n arg2?: WorldPoint,\n arg3?: WorldPoint | ShapeStyle,\n arg4?: ShapeStyle,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined || arg3 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return circleImpl(arg1, arg2, arg3 as WorldPoint, arg4 ?? {});\n}\n"]}
@@ -4,7 +4,7 @@ import type { DrawingHandle, ShapeStyle, WorldPoint } from "@invinite-org/chartl
4
4
  * world anchors. The renderer derives `(centerX, centerY, radiusX,
5
5
  * radiusY)` from the projected bbox and paints a polyline
6
6
  * approximation. Rotated ellipses (invinite's `widthOffset` form)
7
- * are out of scope for Phase 3.
7
+ * are out of scope for now.
8
8
  *
9
9
  * @anchors `a`, `b` — two `WorldPoint`s (opposite bbox corners)
10
10
  * @anchorCount 2
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/ellipse-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ellipse.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/ellipse.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,+BAA+B;AAC/B,4DAA4D;AAC5D,iBAAiB;AACjB,iEAAiE;AACjE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAEhF,SAAS,WAAW,CAChB,MAAc,EACd,CAAa,EACb,CAAa,EACb,IAAgB;IAEhB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AA+CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CACnB,IAAyB,EACzB,IAAiB,EACjB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"ellipse.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/ellipse.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,+BAA+B;AAC/B,4DAA4D;AAC5D,iBAAiB;AACjB,iEAAiE;AACjE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAEhF,SAAS,WAAW,CAChB,MAAc,EACd,CAAa,EACb,CAAa,EACb,IAAgB;IAEhB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AA+CD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CACnB,IAAyB,EACzB,IAAiB,EACjB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACnE,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (EllipseDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/ellipse-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n DrawingHandle,\n EllipseState,\n ShapeStyle,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.ellipse called outside an active script step\";\n\nfunction ellipseImpl(\n slotId: string,\n a: WorldPoint,\n b: WorldPoint,\n opts: ShapeStyle,\n): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n const state: EllipseState = { kind: \"ellipse\", anchors: [a, b], style: opts };\n return createDrawingHandle(slotId, subId, \"ellipse\", state);\n}\n\n/**\n * Draw an axis-aligned ellipse inscribed in the bounding box of two\n * world anchors. The renderer derives `(centerX, centerY, radiusX,\n * radiusY)` from the projected bbox and paints a polyline\n * approximation. Rotated ellipses (invinite's `widthOffset` form)\n * are out of scope for now.\n *\n * @anchors `a`, `b` — two `WorldPoint`s (opposite bbox corners)\n * @anchorCount 2\n * @bucket boxes\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.ellipse demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.ellipse(\n * { time: bar.time, price: bar.low },\n * { time: bar.time, price: bar.high },\n * { stroke: \"#22c55e\", fill: \"#dcfce7\", fillAlpha: 0.3 },\n * );\n * },\n * });\n */\nexport function ellipse(a: WorldPoint, b: WorldPoint, opts?: ShapeStyle): DrawingHandle;\n/**\n * Compiler-injected overload — the callsite-id transformer rewrites\n * every script-side `draw.ellipse(a, b, opts)` into\n * `draw.ellipse(slotId, a, b, opts)`.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof ellipse = ellipse;\n * // void fn;\n */\nexport function ellipse(\n slotId: string,\n a: WorldPoint,\n b: WorldPoint,\n opts?: ShapeStyle,\n): DrawingHandle;\n/**\n * Implementation signature for {@link ellipse}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof ellipse = ellipse;\n * // void fn;\n */\nexport function ellipse(\n arg1: string | WorldPoint,\n arg2?: WorldPoint,\n arg3?: WorldPoint | ShapeStyle,\n arg4?: ShapeStyle,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined || arg3 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return ellipseImpl(arg1, arg2, arg3 as WorldPoint, arg4 ?? {});\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  // 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.
8
8
  // Behaviour from
9
9
  // invinite/src/components/trading-chart/tools/marker-tool.ts.
10
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 + §22.10.
10
+ // Re-licensed MIT for chartlang.
11
11
  import { ACTIVE_RUNTIME_CONTEXT } from "../../../runtimeContext.js";
12
12
  import { createDrawingHandle } from "../handle.js";
13
13
  import { nextSubId } from "../subIdAllocator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"marker.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/marker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,8BAA8B;AAC9B,4DAA4D;AAC5D,iBAAiB;AACjB,gEAAgE;AAChE,4DAA4D;AAS5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAO/E,SAAS,UAAU,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAgB;IACpE,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,oEAAoE;IACpE,2DAA2D;IAC3D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK;KACR,CAAC;IACF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAsCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAClB,IAAyB,EACzB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"marker.js","sourceRoot":"","sources":["../../../../src/emit/draw/boxes/marker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,oCAAoC;AACpC,6DAA6D;AAC7D,8BAA8B;AAC9B,4DAA4D;AAC5D,iBAAiB;AACjB,gEAAgE;AAChE,iCAAiC;AASjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAO/E,SAAS,UAAU,CAAC,MAAc,EAAE,MAAkB,EAAE,IAAgB;IACpE,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,oEAAoE;IACpE,2DAA2D;IAC3D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK;KACR,CAAC;IACF,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAsCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAClB,IAAyB,EACzB,IAA8B,EAC9B,IAAiB;IAEjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC5D,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// Anchors + state shape ported from\n// invinite/shared/trading-chart-collab-yjs/y-doc-bridge.ts\n// (MarkerDrawing), commit\n// 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite.\n// Behaviour from\n// invinite/src/components/trading-chart/tools/marker-tool.ts.\n// Re-licensed MIT for chartlang.\n\nimport type {\n DrawingHandle,\n MarkerState,\n TextOpts,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../../../runtimeContext.js\";\nimport { createDrawingHandle } from \"../handle.js\";\nimport { nextSubId } from \"../subIdAllocator.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"draw.marker called outside an active script step\";\n\ntype MarkerOpts = TextOpts & {\n readonly text?: string;\n readonly value?: number;\n};\n\nfunction markerImpl(slotId: string, anchor: WorldPoint, opts: MarkerOpts): DrawingHandle {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) throw new Error(OUTSIDE_CTX_MESSAGE);\n const subId = nextSubId(ctx, slotId);\n // Split the merged opts bag: top-level `text` / `value` live on the\n // state; the remaining TextOpts fields nest under `style`.\n const { text, value, ...style } = opts;\n const state: MarkerState = {\n kind: \"marker\",\n anchor,\n ...(text !== undefined ? { text } : {}),\n ...(value !== undefined ? { value } : {}),\n style,\n };\n return createDrawingHandle(slotId, subId, \"marker\", state);\n}\n\n/**\n * Draw a single-anchor marker glyph with an optional text label and\n * numeric value. The renderer projects `anchor` to canvas pixel space\n * and paints the `text` (if any) at that position using the\n * {@link TextOpts}-derived font + alignment.\n *\n * @anchors `anchor` — one `WorldPoint`\n * @anchorCount 1\n * @bucket labels\n * @since 0.3\n * @stable\n * @example\n * import { defineIndicator } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"draw.marker demo\",\n * apiVersion: 1,\n * compute({ bar, draw }) {\n * draw.marker(\n * { time: bar.time, price: bar.close },\n * { text: \"B\", size: \"large\", color: \"#10b981\" },\n * );\n * },\n * });\n */\nexport function marker(anchor: WorldPoint, opts?: MarkerOpts): DrawingHandle;\n/**\n * Compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // Internal — the compiler rewrites every script callsite.\n * // const fn: typeof marker = marker;\n * // void fn;\n */\nexport function marker(slotId: string, anchor: WorldPoint, opts?: MarkerOpts): DrawingHandle;\n/**\n * Implementation signature for {@link marker}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.3\n * @stable\n * @example\n * // const fn: typeof marker = marker;\n * // void fn;\n */\nexport function marker(\n arg1: string | WorldPoint,\n arg2?: WorldPoint | MarkerOpts,\n arg3?: MarkerOpts,\n): DrawingHandle {\n if (typeof arg1 !== \"string\" || arg2 === undefined) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n return markerImpl(arg1, arg2 as WorldPoint, arg3 ?? {});\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { DrawingHandle, PathOpts, WorldPoint } from "@invinite-org/chartlang-core";
2
2
  /**
3
3
  * Draw an OPEN polyline through N world anchors. Distinct from
4
- * `draw.polyline` (Task 6) which is CLOSED — `path` does NOT
4
+ * `draw.polyline` which is CLOSED — `path` does NOT
5
5
  * auto-connect the last anchor back to the first. Use
6
6
  * `opts.closed === true` to override and close the path explicitly.
7
7
  * Supply 2..20 anchors (validator pins this range, mirroring