@invinite-org/chartlang-runtime 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +10 -2
  3. package/dist/buildComputeContext.js.map +1 -1
  4. package/dist/createScriptRunner.d.ts +55 -4
  5. package/dist/createScriptRunner.d.ts.map +1 -1
  6. package/dist/createScriptRunner.js +103 -35
  7. package/dist/createScriptRunner.js.map +1 -1
  8. package/dist/dep/DepOutputStore.d.ts +92 -0
  9. package/dist/dep/DepOutputStore.d.ts.map +1 -0
  10. package/dist/dep/DepOutputStore.js +0 -0
  11. package/dist/dep/DepOutputStore.js.map +1 -0
  12. package/dist/dep/DepRunner.d.ts +146 -0
  13. package/dist/dep/DepRunner.d.ts.map +1 -0
  14. package/dist/dep/DepRunner.js +243 -0
  15. package/dist/dep/DepRunner.js.map +1 -0
  16. package/dist/dep/depOutput.d.ts +50 -0
  17. package/dist/dep/depOutput.d.ts.map +1 -0
  18. package/dist/dep/depOutput.js +92 -0
  19. package/dist/dep/depOutput.js.map +1 -0
  20. package/dist/dep/emissionFilter.d.ts +70 -0
  21. package/dist/dep/emissionFilter.d.ts.map +1 -0
  22. package/dist/dep/emissionFilter.js +105 -0
  23. package/dist/dep/emissionFilter.js.map +1 -0
  24. package/dist/dep/index.d.ts +8 -0
  25. package/dist/dep/index.d.ts.map +1 -0
  26. package/dist/dep/index.js +7 -0
  27. package/dist/dep/index.js.map +1 -0
  28. package/dist/emit/alert.js.map +1 -1
  29. package/dist/emit/alertConditionEmission.js.map +1 -1
  30. package/dist/emit/applyPlotOverride.d.ts +24 -0
  31. package/dist/emit/applyPlotOverride.d.ts.map +1 -0
  32. package/dist/emit/applyPlotOverride.js +48 -0
  33. package/dist/emit/applyPlotOverride.js.map +1 -0
  34. package/dist/emit/draw/annotations/arrow.js +1 -1
  35. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  36. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  37. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  38. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  39. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  40. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  41. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  42. package/dist/emit/draw/annotations/text.js +1 -1
  43. package/dist/emit/draw/annotations/text.js.map +1 -1
  44. package/dist/emit/draw/boxes/circle.js +1 -1
  45. package/dist/emit/draw/boxes/circle.js.map +1 -1
  46. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  47. package/dist/emit/draw/boxes/ellipse.js +1 -1
  48. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  49. package/dist/emit/draw/boxes/marker.js +1 -1
  50. package/dist/emit/draw/boxes/marker.js.map +1 -1
  51. package/dist/emit/draw/boxes/path.d.ts +1 -1
  52. package/dist/emit/draw/boxes/path.js +1 -1
  53. package/dist/emit/draw/boxes/path.js.map +1 -1
  54. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  55. package/dist/emit/draw/boxes/polyline.js +1 -1
  56. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  57. package/dist/emit/draw/boxes/rectangle.js +1 -1
  58. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  59. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  60. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  61. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  62. package/dist/emit/draw/boxes/triangle.js +1 -1
  63. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  64. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  65. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  66. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  67. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  69. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  70. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  71. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  72. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  73. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  74. package/dist/emit/draw/channels/trendChannel.js +1 -1
  75. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  76. package/dist/emit/draw/containers/frame.d.ts +1 -1
  77. package/dist/emit/draw/containers/frame.js +2 -2
  78. package/dist/emit/draw/containers/frame.js.map +1 -1
  79. package/dist/emit/draw/containers/group.d.ts +1 -2
  80. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  81. package/dist/emit/draw/containers/group.js +2 -2
  82. package/dist/emit/draw/containers/group.js.map +1 -1
  83. package/dist/emit/draw/curves/arc.js +1 -1
  84. package/dist/emit/draw/curves/arc.js.map +1 -1
  85. package/dist/emit/draw/curves/brush.js +1 -1
  86. package/dist/emit/draw/curves/brush.js.map +1 -1
  87. package/dist/emit/draw/curves/curve.js +1 -1
  88. package/dist/emit/draw/curves/curve.js.map +1 -1
  89. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  90. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  91. package/dist/emit/draw/curves/highlighter.js +1 -1
  92. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  93. package/dist/emit/draw/curves/pen.js +1 -1
  94. package/dist/emit/draw/curves/pen.js.map +1 -1
  95. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  96. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  97. package/dist/emit/draw/cycles/sineLine.js +1 -1
  98. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  99. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  100. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  104. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  106. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  107. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  108. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  109. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  110. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  112. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  113. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  114. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  116. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  117. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  118. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  119. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  120. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  121. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  122. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  124. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  125. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  126. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  128. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  134. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  135. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  136. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  137. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  138. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  139. package/dist/emit/draw/gann/gannBox.js +1 -1
  140. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  141. package/dist/emit/draw/gann/gannFan.js +1 -1
  142. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  143. package/dist/emit/draw/gann/gannSquare.js +1 -1
  144. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  145. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  146. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  147. package/dist/emit/draw/handle.d.ts +2 -2
  148. package/dist/emit/draw/handle.js +2 -2
  149. package/dist/emit/draw/handle.js.map +1 -1
  150. package/dist/emit/draw/index.js.map +1 -1
  151. package/dist/emit/draw/lines/crossLine.js +1 -1
  152. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  154. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  155. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  156. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  157. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  158. package/dist/emit/draw/lines/line.d.ts +1 -1
  159. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  160. package/dist/emit/draw/lines/line.js +2 -3
  161. package/dist/emit/draw/lines/line.js.map +1 -1
  162. package/dist/emit/draw/lines/trendAngle.js +1 -1
  163. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  164. package/dist/emit/draw/lines/verticalLine.js +1 -1
  165. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  166. package/dist/emit/draw/namespace.d.ts +1 -1
  167. package/dist/emit/draw/namespace.js +1 -1
  168. package/dist/emit/draw/namespace.js.map +1 -1
  169. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  170. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  172. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  173. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  174. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  175. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  176. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  177. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  178. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  180. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  181. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  182. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  183. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  186. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  187. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  188. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  189. package/dist/emit/draw/pushDrawing.js.map +1 -1
  190. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  191. package/dist/emit/draw/subIdAllocator.js +1 -1
  192. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  193. package/dist/emit/draw/table/table.d.ts +1 -1
  194. package/dist/emit/draw/table/table.js.map +1 -1
  195. package/dist/emit/emissionsQueue.js.map +1 -1
  196. package/dist/emit/hash.js.map +1 -1
  197. package/dist/emit/hline.d.ts +6 -4
  198. package/dist/emit/hline.d.ts.map +1 -1
  199. package/dist/emit/hline.js +5 -2
  200. package/dist/emit/hline.js.map +1 -1
  201. package/dist/emit/index.d.ts +2 -1
  202. package/dist/emit/index.d.ts.map +1 -1
  203. package/dist/emit/index.js +2 -1
  204. package/dist/emit/index.js.map +1 -1
  205. package/dist/emit/logEmission.js.map +1 -1
  206. package/dist/emit/paneResolver.d.ts +52 -11
  207. package/dist/emit/paneResolver.d.ts.map +1 -1
  208. package/dist/emit/paneResolver.js +69 -26
  209. package/dist/emit/paneResolver.js.map +1 -1
  210. package/dist/emit/plot.d.ts.map +1 -1
  211. package/dist/emit/plot.js +2 -1
  212. package/dist/emit/plot.js.map +1 -1
  213. package/dist/emit/runtimeError.js.map +1 -1
  214. package/dist/execution/dispose.d.ts.map +1 -1
  215. package/dist/execution/dispose.js +7 -0
  216. package/dist/execution/dispose.js.map +1 -1
  217. package/dist/execution/drain.js.map +1 -1
  218. package/dist/execution/index.js.map +1 -1
  219. package/dist/execution/onBarClose.d.ts +9 -13
  220. package/dist/execution/onBarClose.d.ts.map +1 -1
  221. package/dist/execution/onBarClose.js +28 -59
  222. package/dist/execution/onBarClose.js.map +1 -1
  223. package/dist/execution/onBarTick.d.ts +4 -10
  224. package/dist/execution/onBarTick.d.ts.map +1 -1
  225. package/dist/execution/onBarTick.js +24 -57
  226. package/dist/execution/onBarTick.js.map +1 -1
  227. package/dist/execution/onHistory.js.map +1 -1
  228. package/dist/execution/runComputeStep.d.ts +68 -0
  229. package/dist/execution/runComputeStep.d.ts.map +1 -0
  230. package/dist/execution/runComputeStep.js +96 -0
  231. package/dist/execution/runComputeStep.js.map +1 -0
  232. package/dist/execution/secondaryStream.js.map +1 -1
  233. package/dist/index.d.ts +3 -1
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +2 -1
  236. package/dist/index.js.map +1 -1
  237. package/dist/inputs/index.js.map +1 -1
  238. package/dist/inputs/resolveInputs.js.map +1 -1
  239. package/dist/internal.d.ts +12 -0
  240. package/dist/internal.d.ts.map +1 -0
  241. package/dist/internal.js +14 -0
  242. package/dist/internal.js.map +1 -0
  243. package/dist/persistentStateStore.js.map +1 -1
  244. package/dist/persistentStateStore.runtime.d.ts +18 -4
  245. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  246. package/dist/persistentStateStore.runtime.js +111 -18
  247. package/dist/persistentStateStore.runtime.js.map +1 -1
  248. package/dist/persistentStateStore.validate.d.ts +11 -1
  249. package/dist/persistentStateStore.validate.d.ts.map +1 -1
  250. package/dist/persistentStateStore.validate.js +32 -3
  251. package/dist/persistentStateStore.validate.js.map +1 -1
  252. package/dist/primitives.js.map +1 -1
  253. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  254. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  255. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  256. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  257. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  258. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  259. package/dist/request/index.js.map +1 -1
  260. package/dist/request/lowerTf.js.map +1 -1
  261. package/dist/request/pushOnce.js.map +1 -1
  262. package/dist/request/requestNamespace.js.map +1 -1
  263. package/dist/request/security.js.map +1 -1
  264. package/dist/request/streamBars.js.map +1 -1
  265. package/dist/ringBuffer.d.ts +2 -2
  266. package/dist/ringBuffer.js +1 -1
  267. package/dist/ringBuffer.js.map +1 -1
  268. package/dist/runtimeContext.d.ts +65 -7
  269. package/dist/runtimeContext.d.ts.map +1 -1
  270. package/dist/runtimeContext.js.map +1 -1
  271. package/dist/seriesView.d.ts +1 -1
  272. package/dist/seriesView.js +1 -1
  273. package/dist/seriesView.js.map +1 -1
  274. package/dist/state/index.js.map +1 -1
  275. package/dist/state/lifecycle.js.map +1 -1
  276. package/dist/state/stateNamespace.d.ts.map +1 -1
  277. package/dist/state/stateNamespace.js +13 -2
  278. package/dist/state/stateNamespace.js.map +1 -1
  279. package/dist/state/stateSlot.js.map +1 -1
  280. package/dist/stateStore.d.ts +7 -4
  281. package/dist/stateStore.d.ts.map +1 -1
  282. package/dist/stateStore.js.map +1 -1
  283. package/dist/streamState.d.ts +1 -1
  284. package/dist/streamState.js +1 -1
  285. package/dist/streamState.js.map +1 -1
  286. package/dist/ta/adl.js +2 -2
  287. package/dist/ta/adl.js.map +1 -1
  288. package/dist/ta/adr.d.ts +3 -3
  289. package/dist/ta/adr.js +5 -5
  290. package/dist/ta/adr.js.map +1 -1
  291. package/dist/ta/adx.d.ts +1 -1
  292. package/dist/ta/adx.js +3 -3
  293. package/dist/ta/adx.js.map +1 -1
  294. package/dist/ta/alma.d.ts +3 -3
  295. package/dist/ta/alma.js +5 -5
  296. package/dist/ta/alma.js.map +1 -1
  297. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  298. package/dist/ta/anchoredVwap.d.ts +1 -1
  299. package/dist/ta/anchoredVwap.js +3 -3
  300. package/dist/ta/anchoredVwap.js.map +1 -1
  301. package/dist/ta/ao.js +2 -2
  302. package/dist/ta/ao.js.map +1 -1
  303. package/dist/ta/aroon.js +2 -2
  304. package/dist/ta/aroon.js.map +1 -1
  305. package/dist/ta/aroonOsc.js +2 -2
  306. package/dist/ta/aroonOsc.js.map +1 -1
  307. package/dist/ta/atr.d.ts +1 -1
  308. package/dist/ta/atr.js +3 -3
  309. package/dist/ta/atr.js.map +1 -1
  310. package/dist/ta/barssince.js +1 -1
  311. package/dist/ta/barssince.js.map +1 -1
  312. package/dist/ta/bb.d.ts +1 -1
  313. package/dist/ta/bb.js +3 -3
  314. package/dist/ta/bb.js.map +1 -1
  315. package/dist/ta/bbPercentB.js +2 -2
  316. package/dist/ta/bbPercentB.js.map +1 -1
  317. package/dist/ta/bbw.js +2 -2
  318. package/dist/ta/bbw.js.map +1 -1
  319. package/dist/ta/bop.js +2 -2
  320. package/dist/ta/bop.js.map +1 -1
  321. package/dist/ta/cci.js +2 -2
  322. package/dist/ta/cci.js.map +1 -1
  323. package/dist/ta/chaikinOsc.d.ts +1 -1
  324. package/dist/ta/chaikinOsc.js +3 -3
  325. package/dist/ta/chaikinOsc.js.map +1 -1
  326. package/dist/ta/chandeKrollStop.d.ts +1 -1
  327. package/dist/ta/chandeKrollStop.js +3 -3
  328. package/dist/ta/chandeKrollStop.js.map +1 -1
  329. package/dist/ta/chandelier.d.ts +1 -1
  330. package/dist/ta/chandelier.js +3 -3
  331. package/dist/ta/chandelier.js.map +1 -1
  332. package/dist/ta/change.js +1 -1
  333. package/dist/ta/change.js.map +1 -1
  334. package/dist/ta/chop.js +2 -2
  335. package/dist/ta/chop.js.map +1 -1
  336. package/dist/ta/cmf.js +2 -2
  337. package/dist/ta/cmf.js.map +1 -1
  338. package/dist/ta/cmo.js +2 -2
  339. package/dist/ta/cmo.js.map +1 -1
  340. package/dist/ta/connorsRsi.d.ts +1 -1
  341. package/dist/ta/connorsRsi.js +3 -3
  342. package/dist/ta/connorsRsi.js.map +1 -1
  343. package/dist/ta/coppock.js +2 -2
  344. package/dist/ta/coppock.js.map +1 -1
  345. package/dist/ta/crossover.d.ts +1 -1
  346. package/dist/ta/crossover.js +2 -2
  347. package/dist/ta/crossover.js.map +1 -1
  348. package/dist/ta/crossunder.d.ts +1 -1
  349. package/dist/ta/crossunder.js +2 -2
  350. package/dist/ta/crossunder.js.map +1 -1
  351. package/dist/ta/dema.js +2 -2
  352. package/dist/ta/dema.js.map +1 -1
  353. package/dist/ta/dmi.d.ts +1 -1
  354. package/dist/ta/dmi.js +3 -3
  355. package/dist/ta/dmi.js.map +1 -1
  356. package/dist/ta/donchian.js +2 -2
  357. package/dist/ta/donchian.js.map +1 -1
  358. package/dist/ta/dpo.js +2 -2
  359. package/dist/ta/dpo.js.map +1 -1
  360. package/dist/ta/ema.d.ts +1 -1
  361. package/dist/ta/ema.js +3 -3
  362. package/dist/ta/ema.js.map +1 -1
  363. package/dist/ta/envelope.js +2 -2
  364. package/dist/ta/envelope.js.map +1 -1
  365. package/dist/ta/eom.d.ts +1 -1
  366. package/dist/ta/eom.js +3 -3
  367. package/dist/ta/eom.js.map +1 -1
  368. package/dist/ta/fisher.js +2 -2
  369. package/dist/ta/fisher.js.map +1 -1
  370. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  371. package/dist/ta/highest.js +1 -1
  372. package/dist/ta/highest.js.map +1 -1
  373. package/dist/ta/historicalVolatility.d.ts +1 -1
  374. package/dist/ta/historicalVolatility.js +3 -3
  375. package/dist/ta/historicalVolatility.js.map +1 -1
  376. package/dist/ta/hma.js +2 -2
  377. package/dist/ta/hma.js.map +1 -1
  378. package/dist/ta/ichimoku.d.ts +1 -1
  379. package/dist/ta/ichimoku.js +3 -3
  380. package/dist/ta/ichimoku.js.map +1 -1
  381. package/dist/ta/index.js.map +1 -1
  382. package/dist/ta/kama.js +2 -2
  383. package/dist/ta/kama.js.map +1 -1
  384. package/dist/ta/keltner.js +2 -2
  385. package/dist/ta/keltner.js.map +1 -1
  386. package/dist/ta/klinger.js +2 -2
  387. package/dist/ta/klinger.js.map +1 -1
  388. package/dist/ta/kst.js +2 -2
  389. package/dist/ta/kst.js.map +1 -1
  390. package/dist/ta/lib/adxFromDi.js +2 -2
  391. package/dist/ta/lib/adxFromDi.js.map +1 -1
  392. package/dist/ta/lib/applyOffset.js +2 -2
  393. package/dist/ta/lib/applyOffset.js.map +1 -1
  394. package/dist/ta/lib/computeMa.js +2 -2
  395. package/dist/ta/lib/computeMa.js.map +1 -1
  396. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  397. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  398. package/dist/ta/lib/directionalState.js +2 -2
  399. package/dist/ta/lib/directionalState.js.map +1 -1
  400. package/dist/ta/lib/donchianMid.js +2 -2
  401. package/dist/ta/lib/donchianMid.js.map +1 -1
  402. package/dist/ta/lib/emaFloat64.js +2 -2
  403. package/dist/ta/lib/emaFloat64.js.map +1 -1
  404. package/dist/ta/lib/linearRegression.js +2 -2
  405. package/dist/ta/lib/linearRegression.js.map +1 -1
  406. package/dist/ta/lib/maTypes.js.map +1 -1
  407. package/dist/ta/lib/pearson.js +2 -2
  408. package/dist/ta/lib/pearson.js.map +1 -1
  409. package/dist/ta/lib/pickCandleSource.js +2 -2
  410. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  411. package/dist/ta/lib/readSourceField.js +2 -2
  412. package/dist/ta/lib/readSourceField.js.map +1 -1
  413. package/dist/ta/lib/rollingStddev.js +2 -2
  414. package/dist/ta/lib/rollingStddev.js.map +1 -1
  415. package/dist/ta/lib/smaFloat64.js +2 -2
  416. package/dist/ta/lib/smaFloat64.js.map +1 -1
  417. package/dist/ta/lib/smmaFloat64.js +2 -2
  418. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  419. package/dist/ta/lib/sourceValue.js.map +1 -1
  420. package/dist/ta/lib/trSeries.js +2 -2
  421. package/dist/ta/lib/trSeries.js.map +1 -1
  422. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  423. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  424. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  425. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  426. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  427. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  428. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  429. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  430. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  431. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  432. package/dist/ta/lib/vwmaFloat64.js +2 -2
  433. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  434. package/dist/ta/lib/wilderDirectional.js +2 -2
  435. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  436. package/dist/ta/lib/wilderSmoothing.js +2 -2
  437. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  438. package/dist/ta/lib/wmaFloat64.js +2 -2
  439. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  440. package/dist/ta/lowest.js +1 -1
  441. package/dist/ta/lowest.js.map +1 -1
  442. package/dist/ta/lsma.js +2 -2
  443. package/dist/ta/lsma.js.map +1 -1
  444. package/dist/ta/maRibbon.js +2 -2
  445. package/dist/ta/maRibbon.js.map +1 -1
  446. package/dist/ta/macd.d.ts +1 -1
  447. package/dist/ta/macd.js +4 -4
  448. package/dist/ta/macd.js.map +1 -1
  449. package/dist/ta/massIndex.d.ts +1 -1
  450. package/dist/ta/massIndex.js +3 -3
  451. package/dist/ta/massIndex.js.map +1 -1
  452. package/dist/ta/mcginley.js +2 -2
  453. package/dist/ta/mcginley.js.map +1 -1
  454. package/dist/ta/median.js +2 -2
  455. package/dist/ta/median.js.map +1 -1
  456. package/dist/ta/mfi.d.ts +1 -1
  457. package/dist/ta/mfi.js +3 -3
  458. package/dist/ta/mfi.js.map +1 -1
  459. package/dist/ta/momentum.js +2 -2
  460. package/dist/ta/momentum.js.map +1 -1
  461. package/dist/ta/netVolume.d.ts +1 -1
  462. package/dist/ta/netVolume.js +3 -3
  463. package/dist/ta/netVolume.js.map +1 -1
  464. package/dist/ta/nvi.d.ts +1 -1
  465. package/dist/ta/nvi.js +3 -3
  466. package/dist/ta/nvi.js.map +1 -1
  467. package/dist/ta/nz.js +1 -1
  468. package/dist/ta/nz.js.map +1 -1
  469. package/dist/ta/obv.js +2 -2
  470. package/dist/ta/obv.js.map +1 -1
  471. package/dist/ta/persistence.js.map +1 -1
  472. package/dist/ta/pivotsHighLow.js +2 -2
  473. package/dist/ta/pivotsHighLow.js.map +1 -1
  474. package/dist/ta/pivotsStandard.d.ts +1 -1
  475. package/dist/ta/pivotsStandard.js +3 -3
  476. package/dist/ta/pivotsStandard.js.map +1 -1
  477. package/dist/ta/pmo.js +2 -2
  478. package/dist/ta/pmo.js.map +1 -1
  479. package/dist/ta/ppo.d.ts +1 -1
  480. package/dist/ta/ppo.js +3 -3
  481. package/dist/ta/ppo.js.map +1 -1
  482. package/dist/ta/psar.js +2 -2
  483. package/dist/ta/psar.js.map +1 -1
  484. package/dist/ta/pvi.d.ts +1 -1
  485. package/dist/ta/pvi.js +3 -3
  486. package/dist/ta/pvi.js.map +1 -1
  487. package/dist/ta/pvo.d.ts +1 -1
  488. package/dist/ta/pvo.js +3 -3
  489. package/dist/ta/pvo.js.map +1 -1
  490. package/dist/ta/pvt.d.ts +1 -1
  491. package/dist/ta/pvt.js +3 -3
  492. package/dist/ta/pvt.js.map +1 -1
  493. package/dist/ta/registry.js.map +1 -1
  494. package/dist/ta/roc.js +2 -2
  495. package/dist/ta/roc.js.map +1 -1
  496. package/dist/ta/rsi.d.ts +1 -1
  497. package/dist/ta/rsi.js +3 -3
  498. package/dist/ta/rsi.js.map +1 -1
  499. package/dist/ta/rvgi.js +2 -2
  500. package/dist/ta/rvgi.js.map +1 -1
  501. package/dist/ta/rvi.d.ts +1 -1
  502. package/dist/ta/rvi.js +3 -3
  503. package/dist/ta/rvi.js.map +1 -1
  504. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  505. package/dist/ta/sma.d.ts +1 -1
  506. package/dist/ta/sma.js +3 -3
  507. package/dist/ta/sma.js.map +1 -1
  508. package/dist/ta/smi.js +2 -2
  509. package/dist/ta/smi.js.map +1 -1
  510. package/dist/ta/smma.js +2 -2
  511. package/dist/ta/smma.js.map +1 -1
  512. package/dist/ta/stdev.d.ts +1 -1
  513. package/dist/ta/stdev.js +3 -3
  514. package/dist/ta/stdev.js.map +1 -1
  515. package/dist/ta/stoch.js +2 -2
  516. package/dist/ta/stoch.js.map +1 -1
  517. package/dist/ta/stochRsi.js +2 -2
  518. package/dist/ta/stochRsi.js.map +1 -1
  519. package/dist/ta/supertrend.d.ts +1 -1
  520. package/dist/ta/supertrend.js +3 -3
  521. package/dist/ta/supertrend.js.map +1 -1
  522. package/dist/ta/tema.js +2 -2
  523. package/dist/ta/tema.js.map +1 -1
  524. package/dist/ta/trendStrengthIndex.d.ts +2 -2
  525. package/dist/ta/trendStrengthIndex.js +4 -4
  526. package/dist/ta/trendStrengthIndex.js.map +1 -1
  527. package/dist/ta/trix.d.ts +1 -1
  528. package/dist/ta/trix.js +3 -3
  529. package/dist/ta/trix.js.map +1 -1
  530. package/dist/ta/tsi.js +2 -2
  531. package/dist/ta/tsi.js.map +1 -1
  532. package/dist/ta/ulcerIndex.js +2 -2
  533. package/dist/ta/ulcerIndex.js.map +1 -1
  534. package/dist/ta/ultimateOsc.js +2 -2
  535. package/dist/ta/ultimateOsc.js.map +1 -1
  536. package/dist/ta/valuewhen.js +1 -1
  537. package/dist/ta/valuewhen.js.map +1 -1
  538. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  539. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  540. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  541. package/dist/ta/vol.js +2 -2
  542. package/dist/ta/vol.js.map +1 -1
  543. package/dist/ta/volatilityStop.d.ts +1 -1
  544. package/dist/ta/volatilityStop.js +3 -3
  545. package/dist/ta/volatilityStop.js.map +1 -1
  546. package/dist/ta/vortex.d.ts +1 -1
  547. package/dist/ta/vortex.js +3 -3
  548. package/dist/ta/vortex.js.map +1 -1
  549. package/dist/ta/vwap.d.ts +3 -3
  550. package/dist/ta/vwap.js +5 -5
  551. package/dist/ta/vwap.js.map +1 -1
  552. package/dist/ta/vwma.js +2 -2
  553. package/dist/ta/vwma.js.map +1 -1
  554. package/dist/ta/williamsFractal.js +2 -2
  555. package/dist/ta/williamsFractal.js.map +1 -1
  556. package/dist/ta/williamsR.js +2 -2
  557. package/dist/ta/williamsR.js.map +1 -1
  558. package/dist/ta/wma.js +2 -2
  559. package/dist/ta/wma.js.map +1 -1
  560. package/dist/ta/zigZag.js +2 -2
  561. package/dist/ta/zigZag.js.map +1 -1
  562. package/dist/views/barstateView.js.map +1 -1
  563. package/dist/views/index.js.map +1 -1
  564. package/dist/views/refreshRuntimeViews.js.map +1 -1
  565. package/dist/views/symInfoView.js.map +1 -1
  566. package/dist/views/timeframeView.js.map +1 -1
  567. package/package.json +7 -3
