@invinite-org/chartlang-runtime 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/README.md +1 -2
  3. package/dist/barPoint.d.ts +20 -0
  4. package/dist/barPoint.d.ts.map +1 -0
  5. package/dist/barPoint.js +72 -0
  6. package/dist/barPoint.js.map +1 -0
  7. package/dist/bufferSnapshot.d.ts +102 -0
  8. package/dist/bufferSnapshot.d.ts.map +1 -0
  9. package/dist/bufferSnapshot.js +119 -0
  10. package/dist/bufferSnapshot.js.map +1 -0
  11. package/dist/buildComputeContext.js.map +1 -1
  12. package/dist/createScriptRunner.d.ts +6 -3
  13. package/dist/createScriptRunner.d.ts.map +1 -1
  14. package/dist/createScriptRunner.js +29 -5
  15. package/dist/createScriptRunner.js.map +1 -1
  16. package/dist/dep/DepOutputStore.js.map +1 -1
  17. package/dist/dep/DepRunner.d.ts.map +1 -1
  18. package/dist/dep/DepRunner.js +1 -0
  19. package/dist/dep/DepRunner.js.map +1 -1
  20. package/dist/dep/depOutput.js.map +1 -1
  21. package/dist/dep/emissionFilter.js.map +1 -1
  22. package/dist/dep/index.js.map +1 -1
  23. package/dist/emit/alert.js.map +1 -1
  24. package/dist/emit/alertConditionEmission.js.map +1 -1
  25. package/dist/emit/applyPlotOverride.js.map +1 -1
  26. package/dist/emit/draw/annotations/arrow.js +1 -1
  27. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  28. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  29. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  30. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  31. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  32. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  33. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  34. package/dist/emit/draw/annotations/text.js +1 -1
  35. package/dist/emit/draw/annotations/text.js.map +1 -1
  36. package/dist/emit/draw/boxes/circle.js +1 -1
  37. package/dist/emit/draw/boxes/circle.js.map +1 -1
  38. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  39. package/dist/emit/draw/boxes/ellipse.js +1 -1
  40. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  41. package/dist/emit/draw/boxes/fillBetween.d.ts +45 -0
  42. package/dist/emit/draw/boxes/fillBetween.d.ts.map +1 -0
  43. package/dist/emit/draw/boxes/fillBetween.js +36 -0
  44. package/dist/emit/draw/boxes/fillBetween.js.map +1 -0
  45. package/dist/emit/draw/boxes/marker.js +1 -1
  46. package/dist/emit/draw/boxes/marker.js.map +1 -1
  47. package/dist/emit/draw/boxes/path.d.ts +1 -1
  48. package/dist/emit/draw/boxes/path.js +1 -1
  49. package/dist/emit/draw/boxes/path.js.map +1 -1
  50. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  51. package/dist/emit/draw/boxes/polyline.js +1 -1
  52. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  53. package/dist/emit/draw/boxes/rectangle.js +1 -1
  54. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  55. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  56. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  57. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  58. package/dist/emit/draw/boxes/triangle.js +1 -1
  59. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  60. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  61. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  62. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  63. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  64. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  65. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  66. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  67. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  69. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  70. package/dist/emit/draw/channels/trendChannel.js +1 -1
  71. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  72. package/dist/emit/draw/containers/frame.d.ts +1 -1
  73. package/dist/emit/draw/containers/frame.js +2 -2
  74. package/dist/emit/draw/containers/frame.js.map +1 -1
  75. package/dist/emit/draw/containers/group.d.ts +1 -2
  76. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  77. package/dist/emit/draw/containers/group.js +2 -2
  78. package/dist/emit/draw/containers/group.js.map +1 -1
  79. package/dist/emit/draw/curves/arc.js +1 -1
  80. package/dist/emit/draw/curves/arc.js.map +1 -1
  81. package/dist/emit/draw/curves/brush.js +1 -1
  82. package/dist/emit/draw/curves/brush.js.map +1 -1
  83. package/dist/emit/draw/curves/curve.js +1 -1
  84. package/dist/emit/draw/curves/curve.js.map +1 -1
  85. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  86. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  87. package/dist/emit/draw/curves/highlighter.js +1 -1
  88. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  89. package/dist/emit/draw/curves/pen.js +1 -1
  90. package/dist/emit/draw/curves/pen.js.map +1 -1
  91. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  92. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  93. package/dist/emit/draw/cycles/sineLine.js +1 -1
  94. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  95. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  96. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  97. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  98. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  99. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  100. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  104. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  106. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  107. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  108. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  109. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  110. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  112. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  113. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  114. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  116. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  117. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  118. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  119. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  120. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  121. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  122. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  124. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  125. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  126. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  128. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  134. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  135. package/dist/emit/draw/gann/gannBox.js +1 -1
  136. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  137. package/dist/emit/draw/gann/gannFan.js +1 -1
  138. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  139. package/dist/emit/draw/gann/gannSquare.js +1 -1
  140. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  141. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  142. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  143. package/dist/emit/draw/handle.d.ts +11 -2
  144. package/dist/emit/draw/handle.d.ts.map +1 -1
  145. package/dist/emit/draw/handle.js +67 -12
  146. package/dist/emit/draw/handle.js.map +1 -1
  147. package/dist/emit/draw/index.js.map +1 -1
  148. package/dist/emit/draw/lines/crossLine.js +1 -1
  149. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  150. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  151. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  152. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  154. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  155. package/dist/emit/draw/lines/line.d.ts +1 -1
  156. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  157. package/dist/emit/draw/lines/line.js +2 -3
  158. package/dist/emit/draw/lines/line.js.map +1 -1
  159. package/dist/emit/draw/lines/trendAngle.js +1 -1
  160. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  161. package/dist/emit/draw/lines/verticalLine.js +1 -1
  162. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  163. package/dist/emit/draw/namespace.d.ts +5 -4
  164. package/dist/emit/draw/namespace.d.ts.map +1 -1
  165. package/dist/emit/draw/namespace.js +7 -4
  166. package/dist/emit/draw/namespace.js.map +1 -1
  167. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  168. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  169. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  170. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  172. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  173. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  174. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  175. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  176. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  177. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  178. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  180. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  181. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  182. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  183. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  186. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  187. package/dist/emit/draw/pushDrawing.js.map +1 -1
  188. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  189. package/dist/emit/draw/subIdAllocator.js +1 -1
  190. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  191. package/dist/emit/draw/table/table.d.ts +1 -1
  192. package/dist/emit/draw/table/table.js.map +1 -1
  193. package/dist/emit/emissionsQueue.js.map +1 -1
  194. package/dist/emit/hash.js.map +1 -1
  195. package/dist/emit/hline.js.map +1 -1
  196. package/dist/emit/index.js.map +1 -1
  197. package/dist/emit/logEmission.js.map +1 -1
  198. package/dist/emit/paneResolver.js.map +1 -1
  199. package/dist/emit/plot.d.ts +7 -0
  200. package/dist/emit/plot.d.ts.map +1 -1
  201. package/dist/emit/plot.js +13 -0
  202. package/dist/emit/plot.js.map +1 -1
  203. package/dist/emit/runtimeError.js.map +1 -1
  204. package/dist/execution/dispose.d.ts.map +1 -1
  205. package/dist/execution/dispose.js +16 -0
  206. package/dist/execution/dispose.js.map +1 -1
  207. package/dist/execution/drain.js.map +1 -1
  208. package/dist/execution/index.js.map +1 -1
  209. package/dist/execution/onBarClose.js.map +1 -1
  210. package/dist/execution/onBarTick.js.map +1 -1
  211. package/dist/execution/onHistory.js.map +1 -1
  212. package/dist/execution/runComputeStep.d.ts.map +1 -1
  213. package/dist/execution/runComputeStep.js +10 -1
  214. package/dist/execution/runComputeStep.js.map +1 -1
  215. package/dist/execution/secondaryStream.js.map +1 -1
  216. package/dist/index.d.ts +1 -1
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +1 -1
  219. package/dist/index.js.map +1 -1
  220. package/dist/inputs/index.js.map +1 -1
  221. package/dist/inputs/resolveInputs.js.map +1 -1
  222. package/dist/internal.js.map +1 -1
  223. package/dist/persistentStateStore.js.map +1 -1
  224. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  225. package/dist/persistentStateStore.runtime.js +21 -7
  226. package/dist/persistentStateStore.runtime.js.map +1 -1
  227. package/dist/persistentStateStore.validate.js.map +1 -1
  228. package/dist/primitives.js.map +1 -1
  229. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  230. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  231. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  232. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  233. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  234. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  235. package/dist/request/index.d.ts +2 -1
  236. package/dist/request/index.d.ts.map +1 -1
  237. package/dist/request/index.js +2 -1
  238. package/dist/request/index.js.map +1 -1
  239. package/dist/request/lowerTf.js.map +1 -1
  240. package/dist/request/pushOnce.js.map +1 -1
  241. package/dist/request/requestNamespace.d.ts.map +1 -1
  242. package/dist/request/requestNamespace.js +16 -3
  243. package/dist/request/requestNamespace.js.map +1 -1
  244. package/dist/request/security.d.ts +20 -1
  245. package/dist/request/security.d.ts.map +1 -1
  246. package/dist/request/security.js +62 -23
  247. package/dist/request/security.js.map +1 -1
  248. package/dist/request/securityExprRunner.d.ts +133 -0
  249. package/dist/request/securityExprRunner.d.ts.map +1 -0
  250. package/dist/request/securityExprRunner.js +235 -0
  251. package/dist/request/securityExprRunner.js.map +1 -0
  252. package/dist/request/streamBars.d.ts +14 -1
  253. package/dist/request/streamBars.d.ts.map +1 -1
  254. package/dist/request/streamBars.js +39 -1
  255. package/dist/request/streamBars.js.map +1 -1
  256. package/dist/ringBuffer.d.ts +2 -2
  257. package/dist/ringBuffer.js +1 -1
  258. package/dist/ringBuffer.js.map +1 -1
  259. package/dist/runtimeContext.d.ts +51 -3
  260. package/dist/runtimeContext.d.ts.map +1 -1
  261. package/dist/runtimeContext.js.map +1 -1
  262. package/dist/seriesView.d.ts +43 -18
  263. package/dist/seriesView.d.ts.map +1 -1
  264. package/dist/seriesView.js +66 -43
  265. package/dist/seriesView.js.map +1 -1
  266. package/dist/state/index.d.ts +2 -1
  267. package/dist/state/index.d.ts.map +1 -1
  268. package/dist/state/index.js +2 -1
  269. package/dist/state/index.js.map +1 -1
  270. package/dist/state/lifecycle.d.ts +40 -0
  271. package/dist/state/lifecycle.d.ts.map +1 -1
  272. package/dist/state/lifecycle.js +53 -0
  273. package/dist/state/lifecycle.js.map +1 -1
  274. package/dist/state/seriesPersistence.d.ts +48 -0
  275. package/dist/state/seriesPersistence.d.ts.map +1 -0
  276. package/dist/state/seriesPersistence.js +87 -0
  277. package/dist/state/seriesPersistence.js.map +1 -0
  278. package/dist/state/seriesSlot.d.ts +105 -0
  279. package/dist/state/seriesSlot.d.ts.map +1 -0
  280. package/dist/state/seriesSlot.js +123 -0
  281. package/dist/state/seriesSlot.js.map +1 -0
  282. package/dist/state/stateNamespace.d.ts.map +1 -1
  283. package/dist/state/stateNamespace.js +28 -0
  284. package/dist/state/stateNamespace.js.map +1 -1
  285. package/dist/state/stateSlot.js.map +1 -1
  286. package/dist/stateStore.d.ts +2 -2
  287. package/dist/stateStore.js.map +1 -1
  288. package/dist/streamState.d.ts +26 -20
  289. package/dist/streamState.d.ts.map +1 -1
  290. package/dist/streamState.js +41 -67
  291. package/dist/streamState.js.map +1 -1
  292. package/dist/ta/adl.js +2 -2
  293. package/dist/ta/adl.js.map +1 -1
  294. package/dist/ta/adr.d.ts +3 -3
  295. package/dist/ta/adr.js +5 -5
  296. package/dist/ta/adr.js.map +1 -1
  297. package/dist/ta/adx.d.ts +3 -2
  298. package/dist/ta/adx.d.ts.map +1 -1
  299. package/dist/ta/adx.js +5 -4
  300. package/dist/ta/adx.js.map +1 -1
  301. package/dist/ta/alma.d.ts +6 -4
  302. package/dist/ta/alma.d.ts.map +1 -1
  303. package/dist/ta/alma.js +21 -8
  304. package/dist/ta/alma.js.map +1 -1
  305. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  306. package/dist/ta/anchoredVwap.d.ts +1 -1
  307. package/dist/ta/anchoredVwap.js +3 -3
  308. package/dist/ta/anchoredVwap.js.map +1 -1
  309. package/dist/ta/ao.js +2 -2
  310. package/dist/ta/ao.js.map +1 -1
  311. package/dist/ta/aroon.js +2 -2
  312. package/dist/ta/aroon.js.map +1 -1
  313. package/dist/ta/aroonOsc.js +2 -2
  314. package/dist/ta/aroonOsc.js.map +1 -1
  315. package/dist/ta/atr.d.ts +3 -2
  316. package/dist/ta/atr.d.ts.map +1 -1
  317. package/dist/ta/atr.js +5 -4
  318. package/dist/ta/atr.js.map +1 -1
  319. package/dist/ta/barssince.js +1 -1
  320. package/dist/ta/barssince.js.map +1 -1
  321. package/dist/ta/bb.d.ts +3 -2
  322. package/dist/ta/bb.d.ts.map +1 -1
  323. package/dist/ta/bb.js +5 -4
  324. package/dist/ta/bb.js.map +1 -1
  325. package/dist/ta/bbPercentB.js +2 -2
  326. package/dist/ta/bbPercentB.js.map +1 -1
  327. package/dist/ta/bbw.js +2 -2
  328. package/dist/ta/bbw.js.map +1 -1
  329. package/dist/ta/bop.js +2 -2
  330. package/dist/ta/bop.js.map +1 -1
  331. package/dist/ta/cci.js +2 -2
  332. package/dist/ta/cci.js.map +1 -1
  333. package/dist/ta/chaikinOsc.d.ts +3 -2
  334. package/dist/ta/chaikinOsc.d.ts.map +1 -1
  335. package/dist/ta/chaikinOsc.js +5 -4
  336. package/dist/ta/chaikinOsc.js.map +1 -1
  337. package/dist/ta/chandeKrollStop.d.ts +1 -1
  338. package/dist/ta/chandeKrollStop.js +3 -3
  339. package/dist/ta/chandeKrollStop.js.map +1 -1
  340. package/dist/ta/chandelier.d.ts +1 -1
  341. package/dist/ta/chandelier.js +3 -3
  342. package/dist/ta/chandelier.js.map +1 -1
  343. package/dist/ta/change.js +1 -1
  344. package/dist/ta/change.js.map +1 -1
  345. package/dist/ta/chop.js +2 -2
  346. package/dist/ta/chop.js.map +1 -1
  347. package/dist/ta/cmf.js +2 -2
  348. package/dist/ta/cmf.js.map +1 -1
  349. package/dist/ta/cmo.js +2 -2
  350. package/dist/ta/cmo.js.map +1 -1
  351. package/dist/ta/connorsRsi.d.ts +1 -1
  352. package/dist/ta/connorsRsi.js +3 -3
  353. package/dist/ta/connorsRsi.js.map +1 -1
  354. package/dist/ta/coppock.js +2 -2
  355. package/dist/ta/coppock.js.map +1 -1
  356. package/dist/ta/crossover.d.ts +3 -2
  357. package/dist/ta/crossover.d.ts.map +1 -1
  358. package/dist/ta/crossover.js +4 -3
  359. package/dist/ta/crossover.js.map +1 -1
  360. package/dist/ta/crossunder.d.ts +3 -2
  361. package/dist/ta/crossunder.d.ts.map +1 -1
  362. package/dist/ta/crossunder.js +4 -3
  363. package/dist/ta/crossunder.js.map +1 -1
  364. package/dist/ta/dema.js +2 -2
  365. package/dist/ta/dema.js.map +1 -1
  366. package/dist/ta/dmi.d.ts +4 -3
  367. package/dist/ta/dmi.d.ts.map +1 -1
  368. package/dist/ta/dmi.js +6 -5
  369. package/dist/ta/dmi.js.map +1 -1
  370. package/dist/ta/donchian.js +2 -2
  371. package/dist/ta/donchian.js.map +1 -1
  372. package/dist/ta/dpo.js +2 -2
  373. package/dist/ta/dpo.js.map +1 -1
  374. package/dist/ta/ema.d.ts +3 -2
  375. package/dist/ta/ema.d.ts.map +1 -1
  376. package/dist/ta/ema.js +5 -4
  377. package/dist/ta/ema.js.map +1 -1
  378. package/dist/ta/envelope.js +2 -2
  379. package/dist/ta/envelope.js.map +1 -1
  380. package/dist/ta/eom.d.ts +3 -1
  381. package/dist/ta/eom.d.ts.map +1 -1
  382. package/dist/ta/eom.js +5 -3
  383. package/dist/ta/eom.js.map +1 -1
  384. package/dist/ta/fisher.js +2 -2
  385. package/dist/ta/fisher.js.map +1 -1
  386. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  387. package/dist/ta/highest.js +1 -1
  388. package/dist/ta/highest.js.map +1 -1
  389. package/dist/ta/highestbars.d.ts +25 -0
  390. package/dist/ta/highestbars.d.ts.map +1 -0
  391. package/dist/ta/highestbars.js +106 -0
  392. package/dist/ta/highestbars.js.map +1 -0
  393. package/dist/ta/historicalVolatility.d.ts +3 -2
  394. package/dist/ta/historicalVolatility.d.ts.map +1 -1
  395. package/dist/ta/historicalVolatility.js +5 -4
  396. package/dist/ta/historicalVolatility.js.map +1 -1
  397. package/dist/ta/hma.js +2 -2
  398. package/dist/ta/hma.js.map +1 -1
  399. package/dist/ta/ichimoku.d.ts +3 -1
  400. package/dist/ta/ichimoku.d.ts.map +1 -1
  401. package/dist/ta/ichimoku.js +5 -3
  402. package/dist/ta/ichimoku.js.map +1 -1
  403. package/dist/ta/index.js.map +1 -1
  404. package/dist/ta/kama.js +2 -2
  405. package/dist/ta/kama.js.map +1 -1
  406. package/dist/ta/keltner.js +2 -2
  407. package/dist/ta/keltner.js.map +1 -1
  408. package/dist/ta/klinger.js +2 -2
  409. package/dist/ta/klinger.js.map +1 -1
  410. package/dist/ta/kst.js +2 -2
  411. package/dist/ta/kst.js.map +1 -1
  412. package/dist/ta/lib/adxFromDi.js +2 -2
  413. package/dist/ta/lib/adxFromDi.js.map +1 -1
  414. package/dist/ta/lib/computeMa.js +2 -2
  415. package/dist/ta/lib/computeMa.js.map +1 -1
  416. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  417. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  418. package/dist/ta/lib/directionalState.js +2 -2
  419. package/dist/ta/lib/directionalState.js.map +1 -1
  420. package/dist/ta/lib/donchianMid.js +2 -2
  421. package/dist/ta/lib/donchianMid.js.map +1 -1
  422. package/dist/ta/lib/emaFloat64.js +2 -2
  423. package/dist/ta/lib/emaFloat64.js.map +1 -1
  424. package/dist/ta/lib/linearRegression.js +2 -2
  425. package/dist/ta/lib/linearRegression.js.map +1 -1
  426. package/dist/ta/lib/maTypes.js.map +1 -1
  427. package/dist/ta/lib/pearson.js +2 -2
  428. package/dist/ta/lib/pearson.js.map +1 -1
  429. package/dist/ta/lib/pickCandleSource.js +2 -2
  430. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  431. package/dist/ta/lib/readSourceField.js +2 -2
  432. package/dist/ta/lib/readSourceField.js.map +1 -1
  433. package/dist/ta/lib/rollingStddev.js +2 -2
  434. package/dist/ta/lib/rollingStddev.js.map +1 -1
  435. package/dist/ta/lib/smaFloat64.js +2 -2
  436. package/dist/ta/lib/smaFloat64.js.map +1 -1
  437. package/dist/ta/lib/smmaFloat64.js +2 -2
  438. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  439. package/dist/ta/lib/sourceValue.js.map +1 -1
  440. package/dist/ta/lib/trSeries.js +2 -2
  441. package/dist/ta/lib/trSeries.js.map +1 -1
  442. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  443. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  444. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  445. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  446. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  447. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  448. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  449. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  450. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  451. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  452. package/dist/ta/lib/vwmaFloat64.js +2 -2
  453. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  454. package/dist/ta/lib/wilderDirectional.js +2 -2
  455. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  456. package/dist/ta/lib/wilderSmoothing.js +2 -2
  457. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  458. package/dist/ta/lib/wmaFloat64.js +2 -2
  459. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  460. package/dist/ta/lowest.js +1 -1
  461. package/dist/ta/lowest.js.map +1 -1
  462. package/dist/ta/lowestbars.d.ts +25 -0
  463. package/dist/ta/lowestbars.d.ts.map +1 -0
  464. package/dist/ta/lowestbars.js +102 -0
  465. package/dist/ta/lowestbars.js.map +1 -0
  466. package/dist/ta/lsma.js +2 -2
  467. package/dist/ta/lsma.js.map +1 -1
  468. package/dist/ta/maRibbon.js +2 -2
  469. package/dist/ta/maRibbon.js.map +1 -1
  470. package/dist/ta/macd.d.ts +3 -2
  471. package/dist/ta/macd.d.ts.map +1 -1
  472. package/dist/ta/macd.js +6 -5
  473. package/dist/ta/macd.js.map +1 -1
  474. package/dist/ta/massIndex.d.ts +3 -2
  475. package/dist/ta/massIndex.d.ts.map +1 -1
  476. package/dist/ta/massIndex.js +5 -4
  477. package/dist/ta/massIndex.js.map +1 -1
  478. package/dist/ta/mcginley.js +2 -2
  479. package/dist/ta/mcginley.js.map +1 -1
  480. package/dist/ta/median.js +2 -2
  481. package/dist/ta/median.js.map +1 -1
  482. package/dist/ta/mfi.d.ts +3 -1
  483. package/dist/ta/mfi.d.ts.map +1 -1
  484. package/dist/ta/mfi.js +5 -3
  485. package/dist/ta/mfi.js.map +1 -1
  486. package/dist/ta/momentum.js +2 -2
  487. package/dist/ta/momentum.js.map +1 -1
  488. package/dist/ta/netVolume.d.ts +3 -1
  489. package/dist/ta/netVolume.d.ts.map +1 -1
  490. package/dist/ta/netVolume.js +5 -3
  491. package/dist/ta/netVolume.js.map +1 -1
  492. package/dist/ta/nvi.d.ts +3 -1
  493. package/dist/ta/nvi.d.ts.map +1 -1
  494. package/dist/ta/nvi.js +5 -3
  495. package/dist/ta/nvi.js.map +1 -1
  496. package/dist/ta/nz.js +1 -1
  497. package/dist/ta/nz.js.map +1 -1
  498. package/dist/ta/obv.js +2 -2
  499. package/dist/ta/obv.js.map +1 -1
  500. package/dist/ta/persistence.d.ts.map +1 -1
  501. package/dist/ta/persistence.js +1 -40
  502. package/dist/ta/persistence.js.map +1 -1
  503. package/dist/ta/pivotsHighLow.js +2 -2
  504. package/dist/ta/pivotsHighLow.js.map +1 -1
  505. package/dist/ta/pivotsStandard.d.ts +1 -1
  506. package/dist/ta/pivotsStandard.js +3 -3
  507. package/dist/ta/pivotsStandard.js.map +1 -1
  508. package/dist/ta/pmo.js +2 -2
  509. package/dist/ta/pmo.js.map +1 -1
  510. package/dist/ta/ppo.d.ts +3 -2
  511. package/dist/ta/ppo.d.ts.map +1 -1
  512. package/dist/ta/ppo.js +5 -4
  513. package/dist/ta/ppo.js.map +1 -1
  514. package/dist/ta/psar.js +2 -2
  515. package/dist/ta/psar.js.map +1 -1
  516. package/dist/ta/pvi.d.ts +3 -1
  517. package/dist/ta/pvi.d.ts.map +1 -1
  518. package/dist/ta/pvi.js +5 -3
  519. package/dist/ta/pvi.js.map +1 -1
  520. package/dist/ta/pvo.d.ts +3 -1
  521. package/dist/ta/pvo.d.ts.map +1 -1
  522. package/dist/ta/pvo.js +5 -3
  523. package/dist/ta/pvo.js.map +1 -1
  524. package/dist/ta/pvt.d.ts +3 -1
  525. package/dist/ta/pvt.d.ts.map +1 -1
  526. package/dist/ta/pvt.js +5 -3
  527. package/dist/ta/pvt.js.map +1 -1
  528. package/dist/ta/registry.d.ts +7 -1
  529. package/dist/ta/registry.d.ts.map +1 -1
  530. package/dist/ta/registry.js +4 -0
  531. package/dist/ta/registry.js.map +1 -1
  532. package/dist/ta/roc.js +2 -2
  533. package/dist/ta/roc.js.map +1 -1
  534. package/dist/ta/rsi.d.ts +3 -2
  535. package/dist/ta/rsi.d.ts.map +1 -1
  536. package/dist/ta/rsi.js +5 -4
  537. package/dist/ta/rsi.js.map +1 -1
  538. package/dist/ta/rvgi.js +2 -2
  539. package/dist/ta/rvgi.js.map +1 -1
  540. package/dist/ta/rvi.d.ts +3 -2
  541. package/dist/ta/rvi.d.ts.map +1 -1
  542. package/dist/ta/rvi.js +5 -4
  543. package/dist/ta/rvi.js.map +1 -1
  544. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  545. package/dist/ta/sma.d.ts +6 -3
  546. package/dist/ta/sma.d.ts.map +1 -1
  547. package/dist/ta/sma.js +8 -5
  548. package/dist/ta/sma.js.map +1 -1
  549. package/dist/ta/smi.js +2 -2
  550. package/dist/ta/smi.js.map +1 -1
  551. package/dist/ta/smma.js +2 -2
  552. package/dist/ta/smma.js.map +1 -1
  553. package/dist/ta/stdev.d.ts +3 -2
  554. package/dist/ta/stdev.d.ts.map +1 -1
  555. package/dist/ta/stdev.js +5 -4
  556. package/dist/ta/stdev.js.map +1 -1
  557. package/dist/ta/stoch.js +2 -2
  558. package/dist/ta/stoch.js.map +1 -1
  559. package/dist/ta/stochRsi.js +2 -2
  560. package/dist/ta/stochRsi.js.map +1 -1
  561. package/dist/ta/supertrend.d.ts +1 -1
  562. package/dist/ta/supertrend.js +3 -3
  563. package/dist/ta/supertrend.js.map +1 -1
  564. package/dist/ta/tema.js +2 -2
  565. package/dist/ta/tema.js.map +1 -1
  566. package/dist/ta/trendStrengthIndex.d.ts +4 -3
  567. package/dist/ta/trendStrengthIndex.d.ts.map +1 -1
  568. package/dist/ta/trendStrengthIndex.js +6 -5
  569. package/dist/ta/trendStrengthIndex.js.map +1 -1
  570. package/dist/ta/trix.d.ts +4 -3
  571. package/dist/ta/trix.d.ts.map +1 -1
  572. package/dist/ta/trix.js +6 -5
  573. package/dist/ta/trix.js.map +1 -1
  574. package/dist/ta/tsi.js +2 -2
  575. package/dist/ta/tsi.js.map +1 -1
  576. package/dist/ta/ulcerIndex.js +2 -2
  577. package/dist/ta/ulcerIndex.js.map +1 -1
  578. package/dist/ta/ultimateOsc.js +2 -2
  579. package/dist/ta/ultimateOsc.js.map +1 -1
  580. package/dist/ta/valuewhen.js +1 -1
  581. package/dist/ta/valuewhen.js.map +1 -1
  582. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  583. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  584. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  585. package/dist/ta/vol.js +2 -2
  586. package/dist/ta/vol.js.map +1 -1
  587. package/dist/ta/volatilityStop.d.ts +1 -1
  588. package/dist/ta/volatilityStop.js +3 -3
  589. package/dist/ta/volatilityStop.js.map +1 -1
  590. package/dist/ta/vortex.d.ts +3 -2
  591. package/dist/ta/vortex.d.ts.map +1 -1
  592. package/dist/ta/vortex.js +5 -4
  593. package/dist/ta/vortex.js.map +1 -1
  594. package/dist/ta/vwap.d.ts +3 -3
  595. package/dist/ta/vwap.js +5 -5
  596. package/dist/ta/vwap.js.map +1 -1
  597. package/dist/ta/vwma.js +2 -2
  598. package/dist/ta/vwma.js.map +1 -1
  599. package/dist/ta/williamsFractal.js +2 -2
  600. package/dist/ta/williamsFractal.js.map +1 -1
  601. package/dist/ta/williamsR.js +2 -2
  602. package/dist/ta/williamsR.js.map +1 -1
  603. package/dist/ta/wma.js +2 -2
  604. package/dist/ta/wma.js.map +1 -1
  605. package/dist/ta/zigZag.js +2 -2
  606. package/dist/ta/zigZag.js.map +1 -1
  607. package/dist/views/barstateView.js.map +1 -1
  608. package/dist/views/index.js.map +1 -1
  609. package/dist/views/refreshRuntimeViews.js.map +1 -1
  610. package/dist/views/symInfoView.js.map +1 -1
  611. package/dist/views/timeframeView.js.map +1 -1
  612. package/package.json +3 -3
  613. package/dist/ta/lib/applyOffset.d.ts +0 -19
  614. package/dist/ta/lib/applyOffset.d.ts.map +0 -1
  615. package/dist/ta/lib/applyOffset.js +0 -38
  616. package/dist/ta/lib/applyOffset.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"klinger.js","sourceRoot":"","sources":["../../src/ta/klinger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"klinger.js","sourceRoot":"","sources":["../../src/ta/klinger.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/klinger.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Composition: three `ta.ema` sub-slots\n// (`${slotId}/fastEma`, `${slotId}/slowEma`, `${slotId}/signalEma`).\n// The Volume Force accumulator (trend / cm / dm) is bespoke\n// per-primitive state — no registry helper expresses VF.\n\nimport type { KlingerOpts, KlingerResult, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { ema } from \"./ema.js\";\n\nconst DEFAULT_FAST_LENGTH = 34;\nconst DEFAULT_SLOW_LENGTH = 55;\nconst DEFAULT_SIGNAL_LENGTH = 13;\n\ntype KlingerSlot = {\n result: KlingerResult | null;\n readonly klingerBuf: Float64RingBuffer;\n readonly klingerSeries: Series<number>;\n /** Active per-bar accumulator (closed-side, post most-recent close). */\n prevHlc: number;\n prevTrend: number;\n prevCm: number;\n prevDm: number;\n /** Snapshot BEFORE the most recent close — used by tick replay. */\n prevClosedHlc: number;\n prevClosedTrend: number;\n prevClosedCm: number;\n prevClosedDm: number;\n barCount: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.klinger called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): KlingerSlot {\n const klingerBuf = new Float64RingBuffer(capacity);\n return {\n result: null,\n klingerBuf,\n klingerSeries: makeSeriesView<number>(klingerBuf),\n prevHlc: Number.NaN,\n prevTrend: 0,\n prevCm: 0,\n prevDm: 0,\n prevClosedHlc: Number.NaN,\n prevClosedTrend: 0,\n prevClosedCm: 0,\n prevClosedDm: 0,\n barCount: 0,\n };\n}\n\n/**\n * Volume Force given the bar OHLCV + the prior bar's (hlc, trend, cm,\n * dm) snapshot. Returns the new (vf, trend, cm, dm) tuple.\n *\n * `vf = volume · |2 · (dm / cm − 1)| · trend · 100` when `cm` is\n * finite and non-zero; else `vf = 0`. NaN price inputs hold the prior\n * state forward (vf = 0).\n */\nfunction computeVf(\n high: number,\n low: number,\n close: number,\n volume: number,\n baseHlc: number,\n baseTrend: number,\n baseCm: number,\n baseDm: number,\n): { vf: number; hlc: number; trend: number; cm: number; dm: number } {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return { vf: 0, hlc: baseHlc, trend: baseTrend, cm: baseCm, dm: baseDm };\n }\n const hlc = high + low + close;\n const dm = high - low;\n let trend: number;\n if (!Number.isFinite(baseHlc)) {\n // First bar — no prior HLC. Seed trend = 0 (matches invinite's\n // initialisation: `prevTrend = 0`), emit vf = 0, propagate\n // baseDm = dm (subsequent bar's cm starts from this dm).\n return { vf: 0, hlc, trend: 0, cm: 0, dm };\n }\n if (hlc > baseHlc) trend = 1;\n else if (hlc < baseHlc) trend = -1;\n else trend = baseTrend;\n const cm = trend === baseTrend ? baseCm + dm : baseDm + dm;\n // Defensive: volume / vf-finite guards. Outer call site has already\n // checked high / low / close are finite; volume can still be NaN on\n // some exchanges, but the runtime feeds a finite default elsewhere.\n /* c8 ignore next */\n const volumeFinite = Number.isFinite(volume) ? volume : 0;\n let vf = 0;\n if (cm !== 0 && Number.isFinite(cm)) {\n vf = volumeFinite * Math.abs(2 * (dm / cm - 1)) * trend * 100;\n /* c8 ignore next */\n if (!Number.isFinite(vf)) vf = 0;\n }\n return { vf, hlc, trend, cm, dm };\n}\n\n/**\n * Klinger Volume Oscillator. Per-bar Volume Force accumulator drives\n * the difference of two EMAs (`fastLength` / `slowLength`); the\n * signal line is a third EMA over the Klinger line. Defaults\n * `(34, 55, 13)`. Composes 3 `ta.ema` sub-slots (`${slotId}/fastEma`,\n * `${slotId}/slowEma`, `${slotId}/signalEma`). The user-facing\n * `signal` Series IS the signalEma sub-slot's own Series view.\n *\n * Zero-volume bars emit `vf = 0` (no contribution); this matches\n * invinite's `safeVolume`-style shape and the task spec's \"no VF\n * update\" wording — zero-VF still flows into the EMAs, it just adds\n * zero. The first bar emits `vf = 0` (seed only — no prior HLC to\n * difference against).\n *\n * @formula hlc[t] = high + low + close ;\n * trend = hlc > prevHlc ? +1 : hlc < prevHlc ? −1 : prevTrend ;\n * dm = high − low ; cm = trend === prevTrend ? prevCm + dm : prevDm + dm ;\n * vf = cm ≠ 0 ? volume · |2·(dm/cm − 1)| · trend · 100 : 0 ;\n * klinger = ema(vf, fastLength) − ema(vf, slowLength) ;\n * signal = ema(klinger, signalLength)\n * @warmup slowLength + signalLength − 2\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const k = ta.klinger(\"slot\");\n * // plot(k.klinger); plot(k.signal);\n */\nexport function klinger(slotId: string, opts?: KlingerOpts): KlingerResult {\n const ctx = getCtx();\n const fastLength = opts?.fastLength ?? DEFAULT_FAST_LENGTH;\n const slowLength = opts?.slowLength ?? DEFAULT_SLOW_LENGTH;\n const signalLength = opts?.signalLength ?? DEFAULT_SIGNAL_LENGTH;\n\n let slot = ctx.stream.taSlots.get(slotId) as KlingerSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n const { high, low, close, volume } = ctx.stream.bar;\n\n let vf: number;\n if (ctx.isTick) {\n // Replay the head's VF against the prior-close snapshot.\n const step = computeVf(\n high,\n low,\n close,\n volume,\n slot.prevClosedHlc,\n slot.prevClosedTrend,\n slot.prevClosedCm,\n slot.prevClosedDm,\n );\n vf = step.vf;\n } else {\n // Close-side. Snapshot prior-close BEFORE folding in.\n slot.prevClosedHlc = slot.prevHlc;\n slot.prevClosedTrend = slot.prevTrend;\n slot.prevClosedCm = slot.prevCm;\n slot.prevClosedDm = slot.prevDm;\n const step = computeVf(\n high,\n low,\n close,\n volume,\n slot.prevHlc,\n slot.prevTrend,\n slot.prevCm,\n slot.prevDm,\n );\n vf = step.vf;\n slot.prevHlc = step.hlc;\n slot.prevTrend = step.trend;\n slot.prevCm = step.cm;\n slot.prevDm = step.dm;\n slot.barCount += 1;\n }\n\n const fastSeries = ema(`${slotId}/fastEma`, vf, fastLength);\n const slowSeries = ema(`${slotId}/slowEma`, vf, slowLength);\n const fa = fastSeries.current;\n const sa = slowSeries.current;\n const klingerValue = Number.isFinite(fa) && Number.isFinite(sa) ? fa - sa : Number.NaN;\n\n if (ctx.isTick) slot.klingerBuf.replaceHead(klingerValue);\n else slot.klingerBuf.append(klingerValue);\n\n const signalSeries = ema(`${slotId}/signalEma`, klingerValue, signalLength);\n\n if (slot.result === null) {\n slot.result = Object.freeze({\n klinger: slot.klingerSeries,\n signal: signalSeries,\n });\n }\n return slot.result;\n}\n"]}
package/dist/ta/kst.js CHANGED
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/kst.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape. Composition: four `ta.sma` sub-slots (one per
@@ -1 +1 @@
1
- {"version":3,"file":"kst.js","sourceRoot":"","sources":["../../src/ta/kst.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kst.js","sourceRoot":"","sources":["../../src/ta/kst.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,qEAAqE;AACrE,4DAA4D;AAC5D,uEAAuE;AACvE,sEAAsE;AACtE,kEAAkE;AAClE,qEAAqE;AACrE,sDAAsD;AAItD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAiBhC,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,OAAe,EAAE,QAAgB;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB,EAAE,GAAW,EAAE,MAAc;IACzE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC/C,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,MAAsB,EAAE,IAAc;IACtE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,qBAAqB,CAAC;IAEjE,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACjF,IAAI,GAAG;YACH,MAAM,EAAE,IAAI;YACZ,MAAM;YACN,SAAS,EAAE,cAAc,CAAS,MAAM,CAAC;YACzC,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,YAAY,EAAE,IAAI,iBAAiB,CAAC,WAAW,CAAC;SACnD,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAE1D,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;IAE5B,MAAM,QAAQ,GACV,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpF,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;QAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAErB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,MAAM,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAExE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,MAAM,EAAE,YAAY;SACvB,CAAC,CAAC;IACP,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,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// Ported from invinite/src/components/trading-chart/indicators/kst.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Composition: four `ta.sma` sub-slots (one per\n// smoothed ROC) + one `ta.sma` sub-slot for the signal line. The four\n// percentage ROCs are computed inline against the parent's source\n// ring (same convention as `coppock.ts` — `ta.change` emits absolute\n// deltas, while KST needs percentage rate-of-change).\n\nimport type { KstOpts, KstResult, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { sma } from \"./sma.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_ROC1_LENGTH = 10;\nconst DEFAULT_ROC2_LENGTH = 15;\nconst DEFAULT_ROC3_LENGTH = 20;\nconst DEFAULT_ROC4_LENGTH = 30;\nconst DEFAULT_ROC1_SMOOTH = 10;\nconst DEFAULT_ROC2_SMOOTH = 10;\nconst DEFAULT_ROC3_SMOOTH = 10;\nconst DEFAULT_ROC4_SMOOTH = 15;\nconst DEFAULT_SIGNAL_LENGTH = 9;\n\ntype KstSlot = {\n result: KstResult | null;\n readonly kstBuf: Float64RingBuffer;\n readonly kstSeries: Series<number>;\n readonly roc1Length: number;\n readonly roc2Length: number;\n readonly roc3Length: number;\n readonly roc4Length: number;\n /**\n * Last `max(rocN) + 1` closed source values; `at(0)` is the head.\n * Shared by all four percentage-ROC computations.\n */\n readonly sourceWindow: Float64RingBuffer;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.kst called outside an active script step\");\n }\n return ctx;\n}\n\nfunction pctRoc(current: number, lookback: number): number {\n if (!Number.isFinite(lookback) || lookback === 0 || !Number.isFinite(current)) {\n return Number.NaN;\n }\n return (100 * (current - lookback)) / lookback;\n}\n\nfunction rocFromWindow(window: Float64RingBuffer, src: number, length: number): number {\n if (window.length <= length) return Number.NaN;\n return pctRoc(src, window.at(length));\n}\n\n/**\n * Know Sure Thing (Martin Pring, 1992). Weighted sum of four SMA-\n * smoothed percentage rate-of-change series plus an SMA signal line.\n * Defaults `(10, 15, 20, 30, 10, 10, 10, 15, 9)` match Pring's\n * canonical settings. Composes 4 `ta.sma` sub-slots\n * (`${slotId}/r1Sma` .. `${slotId}/r4Sma`) for the smoothing layer\n * plus one `ta.sma` sub-slot (`${slotId}/signalSma`) for the signal\n * line. The percentage-ROC math is inline (mirrors `ta.coppock` —\n * `ta.change` emits absolute deltas, not percentages).\n *\n * The user-facing `signal` Series IS the signalSma sub-slot's own\n * Series view (no extra output buffer on the parent slot). The\n * `kst` Series wraps the parent's own `kstBuf` ring. Result identity\n * is captured on the first call and returned by reference thereafter.\n *\n * @formula rN[t] = sma(pctRoc(source[t], source[t − rocNLength]), rocNSmooth) for N in 1..4 ;\n * kst[t] = r1 + 2·r2 + 3·r3 + 4·r4 ; NaN if any rN NaN ;\n * signal = sma(kst, signalLength)\n * @warmup max_N(rocNLength + rocNSmooth) + signalLength − 2\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const k = ta.kst(\"slot\", bar.close);\n * // plot(k.kst); plot(k.signal);\n */\nexport function kst(slotId: string, source: ScalarOrSeries, opts?: KstOpts): KstResult {\n const ctx = getCtx();\n const roc1Length = opts?.roc1Length ?? DEFAULT_ROC1_LENGTH;\n const roc2Length = opts?.roc2Length ?? DEFAULT_ROC2_LENGTH;\n const roc3Length = opts?.roc3Length ?? DEFAULT_ROC3_LENGTH;\n const roc4Length = opts?.roc4Length ?? DEFAULT_ROC4_LENGTH;\n const roc1Smooth = opts?.roc1Smooth ?? DEFAULT_ROC1_SMOOTH;\n const roc2Smooth = opts?.roc2Smooth ?? DEFAULT_ROC2_SMOOTH;\n const roc3Smooth = opts?.roc3Smooth ?? DEFAULT_ROC3_SMOOTH;\n const roc4Smooth = opts?.roc4Smooth ?? DEFAULT_ROC4_SMOOTH;\n const signalLength = opts?.signalLength ?? DEFAULT_SIGNAL_LENGTH;\n\n const src = readSourceValue(source);\n\n let slot = ctx.stream.taSlots.get(slotId) as KstSlot | undefined;\n if (slot === undefined) {\n const capacity = ctx.stream.ohlcv.close.capacity;\n const kstBuf = new Float64RingBuffer(capacity);\n const lookbackCap = Math.max(roc1Length, roc2Length, roc3Length, roc4Length) + 1;\n slot = {\n result: null,\n kstBuf,\n kstSeries: makeSeriesView<number>(kstBuf),\n roc1Length,\n roc2Length,\n roc3Length,\n roc4Length,\n sourceWindow: new Float64RingBuffer(lookbackCap),\n };\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n if (ctx.isTick) {\n slot.sourceWindow.replaceHead(src);\n } else {\n slot.sourceWindow.append(src);\n }\n\n const roc1 = rocFromWindow(slot.sourceWindow, src, slot.roc1Length);\n const roc2 = rocFromWindow(slot.sourceWindow, src, slot.roc2Length);\n const roc3 = rocFromWindow(slot.sourceWindow, src, slot.roc3Length);\n const roc4 = rocFromWindow(slot.sourceWindow, src, slot.roc4Length);\n\n const r1Series = sma(`${slotId}/r1Sma`, roc1, roc1Smooth);\n const r2Series = sma(`${slotId}/r2Sma`, roc2, roc2Smooth);\n const r3Series = sma(`${slotId}/r3Sma`, roc3, roc3Smooth);\n const r4Series = sma(`${slotId}/r4Sma`, roc4, roc4Smooth);\n\n const r1 = r1Series.current;\n const r2 = r2Series.current;\n const r3 = r3Series.current;\n const r4 = r4Series.current;\n\n const kstValue =\n Number.isFinite(r1) && Number.isFinite(r2) && Number.isFinite(r3) && Number.isFinite(r4)\n ? r1 + 2 * r2 + 3 * r3 + 4 * r4\n : Number.NaN;\n\n if (ctx.isTick) {\n slot.kstBuf.replaceHead(kstValue);\n } else {\n slot.kstBuf.append(kstValue);\n }\n\n const signalSeries = sma(`${slotId}/signalSma`, kstValue, signalLength);\n\n if (slot.result === null) {\n slot.result = Object.freeze({\n kst: slot.kstSeries,\n signal: signalSeries,\n });\n }\n return slot.result;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/adx-from-di.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  import { wilderStep } from "./wilderSmoothing.js";
9
9
  /**
10
10
  * Wilder ADX from a pre-computed `+DI` / `-DI` pair. Computes
@@ -1 +1 @@
1
- {"version":3,"file":"adxFromDi.js","sourceRoot":"","sources":["../../../src/ta/lib/adxFromDi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CACrB,MAAoB,EACpB,OAAqB,EACrB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QACzD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1D,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,mEAAmE;IACnE,qEAAqE;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"adxFromDi.js","sourceRoot":"","sources":["../../../src/ta/lib/adxFromDi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CACrB,MAAoB,EACpB,OAAqB,EACrB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QACzD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1D,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,mEAAmE;IACnE,qEAAqE;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/adx-from-di.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { wilderStep } from \"./wilderSmoothing.js\";\n\n/**\n * Wilder ADX from a pre-computed `+DI` / `-DI` pair. Computes\n * `DX = 100 * |+DI - -DI| / (+DI + -DI)` per bar (falls back to `0`\n * when both DIs are zero), then Wilder-smooths `DX` over `length`\n * via the shared `wilderStep`.\n *\n * Warmup: `2 * length - 1`. Slots `[0, length - 1]` carry the DI\n * warmup (callers feed NaN there); slots `[length, 2*length - 2]`\n * accumulate the ADX seed sum; `out[2*length - 1]` is the first\n * defined ADX value (mean of the first `length` DX samples).\n *\n * Mismatched input lengths or `length <= 0` yields an all-NaN\n * buffer. Any non-finite DI in the seed window leaves the output\n * NaN past the warmup — the Wilder recurrence cannot resume past\n * a NaN seed.\n *\n * @formula dx[i] = 100 * |+DI - -DI| / (+DI + -DI) ;\n * seed = mean(dx[length .. 2*length - 1]) ;\n * out[i] = wilderStep(out[i-1], dx[i], length) ;\n * outputs are clamped to [0, 100]\n * @warmup 2 * length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { adxFromDi } from \"./adxFromDi\";\n * // const adx = adxFromDi(plusDi, minusDi, 14);\n */\nexport function adxFromDi(\n plusDi: Float64Array,\n minusDi: Float64Array,\n length: number,\n): Float64Array {\n const n = plusDi.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || minusDi.length !== n || n < 2 * length) {\n return out;\n }\n\n const dx = new Float64Array(n);\n dx.fill(Number.NaN);\n for (let i = 0; i < n; i += 1) {\n const p = plusDi[i];\n const m = minusDi[i];\n if (!Number.isFinite(p) || !Number.isFinite(m)) continue;\n const sum = p + m;\n dx[i] = sum === 0 ? 0 : (100 * Math.abs(p - m)) / sum;\n }\n\n const firstSeedIdx = 2 * length - 1;\n let seedSum = 0;\n for (let i = length; i <= firstSeedIdx; i += 1) {\n const v = dx[i];\n if (!Number.isFinite(v)) return out;\n seedSum += v;\n }\n // dx is bounded by [0, 100] in exact arithmetic, but the seed mean\n // and the Wilder recurrence can overshoot 100 by a few ulps — clamp.\n out[firstSeedIdx] = Math.min(100, seedSum / length);\n\n for (let i = firstSeedIdx + 1; i < n; i += 1) {\n const v = dx[i];\n if (!Number.isFinite(v)) return out;\n out[i] = Math.min(100, wilderStep(out[i - 1], v, length));\n }\n\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  import { computeMaOfFloat64 } from "./computeMaOfFloat64.js";
9
9
  import { vwmaFloat64 } from "./vwmaFloat64.js";
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"computeMa.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMa.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,iFAAiF;AACjF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,SAAS,CACrB,IAAY,EACZ,MAAoB,EACpB,MAAc,EACd,MAA2B;IAE3B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,SAAS,CACrB,kDAAkD,CAC1B,CAAC;YAC7B,GAAG,CAAC,IAAI,GAAG,6BAA6B,CAAC;YACzC,MAAM,GAAG,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"computeMa.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMa.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,iFAAiF;AACjF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,SAAS,CACrB,IAAY,EACZ,MAAoB,EACpB,MAAc,EACd,MAA2B;IAE3B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,SAAS,CACrB,kDAAkD,CAC1B,CAAC;YAC7B,GAAG,CAAC,IAAI,GAAG,6BAA6B,CAAC;YACzC,MAAM,GAAG,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,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// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { computeMaOfFloat64 } from \"./computeMaOfFloat64.js\";\nimport type { MaType } from \"./maTypes.js\";\nimport { vwmaFloat64 } from \"./vwmaFloat64.js\";\n\n/**\n * Error thrown by {@link computeMa} when `kind === \"vwma\"` is called\n * with `volume === null`. Carries a stable `code` for programmatic\n * dispatch: `\"ta-lib-vwma-requires-volume\"`.\n */\ntype VwmaRequiresVolumeError = TypeError & { code: \"ta-lib-vwma-requires-volume\" };\n\n/**\n * Volume-aware MA dispatcher over a `Float64Array` input. Routes\n * `\"vwma\"` through {@link vwmaFloat64} (requires a parallel volume\n * array); every other kind routes through {@link computeMaOfFloat64}.\n * Mirrors invinite's `computeMaSeries`, but operates on flat\n * `Float64Array` source + volume instead of `ChartCandle[]` so the\n * helper stays decoupled from the bar-shape.\n *\n * Throws a `TypeError` with `code = \"ta-lib-vwma-requires-volume\"` if\n * `kind === \"vwma\"` and `volume === null` — calling VWMA without a\n * volume stream is a programmer error, not a runtime data condition.\n * For non-VWMA kinds, `volume` is ignored.\n *\n * @formula kind === \"vwma\" → vwmaFloat64(source, volume, length) ;\n * otherwise → computeMaOfFloat64(kind, source, length)\n * @since 0.2\n * @stable\n * @example\n * // import { computeMa } from \"./computeMa\";\n * // const ma = computeMa(\"vwma\", close, volume, 20);\n * // const sma20 = computeMa(\"sma\", close, null, 20);\n */\nexport function computeMa(\n kind: MaType,\n source: Float64Array,\n length: number,\n volume: Float64Array | null,\n): Float64Array {\n if (kind === \"vwma\") {\n if (volume === null) {\n const err = new TypeError(\n \"computeMa: vwma requires a non-null volume array\",\n ) as VwmaRequiresVolumeError;\n err.code = \"ta-lib-vwma-requires-volume\";\n throw err;\n }\n return vwmaFloat64(source, volume, length);\n }\n return computeMaOfFloat64(kind, source, length);\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma-of-float64.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  import { computeEmaOfFloat64 } from "./emaFloat64.js";
9
9
  import { computeSmaOfFloat64 } from "./smaFloat64.js";
10
10
  import { smmaFloat64 } from "./smmaFloat64.js";
@@ -1 +1 @@
1
- {"version":3,"file":"computeMaOfFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMaOfFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,4FAA4F;AAC5F,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAAoB,EACpB,MAAoB,EACpB,MAAc;IAEd,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM;YACP,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"computeMaOfFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMaOfFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,4FAA4F;AAC5F,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAAoB,EACpB,MAAoB,EACpB,MAAc;IAEd,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM;YACP,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACL,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// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma-of-float64.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { computeEmaOfFloat64 } from \"./emaFloat64.js\";\nimport type { MaTypeNoVolume } from \"./maTypes.js\";\nimport { computeSmaOfFloat64 } from \"./smaFloat64.js\";\nimport { smmaFloat64 } from \"./smmaFloat64.js\";\nimport { wmaFloat64 } from \"./wmaFloat64.js\";\n\n/**\n * Chained-MA dispatcher over a `Float64Array` input. Routes by\n * `MaTypeNoVolume` to the matching per-kind core — never re-implements\n * the math. Consumed by chained MAs (MACD signal-of-MACD, PPO /\n * PVO signal-of-oscillator, RSI smoothing-MA over RSI) and by every\n * primitive that exposes an `maType` opt over a derived Float64 source\n * (BB middle override, Keltner middle, Envelope middle, Chop\n * denominator, Donchian midpoint).\n *\n * `\"vwma\"` is excluded at the type level: VWMA needs a parallel\n * volume array and derived Float64 chain inputs carry no matching\n * volume stream. Volume-aware callers route through {@link computeMa}.\n *\n * @formula kind switch over MaTypeNoVolume → delegates to\n * {sma,ema,wma,smma}Float64(source, length)\n * @since 0.2\n * @stable\n * @example\n * // import { computeMaOfFloat64 } from \"./computeMaOfFloat64\";\n * // const sig = computeMaOfFloat64(\"ema\", macdLine, 9);\n */\nexport function computeMaOfFloat64(\n kind: MaTypeNoVolume,\n source: Float64Array,\n length: number,\n): Float64Array {\n switch (kind) {\n case \"sma\":\n return computeSmaOfFloat64(source, length);\n case \"ema\":\n return computeEmaOfFloat64(source, length);\n case \"wma\":\n return wmaFloat64(source, length);\n case \"smma\":\n return smmaFloat64(source, length);\n }\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/directionalState.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  import { wilderStep } from "./wilderSmoothing.js";
9
9
  /**
10
10
  * Allocate a fresh directional-state record. Shared by `ta.dmi` and
@@ -1 +1 @@
1
- {"version":3,"file":"directionalState.js","sourceRoot":"","sources":["../../../src/ta/lib/directionalState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directionalState.js","sourceRoot":"","sources":["../../../src/ta/lib/directionalState.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/directionalState.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { wilderStep } from \"./wilderSmoothing.js\";\n\n/**\n * Incremental Wilder-directional state shared by `ta.dmi` and\n * `ta.adx`. Tracks the seed-window accumulators + the smoothed\n * running values, plus the \"previous-previous\" snapshots the tick\n * replay needs to recompute the head against the prior closed bar.\n *\n * @formula N/A — record type for {@link initDirectionalState}\n * @since 0.2\n * @stable\n * @example\n * // const s: DirectionalState = initDirectionalState(14);\n */\nexport type DirectionalState = {\n readonly length: number;\n /** Number of CLOSED bars seen so far (counts every close-side step). */\n barCount: number;\n prevHigh: number;\n prevLow: number;\n prevClose: number;\n /** `prevHigh` / `prevLow` / `prevClose` as of the bar before the\n * current bar — frozen by the prior close-side advance so tick\n * replay can recompute against the previous closed state. */\n prevPrevHigh: number;\n prevPrevLow: number;\n prevPrevClose: number;\n seedPlusDm: number;\n seedMinusDm: number;\n seedTr: number;\n smoothedPlusDm: number;\n smoothedMinusDm: number;\n smoothedTr: number;\n /** Smoothed state captured at the prior close — used by tick replay. */\n prevClosedSmoothedPlusDm: number;\n prevClosedSmoothedMinusDm: number;\n prevClosedSmoothedTr: number;\n plusDi: number;\n minusDi: number;\n};\n\n/**\n * Allocate a fresh directional-state record. Shared by `ta.dmi` and\n * `ta.adx`. Exported so the ADX primitive can fold onto the same\n * recurrence without duplicating the field set.\n *\n * @formula N/A — state constructor (zero / NaN initializers)\n * @since 0.2\n * @stable\n * @example\n * // const s = initDirectionalState(14);\n */\nexport function initDirectionalState(length: number): DirectionalState {\n return {\n length,\n barCount: 0,\n prevHigh: Number.NaN,\n prevLow: Number.NaN,\n prevClose: Number.NaN,\n prevPrevHigh: Number.NaN,\n prevPrevLow: Number.NaN,\n prevPrevClose: Number.NaN,\n seedPlusDm: 0,\n seedMinusDm: 0,\n seedTr: 0,\n smoothedPlusDm: Number.NaN,\n smoothedMinusDm: Number.NaN,\n smoothedTr: Number.NaN,\n prevClosedSmoothedPlusDm: Number.NaN,\n prevClosedSmoothedMinusDm: Number.NaN,\n prevClosedSmoothedTr: Number.NaN,\n plusDi: Number.NaN,\n minusDi: Number.NaN,\n };\n}\n\nfunction trueRange(high: number, low: number, prevClose: number): number {\n // Defensive: `trueRange` is only called from bar 1 onwards (bar 0\n // accumulates `high - low` inline via `seedTr += high - low`), and\n // by then `prevClose` has been set to a finite value by the prior\n // close-side advance. NaN-prevClose fallback kept for symmetry.\n /* c8 ignore next */\n if (!Number.isFinite(prevClose)) return high - low;\n return Math.max(high - low, Math.abs(high - prevClose), Math.abs(low - prevClose));\n}\n\nfunction rawDirectionalMovement(\n high: number,\n low: number,\n prevHigh: number,\n prevLow: number,\n): { pDm: number; mDm: number } {\n const upMove = high - prevHigh;\n const downMove = prevLow - low;\n const pDm = upMove > downMove && upMove > 0 ? upMove : 0;\n const mDm = downMove > upMove && downMove > 0 ? downMove : 0;\n return { pDm, mDm };\n}\n\n/**\n * Fold the new closed bar into the directional state. Mutates\n * `dirState` in place and returns the freshly computed `+DI` /\n * `-DI` pair (NaN until the seed window completes). Shared by\n * `ta.dmi` and `ta.adx`. The returned pair is also written back\n * to `dirState.plusDi` / `dirState.minusDi` for the consumer's\n * downstream DX computation.\n *\n * @formula See {@link wilderDirectional} (lib/) for the per-step\n * +DM / -DM / TR formulas; this routine inlines the same\n * recurrence in a single-pass mutable form.\n * @warmup length + 1 (first defined DI at barCount === length + 1)\n * @since 0.2\n * @stable\n * @example\n * // const { plusDi, minusDi } = advanceDirectionalClose(s, h, l, c);\n */\nexport function advanceDirectionalClose(\n dirState: DirectionalState,\n high: number,\n low: number,\n close: number,\n): { plusDi: number; minusDi: number } {\n const { length } = dirState;\n\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // Hold prior values forward, do not advance the seed / smoothed\n // state. Matches `atr.ts`'s NaN-input semantics — the recurrence\n // cannot resume past a NaN, so we keep the last known values.\n return { plusDi: dirState.plusDi, minusDi: dirState.minusDi };\n }\n\n dirState.barCount += 1;\n\n if (dirState.barCount === 1) {\n // First bar: seed prev-* snapshots and accumulate the bar-0\n // range as the initial TR contribution. Matches the reference\n // `lib/wilderDirectional` whose `seedTr` starts at\n // `high[0] - low[0]`. No DM yet (no prevHigh).\n dirState.prevPrevHigh = dirState.prevHigh;\n dirState.prevPrevLow = dirState.prevLow;\n dirState.prevPrevClose = dirState.prevClose;\n dirState.prevHigh = high;\n dirState.prevLow = low;\n dirState.prevClose = close;\n dirState.seedTr += high - low;\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n\n const tr = trueRange(high, low, dirState.prevClose);\n const { pDm, mDm } = rawDirectionalMovement(high, low, dirState.prevHigh, dirState.prevLow);\n\n // Capture prev-prev BEFORE overwriting prev (tick replay needs the\n // bar-before-current snapshot).\n dirState.prevPrevHigh = dirState.prevHigh;\n dirState.prevPrevLow = dirState.prevLow;\n dirState.prevPrevClose = dirState.prevClose;\n dirState.prevHigh = high;\n dirState.prevLow = low;\n dirState.prevClose = close;\n\n if (dirState.barCount <= length) {\n // Seed window: barCount in [2, length] inclusive accumulate\n // pDm + mDm + tr; barCount === length + 1 completes the seed\n // and emits the first defined DI pair.\n dirState.seedPlusDm += pDm;\n dirState.seedMinusDm += mDm;\n dirState.seedTr += tr;\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n\n if (dirState.barCount === length + 1) {\n // Seed completes at the (length + 1)-th close — first defined\n // slot is bar index `length` (zero-based; matches the\n // full-recompute reference). Capture the pre-completion seed\n // sums on `prevClosedSmoothed*` so tick replay can substitute\n // the head bar's contribution.\n dirState.prevClosedSmoothedPlusDm = dirState.seedPlusDm;\n dirState.prevClosedSmoothedMinusDm = dirState.seedMinusDm;\n dirState.prevClosedSmoothedTr = dirState.seedTr;\n dirState.seedPlusDm += pDm;\n dirState.seedMinusDm += mDm;\n dirState.seedTr += tr;\n dirState.smoothedPlusDm = dirState.seedPlusDm;\n dirState.smoothedMinusDm = dirState.seedMinusDm;\n dirState.smoothedTr = dirState.seedTr;\n const tr0 = dirState.smoothedTr;\n const plusDi = tr0 === 0 ? 0 : (100 * dirState.smoothedPlusDm) / tr0;\n const minusDi = tr0 === 0 ? 0 : (100 * dirState.smoothedMinusDm) / tr0;\n dirState.plusDi = plusDi;\n dirState.minusDi = minusDi;\n return { plusDi, minusDi };\n }\n\n // Post-seed: Wilder-smooth +DM / -DM / TR.\n dirState.prevClosedSmoothedPlusDm = dirState.smoothedPlusDm;\n dirState.prevClosedSmoothedMinusDm = dirState.smoothedMinusDm;\n dirState.prevClosedSmoothedTr = dirState.smoothedTr;\n dirState.smoothedPlusDm = wilderStep(dirState.smoothedPlusDm, pDm, length);\n dirState.smoothedMinusDm = wilderStep(dirState.smoothedMinusDm, mDm, length);\n dirState.smoothedTr = wilderStep(dirState.smoothedTr, tr, length);\n const tr1 = dirState.smoothedTr;\n const plusDi = tr1 === 0 ? 0 : (100 * dirState.smoothedPlusDm) / tr1;\n const minusDi = tr1 === 0 ? 0 : (100 * dirState.smoothedMinusDm) / tr1;\n dirState.plusDi = plusDi;\n dirState.minusDi = minusDi;\n return { plusDi, minusDi };\n}\n\n/**\n * Replay the latest TR / DM / DI against the FROZEN prior-closed\n * smoothed state. Does NOT mutate `dirState` (the consumer's\n * close-side advance owns mutation). Returns the head DI pair the\n * primitive should write to its output buffer.\n *\n * @formula Same recurrence as {@link advanceDirectionalClose}, but\n * applied against `prevClosedSmoothed*` snapshots so the\n * current bar can be replaced rather than appended.\n * @since 0.2\n * @stable\n * @example\n * // const di = tickDirectional(s, h, l, c);\n */\nexport function tickDirectional(\n dirState: DirectionalState,\n high: number,\n low: number,\n close: number,\n): { plusDi: number; minusDi: number } {\n if (dirState.barCount < dirState.length + 1) {\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return { plusDi: dirState.plusDi, minusDi: dirState.minusDi };\n }\n // Tick replay reads against the bar-before-current (prevPrevHigh /\n // prevPrevLow / prevPrevClose) — the values captured at the prior\n // close. The current closed bar's contribution to the smoothed\n // state has already been folded; we reverse-undo it by reading off\n // `prevClosedSmoothed*` and applying one fresh Wilder step.\n const tr = trueRange(high, low, dirState.prevPrevClose);\n const { pDm, mDm } = rawDirectionalMovement(\n high,\n low,\n dirState.prevPrevHigh,\n dirState.prevPrevLow,\n );\n\n if (dirState.barCount === dirState.length + 1) {\n // We just seeded on the current close; the\n // `prevClosedSmoothed*` snapshots are the seed sums BEFORE\n // this close's contribution. Re-seed with the tick's\n // contribution substituted.\n const seedPlusDm = dirState.prevClosedSmoothedPlusDm + pDm;\n const seedMinusDm = dirState.prevClosedSmoothedMinusDm + mDm;\n const seedTr = dirState.prevClosedSmoothedTr + tr;\n // Defensive: seedTr === 0 only on a perfectly-flat seed window\n // (every bar high === low === prev close). Real data never hits it.\n const plusDi = /* c8 ignore next */ seedTr === 0 ? 0 : (100 * seedPlusDm) / seedTr;\n const minusDi = /* c8 ignore next */ seedTr === 0 ? 0 : (100 * seedMinusDm) / seedTr;\n return { plusDi, minusDi };\n }\n const plusDmSm = wilderStep(dirState.prevClosedSmoothedPlusDm, pDm, dirState.length);\n const minusDmSm = wilderStep(dirState.prevClosedSmoothedMinusDm, mDm, dirState.length);\n const trSm = wilderStep(dirState.prevClosedSmoothedTr, tr, dirState.length);\n const plusDi = /* c8 ignore next */ trSm === 0 ? 0 : (100 * plusDmSm) / trSm;\n const minusDi = /* c8 ignore next */ trSm === 0 ? 0 : (100 * minusDmSm) / trSm;\n return { plusDi, minusDi };\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/donchian-mid.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Donchian midpoint over a trailing `length`-bar window of `high` /
10
10
  * `low` Float64Arrays: `(max(high) + min(low)) / 2`. Warmup slots
@@ -1 +1 @@
1
- {"version":3,"file":"donchianMid.js","sourceRoot":"","sources":["../../../src/ta/lib/donchianMid.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAkB,EAAE,GAAiB,EAAE,MAAc;IAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEzE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,YAAY,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACV,CAAC;gBACD,IAAI,CAAC,GAAG,OAAO;oBAAE,OAAO,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,MAAM;oBAAE,MAAM,GAAG,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,YAAY;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"donchianMid.js","sourceRoot":"","sources":["../../../src/ta/lib/donchianMid.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAkB,EAAE,GAAiB,EAAE,MAAc;IAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEzE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,YAAY,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACV,CAAC;gBACD,IAAI,CAAC,GAAG,OAAO;oBAAE,OAAO,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,MAAM;oBAAE,MAAM,GAAG,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,YAAY;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/donchian-mid.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Donchian midpoint over a trailing `length`-bar window of `high` /\n * `low` Float64Arrays: `(max(high) + min(low)) / 2`. Warmup slots\n * `[0, length - 2]` are `NaN`; a NaN inside the window propagates\n * `NaN` at that slot only. Mismatched input lengths return an\n * all-NaN buffer. Consumed by `ta.donchian` (channel midpoint) and\n * `ta.ichimoku` (Tenkan / Kijun / Senkou B raw).\n *\n * O(length) per slot — the per-bar scan is fine for the consumer\n * primitives, which keep their own incremental state.\n *\n * @formula mid[i] = (max(high[i - length + 1 ..= i]) + min(low[i - length + 1 ..= i])) / 2\n * @warmup length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { donchianMid } from \"./donchianMid\";\n * // const mid = donchianMid(highs, lows, 20);\n */\nexport function donchianMid(high: Float64Array, low: Float64Array, length: number): Float64Array {\n const n = high.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || n < length || low.length !== n) return out;\n\n for (let i = length - 1; i < n; i += 1) {\n let highest = high[i];\n let lowest = low[i];\n let windowFinite = Number.isFinite(highest) && Number.isFinite(lowest);\n if (windowFinite) {\n for (let j = i - length + 1; j < i; j += 1) {\n const h = high[j];\n const l = low[j];\n if (!Number.isFinite(h) || !Number.isFinite(l)) {\n windowFinite = false;\n break;\n }\n if (h > highest) highest = h;\n if (l < lowest) lowest = l;\n }\n }\n if (windowFinite) out[i] = (highest + lowest) / 2;\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/ema-of-float64.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * EMA over a `Float64Array` input. Walks past any leading-NaN prefix,
10
10
  * seeds with the simple mean of the next `length` finite values, then
@@ -1 +1 @@
1
- {"version":3,"file":"emaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/emaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"emaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/emaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/ema-of-float64.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * EMA over a `Float64Array` input. Walks past any leading-NaN prefix,\n * seeds with the simple mean of the next `length` finite values, then\n * runs the recurrence `out[i] = src[i] * k + out[i − 1] * (1 − k)`\n * with `k = 2 / (length + 1)`. A mid-stream NaN holds the previous\n * value forward — keeps the output continuous past gaps. The\n * incremental `ta.ema` primitive and the property tests share this\n * helper as their reference.\n *\n * Warmup `[0, length − 2]` is `NaN`; `out[length − 1]` is the first\n * defined value.\n *\n * @formula k = 2 / (length + 1) ;\n * out[i] = input[i] * k + out[i − 1] * (1 − k)\n * @since 0.1\n * @stable\n * @example\n * // import { computeEmaOfFloat64 } from \"./emaFloat64\";\n * // const out = computeEmaOfFloat64(new Float64Array([1, 2, 3, 4]), 2);\n */\nexport function computeEmaOfFloat64(input: Float64Array, length: number): Float64Array {\n const n = input.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(input[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n let seedSum = 0;\n for (let i = firstValidIdx; i < firstValidIdx + length; i += 1) {\n seedSum += input[i];\n }\n const seedIdx = firstValidIdx + length - 1;\n out[seedIdx] = seedSum / length;\n\n const k = 2 / (length + 1);\n for (let i = seedIdx + 1; i < n; i += 1) {\n const v = input[i];\n if (!Number.isFinite(v)) {\n out[i] = out[i - 1];\n continue;\n }\n out[i] = v * k + out[i - 1] * (1 - k);\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/linear-regression.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Rolling ordinary-least-squares fit of `y = a + b·x` over each
10
10
  * trailing `length`-bar window, with `x = 0 .. length - 1` (bar
@@ -1 +1 @@
1
- {"version":3,"file":"linearRegression.js","sourceRoot":"","sources":["../../../src/ta/lib/linearRegression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linearRegression.js","sourceRoot":"","sources":["../../../src/ta/lib/linearRegression.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/linear-regression.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Per-slot OLS rolling regression result over a `Float64Array`\n * window. Each of the three Float64Array fields has the same length\n * as the input source; warmup slots are NaN.\n *\n * @formula N/A — return-bundle type for {@link linearRegression}\n * @since 0.2\n * @stable\n * @example\n * // const r: LinearRegressionFrame = linearRegression(close, 20);\n */\nexport type LinearRegressionFrame = Readonly<{\n slope: Float64Array;\n intercept: Float64Array;\n value: Float64Array;\n}>;\n\n/**\n * Rolling ordinary-least-squares fit of `y = a + b·x` over each\n * trailing `length`-bar window, with `x = 0 .. length - 1` (bar\n * index inside the window). Returns three same-length arrays:\n *\n * - `slope[i]` — the `b` coefficient at slot `i`.\n * - `intercept[i]` — the `a` coefficient.\n * - `value[i]` — the regression line evaluated at the last bar\n * of the window (`intercept + slope * (length - 1)`).\n * This is the LSMA value at `i`.\n *\n * Closed-form formula:\n * `slope = (N·Σxy − Σx·Σy) / (N·Σx² − (Σx)²)` —\n * since `x` is `0..N-1`, `Σx² − (Σx)²/N` is a constant of `length`\n * and is precomputed once outside the slot loop.\n *\n * Warmup `[0, length - 2]` is `NaN` on all three outputs. Any NaN\n * inside the window propagates `NaN` at that slot only.\n *\n * @formula xMean = (length - 1) / 2 ;\n * xDev[j] = j - xMean ;\n * sumXX = Σ xDev² ;\n * slope = Σ(xDev * (y - yMean)) / sumXX ;\n * intercept = yMean - slope * xMean ;\n * value = intercept + slope * (length - 1)\n * @warmup length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { linearRegression } from \"./linearRegression\";\n * // const { slope, intercept, value } = linearRegression(close, 20);\n */\nexport function linearRegression(source: Float64Array, length: number): LinearRegressionFrame {\n const n = source.length;\n const slope = new Float64Array(n);\n const intercept = new Float64Array(n);\n const value = new Float64Array(n);\n slope.fill(Number.NaN);\n intercept.fill(Number.NaN);\n value.fill(Number.NaN);\n if (length < 2 || n === 0 || n < length) {\n return { intercept, slope, value };\n }\n\n const xMean = (length - 1) / 2;\n const xDev = new Float64Array(length);\n let sumXX = 0;\n for (let j = 0; j < length; j += 1) {\n const dev = j - xMean;\n xDev[j] = dev;\n sumXX += dev * dev;\n }\n\n for (let i = length - 1; i < n; i += 1) {\n const startIdx = i - length + 1;\n let sumY = 0;\n let windowFinite = true;\n for (let j = 0; j < length; j += 1) {\n const v = source[startIdx + j];\n if (!Number.isFinite(v)) {\n windowFinite = false;\n break;\n }\n sumY += v;\n }\n if (!windowFinite) continue;\n\n const yMean = sumY / length;\n let num = 0;\n for (let j = 0; j < length; j += 1) {\n num += xDev[j] * (source[startIdx + j] - yMean);\n }\n const m = num / sumXX;\n const b = yMean - m * xMean;\n slope[i] = m;\n intercept[i] = b;\n value[i] = b + m * (length - 1);\n }\n\n return { intercept, slope, value };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"maTypes.js","sourceRoot":"","sources":["../../../src/ta/lib/maTypes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D"}
1
+ {"version":3,"file":"maTypes.js","sourceRoot":"","sources":["../../../src/ta/lib/maTypes.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { MaTypeNoVolume } from \"@invinite-org/chartlang-core\";\n\n/**\n * Re-export of the public {@link MaTypeNoVolume} from\n * `@invinite-org/chartlang-core`. The runtime-side `ta/lib/` helpers\n * consume it through this module so the local {@link MaType} (which\n * adds `\"vwma\"`) and the chained-MA subset stay declared next to each\n * other — there is no separate runtime declaration of the union, only\n * a re-export, so the two cannot drift.\n *\n * @formula N/A — string-literal union type\n * @since 0.2\n * @stable\n * @example\n * // const k: MaTypeNoVolume = \"wma\";\n */\nexport type { MaTypeNoVolume };\n\n/**\n * Canonical moving-average kind union shared by every primitive that\n * exposes a configurable MA-type option (`bb` middle override,\n * `keltner` middle, `envelope` middle, `chop` denominator, `donchian`\n * midpoint, MACD / PPO / PVO signal). `\"smma\"` is the Wilder\n * smoothing kind (RMA in TradingView's vocabulary; same math path).\n *\n * Extends the public {@link MaTypeNoVolume} from\n * `@invinite-org/chartlang-core` with `\"vwma\"` — VWMA requires a\n * parallel volume array and is therefore unavailable to the chained-MA\n * dispatcher (`computeMaOfFloat64`). The volume-aware dispatcher\n * (`computeMa`) accepts the full {@link MaType}.\n *\n * @formula N/A — string-literal union type\n * @since 0.2\n * @stable\n * @example\n * // const k: MaType = \"ema\";\n */\nexport type MaType = MaTypeNoVolume | \"vwma\";\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/pearson.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Rolling Pearson correlation coefficient between two equal-length
10
10
  * series over each trailing `length`-bar window. Output values lie
@@ -1 +1 @@
1
- {"version":3,"file":"pearson.js","sourceRoot":"","sources":["../../../src/ta/lib/pearson.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,OAAO,CAAC,CAAe,EAAE,CAAe,EAAE,MAAc;IACpE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEtE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/C,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM;YACV,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;YACX,IAAI,IAAI,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAEzC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"pearson.js","sourceRoot":"","sources":["../../../src/ta/lib/pearson.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,OAAO,CAAC,CAAe,EAAE,CAAe,EAAE,MAAc;IACpE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEtE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/C,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM;YACV,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;YACX,IAAI,IAAI,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAEzC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/pearson.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Rolling Pearson correlation coefficient between two equal-length\n * series over each trailing `length`-bar window. Output values lie\n * in `[-1, +1]` (clamped to guard against floating-point overshoot);\n * `+1` is perfect positive correlation, `-1` perfect anti-correlation,\n * `0` no linear relationship.\n *\n * Warmup `[0, length - 2]` is `NaN`. Any non-finite slot inside the\n * window, or a window whose variance on either side is zero (a flat\n * window — correlation undefined), yields `NaN`. Mismatched input\n * lengths or `length < 2` returns an all-NaN buffer.\n *\n * Invinite's `pearson.ts` correlates a series against the bar index\n * (Trend Strength Index formula). This generalisation takes two\n * arbitrary series so the same helper backs `ta.trendStrengthIndex`\n * (pass `b = [0, 1, ..., n-1]`) and Phase-5's `correlationCoeff`\n * (pass a secondary symbol's close).\n *\n * @formula meanA = Σa/N ; meanB = Σb/N ;\n * num = Σ((a - meanA) * (b - meanB)) ;\n * den = sqrt(Σ(a - meanA)² * Σ(b - meanB)²) ;\n * r = clamp(num / den, -1, 1)\n * @warmup length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { pearson } from \"./pearson\";\n * // const r = pearson(seriesA, seriesB, 20);\n */\nexport function pearson(a: Float64Array, b: Float64Array, length: number): Float64Array {\n const n = a.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length < 2 || n === 0 || b.length !== n || n < length) return out;\n\n for (let i = length - 1; i < n; i += 1) {\n const startIdx = i - length + 1;\n let sumA = 0;\n let sumB = 0;\n let windowFinite = true;\n for (let j = 0; j < length; j += 1) {\n const av = a[startIdx + j];\n const bv = b[startIdx + j];\n if (!Number.isFinite(av) || !Number.isFinite(bv)) {\n windowFinite = false;\n break;\n }\n sumA += av;\n sumB += bv;\n }\n if (!windowFinite) continue;\n\n const meanA = sumA / length;\n const meanB = sumB / length;\n let sumAB = 0;\n let sumAA = 0;\n let sumBB = 0;\n for (let j = 0; j < length; j += 1) {\n const dA = a[startIdx + j] - meanA;\n const dB = b[startIdx + j] - meanB;\n sumAB += dA * dB;\n sumAA += dA * dA;\n sumBB += dB * dB;\n }\n if (sumAA === 0 || sumBB === 0) continue;\n\n const r = sumAB / Math.sqrt(sumAA * sumBB);\n out[i] = r < -1 ? -1 : r > 1 ? 1 : r;\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/pick-candle-source.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choice: the chartlang runtime pre-computes the four
9
9
  // derived sources on `BarView` per close (`hl2` / `hlc3` / `ohlc4` /
10
10
  // `hlcc4`), so this helper is a plain field read — invinite computed
@@ -1 +1 @@
1
- {"version":3,"file":"pickCandleSource.js","sourceRoot":"","sources":["../../../src/ta/lib/pickCandleSource.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,yFAAyF;AACzF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,iEAAiE;AACjE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,4BAA4B;AAM5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC5B,GAA8E,EAC9E,MAAmB;IAEnB,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACP,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,KAAK;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,KAAK,OAAO;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,KAAK,OAAO;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"pickCandleSource.js","sourceRoot":"","sources":["../../../src/ta/lib/pickCandleSource.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,yFAAyF;AACzF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,iEAAiE;AACjE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,4BAA4B;AAM5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC5B,GAA8E,EAC9E,MAAmB;IAEnB,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACP,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,KAAK;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,KAAK,OAAO;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,KAAK,OAAO;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;AACL,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// Ported from invinite/src/components/trading-chart/indicators/lib/pick-candle-source.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choice: the chartlang runtime pre-computes the four\n// derived sources on `BarView` per close (`hl2` / `hlc3` / `ohlc4` /\n// `hlcc4`), so this helper is a plain field read — invinite computed\n// the derived values inline because its `ChartCandle` shape carries\n// only the raw OHLC fields.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\nimport type { SourceField } from \"./readSourceField.js\";\n\n/**\n * Read one of the eight canonical source values off a `Bar`. The\n * four derived fields (`hl2` / `hlc3` / `ohlc4` / `hlcc4`) live on\n * the chartlang `Bar` type as readable scalars — the runtime fills\n * them per close in `onBarClose` / `onBarTick`.\n *\n * @formula hl2 = (high + low) / 2 ; hlc3 = (high + low + close) / 3 ;\n * ohlc4 = (open + high + low + close) / 4 ;\n * hlcc4 = (high + low + close + close) / 4\n * @since 0.1\n * @stable\n * @example\n * // import { pickCandleSource } from \"./pickCandleSource\";\n * // const px = pickCandleSource(bar, \"hl2\");\n */\nexport function pickCandleSource(\n bar: Bar | (Bar & { hl2: number; hlc3: number; ohlc4: number; hlcc4: number }),\n source: SourceField,\n): number {\n switch (source) {\n case \"close\":\n case \"high\":\n case \"low\":\n case \"open\":\n return bar[source];\n case \"hl2\":\n return (bar.high + bar.low) / 2;\n case \"hlc3\":\n return (bar.high + bar.low + bar.close) / 3;\n case \"ohlc4\":\n return (bar.open + bar.high + bar.low + bar.close) / 4;\n case \"hlcc4\":\n return (bar.high + bar.low + bar.close + bar.close) / 4;\n }\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/read-source-field.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  const SOURCE_FIELDS = new Set([
9
9
  "close",
10
10
  "high",
@@ -1 +1 @@
1
- {"version":3,"file":"readSourceField.js","sourceRoot":"","sources":["../../../src/ta/lib/readSourceField.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,wFAAwF;AACxF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAkBzE,MAAM,aAAa,GAA6B,IAAI,GAAG,CAAc;IACjE,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,MAAM;CACT,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC3B,MAA+B,EAC/B,WAAwB,OAAO;IAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,GAAkB,CAAC,EAAE,CAAC;QACnE,OAAO,GAAkB,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"readSourceField.js","sourceRoot":"","sources":["../../../src/ta/lib/readSourceField.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,wFAAwF;AACxF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAkBhB,MAAM,aAAa,GAA6B,IAAI,GAAG,CAAc;IACjE,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,MAAM;CACT,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC3B,MAA+B,EAC/B,WAAwB,OAAO;IAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,GAAkB,CAAC,EAAE,CAAC;QACnE,OAAO,GAAkB,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,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// Ported from invinite/src/components/trading-chart/indicators/lib/read-source-field.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * The eight canonical OHLC + derived source fields every `ta.*`\n * primitive accepts as a `source` field. Four raw OHLC keys plus\n * four TradingView-conforming derived averages. The derived values\n * are pre-computed by the runtime's execution loop and live on\n * `StreamState.bar` / `StreamState.seriesViews` — `pickCandleSource`\n * just reads them.\n *\n * @formula N/A — string-literal union\n * @since 0.1\n * @stable\n * @example\n * // type S = SourceField; // \"close\" | \"hl2\" | ...\n */\nexport type SourceField = \"open\" | \"high\" | \"low\" | \"close\" | \"hl2\" | \"hlc3\" | \"ohlc4\" | \"hlcc4\";\n\nconst SOURCE_FIELDS: ReadonlySet<SourceField> = new Set<SourceField>([\n \"close\",\n \"high\",\n \"hl2\",\n \"hlc3\",\n \"hlcc4\",\n \"low\",\n \"ohlc4\",\n \"open\",\n]);\n\n/**\n * Coerce a loose params bag's `source` entry to one of the eight\n * canonical fields. Anything not in the set falls through to\n * `fallback` (default `\"close\"` — matches Pine).\n *\n * @formula params.source ∈ SOURCE_FIELDS ? params.source : fallback\n * @since 0.1\n * @stable\n * @example\n * // import { readSourceField } from \"./readSourceField\";\n * // const s = readSourceField({ source: \"hl2\" }); // \"hl2\"\n */\nexport function readSourceField(\n params: Record<string, unknown>,\n fallback: SourceField = \"close\",\n): SourceField {\n const raw = params.source;\n if (typeof raw === \"string\" && SOURCE_FIELDS.has(raw as SourceField)) {\n return raw as SourceField;\n }\n return fallback;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/rolling-stddev.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Rolling standard deviation over each trailing `length`-bar window
10
10
  * of a `Float64Array` input. The default `biased = true` matches
@@ -1 +1 @@
1
- {"version":3,"file":"rollingStddev.js","sourceRoot":"","sources":["../../../src/ta/lib/rollingStddev.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAChC,KAAmB,EACnB,MAAc,EACd,MAAM,GAAG,IAAI;IAEb,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"rollingStddev.js","sourceRoot":"","sources":["../../../src/ta/lib/rollingStddev.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAChC,KAAmB,EACnB,MAAc,EACd,MAAM,GAAG,IAAI;IAEb,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/rolling-stddev.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Rolling standard deviation over each trailing `length`-bar window\n * of a `Float64Array` input. The default `biased = true` matches\n * invinite's BB math (population stddev, denominator `length`). Set\n * `biased = false` for sample stddev (denominator `length − 1`,\n * matches `StdevOpts.biased = false` from core).\n *\n * Warmup `[0, length − 2]` is `NaN`; any NaN inside the window\n * yields `NaN` (no fill-forward — std dev of a partially defined\n * window is undefined). Provides the full-recompute reference the\n * `ta.stdev` primitive's property test asserts against.\n *\n * @formula μ = mean(input[i − length + 1 ..= i]) ;\n * σ = sqrt(Σ(x − μ)² / N), N = length (biased) or length − 1 (sample)\n * @since 0.1\n * @stable\n * @example\n * // import { computeRollingStdDev } from \"./rollingStddev\";\n * // const std = computeRollingStdDev(new Float64Array([1, 2, 3, 4]), 3);\n */\nexport function computeRollingStdDev(\n input: Float64Array,\n length: number,\n biased = true,\n): Float64Array {\n const n = input.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n const denominator = biased ? length : length - 1;\n if (denominator <= 0) return out;\n\n for (let i = length - 1; i < n; i += 1) {\n let sum = 0;\n let allFinite = true;\n for (let j = i - length + 1; j <= i; j += 1) {\n const v = input[j];\n if (!Number.isFinite(v)) {\n allFinite = false;\n break;\n }\n sum += v;\n }\n if (!allFinite) continue;\n const mean = sum / length;\n let sumSq = 0;\n for (let j = i - length + 1; j <= i; j += 1) {\n const d = input[j] - mean;\n sumSq += d * d;\n }\n out[i] = Math.sqrt(sumSq / denominator);\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/sma-of-float64.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Simple Moving Average over a `Float64Array` input. Walks past any
10
10
  * leading-NaN prefix, then runs an O(N) rolling-sum SMA over the
@@ -1 +1 @@
1
- {"version":3,"file":"smaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/smaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,UAAU,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"smaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/smaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,UAAU,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/sma-of-float64.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Simple Moving Average over a `Float64Array` input. Walks past any\n * leading-NaN prefix, then runs an O(N) rolling-sum SMA over the\n * next `length` finite values. A mid-stream NaN holds the previous\n * output forward (no re-seeding). The full-recompute form lives here\n * so the runtime's `ta.sma` primitive (incremental) and the property\n * / golden tests (reference-equivalent) share a single math source.\n *\n * Warmup `[0, length − 2]` is `NaN`; `out[length − 1]` is the first\n * defined value.\n *\n * @formula out[i] = mean(input[i − length + 1 ..= i])\n * @since 0.1\n * @stable\n * @example\n * // import { computeSmaOfFloat64 } from \"./smaFloat64\";\n * // const out = computeSmaOfFloat64(new Float64Array([1, 2, 3, 4]), 2);\n */\nexport function computeSmaOfFloat64(input: Float64Array, length: number): Float64Array {\n const n = input.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(input[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n let runningSum = 0;\n for (let i = firstValidIdx; i < firstValidIdx + length; i += 1) {\n runningSum += input[i];\n }\n const seedIdx = firstValidIdx + length - 1;\n out[seedIdx] = runningSum / length;\n\n for (let i = seedIdx + 1; i < n; i += 1) {\n const incoming = input[i];\n const outgoing = input[i - length];\n if (!Number.isFinite(incoming) || !Number.isFinite(outgoing)) {\n out[i] = out[i - 1];\n continue;\n }\n runningSum += incoming - outgoing;\n out[i] = runningSum / length;\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/smma-of-float64.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * Smoothed Moving Average (Wilder's RMA) over a `Float64Array` input.
10
10
  * Walks past any leading-NaN prefix, seeds with the simple mean of
@@ -1 +1 @@
1
- {"version":3,"file":"smmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/smmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,MAAc;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"smmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/smmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,MAAc;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,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// Ported from invinite/src/components/trading-chart/indicators/lib/smma-of-float64.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Smoothed Moving Average (Wilder's RMA) over a `Float64Array` input.\n * Walks past any leading-NaN prefix, seeds with the simple mean of\n * the next `length` finite values, then runs the recurrence\n * `out[i] = (out[i − 1] * (length − 1) + source[i]) / length` —\n * equivalent to an EMA with `α = 1 / length`. A mid-stream NaN holds\n * the prior value forward (continuous output past gaps), matching\n * the recurrence-MA convention shared with {@link emaFloat64}.\n *\n * Warmup `[0, length − 2]` is `NaN`; `out[length − 1]` is the first\n * defined value.\n *\n * @formula α = 1 / length ;\n * out[i] = (out[i − 1] * (length − 1) + source[i]) / length\n * @warmup length − 1\n * @since 0.2\n * @stable\n * @example\n * // import { smmaFloat64 } from \"./smmaFloat64\";\n * // const out = smmaFloat64(new Float64Array([1, 2, 3, 4]), 3);\n */\nexport function smmaFloat64(source: Float64Array, length: number): Float64Array {\n const n = source.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(source[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n let seedSum = 0;\n for (let i = firstValidIdx; i < firstValidIdx + length; i += 1) {\n seedSum += source[i];\n }\n const seedIdx = firstValidIdx + length - 1;\n out[seedIdx] = seedSum / length;\n\n for (let i = seedIdx + 1; i < n; i += 1) {\n const v = source[i];\n if (!Number.isFinite(v)) {\n out[i] = out[i - 1];\n continue;\n }\n out[i] = (out[i - 1] * (length - 1) + v) / length;\n }\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sourceValue.js","sourceRoot":"","sources":["../../../src/ta/lib/sourceValue.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAoB/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,CAAC,OAAO,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"sourceValue.js","sourceRoot":"","sources":["../../../src/ta/lib/sourceValue.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAoB/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,CAAC,OAAO,CAAC;AAC1B,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 { Series } from \"@invinite-org/chartlang-core\";\n\n/**\n * What every `ta.*` primitive accepts as its `source` argument. Phase-1\n * scripts pass `bar.close` (a `number`) as the source per the seed-\n * example convention; future surfaces (`source: Series<number>`) are\n * structurally compatible because the primitive only ever reads\n * `source.current`. The union is the runtime's accommodation of both\n * shapes without forcing the script author to wrap a scalar.\n *\n * @formula N/A — type alias\n * @since 0.1\n * @stable\n * @example\n * // type S = ScalarOrSeries; // number | Series<number>\n */\nexport type ScalarOrSeries = number | Series<number>;\n\n/**\n * Read the current value off a `ScalarOrSeries`. Returns the scalar\n * directly; reads `.current` off a Series. `Series` is duck-typed —\n * any object with a `current: number` field passes.\n *\n * @formula source is number → source ; source is Series → source.current\n * @since 0.1\n * @stable\n * @example\n * // import { readSourceValue } from \"./sourceValue\";\n * // readSourceValue(12.5); // 12.5\n * // readSourceValue(series); // series.current\n */\nexport function readSourceValue(source: ScalarOrSeries): number {\n if (typeof source === \"number\") return source;\n return source.current;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/tr-series.ts
5
5
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  /**
9
9
  * True Range at bar `i` of a Bar array. For bar 0 (no prev close)
10
10
  * reduces to `high - low`. Phase 1's incremental `ta.atr` does the
@@ -1 +1 @@
1
- {"version":3,"file":"trSeries.js","sourceRoot":"","sources":["../../../src/ta/lib/trSeries.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,gFAAgF;AAChF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAIzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB,EAAE,CAAS;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC5B,IAAwB,EACxB,MAAc;IAEd,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"trSeries.js","sourceRoot":"","sources":["../../../src/ta/lib/trSeries.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,gFAAgF;AAChF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAIhB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB,EAAE,CAAS;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC5B,IAAwB,EACxB,MAAc;IAEd,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACvB,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// Ported from invinite/src/components/trading-chart/indicators/lib/tr-series.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\n/**\n * True Range at bar `i` of a Bar array. For bar 0 (no prev close)\n * reduces to `high - low`. Phase 1's incremental `ta.atr` does the\n * same math one bar at a time inside its slot state; this helper\n * exists so the property test can reference-equivalent the\n * incremental output against a full recompute.\n *\n * @formula TR_i = max(high − low, |high − prev_close|, |low − prev_close|)\n * @since 0.1\n * @stable\n * @example\n * // import { trueRangeAt } from \"./trSeries\";\n * // const tr = trueRangeAt(bars, 5);\n */\nexport function trueRangeAt(bars: ReadonlyArray<Bar>, i: number): number {\n const c = bars[i];\n if (i === 0) return c.high - c.low;\n const prevClose = bars[i - 1].close;\n const a = c.high - c.low;\n const b = Math.abs(c.high - prevClose);\n const d = Math.abs(c.low - prevClose);\n return Math.max(a, b, d);\n}\n\n/**\n * Per-bar True Range series of length `bars.length`. Used by `ta.atr`\n * property tests and any future TR-derived primitive.\n *\n * @formula tr[i] = trueRangeAt(bars, i) for i ∈ [0, n)\n * @since 0.1\n * @stable\n * @example\n * // import { computeTrSeries } from \"./trSeries\";\n * // const tr = computeTrSeries(bars);\n */\nexport function computeTrSeries(bars: ReadonlyArray<Bar>): Float64Array {\n const n = bars.length;\n const tr = new Float64Array(n);\n for (let i = 0; i < n; i += 1) tr[i] = trueRangeAt(bars, i);\n return tr;\n}\n\n/**\n * Wilder ATR over a `Bar` array, returned alongside the TR sidecar.\n * Warmup `[0, length − 2]` is `NaN`; `atr[length − 1]` is the simple\n * mean of the first `length` TR values; subsequent slots use the\n * Wilder recurrence `atr[i] = (atr[i − 1] * (length − 1) + tr[i]) /\n * length`. Acts as the property-test reference for the incremental\n * `ta.atr` primitive.\n *\n * @formula see wilderSmoothing.ts and computeTrSeries above.\n * @since 0.1\n * @stable\n * @example\n * // import { computeAtrSeries } from \"./trSeries\";\n * // const { atr, tr } = computeAtrSeries(bars, 14);\n */\nexport function computeAtrSeries(\n bars: ReadonlyArray<Bar>,\n length: number,\n): { atr: Float64Array; tr: Float64Array } {\n const n = bars.length;\n const atr = new Float64Array(n);\n atr.fill(Number.NaN);\n const tr = computeTrSeries(bars);\n if (n === 0 || length <= 0 || n < length) return { atr, tr };\n let seedSum = 0;\n for (let i = 0; i < length; i += 1) seedSum += tr[i];\n atr[length - 1] = seedSum / length;\n for (let i = length; i < n; i += 1) {\n atr[i] = (atr[i - 1] * (length - 1) + tr[i]) / length;\n }\n return { atr, tr };\n}\n"]}