@@ -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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bucketEdges.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketEdges.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qGAAqG;AACrG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAgB,EAChB,QAAgB,EAChB,UAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;QACvC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,OAAO,KAAK,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"bucketEdges.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketEdges.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qGAAqG;AACrG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAgB,EAChB,QAAgB,EAChB,UAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;QACvC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/bucket-edges.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { RowsLayout } from \"./types.js\";\n\n/**\n * Build `bucketCount + 1` price edges for a volume profile.\n *\n * @formula PLAN §9.2 — `ticksPerRow`: width = rowSize * tickSize;\n * `numberOfRows`: width = (priceMax - priceMin) / rowSize.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const edges = buildBucketEdges(100, 105, \"ticksPerRow\", 10, 0.01);\n */\nexport function buildBucketEdges(\n priceMin: number,\n priceMax: number,\n rowsLayout: RowsLayout,\n rowSize: number,\n tickSize: number,\n): Float64Array {\n if (!Number.isFinite(priceMin) || !Number.isFinite(priceMax) || rowSize <= 0) {\n return new Float64Array([priceMin, priceMin]);\n }\n if (priceMax <= priceMin) return new Float64Array([priceMin, priceMin]);\n\n if (rowsLayout === \"ticksPerRow\") {\n const bucketWidth = rowSize * tickSize;\n if (bucketWidth <= 0) return new Float64Array([priceMin, priceMin]);\n\n const startEdge = Math.floor(priceMin / bucketWidth) * bucketWidth;\n const endEdge = Math.ceil(priceMax / bucketWidth) * bucketWidth;\n const count = Math.max(1, Math.round((endEdge - startEdge) / bucketWidth));\n const edges = new Float64Array(count + 1);\n for (let i = 0; i <= count; i += 1) edges[i] = startEdge + i * bucketWidth;\n return edges;\n }\n\n const count = Math.max(1, Math.floor(rowSize));\n const width = (priceMax - priceMin) / count;\n const edges = new Float64Array(count + 1);\n for (let i = 0; i <= count; i += 1) edges[i] = priceMin + i * width;\n return edges;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bucketizeVolume.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketizeVolume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bucketizeVolume.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketizeVolume.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/bucketize-volume.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type {\n BucketizedVolume,\n VolumeProfileBar,\n VolumeProfileBucket,\n VolumeProfileRow,\n VolumeSplit,\n} from \"./types.js\";\n\n/**\n * Distribute each bar's volume across overlapping price buckets and\n * return the Phase 5 `horizontal-histogram` bucket shape.\n *\n * @formula PLAN §9.2 — share = volume * overlap([bar.low, bar.high], bucket) / max(high - low, eps).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const buckets = bucketizeVolume(bars, new Float64Array([100, 101]), \"total\");\n */\nexport function bucketizeVolume(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketEdges: ArrayLike<number>,\n volumeSplit: VolumeSplit,\n): ReadonlyArray<VolumeProfileBucket> {\n return bucketizeVolumeDetailed(bars, bucketEdges, volumeSplit).buckets;\n}\n\n/**\n * Detailed bucketization retaining row bounds, directional volume,\n * total volume, and POC index for value-area/profile computation.\n *\n * @formula PLAN §9.2 — same overlap weighting as {@link bucketizeVolume}.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const detailed = bucketizeVolumeDetailed(bars, edges, \"upDown\");\n */\nexport function bucketizeVolumeDetailed(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketEdges: ArrayLike<number>,\n volumeSplit: VolumeSplit,\n): BucketizedVolume {\n const bucketCount = bucketEdges.length - 1;\n if (bucketCount <= 0) return { buckets: [], pocIdx: -1, rows: [], totalVolume: 0 };\n\n const upPerBucket = new Float64Array(bucketCount);\n const downPerBucket = new Float64Array(bucketCount);\n\n for (const bar of bars) {\n const vol = Number.isFinite(bar.volume) ? bar.volume : 0;\n if (vol <= 0) continue;\n\n const low = bar.low;\n const high = bar.high;\n // Skip bars whose price fields aren't finite or whose range is\n // inverted / zero. NaN inputs would otherwise propagate `share = NaN`\n // into every overlapping bucket and silently corrupt the profile.\n if (!Number.isFinite(low) || !Number.isFinite(high)) continue;\n if (!Number.isFinite(bar.open) || !Number.isFinite(bar.close)) continue;\n if (high <= low) continue;\n\n const span = high - low;\n const isUp = bar.close >= bar.open;\n\n for (let b = 0; b < bucketCount; b += 1) {\n const edgeLow = bucketEdges[b];\n const edgeHigh = bucketEdges[b + 1];\n if (edgeHigh <= low) continue;\n if (edgeLow >= high) break;\n\n const overlap = Math.min(edgeHigh, high) - Math.max(edgeLow, low);\n if (overlap <= 0) continue;\n\n const share = (vol * overlap) / span;\n if (isUp) upPerBucket[b] += share;\n else downPerBucket[b] += share;\n }\n }\n\n const rows = new Array<VolumeProfileRow>(bucketCount);\n const buckets = new Array<VolumeProfileBucket>(bucketCount);\n let totalVolume = 0;\n let pocIdx = -1;\n let pocVolume = -1;\n\n for (let b = 0; b < bucketCount; b += 1) {\n const rawUp = upPerBucket[b];\n const rawDown = downPerBucket[b];\n const split = splitVolume(rawUp, rawDown, volumeSplit);\n const low = bucketEdges[b];\n const high = bucketEdges[b + 1];\n const mid = (low + high) / 2;\n\n rows[b] = {\n downVolume: split.downVolume,\n high,\n low,\n mid,\n upVolume: split.upVolume,\n volume: split.volume,\n };\n buckets[b] = { price: mid, volume: split.volume };\n totalVolume += split.volume;\n if (split.volume > pocVolume) {\n pocVolume = split.volume;\n pocIdx = b;\n }\n }\n\n return { buckets, pocIdx, rows, totalVolume };\n}\n\nfunction splitVolume(\n rawUp: number,\n rawDown: number,\n volumeSplit: VolumeSplit,\n): { upVolume: number; downVolume: number; volume: number } {\n switch (volumeSplit) {\n case \"total\": {\n const volume = rawUp + rawDown;\n return { downVolume: 0, upVolume: volume, volume };\n }\n case \"delta\": {\n const upVolume = Math.max(0, rawUp - rawDown);\n const downVolume = Math.max(0, rawDown - rawUp);\n return { downVolume, upVolume, volume: upVolume + downVolume };\n }\n case \"upDown\":\n return { downVolume: rawDown, upVolume: rawUp, volume: rawUp + rawDown };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"developingSeries.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/developingSeries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"developingSeries.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/developingSeries.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/developing-series.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport { buildBucketEdges } from \"./bucketEdges.js\";\nimport { bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nimport type { DevelopingProfileSeries, VolumeProfileBar, VolumeProfileConfig } from \"./types.js\";\nimport { DEFAULT_TICK_SIZE } from \"./types.js\";\nimport { computeValueArea } from \"./valueArea.js\";\n\nconst WARMUP_BARS = 30;\n\n/**\n * Compute lane-indexed developing POC / VAH / VAL series.\n *\n * @formula PLAN §9.2 / §10.1.1 — for each lane bar, bucket all source\n * bars in the active profile window up to that bar's time.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const developing = computeDevelopingSeries({ laneBars: bars, finerBars: [], windowFromIdx: 0, windowToIdx: bars.length - 1, config: { rowSize: 20, valueAreaPct: 70 } });\n */\nexport function computeDevelopingSeries(args: {\n laneBars: ReadonlyArray<VolumeProfileBar>;\n finerBars: ReadonlyArray<VolumeProfileBar>;\n windowFromIdx: number;\n windowToIdx: number;\n config: VolumeProfileConfig;\n}): DevelopingProfileSeries {\n const { laneBars, finerBars, windowFromIdx, windowToIdx, config } = args;\n const laneCount = laneBars.length;\n const developingPoc = new Float64Array(laneCount);\n const developingVahHigh = new Float64Array(laneCount);\n const developingVahLow = new Float64Array(laneCount);\n developingPoc.fill(Number.NaN);\n developingVahHigh.fill(Number.NaN);\n developingVahLow.fill(Number.NaN);\n if (laneCount === 0) return { developingPoc, developingVahHigh, developingVahLow };\n\n const fromIdx = Math.max(0, Math.min(laneCount - 1, windowFromIdx));\n const toIdx = Math.max(fromIdx, Math.min(laneCount - 1, windowToIdx));\n const source = finerBars.length > 0 ? finerBars : laneBars;\n const sourceStart = lowerBoundTime(source, laneBars[fromIdx].time);\n let sourceEnd = sourceStart;\n\n for (let i = fromIdx; i <= toIdx; i += 1) {\n while (sourceEnd < source.length && source[sourceEnd].time <= laneBars[i].time)\n sourceEnd += 1;\n const slice = source.slice(sourceStart, sourceEnd);\n if (slice.length <= WARMUP_BARS) continue;\n\n const { priceMax, priceMin } = derivePriceRange(slice);\n const edges = buildBucketEdges(\n priceMin,\n priceMax,\n config.rowsLayout ?? \"numberOfRows\",\n config.rowSize,\n config.tickSize ?? DEFAULT_TICK_SIZE,\n );\n const bucketized = bucketizeVolumeDetailed(slice, edges, config.volumeSplit ?? \"upDown\");\n if (bucketized.totalVolume <= 0) continue;\n\n const valueArea = computeValueArea(bucketized.rows, config.valueAreaPct, bucketized.pocIdx);\n developingPoc[i] = valueArea.poc;\n developingVahHigh[i] = valueArea.valHigh;\n developingVahLow[i] = valueArea.valLow;\n }\n\n return { developingPoc, developingVahHigh, developingVahLow };\n}\n\nfunction lowerBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time < target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\n/**\n * Derive min/max price bounds for a bar slice.\n *\n * @formula PLAN §9.2 — bucket range spans the min low to max high\n * of the selected profile source.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const range = derivePriceRange(bars);\n */\nexport function derivePriceRange(bars: ReadonlyArray<Pick<VolumeProfileBar, \"high\" | \"low\">>): {\n priceMin: number;\n priceMax: number;\n} {\n let priceMin = Number.POSITIVE_INFINITY;\n let priceMax = Number.NEGATIVE_INFINITY;\n for (const bar of bars) {\n // Skip bars with non-finite OHLC. Per the Bar contract NaN is allowed\n // and would otherwise poison the running min/max (NaN comparisons\n // return false), letting NaN edges flow into bucketization.\n if (!Number.isFinite(bar.low) || !Number.isFinite(bar.high)) continue;\n if (bar.low < priceMin) priceMin = bar.low;\n if (bar.high > priceMax) priceMax = bar.high;\n }\n if (priceMin === Number.POSITIVE_INFINITY) return { priceMax: 0, priceMin: 0 };\n return { priceMax, priceMin };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8GAA8G;AAC9G,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAI5B,2BAA2B,GAC9B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8GAA8G;AAC9G,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAI5B,2BAA2B,GAC9B,MAAM,eAAe,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/volume-profile-shared.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nexport { buildBucketEdges } from \"./bucketEdges.js\";\nexport { bucketizeVolume, bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nexport { computeDevelopingSeries, derivePriceRange } from \"./developingSeries.js\";\nexport { findInterceptIndex } from \"./intercept.js\";\nexport {\n assessVolumeProfileCost,\n VOLUME_PROFILE_HEAVY_THRESHOLD,\n VOLUME_PROFILE_MAX_BUCKETS,\n} from \"./tooHeavy.js\";\nexport { DEFAULT_TICK_SIZE } from \"./types.js\";\nexport type {\n BucketizedVolume,\n DevelopingProfileSeries,\n VolumeProfileConfig as ProfileConfig,\n RowsLayout,\n ValueAreaResult,\n VolumeProfileBar,\n VolumeProfileBucket,\n VolumeProfileConfig,\n VolumeProfileCostStatus,\n VolumeProfileResult,\n VolumeProfileRow,\n VolumeSplit,\n} from \"./types.js\";\nexport { computeValueArea } from \"./valueArea.js\";\nexport { computeProfile, sliceBarsByTime } from \"./volumeProfileShared.js\";\nexport {\n commitVolumeProfileSnapshot,\n createVolumeProfileCore,\n degenerateVolumeProfile,\n emitVolumeProfileHistogram,\n emptyVolumeProfileSnapshot,\n resolveVolumeProfileSnapshot,\n type HistogramBucket,\n type VolumeProfileCore,\n type VolumeProfileSnapshot,\n volumeProfileConfigFromOpts,\n} from \"./scaffold.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/intercept.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAA2D,EAC3D,OAAe,EACf,KAAa;IAEb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/intercept.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAA2D,EAC3D,OAAe,EACf,KAAa;IAEb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/intercept.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { VolumeProfileBar } from \"./types.js\";\n\n/**\n * Find the first future bar whose `[low, high]` range intercepts\n * `price`, or the rightmost bar when no intercept exists.\n *\n * @formula PLAN §10.1.1 — right-extension line ends at first bar\n * containing the reference price, else chart right edge.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const idx = findInterceptIndex(bars, 10, 100);\n */\nexport function findInterceptIndex(\n bars: ReadonlyArray<Pick<VolumeProfileBar, \"high\" | \"low\">>,\n fromIdx: number,\n price: number,\n): number {\n const n = bars.length;\n if (n === 0) return -1;\n if (!Number.isFinite(price)) return n - 1;\n\n for (let i = Math.max(0, fromIdx + 1); i < n; i += 1) {\n const bar = bars[i];\n if (bar.low <= price && bar.high >= price) return i;\n }\n\n return n - 1;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/scaffold.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { PlotEmission } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport { pushDiagnostic, pushPlot } from \"../../../emit/index.js\";\nimport { Float64RingBuffer } from \"../../../ringBuffer.js\";\nimport type { RuntimeContext } from \"../../../runtimeContext.js\";\n\nimport { type VolumeProfileBar, type VolumeProfileResult, computeProfile } from \"./index.js\";\nimport type { ProfileConfig } from \"./index.js\";\n\n/**\n * Histogram bucket shape shared by all four volume-profile primitives.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bucket: HistogramBucket = { price: 100, volume: 10 };\n */\nexport type HistogramBucket = Readonly<{\n price: number;\n volume: number;\n color?: string;\n}>;\n\n/**\n * The \"what we computed for this bar\" snapshot used to commit to the\n * slot's ring buffers and emit the histogram. NaN values short-circuit\n * the buffer writes to NaN-warmup.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap: VolumeProfileSnapshot = { buckets: [], poc: NaN, valHigh: NaN, valLow: NaN };\n */\nexport type VolumeProfileSnapshot = Readonly<{\n buckets: ReadonlyArray<HistogramBucket>;\n poc: number;\n valHigh: number;\n valLow: number;\n}>;\n\n/**\n * Per-VP slot state: three Float64 ring buffers (POC / VAH / VAL) plus\n * the latest computed buckets. Callers wrap this with a primitive-\n * specific `result` object that exposes `Series<number>` views over the\n * buffers and (optionally) the `buckets` getter.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const core = createVolumeProfileCore(capacity);\n */\nexport type VolumeProfileCore = {\n readonly pocBuffer: Float64RingBuffer;\n readonly valHighBuffer: Float64RingBuffer;\n readonly valLowBuffer: Float64RingBuffer;\n buckets: ReadonlyArray<HistogramBucket>;\n};\n\nconst DEFAULT_ROW_SIZE = 24;\nconst DEFAULT_VALUE_AREA_PCT = 0.7;\nconst HISTOGRAM_SLOT_SUFFIX = \"/histogram\";\n\n/**\n * Allocate the three Float64 ring buffers + an empty `buckets` array\n * shared by every volume-profile slot.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const core = createVolumeProfileCore(capacity);\n */\nexport function createVolumeProfileCore(capacity: number): VolumeProfileCore {\n return {\n buckets: [],\n pocBuffer: new Float64RingBuffer(capacity),\n valHighBuffer: new Float64RingBuffer(capacity),\n valLowBuffer: new Float64RingBuffer(capacity),\n };\n}\n\n/**\n * Normalise a primitive's options into the shared `ProfileConfig`.\n * `rowSize` defaults to 24 and `valueAreaPct` defaults to 0.7 — both\n * values match the upstream invinite reference. `valueAreaPct <= 1` is\n * interpreted as a fraction and scaled to percent.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const cfg = volumeProfileConfigFromOpts({ rowSize: 20, valueAreaPct: 0.7 });\n */\nexport function volumeProfileConfigFromOpts(opts: {\n rowSize?: number;\n valueAreaPct?: number;\n}): ProfileConfig {\n const rowSize = opts.rowSize;\n const valueAreaPct = opts.valueAreaPct ?? DEFAULT_VALUE_AREA_PCT;\n return {\n rowSize: rowSize === undefined || rowSize <= 0 ? DEFAULT_ROW_SIZE : rowSize,\n valueAreaPct: valueAreaPct <= 1 ? valueAreaPct * 100 : valueAreaPct,\n };\n}\n\n/**\n * Apply a single-bucket fallback for windows where the full bucketizer\n * cannot produce a profile (constant-price input, single-bar window,\n * etc.). Returns `null` when no finite-close / positive-volume bar\n * exists in the window.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const fallback = degenerateVolumeProfile(bars, \"#fff\");\n */\nexport function degenerateVolumeProfile(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketColor: string | undefined,\n): VolumeProfileSnapshot | null {\n let totalVolume = 0;\n let price = Number.NaN;\n for (const bar of bars) {\n if (!Number.isFinite(bar.close)) continue;\n price = bar.close;\n if (Number.isFinite(bar.volume) && bar.volume > 0) totalVolume += bar.volume;\n }\n if (!Number.isFinite(price) || totalVolume <= 0) return null;\n const bucket =\n bucketColor === undefined\n ? { price, volume: totalVolume }\n : { price, volume: totalVolume, color: bucketColor };\n return {\n buckets: [bucket],\n poc: price,\n valHigh: price,\n valLow: price,\n };\n}\n\n/**\n * Empty / NaN snapshot returned when no bars are in the window and\n * the degenerate fallback also fails to produce one.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap = emptyVolumeProfileSnapshot();\n */\nexport function emptyVolumeProfileSnapshot(): VolumeProfileSnapshot {\n return {\n buckets: [],\n poc: Number.NaN,\n valHigh: Number.NaN,\n valLow: Number.NaN,\n };\n}\n\n/**\n * Common \"compute → apply bucketColor → fall back to degenerate\"\n * pipeline used by every VP primitive.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap = resolveVolumeProfileSnapshot({ bars, config, bucketColor: \"#fff\" });\n */\nexport function resolveVolumeProfileSnapshot(args: {\n bars: ReadonlyArray<VolumeProfileBar>;\n config: ProfileConfig;\n bucketColor: string | undefined;\n}): VolumeProfileSnapshot {\n const { bars, config, bucketColor } = args;\n const profile: VolumeProfileResult | null =\n bars.length === 0\n ? null\n : computeProfile({\n config,\n laneBars: bars,\n windowFromIdx: 0,\n windowToIdx: bars.length - 1,\n });\n if (profile !== null && profile.buckets.length > 0) {\n return {\n buckets: profile.buckets.map((bucket) =>\n bucketColor === undefined ? bucket : { ...bucket, color: bucketColor },\n ),\n poc: profile.poc,\n valHigh: profile.valHigh,\n valLow: profile.valLow,\n };\n }\n return degenerateVolumeProfile(bars, bucketColor) ?? emptyVolumeProfileSnapshot();\n}\n\n/**\n * Commit a snapshot to a slot's POC / VAH / VAL ring buffers. Append\n * on close, replace-head on tick. Updates the `buckets` cache.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // commitVolumeProfileSnapshot(core, false, snap);\n */\nexport function commitVolumeProfileSnapshot(\n core: VolumeProfileCore,\n isTick: boolean,\n snapshot: VolumeProfileSnapshot,\n): void {\n core.buckets = snapshot.buckets;\n if (isTick) {\n core.pocBuffer.replaceHead(snapshot.poc);\n core.valHighBuffer.replaceHead(snapshot.valHigh);\n core.valLowBuffer.replaceHead(snapshot.valLow);\n } else {\n core.pocBuffer.append(snapshot.poc);\n core.valHighBuffer.append(snapshot.valHigh);\n core.valLowBuffer.append(snapshot.valLow);\n }\n}\n\n/**\n * Emit the auto-generated `horizontal-histogram` PlotEmission for a\n * VP primitive, or a deduped `unsupported-plot-kind` diagnostic when\n * the adapter cannot render the kind. The dedup key includes the slot\n * id so an indicator that reuses VP across multiple call sites still\n * receives one diagnostic per call site, not per bar.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // emitVolumeProfileHistogram(ctx, slotId, \"Anchored Volume Profile\", snap.poc, snap.buckets);\n */\nexport function emitVolumeProfileHistogram(\n ctx: RuntimeContext,\n slotId: string,\n title: string,\n value: number,\n buckets: ReadonlyArray<HistogramBucket>,\n): void {\n if (!ctx.capabilities.plots.has(\"horizontal-histogram\")) {\n const key = `unsupported-plot-kind|${slotId}`;\n if (ctx.diagnosedRequestKeys.has(key)) return;\n ctx.diagnosedRequestKeys.add(key);\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"unsupported-plot-kind\",\n message: 'Adapter cannot render plot kind \"horizontal-histogram\".',\n slotId,\n bar: ctx.barIndex(),\n });\n return;\n }\n const emission: PlotEmission = {\n bar: ctx.barIndex(),\n color: null,\n kind: \"plot\",\n meta: {},\n pane: \"overlay\",\n slotId: `${slotId}${HISTOGRAM_SLOT_SUFFIX}`,\n style: { kind: \"horizontal-histogram\", buckets },\n time: ctx.stream.bar.time,\n title,\n value: Number.isFinite(value) ? value : null,\n };\n pushPlot(ctx.emissions, emission);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tooHeavy.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/tooHeavy.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAQvC;IACG,IAAI,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,0BAA0B,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC;QACrE,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,kBAAkB;YAC1B,kBAAkB,EACd,IAAI,CAAC,UAAU,KAAK,aAAa;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CACL,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACnC,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CACvC;gBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;SACpC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAM5B;IAUG,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IACI,OAAO,KAAK,SAAS;QACrB,QAAQ,KAAK,SAAS;QACtB,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,IAAI,CAAC;QACZ,QAAQ,IAAI,QAAQ,EACtB,CAAC;QACC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACjC,OAAO,KAAK,GAAG,CAAC;YACZ,CAAC,CAAC;gBACI,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACrD,IAAI,EAAE,WAAW;gBACjB,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,QAAQ;aACX;YACH,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO;QACH,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;KACX,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"tooHeavy.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/tooHeavy.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAQvC;IACG,IAAI,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,0BAA0B,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC;QACrE,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,kBAAkB;YAC1B,kBAAkB,EACd,IAAI,CAAC,UAAU,KAAK,aAAa;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CACL,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACnC,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CACvC;gBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;SACpC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAM5B;IAUG,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IACI,OAAO,KAAK,SAAS;QACrB,QAAQ,KAAK,SAAS;QACtB,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,IAAI,CAAC;QACZ,QAAQ,IAAI,QAAQ,EACtB,CAAC;QACC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACjC,OAAO,KAAK,GAAG,CAAC;YACZ,CAAC,CAAC;gBACI,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACrD,IAAI,EAAE,WAAW;gBACjB,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,QAAQ;aACX;YACH,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO;QACH,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;KACX,CAAC;AACN,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/too-heavy.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { RowsLayout, VolumeProfileCostStatus } from \"./types.js\";\n\n/**\n * Finer-bar count threshold from the invinite profile renderer.\n *\n * @formula PLAN §9.2 — cap finer-bar scans for one profile compute.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const max = VOLUME_PROFILE_HEAVY_THRESHOLD;\n */\nexport const VOLUME_PROFILE_HEAVY_THRESHOLD = 50_000;\n\n/**\n * Default maximum bucket count for a single pure profile compute.\n *\n * @formula PLAN §9.2 — cap bucket allocations for one profile compute.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const max = VOLUME_PROFILE_MAX_BUCKETS;\n */\nexport const VOLUME_PROFILE_MAX_BUCKETS = 2_000;\n\n/**\n * Assess whether a volume-profile input window is too expensive and\n * optionally recommend a coarser `rowSize` fallback.\n *\n * @formula PLAN §9.2 — guard range / rowSize combinations that would\n * allocate pathological bucket counts before bucketing.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const status = assessVolumeProfileCost({ finerCandleCount: 1000, priceMin: 1, priceMax: 100, rowSize: 1, rowsLayout: \"numberOfRows\" });\n */\nexport function assessVolumeProfileCost(args: {\n finerCandleCount: number;\n rowSize?: number;\n rowsLayout?: RowsLayout;\n tickSize?: number;\n priceMin?: number;\n priceMax?: number;\n maxBuckets?: number;\n}): VolumeProfileCostStatus {\n if (args.finerCandleCount > VOLUME_PROFILE_HEAVY_THRESHOLD) {\n return { heavy: true, reason: \"too-many-finer-bars\", recommendedRowSize: null };\n }\n\n const maxBuckets = args.maxBuckets ?? VOLUME_PROFILE_MAX_BUCKETS;\n const estimate = estimateBucketCount(args);\n if (estimate.kind === \"estimated\" && estimate.bucketCount > maxBuckets) {\n return {\n heavy: true,\n reason: \"too-many-buckets\",\n recommendedRowSize:\n args.rowsLayout === \"ticksPerRow\"\n ? Math.ceil(\n (estimate.priceMax - estimate.priceMin) /\n (maxBuckets * estimate.tickSize),\n )\n : Math.max(1, maxBuckets),\n };\n }\n\n return { heavy: false, reason: null, recommendedRowSize: null };\n}\n\nfunction estimateBucketCount(args: {\n rowSize?: number;\n rowsLayout?: RowsLayout;\n tickSize?: number;\n priceMin?: number;\n priceMax?: number;\n}):\n | { bucketCount: 0; kind: \"invalid\" }\n | {\n bucketCount: number;\n kind: \"estimated\";\n priceMin: number;\n priceMax: number;\n rowSize: number;\n tickSize: number;\n } {\n const { priceMax, priceMin, rowSize } = args;\n if (\n rowSize === undefined ||\n priceMin === undefined ||\n priceMax === undefined ||\n !Number.isFinite(priceMin) ||\n !Number.isFinite(priceMax) ||\n rowSize <= 0 ||\n priceMax <= priceMin\n ) {\n return { bucketCount: 0, kind: \"invalid\" };\n }\n const tickSize = args.tickSize ?? 0.01;\n if (args.rowsLayout === \"ticksPerRow\") {\n const width = rowSize * tickSize;\n return width > 0\n ? {\n bucketCount: Math.ceil((priceMax - priceMin) / width),\n kind: \"estimated\",\n priceMax,\n priceMin,\n rowSize,\n tickSize,\n }\n : { bucketCount: 0, kind: \"invalid\" };\n }\n return {\n bucketCount: Math.floor(rowSize),\n kind: \"estimated\",\n priceMax,\n priceMin,\n rowSize,\n tickSize,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8FAA8F;AAC9F,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AA6LjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8FAA8F;AAC9F,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AA6LjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/types.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\n/**\n * Bucket-width strategy. `ticksPerRow` derives from `tickSize`;\n * `numberOfRows` divides the range evenly.\n *\n * @formula PLAN §9.2 — controls bucket width derivation for profile rows.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const layout: RowsLayout = \"numberOfRows\";\n */\nexport type RowsLayout = \"numberOfRows\" | \"ticksPerRow\";\n\n/**\n * Bar coloring strategy inside each bucket.\n *\n * @formula PLAN §9.2 — selects total, delta, or up/down volume partitioning.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const split: VolumeSplit = \"upDown\";\n */\nexport type VolumeSplit = \"delta\" | \"total\" | \"upDown\";\n\n/**\n * Minimal OHLCV shape consumed by the pure volume-profile helpers.\n *\n * @formula PLAN §9.2 — normalized OHLCV input for profile bucketing.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bar: VolumeProfileBar = { time: 0, open: 1, high: 2, low: 1, close: 2, volume: 100 };\n */\nexport type VolumeProfileBar = Readonly<{\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n}>;\n\n/**\n * Horizontal-histogram bucket shape used by Phase 5 plot emissions.\n *\n * @formula PLAN §9.2 — price row plus accumulated volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bucket: VolumeProfileBucket = { price: 100, volume: 25 };\n */\nexport type VolumeProfileBucket = Readonly<{\n price: number;\n volume: number;\n}>;\n\n/**\n * Internal row shape retaining bucket bounds and directional volume.\n *\n * @formula PLAN §9.2 — bucket bounds plus directional volume totals.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const row: VolumeProfileRow = { low: 99, high: 101, mid: 100, volume: 10, upVolume: 10, downVolume: 0 };\n */\nexport type VolumeProfileRow = Readonly<{\n low: number;\n high: number;\n mid: number;\n volume: number;\n upVolume: number;\n downVolume: number;\n}>;\n\n/**\n * Shared math config consumed by bucket/value-area/developing helpers.\n *\n * @formula PLAN §9.2 — shared profile row count and value-area settings.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const config: VolumeProfileConfig = { rowSize: 24, valueAreaPct: 70 };\n */\nexport type VolumeProfileConfig = Readonly<{\n rowSize: number;\n valueAreaPct: number;\n rowsLayout?: RowsLayout;\n volumeSplit?: VolumeSplit;\n tickSize?: number;\n}>;\n\n/**\n * Cost guard result for profile windows that would allocate too many\n * buckets or scan too many finer bars.\n *\n * @formula PLAN §9.2 — cost guard state for profile windows.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const status: VolumeProfileCostStatus = { heavy: false, reason: null, recommendedRowSize: null };\n */\nexport type VolumeProfileCostStatus = Readonly<{\n heavy: boolean;\n reason: \"too-many-buckets\" | \"too-many-finer-bars\" | null;\n recommendedRowSize: number | null;\n}>;\n\n/**\n * Value-area result: high/low price bounds plus point-of-control.\n *\n * @formula PLAN §9.2 — point-of-control and value-area bounds.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const va: ValueAreaResult = { valHigh: 101, valLow: 99, poc: 100, vahIdx: 1, valIdx: 0, pocIdx: 0, cumulativeVolume: 10 };\n */\nexport type ValueAreaResult = Readonly<{\n valHigh: number;\n valLow: number;\n poc: number;\n vahIdx: number;\n valIdx: number;\n pocIdx: number;\n cumulativeVolume: number;\n}>;\n\n/**\n * Detailed bucketization output.\n *\n * @formula PLAN §9.2 — raw histogram buckets and total volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const out: BucketizedVolume = { buckets: [], rows: [], totalVolume: 0, pocIdx: -1 };\n */\nexport type BucketizedVolume = Readonly<{\n buckets: ReadonlyArray<VolumeProfileBucket>;\n rows: ReadonlyArray<VolumeProfileRow>;\n totalVolume: number;\n pocIdx: number;\n}>;\n\n/**\n * Developing POC/value-area time-series arrays.\n *\n * @formula PLAN §9.2 — developing profile time-series outputs.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const dev: DevelopingProfileSeries = { developingPoc: new Float64Array(0), developingVahHigh: new Float64Array(0), developingVahLow: new Float64Array(0) };\n */\nexport type DevelopingProfileSeries = Readonly<{\n developingPoc: Float64Array;\n developingVahHigh: Float64Array;\n developingVahLow: Float64Array;\n}>;\n\n/**\n * Full pure profile result consumed by later volume-profile primitives.\n *\n * @formula PLAN §9.2 — complete profile histogram, value area, and cost state.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const result: VolumeProfileResult = { buckets: [], rows: [], valueAreaMask: new Float64Array(0), poc: Number.NaN, valHigh: Number.NaN, valLow: Number.NaN, costStatus: { heavy: false, reason: null, recommendedRowSize: null } };\n */\nexport type VolumeProfileResult = Readonly<{\n buckets: ReadonlyArray<VolumeProfileBucket>;\n rows: ReadonlyArray<VolumeProfileRow>;\n valueAreaMask: Float64Array;\n poc: number;\n valHigh: number;\n valLow: number;\n costStatus: VolumeProfileCostStatus;\n developing?: DevelopingProfileSeries;\n}>;\n\n/**\n * Sentinel tick size used when no symbol-specific minimum tick is supplied.\n *\n * @formula PLAN §9.2 — fallback row quantum for symbols without min tick.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const tick = DEFAULT_TICK_SIZE;\n */\nexport const DEFAULT_TICK_SIZE = 0.01;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"valueArea.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/valueArea.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"valueArea.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/valueArea.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/value-area.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { ValueAreaResult, VolumeProfileRow } from \"./types.js\";\n\n/**\n * Compute greedy expand-from-POC value-area bounds.\n *\n * @formula PLAN §9.2 — start at POC, then absorb the larger of the\n * next two above-buckets vs below-buckets until target volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const va = computeValueArea(rows, 70);\n */\nexport function computeValueArea(\n rows: ReadonlyArray<VolumeProfileRow>,\n valueAreaPct = 70,\n pocIdx: number = findPocIndex(rows),\n): ValueAreaResult {\n if (rows.length === 0 || pocIdx < 0 || pocIdx >= rows.length) {\n return {\n cumulativeVolume: 0,\n poc: Number.NaN,\n pocIdx,\n vahIdx: pocIdx,\n valHigh: Number.NaN,\n valIdx: pocIdx,\n valLow: Number.NaN,\n };\n }\n\n const totalVolume = rows.reduce((sum, row) => sum + row.volume, 0);\n const targetPct = Math.max(0, Math.min(100, valueAreaPct));\n const target = totalVolume * (targetPct / 100);\n let lowIdx = pocIdx;\n let highIdx = pocIdx;\n let cumulative = rows[pocIdx].volume;\n\n while (cumulative < target && (lowIdx > 0 || highIdx + 1 < rows.length)) {\n const aboveAvailable = highIdx + 1 < rows.length;\n const belowAvailable = lowIdx - 1 >= 0;\n\n let aboveSum = 0;\n if (aboveAvailable) {\n aboveSum = rows[highIdx + 1].volume;\n if (highIdx + 2 < rows.length) aboveSum += rows[highIdx + 2].volume;\n }\n\n let belowSum = 0;\n if (belowAvailable) {\n belowSum = rows[lowIdx - 1].volume;\n if (lowIdx - 2 >= 0) belowSum += rows[lowIdx - 2].volume;\n }\n\n if (aboveAvailable && (!belowAvailable || aboveSum >= belowSum)) {\n const takeTwo = highIdx + 2 < rows.length;\n cumulative += rows[highIdx + 1].volume;\n highIdx += 1;\n if (takeTwo && cumulative < target) {\n cumulative += rows[highIdx + 1].volume;\n highIdx += 1;\n }\n } else {\n const takeTwo = lowIdx - 2 >= 0;\n cumulative += rows[lowIdx - 1].volume;\n lowIdx -= 1;\n if (takeTwo && cumulative < target) {\n cumulative += rows[lowIdx - 1].volume;\n lowIdx -= 1;\n }\n }\n }\n\n return {\n cumulativeVolume: cumulative,\n poc: rows[pocIdx].mid,\n pocIdx,\n vahIdx: highIdx,\n valHigh: rows[highIdx].high,\n valIdx: lowIdx,\n valLow: rows[lowIdx].low,\n };\n}\n\nfunction findPocIndex(rows: ReadonlyArray<VolumeProfileRow>): number {\n let pocIdx = -1;\n let pocVolume = -1;\n for (let i = 0; i < rows.length; i += 1) {\n if (rows[i].volume > pocVolume) {\n pocIdx = i;\n pocVolume = rows[i].volume;\n }\n }\n return pocIdx;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"volumeProfileShared.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/volumeProfileShared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"volumeProfileShared.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/volumeProfileShared.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8GAA8G;AAC9G,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,IAO9B;IACG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,eAAe,CAC9B,SAAS,EACT,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EACjB,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CACvC,CAAC;IACF,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,uBAAuB,CAAC;QACvC,gBAAgB,EAAE,UAAU,CAAC,MAAM;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,cAAc;QAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,iBAAiB;KACjD,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,KAAK;QAChB,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,gBAAgB,CAC1B,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,UAAU,IAAI,cAAc,EACnC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,QAAQ,IAAI,iBAAiB,CACvC,CAAC;IACF,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC;IAChG,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5F,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,IAAI,GAAG;QACT,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,UAAU;QACV,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,aAAa;KAChB,CAAC;IAEF,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;YACH,GAAG,IAAI;YACP,UAAU,EAAE,uBAAuB,CAAC;gBAChC,MAAM;gBACN,SAAS;gBACT,QAAQ;gBACR,aAAa,EAAE,OAAO;gBACtB,WAAW,EAAE,KAAK;aACrB,CAAC;SACL,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACjB,KAAc,EACd,MAAmD,EACnD,kBAAiC;IAEjC,OAAO;QACH,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACjD,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,GAAG;QACnB,MAAM,EAAE,MAAM,CAAC,GAAG;QAClB,aAAa,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC;KACrC,CAAC;AACN,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC3B,IAAqC,EACrC,UAAkB,EAClB,QAAgB;IAEhB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,IAAqC,EAAE,MAAc;IACzE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;YACrC,EAAE,GAAG,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,IAAqC,EAAE,MAAc;IACzE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;YACtC,EAAE,GAAG,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/volume-profile-shared.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport { buildBucketEdges } from \"./bucketEdges.js\";\nimport { bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nimport { computeDevelopingSeries, derivePriceRange } from \"./developingSeries.js\";\nimport { assessVolumeProfileCost } from \"./tooHeavy.js\";\nimport type { VolumeProfileBar, VolumeProfileConfig, VolumeProfileResult } from \"./types.js\";\nimport { DEFAULT_TICK_SIZE } from \"./types.js\";\nimport { computeValueArea } from \"./valueArea.js\";\n\n/**\n * Compute the pure shared volume-profile payload used by all four\n * Phase 5 profile primitives.\n *\n * @formula PLAN §9.2 / §10.1.1 — slice the lane/finer window, bucket\n * volume by price, compute POC/value-area, optionally compute\n * developing POC/VA series in lane-bar space.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const profile = computeProfile({ laneBars: bars, finerBars: [], windowFromIdx: 0, windowToIdx: bars.length - 1, config: { rowSize: 20, valueAreaPct: 70 } });\n */\nexport function computeProfile(args: {\n laneBars: ReadonlyArray<VolumeProfileBar>;\n finerBars?: ReadonlyArray<VolumeProfileBar>;\n windowFromIdx: number;\n windowToIdx: number;\n config: VolumeProfileConfig;\n computeDeveloping?: boolean;\n}): VolumeProfileResult {\n const { laneBars, config } = args;\n const finerBars = args.finerBars ?? [];\n if (laneBars.length === 0) return emptyProfile(false, null, null);\n\n const fromIdx = Math.max(0, Math.min(laneBars.length - 1, args.windowFromIdx));\n const toIdx = Math.max(fromIdx, Math.min(laneBars.length - 1, args.windowToIdx));\n const laneSlice = laneBars.slice(fromIdx, toIdx + 1);\n\n const finerSlice = sliceBarsByTime(\n finerBars,\n laneSlice[0].time,\n laneSlice[laneSlice.length - 1].time,\n );\n const bucketSource = finerSlice.length > 0 ? finerSlice : laneSlice;\n const range = derivePriceRange(bucketSource);\n const costStatus = assessVolumeProfileCost({\n finerCandleCount: finerSlice.length,\n priceMax: range.priceMax,\n priceMin: range.priceMin,\n rowSize: config.rowSize,\n rowsLayout: config.rowsLayout ?? \"numberOfRows\",\n tickSize: config.tickSize ?? DEFAULT_TICK_SIZE,\n });\n if (costStatus.heavy)\n return emptyProfile(costStatus.heavy, costStatus.reason, costStatus.recommendedRowSize);\n if (range.priceMax <= range.priceMin) return emptyProfile(false, null, null);\n\n const edges = buildBucketEdges(\n range.priceMin,\n range.priceMax,\n config.rowsLayout ?? \"numberOfRows\",\n config.rowSize,\n config.tickSize ?? DEFAULT_TICK_SIZE,\n );\n const bucketized = bucketizeVolumeDetailed(bucketSource, edges, config.volumeSplit ?? \"upDown\");\n if (bucketized.totalVolume <= 0) return emptyProfile(false, null, null);\n\n const valueArea = computeValueArea(bucketized.rows, config.valueAreaPct, bucketized.pocIdx);\n const valueAreaMask = new Float64Array(bucketized.rows.length);\n const lo = Math.min(valueArea.vahIdx, valueArea.valIdx);\n const hi = Math.max(valueArea.vahIdx, valueArea.valIdx);\n for (let i = 0; i < valueAreaMask.length; i += 1) valueAreaMask[i] = i >= lo && i <= hi ? 1 : 0;\n\n const base = {\n buckets: bucketized.buckets,\n costStatus,\n poc: valueArea.poc,\n rows: bucketized.rows,\n valHigh: valueArea.valHigh,\n valLow: valueArea.valLow,\n valueAreaMask,\n };\n\n if (args.computeDeveloping === true) {\n return {\n ...base,\n developing: computeDevelopingSeries({\n config,\n finerBars,\n laneBars,\n windowFromIdx: fromIdx,\n windowToIdx: toIdx,\n }),\n };\n }\n\n return base;\n}\n\nfunction emptyProfile(\n heavy: boolean,\n reason: VolumeProfileResult[\"costStatus\"][\"reason\"],\n recommendedRowSize: number | null,\n): VolumeProfileResult {\n return {\n buckets: [],\n costStatus: { heavy, reason, recommendedRowSize },\n poc: Number.NaN,\n rows: [],\n valHigh: Number.NaN,\n valLow: Number.NaN,\n valueAreaMask: new Float64Array(0),\n };\n}\n\n/**\n * Slice sorted bars to the inclusive `[timeFromMs, timeToMs]` window.\n *\n * @formula PLAN §10.1.1 — finer lower-timeframe bars are clipped to\n * the same wall-clock window as the lane profile.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const slice = sliceBarsByTime(bars, 0, 60_000);\n */\nexport function sliceBarsByTime(\n bars: ReadonlyArray<VolumeProfileBar>,\n timeFromMs: number,\n timeToMs: number,\n): ReadonlyArray<VolumeProfileBar> {\n if (bars.length === 0) return bars;\n const start = lowerBoundTime(bars, timeFromMs);\n const end = upperBoundTime(bars, timeToMs);\n if (start >= end) return [];\n return bars.slice(start, end);\n}\n\nfunction lowerBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time < target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\nfunction upperBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time <= target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/vwma-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
  * Volume-Weighted Moving Average over parallel `Float64Array` source +
10
10
  * volume streams. Walks past any leading-NaN source prefix, then for
@@ -1 +1 @@
1
- {"version":3,"file":"vwmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/vwmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,WAAW,CACvB,MAAoB,EACpB,MAAoB,EACpB,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,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9D,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,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"vwmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/vwmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,WAAW,CACvB,MAAoB,EACpB,MAAoB,EACpB,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,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9D,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,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,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/vwma-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 * Volume-Weighted Moving Average over parallel `Float64Array` source +\n * volume streams. Walks past any leading-NaN source prefix, then for\n * each trailing `length`-bar window emits\n * `Σ(source[i − j] * volume[i − j]) / Σ(volume[i − j])`. A NaN volume\n * slot is treated as zero (matches invinite's `candles[i].volume ?? 0`\n * null-coalesce). A NaN source slot anywhere inside the window\n * short-circuits that bar's output to NaN; a window whose total volume\n * is `0` also emits NaN (the ratio is undefined).\n *\n * The source and volume arrays must be the same length; a mismatch\n * yields an all-NaN output. Warmup `[0, length − 2]` is `NaN`;\n * `out[length − 1]` is the first defined value.\n *\n * @formula out[i] = (Σ_{j=0..N-1} source[i − j] * volume[i − j])\n * / (Σ_{j=0..N-1} volume[i − j])\n * ; NaN when the denominator is 0.\n * @warmup length − 1\n * @since 0.2\n * @stable\n * @example\n * // import { vwmaFloat64 } from \"./vwmaFloat64\";\n * // const src = new Float64Array([10, 11, 12, 13]);\n * // const vol = new Float64Array([100, 200, 150, 50]);\n * // const out = vwmaFloat64(src, vol, 3);\n */\nexport function vwmaFloat64(\n source: Float64Array,\n volume: Float64Array,\n length: number,\n): Float64Array {\n const n = source.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || volume.length !== n) 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 for (let i = firstValidIdx + length - 1; i < n; i += 1) {\n let pvSum = 0;\n let volSum = 0;\n let allFinite = true;\n for (let j = 0; j < length; j += 1) {\n const value = source[i - j];\n if (!Number.isFinite(value)) {\n allFinite = false;\n break;\n }\n const rawVol = volume[i - j];\n const v = Number.isFinite(rawVol) ? rawVol : 0;\n pvSum += value * v;\n volSum += v;\n }\n if (!allFinite) continue;\n out[i] = volSum > 0 ? pvSum / volSum : Number.NaN;\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/wilder-directional.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's `+DM` / `-DM` / `+DI` / `-DI` over a `length`-bar