oakscriptjs 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -9
  3. package/dist/cjs/array/index.d.ts +701 -0
  4. package/dist/cjs/array/index.d.ts.map +1 -0
  5. package/dist/cjs/array/index.js +392 -0
  6. package/dist/cjs/array/index.js.map +7 -0
  7. package/dist/cjs/box/index.d.ts +444 -0
  8. package/dist/cjs/box/index.d.ts.map +1 -0
  9. package/dist/cjs/box/index.js +246 -0
  10. package/dist/cjs/box/index.js.map +7 -0
  11. package/dist/cjs/callsite/index.d.ts +61 -0
  12. package/dist/cjs/callsite/index.d.ts.map +1 -0
  13. package/dist/cjs/callsite/index.js +65 -0
  14. package/dist/cjs/callsite/index.js.map +7 -0
  15. package/dist/cjs/chartpoint/index.d.ts +90 -0
  16. package/dist/cjs/chartpoint/index.d.ts.map +1 -0
  17. package/dist/cjs/chartpoint/index.js +56 -0
  18. package/dist/cjs/chartpoint/index.js.map +7 -0
  19. package/dist/cjs/color/index.d.ts +285 -0
  20. package/dist/cjs/color/index.d.ts.map +1 -0
  21. package/dist/cjs/color/index.js +143 -0
  22. package/dist/cjs/color/index.js.map +7 -0
  23. package/dist/cjs/compare/index.d.ts +26 -0
  24. package/dist/cjs/compare/index.d.ts.map +1 -0
  25. package/dist/cjs/compare/index.js +50 -0
  26. package/dist/cjs/compare/index.js.map +7 -0
  27. package/dist/cjs/drawing/registry.d.ts +42 -0
  28. package/dist/cjs/drawing/registry.d.ts.map +1 -0
  29. package/dist/cjs/drawing/registry.js +87 -0
  30. package/dist/cjs/drawing/registry.js.map +7 -0
  31. package/dist/cjs/index.d.ts +85 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +184 -0
  34. package/dist/cjs/index.js.map +7 -0
  35. package/dist/cjs/indicator.d.ts +117 -0
  36. package/dist/cjs/indicator.d.ts.map +1 -0
  37. package/dist/cjs/indicator.js +74 -0
  38. package/dist/cjs/indicator.js.map +7 -0
  39. package/dist/cjs/input.d.ts +196 -0
  40. package/dist/cjs/input.d.ts.map +1 -0
  41. package/dist/cjs/input.js +197 -0
  42. package/dist/cjs/input.js.map +7 -0
  43. package/dist/cjs/label/index.d.ts +303 -0
  44. package/dist/cjs/label/index.d.ts.map +1 -0
  45. package/dist/cjs/label/index.js +190 -0
  46. package/dist/cjs/label/index.js.map +7 -0
  47. package/dist/cjs/lib/index.d.ts +8 -0
  48. package/dist/cjs/lib/index.d.ts.map +1 -0
  49. package/dist/cjs/lib/index.js +19 -0
  50. package/dist/cjs/lib/index.js.map +7 -0
  51. package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
  52. package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
  53. package/dist/cjs/lib/zigzag/index.js +27 -0
  54. package/dist/cjs/lib/zigzag/index.js.map +7 -0
  55. package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
  56. package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
  57. package/dist/cjs/lib/zigzag/zigzag.js +207 -0
  58. package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
  59. package/dist/cjs/line/index.d.ts +342 -0
  60. package/dist/cjs/line/index.d.ts.map +1 -0
  61. package/dist/cjs/line/index.js +193 -0
  62. package/dist/cjs/line/index.js.map +7 -0
  63. package/dist/cjs/linefill/index.d.ts +124 -0
  64. package/dist/cjs/linefill/index.d.ts.map +1 -0
  65. package/dist/cjs/linefill/index.js +56 -0
  66. package/dist/cjs/linefill/index.js.map +7 -0
  67. package/dist/cjs/map/index.d.ts +69 -0
  68. package/dist/cjs/map/index.d.ts.map +1 -0
  69. package/dist/cjs/map/index.js +80 -0
  70. package/dist/cjs/map/index.js.map +7 -0
  71. package/dist/cjs/math/index.d.ts +560 -0
  72. package/dist/cjs/math/index.d.ts.map +1 -0
  73. package/dist/cjs/math/index.js +441 -0
  74. package/dist/cjs/math/index.js.map +7 -0
  75. package/dist/cjs/matrix/index.d.ts +1231 -0
  76. package/dist/cjs/matrix/index.d.ts.map +1 -0
  77. package/dist/cjs/matrix/index.js +1200 -0
  78. package/dist/cjs/matrix/index.js.map +7 -0
  79. package/dist/cjs/package.json +1 -0
  80. package/dist/cjs/plot.d.ts +76 -0
  81. package/dist/cjs/plot.d.ts.map +1 -0
  82. package/dist/cjs/plot.js +51 -0
  83. package/dist/cjs/plot.js.map +7 -0
  84. package/dist/cjs/polyline/index.d.ts +115 -0
  85. package/dist/cjs/polyline/index.d.ts.map +1 -0
  86. package/dist/cjs/polyline/index.js +76 -0
  87. package/dist/cjs/polyline/index.js.map +7 -0
  88. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  89. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  90. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
  91. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
  92. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  93. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  94. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
  95. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
  96. package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
  97. package/dist/cjs/runtime/index.d.ts.map +1 -0
  98. package/dist/cjs/runtime/index.js +49 -0
  99. package/dist/cjs/runtime/index.js.map +7 -0
  100. package/dist/cjs/runtime/inputs.d.ts +91 -0
  101. package/dist/cjs/runtime/inputs.d.ts.map +1 -0
  102. package/dist/cjs/runtime/inputs.js +262 -0
  103. package/dist/cjs/runtime/inputs.js.map +7 -0
  104. package/dist/cjs/runtime/runtime.d.ts +70 -0
  105. package/dist/cjs/runtime/runtime.d.ts.map +1 -0
  106. package/dist/cjs/runtime/runtime.js +148 -0
  107. package/dist/cjs/runtime/runtime.js.map +7 -0
  108. package/dist/cjs/runtime/series.d.ts +362 -0
  109. package/dist/cjs/runtime/series.d.ts.map +1 -0
  110. package/dist/cjs/runtime/series.js +560 -0
  111. package/dist/cjs/runtime/series.js.map +7 -0
  112. package/dist/cjs/runtime/types.d.ts +282 -0
  113. package/dist/cjs/runtime/types.d.ts.map +1 -0
  114. package/dist/cjs/runtime/types.js +17 -0
  115. package/dist/cjs/runtime/types.js.map +7 -0
  116. package/dist/cjs/script/index.d.ts +987 -0
  117. package/dist/cjs/script/index.d.ts.map +1 -0
  118. package/dist/cjs/script/index.js +1169 -0
  119. package/dist/cjs/script/index.js.map +7 -0
  120. package/dist/cjs/security/resample.d.ts +63 -0
  121. package/dist/cjs/security/resample.d.ts.map +1 -0
  122. package/dist/cjs/security/resample.js +84 -0
  123. package/dist/cjs/security/resample.js.map +7 -0
  124. package/dist/cjs/session/bars.d.ts +80 -0
  125. package/dist/cjs/session/bars.d.ts.map +1 -0
  126. package/dist/cjs/session/bars.js +219 -0
  127. package/dist/cjs/session/bars.js.map +7 -0
  128. package/dist/cjs/session/calendar.d.ts +70 -0
  129. package/dist/cjs/session/calendar.d.ts.map +1 -0
  130. package/dist/cjs/session/calendar.js +164 -0
  131. package/dist/cjs/session/calendar.js.map +7 -0
  132. package/dist/cjs/str/dateformat.d.ts +15 -0
  133. package/dist/cjs/str/dateformat.d.ts.map +1 -0
  134. package/dist/cjs/str/dateformat.js +149 -0
  135. package/dist/cjs/str/dateformat.js.map +7 -0
  136. package/dist/cjs/str/index.d.ts +459 -0
  137. package/dist/cjs/str/index.d.ts.map +1 -0
  138. package/dist/cjs/str/index.js +143 -0
  139. package/dist/cjs/str/index.js.map +7 -0
  140. package/dist/cjs/str/messageformat.d.ts +14 -0
  141. package/dist/cjs/str/messageformat.d.ts.map +1 -0
  142. package/dist/cjs/str/messageformat.js +114 -0
  143. package/dist/cjs/str/messageformat.js.map +7 -0
  144. package/dist/cjs/str/numberformat.d.ts +19 -0
  145. package/dist/cjs/str/numberformat.d.ts.map +1 -0
  146. package/dist/cjs/str/numberformat.js +170 -0
  147. package/dist/cjs/str/numberformat.js.map +7 -0
  148. package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
  149. package/dist/cjs/strategy/index.d.ts.map +1 -0
  150. package/dist/cjs/strategy/index.js +92 -0
  151. package/dist/cjs/strategy/index.js.map +7 -0
  152. package/dist/cjs/ta/index.d.ts +1397 -0
  153. package/dist/cjs/ta/index.d.ts.map +1 -0
  154. package/dist/cjs/ta/index.js +1715 -0
  155. package/dist/cjs/ta/index.js.map +7 -0
  156. package/dist/cjs/ta/running-sum.d.ts +30 -0
  157. package/dist/cjs/ta/running-sum.d.ts.map +1 -0
  158. package/dist/cjs/ta/running-sum.js +99 -0
  159. package/dist/cjs/ta/running-sum.js.map +7 -0
  160. package/dist/cjs/ta-series.d.ts +558 -0
  161. package/dist/cjs/ta-series.d.ts.map +1 -0
  162. package/dist/cjs/ta-series.js +606 -0
  163. package/dist/cjs/ta-series.js.map +7 -0
  164. package/dist/cjs/text/index.d.ts +14 -0
  165. package/dist/cjs/text/index.d.ts.map +1 -0
  166. package/dist/cjs/text/index.js +29 -0
  167. package/dist/cjs/text/index.js.map +7 -0
  168. package/dist/cjs/time/datestring.d.ts +23 -0
  169. package/dist/cjs/time/datestring.d.ts.map +1 -0
  170. package/dist/cjs/time/datestring.js +106 -0
  171. package/dist/cjs/time/datestring.js.map +7 -0
  172. package/dist/cjs/time/index.d.ts +89 -0
  173. package/dist/cjs/time/index.d.ts.map +1 -0
  174. package/dist/cjs/time/index.js +85 -0
  175. package/dist/cjs/time/index.js.map +7 -0
  176. package/dist/cjs/time/session.d.ts +17 -0
  177. package/dist/cjs/time/session.d.ts.map +1 -0
  178. package/dist/cjs/time/session.js +65 -0
  179. package/dist/cjs/time/session.js.map +7 -0
  180. package/dist/cjs/time/timezone.d.ts +40 -0
  181. package/dist/cjs/time/timezone.d.ts.map +1 -0
  182. package/dist/cjs/time/timezone.js +125 -0
  183. package/dist/cjs/time/timezone.js.map +7 -0
  184. package/dist/cjs/timeframe/index.d.ts +73 -0
  185. package/dist/cjs/timeframe/index.d.ts.map +1 -0
  186. package/dist/cjs/timeframe/index.js +85 -0
  187. package/dist/cjs/timeframe/index.js.map +7 -0
  188. package/dist/cjs/types/index.d.ts +343 -0
  189. package/dist/cjs/types/index.d.ts.map +1 -0
  190. package/dist/cjs/types/index.js +32 -0
  191. package/dist/cjs/types/index.js.map +7 -0
  192. package/dist/cjs/types/metadata.d.ts +300 -0
  193. package/dist/cjs/types/metadata.d.ts.map +1 -0
  194. package/dist/cjs/types/metadata.js +17 -0
  195. package/dist/cjs/types/metadata.js.map +7 -0
  196. package/dist/cjs/utils/index.d.ts +167 -0
  197. package/dist/cjs/utils/index.d.ts.map +1 -0
  198. package/dist/cjs/utils/index.js +209 -0
  199. package/dist/cjs/utils/index.js.map +7 -0
  200. package/dist/esm/array/index.d.ts +701 -0
  201. package/dist/esm/array/index.d.ts.map +1 -0
  202. package/dist/esm/array/index.js +983 -0
  203. package/dist/esm/array/index.js.map +1 -0
  204. package/dist/esm/box/index.d.ts +444 -0
  205. package/dist/esm/box/index.d.ts.map +1 -0
  206. package/dist/esm/box/index.js +602 -0
  207. package/dist/esm/box/index.js.map +1 -0
  208. package/dist/esm/callsite/index.d.ts +61 -0
  209. package/dist/esm/callsite/index.d.ts.map +1 -0
  210. package/dist/esm/callsite/index.js +97 -0
  211. package/dist/esm/callsite/index.js.map +1 -0
  212. package/dist/esm/chartpoint/index.d.ts +90 -0
  213. package/dist/esm/chartpoint/index.d.ts.map +1 -0
  214. package/dist/esm/chartpoint/index.js +113 -0
  215. package/dist/esm/chartpoint/index.js.map +1 -0
  216. package/dist/esm/color/index.d.ts +285 -0
  217. package/dist/esm/color/index.d.ts.map +1 -0
  218. package/dist/esm/color/index.js +373 -0
  219. package/dist/esm/color/index.js.map +1 -0
  220. package/dist/esm/compare/index.d.ts +26 -0
  221. package/dist/esm/compare/index.d.ts.map +1 -0
  222. package/dist/esm/compare/index.js +39 -0
  223. package/dist/esm/compare/index.js.map +1 -0
  224. package/dist/esm/drawing/registry.d.ts +42 -0
  225. package/dist/esm/drawing/registry.d.ts.map +1 -0
  226. package/dist/esm/drawing/registry.js +89 -0
  227. package/dist/esm/drawing/registry.js.map +1 -0
  228. package/dist/esm/index.d.ts +85 -0
  229. package/dist/esm/index.d.ts.map +1 -0
  230. package/dist/esm/index.js +96 -0
  231. package/dist/esm/index.js.map +1 -0
  232. package/dist/esm/indicator.d.ts +117 -0
  233. package/dist/esm/indicator.d.ts.map +1 -0
  234. package/dist/esm/indicator.js +84 -0
  235. package/dist/esm/indicator.js.map +1 -0
  236. package/dist/esm/input.d.ts +196 -0
  237. package/dist/esm/input.d.ts.map +1 -0
  238. package/dist/esm/input.js +183 -0
  239. package/dist/esm/input.js.map +1 -0
  240. package/dist/esm/label/index.d.ts +303 -0
  241. package/dist/esm/label/index.d.ts.map +1 -0
  242. package/dist/esm/label/index.js +417 -0
  243. package/dist/esm/label/index.js.map +1 -0
  244. package/dist/esm/lib/index.d.ts +8 -0
  245. package/dist/esm/lib/index.d.ts.map +1 -0
  246. package/dist/esm/lib/index.js +8 -0
  247. package/dist/esm/lib/index.js.map +1 -0
  248. package/dist/esm/lib/zigzag/index.d.ts +5 -0
  249. package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
  250. package/dist/esm/lib/zigzag/index.js +5 -0
  251. package/dist/esm/lib/zigzag/index.js.map +1 -0
  252. package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
  253. package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
  254. package/dist/esm/lib/zigzag/zigzag.js +229 -0
  255. package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
  256. package/dist/esm/line/index.d.ts +342 -0
  257. package/dist/esm/line/index.d.ts.map +1 -0
  258. package/dist/esm/line/index.js +470 -0
  259. package/dist/esm/line/index.js.map +1 -0
  260. package/dist/esm/linefill/index.d.ts +124 -0
  261. package/dist/esm/linefill/index.d.ts.map +1 -0
  262. package/dist/esm/linefill/index.js +144 -0
  263. package/dist/esm/linefill/index.js.map +1 -0
  264. package/dist/esm/map/index.d.ts +69 -0
  265. package/dist/esm/map/index.d.ts.map +1 -0
  266. package/dist/esm/map/index.js +106 -0
  267. package/dist/esm/map/index.js.map +1 -0
  268. package/dist/esm/math/index.d.ts +560 -0
  269. package/dist/esm/math/index.d.ts.map +1 -0
  270. package/dist/esm/math/index.js +495 -0
  271. package/dist/esm/math/index.js.map +1 -0
  272. package/dist/esm/matrix/index.d.ts +1231 -0
  273. package/dist/esm/matrix/index.d.ts.map +1 -0
  274. package/dist/esm/matrix/index.js +2450 -0
  275. package/dist/esm/matrix/index.js.map +1 -0
  276. package/dist/esm/plot.d.ts +76 -0
  277. package/dist/esm/plot.d.ts.map +1 -0
  278. package/dist/esm/plot.js +63 -0
  279. package/dist/esm/plot.js.map +1 -0
  280. package/dist/esm/polyline/index.d.ts +115 -0
  281. package/dist/esm/polyline/index.d.ts.map +1 -0
  282. package/dist/esm/polyline/index.js +157 -0
  283. package/dist/esm/polyline/index.js.map +1 -0
  284. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  285. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  286. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
  287. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
  288. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  289. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  290. package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
  291. package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
  292. package/dist/esm/runtime/index.d.ts +13 -0
  293. package/dist/esm/runtime/index.d.ts.map +1 -0
  294. package/dist/esm/runtime/index.js +14 -0
  295. package/dist/esm/runtime/index.js.map +1 -0
  296. package/dist/esm/runtime/inputs.d.ts +91 -0
  297. package/dist/esm/runtime/inputs.d.ts.map +1 -0
  298. package/dist/esm/runtime/inputs.js +334 -0
  299. package/dist/esm/runtime/inputs.js.map +1 -0
  300. package/dist/esm/runtime/runtime.d.ts +70 -0
  301. package/dist/esm/runtime/runtime.d.ts.map +1 -0
  302. package/dist/esm/runtime/runtime.js +193 -0
  303. package/dist/esm/runtime/runtime.js.map +1 -0
  304. package/dist/esm/runtime/series.d.ts +362 -0
  305. package/dist/esm/runtime/series.d.ts.map +1 -0
  306. package/dist/esm/runtime/series.js +583 -0
  307. package/dist/esm/runtime/series.js.map +1 -0
  308. package/dist/esm/runtime/types.d.ts +282 -0
  309. package/dist/esm/runtime/types.d.ts.map +1 -0
  310. package/dist/esm/runtime/types.js +7 -0
  311. package/dist/esm/runtime/types.js.map +1 -0
  312. package/dist/esm/script/index.d.ts +987 -0
  313. package/dist/esm/script/index.d.ts.map +1 -0
  314. package/dist/esm/script/index.js +1289 -0
  315. package/dist/esm/script/index.js.map +1 -0
  316. package/dist/esm/security/resample.d.ts +63 -0
  317. package/dist/esm/security/resample.d.ts.map +1 -0
  318. package/dist/esm/security/resample.js +110 -0
  319. package/dist/esm/security/resample.js.map +1 -0
  320. package/dist/esm/session/bars.d.ts +80 -0
  321. package/dist/esm/session/bars.d.ts.map +1 -0
  322. package/dist/esm/session/bars.js +232 -0
  323. package/dist/esm/session/bars.js.map +1 -0
  324. package/dist/esm/session/calendar.d.ts +70 -0
  325. package/dist/esm/session/calendar.d.ts.map +1 -0
  326. package/dist/esm/session/calendar.js +172 -0
  327. package/dist/esm/session/calendar.js.map +1 -0
  328. package/dist/esm/str/dateformat.d.ts +15 -0
  329. package/dist/esm/str/dateformat.d.ts.map +1 -0
  330. package/dist/esm/str/dateformat.js +136 -0
  331. package/dist/esm/str/dateformat.js.map +1 -0
  332. package/dist/esm/str/index.d.ts +459 -0
  333. package/dist/esm/str/index.d.ts.map +1 -0
  334. package/dist/esm/str/index.js +540 -0
  335. package/dist/esm/str/index.js.map +1 -0
  336. package/dist/esm/str/messageformat.d.ts +14 -0
  337. package/dist/esm/str/messageformat.d.ts.map +1 -0
  338. package/dist/esm/str/messageformat.js +111 -0
  339. package/dist/esm/str/messageformat.js.map +1 -0
  340. package/dist/esm/str/numberformat.d.ts +19 -0
  341. package/dist/esm/str/numberformat.d.ts.map +1 -0
  342. package/dist/esm/str/numberformat.js +189 -0
  343. package/dist/esm/str/numberformat.js.map +1 -0
  344. package/dist/esm/strategy/index.d.ts +245 -0
  345. package/dist/esm/strategy/index.d.ts.map +1 -0
  346. package/dist/esm/strategy/index.js +84 -0
  347. package/dist/esm/strategy/index.js.map +1 -0
  348. package/dist/esm/ta/index.d.ts +1397 -0
  349. package/dist/esm/ta/index.d.ts.map +1 -0
  350. package/dist/esm/ta/index.js +3227 -0
  351. package/dist/esm/ta/index.js.map +1 -0
  352. package/dist/esm/ta/running-sum.d.ts +30 -0
  353. package/dist/esm/ta/running-sum.d.ts.map +1 -0
  354. package/dist/esm/ta/running-sum.js +113 -0
  355. package/dist/esm/ta/running-sum.js.map +1 -0
  356. package/dist/esm/ta-series.d.ts +558 -0
  357. package/dist/esm/ta-series.d.ts.map +1 -0
  358. package/dist/esm/ta-series.js +910 -0
  359. package/dist/esm/ta-series.js.map +1 -0
  360. package/dist/esm/text/index.d.ts +14 -0
  361. package/dist/esm/text/index.d.ts.map +1 -0
  362. package/dist/esm/text/index.js +14 -0
  363. package/dist/esm/text/index.js.map +1 -0
  364. package/dist/esm/time/datestring.d.ts +23 -0
  365. package/dist/esm/time/datestring.d.ts.map +1 -0
  366. package/dist/esm/time/datestring.js +94 -0
  367. package/dist/esm/time/datestring.js.map +1 -0
  368. package/dist/esm/time/index.d.ts +89 -0
  369. package/dist/esm/time/index.d.ts.map +1 -0
  370. package/dist/esm/time/index.js +108 -0
  371. package/dist/esm/time/index.js.map +1 -0
  372. package/dist/esm/time/session.d.ts +17 -0
  373. package/dist/esm/time/session.d.ts.map +1 -0
  374. package/dist/esm/time/session.js +69 -0
  375. package/dist/esm/time/session.js.map +1 -0
  376. package/dist/esm/time/timezone.d.ts +40 -0
  377. package/dist/esm/time/timezone.d.ts.map +1 -0
  378. package/dist/esm/time/timezone.js +144 -0
  379. package/dist/esm/time/timezone.js.map +1 -0
  380. package/dist/esm/timeframe/index.d.ts +73 -0
  381. package/dist/esm/timeframe/index.d.ts.map +1 -0
  382. package/dist/esm/timeframe/index.js +131 -0
  383. package/dist/esm/timeframe/index.js.map +1 -0
  384. package/dist/esm/types/index.d.ts +343 -0
  385. package/dist/esm/types/index.d.ts.map +1 -0
  386. package/dist/esm/types/index.js +17 -0
  387. package/dist/esm/types/index.js.map +1 -0
  388. package/dist/esm/types/metadata.d.ts +300 -0
  389. package/dist/esm/types/metadata.d.ts.map +1 -0
  390. package/dist/esm/types/metadata.js +7 -0
  391. package/dist/esm/types/metadata.js.map +1 -0
  392. package/dist/esm/utils/index.d.ts +167 -0
  393. package/dist/esm/utils/index.d.ts.map +1 -0
  394. package/dist/esm/utils/index.js +295 -0
  395. package/dist/esm/utils/index.js.map +1 -0
  396. package/package.json +53 -23
  397. package/src/array/index.ts +1056 -0
  398. package/src/box/index.ts +680 -0
  399. package/src/callsite/index.ts +104 -0
  400. package/src/chartpoint/index.ts +126 -0
  401. package/src/color/index.ts +411 -0
  402. package/src/compare/index.ts +46 -0
  403. package/src/drawing/registry.ts +106 -0
  404. package/src/index.ts +201 -0
  405. package/src/indicator.ts +185 -0
  406. package/src/input.ts +280 -0
  407. package/src/label/index.ts +490 -0
  408. package/src/lib/index.ts +8 -0
  409. package/src/lib/zigzag/index.ts +13 -0
  410. package/src/lib/zigzag/zigzag.ts +318 -0
  411. package/src/line/index.ts +530 -0
  412. package/src/linefill/index.ts +152 -0
  413. package/src/map/index.ts +115 -0
  414. package/src/math/index.ts +1071 -0
  415. package/src/matrix/index.ts +2697 -0
  416. package/src/plot.ts +121 -0
  417. package/src/polyline/index.ts +184 -0
  418. package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
  419. package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
  420. package/src/runtime/index.ts +52 -0
  421. package/src/runtime/inputs.ts +377 -0
  422. package/src/runtime/runtime.ts +241 -0
  423. package/src/runtime/series.ts +644 -0
  424. package/src/runtime/types.ts +292 -0
  425. package/src/script/index.ts +1865 -0
  426. package/src/security/resample.ts +119 -0
  427. package/src/session/bars.ts +262 -0
  428. package/src/session/calendar.ts +199 -0
  429. package/src/str/dateformat.ts +104 -0
  430. package/src/str/index.ts +557 -0
  431. package/src/str/messageformat.ts +109 -0
  432. package/src/str/numberformat.ts +197 -0
  433. package/src/strategy/index.ts +281 -0
  434. package/src/ta/index.ts +3580 -0
  435. package/src/ta/running-sum.ts +117 -0
  436. package/src/ta-series.ts +1036 -0
  437. package/src/text/index.ts +14 -0
  438. package/src/time/datestring.ts +96 -0
  439. package/src/time/index.ts +161 -0
  440. package/src/time/session.ts +79 -0
  441. package/src/time/timezone.ts +180 -0
  442. package/src/timeframe/index.ts +144 -0
  443. package/src/types/index.ts +398 -0
  444. package/src/types/metadata.ts +334 -0
  445. package/src/utils/index.ts +334 -0
  446. package/dist/array/index.d.ts +0 -57
  447. package/dist/array/index.d.ts.map +0 -1
  448. package/dist/box/index.d.ts +0 -37
  449. package/dist/box/index.d.ts.map +0 -1
  450. package/dist/callsite/index.d.ts +0 -7
  451. package/dist/callsite/index.d.ts.map +0 -1
  452. package/dist/chartpoint/index.d.ts +0 -8
  453. package/dist/chartpoint/index.d.ts.map +0 -1
  454. package/dist/color/index.d.ts +0 -28
  455. package/dist/color/index.d.ts.map +0 -1
  456. package/dist/compare/index.d.ts +0 -8
  457. package/dist/compare/index.d.ts.map +0 -1
  458. package/dist/drawing/registry.d.ts +0 -19
  459. package/dist/drawing/registry.d.ts.map +0 -1
  460. package/dist/index.cjs +0 -7979
  461. package/dist/index.d.ts +0 -64
  462. package/dist/index.d.ts.map +0 -1
  463. package/dist/index.mjs +0 -7962
  464. package/dist/indicator.d.ts +0 -42
  465. package/dist/indicator.d.ts.map +0 -1
  466. package/dist/input.d.ts +0 -47
  467. package/dist/input.d.ts.map +0 -1
  468. package/dist/label/index.d.ts +0 -30
  469. package/dist/label/index.d.ts.map +0 -1
  470. package/dist/lib/index.d.ts +0 -2
  471. package/dist/lib/index.d.ts.map +0 -1
  472. package/dist/lib/zigzag/index.d.ts.map +0 -1
  473. package/dist/lib/zigzag/zigzag.d.ts +0 -47
  474. package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
  475. package/dist/line/index.d.ts +0 -30
  476. package/dist/line/index.d.ts.map +0 -1
  477. package/dist/linefill/index.d.ts +0 -10
  478. package/dist/linefill/index.d.ts.map +0 -1
  479. package/dist/map/index.d.ts +0 -14
  480. package/dist/map/index.d.ts.map +0 -1
  481. package/dist/math/index.d.ts +0 -53
  482. package/dist/math/index.d.ts.map +0 -1
  483. package/dist/matrix/index.d.ts +0 -52
  484. package/dist/matrix/index.d.ts.map +0 -1
  485. package/dist/plot.d.ts +0 -20
  486. package/dist/plot.d.ts.map +0 -1
  487. package/dist/polyline/index.d.ts +0 -11
  488. package/dist/polyline/index.d.ts.map +0 -1
  489. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
  490. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
  491. package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
  492. package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
  493. package/dist/runtime/index.cjs +0 -600
  494. package/dist/runtime/index.d.ts.map +0 -1
  495. package/dist/runtime/index.mjs +0 -577
  496. package/dist/runtime/inputs.d.ts +0 -13
  497. package/dist/runtime/inputs.d.ts.map +0 -1
  498. package/dist/runtime/runtime.d.ts +0 -16
  499. package/dist/runtime/runtime.d.ts.map +0 -1
  500. package/dist/runtime/series.d.ts +0 -60
  501. package/dist/runtime/series.d.ts.map +0 -1
  502. package/dist/runtime/types.d.ts +0 -122
  503. package/dist/runtime/types.d.ts.map +0 -1
  504. package/dist/script/index.cjs +0 -6372
  505. package/dist/script/index.d.ts +0 -709
  506. package/dist/script/index.d.ts.map +0 -1
  507. package/dist/script/index.mjs +0 -6355
  508. package/dist/security/resample.d.ts +0 -13
  509. package/dist/security/resample.d.ts.map +0 -1
  510. package/dist/session/bars.d.ts +0 -34
  511. package/dist/session/bars.d.ts.map +0 -1
  512. package/dist/session/calendar.d.ts +0 -31
  513. package/dist/session/calendar.d.ts.map +0 -1
  514. package/dist/str/dateformat.d.ts +0 -2
  515. package/dist/str/dateformat.d.ts.map +0 -1
  516. package/dist/str/index.d.ts +0 -24
  517. package/dist/str/index.d.ts.map +0 -1
  518. package/dist/str/messageformat.d.ts +0 -2
  519. package/dist/str/messageformat.d.ts.map +0 -1
  520. package/dist/str/numberformat.d.ts +0 -3
  521. package/dist/str/numberformat.d.ts.map +0 -1
  522. package/dist/strategy/index.d.ts.map +0 -1
  523. package/dist/ta/index.d.ts +0 -72
  524. package/dist/ta/index.d.ts.map +0 -1
  525. package/dist/ta-series.d.ts +0 -143
  526. package/dist/ta-series.d.ts.map +0 -1
  527. package/dist/text/index.d.ts +0 -4
  528. package/dist/text/index.d.ts.map +0 -1
  529. package/dist/time/datestring.d.ts +0 -2
  530. package/dist/time/datestring.d.ts.map +0 -1
  531. package/dist/time/index.d.ts +0 -15
  532. package/dist/time/index.d.ts.map +0 -1
  533. package/dist/time/session.d.ts +0 -2
  534. package/dist/time/session.d.ts.map +0 -1
  535. package/dist/time/timezone.d.ts +0 -13
  536. package/dist/time/timezone.d.ts.map +0 -1
  537. package/dist/timeframe/index.d.ts +0 -17
  538. package/dist/timeframe/index.d.ts.map +0 -1
  539. package/dist/types/index.d.ts +0 -181
  540. package/dist/types/index.d.ts.map +0 -1
  541. package/dist/types/metadata.d.ts +0 -131
  542. package/dist/types/metadata.d.ts.map +0 -1
  543. package/dist/utils/index.d.ts +0 -26
  544. package/dist/utils/index.d.ts.map +0 -1
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @fileoverview Per-call history of ta.* functions called in a conditional block.
3
+ *
4
+ * In PineScript, every ta.* call keeps its own history of the values it receives. A call inside
5
+ * an `if` block receives values only on the bars where the block runs, so its history skips the
6
+ * other bars: `ta.crossover(a, b)` is false on the first bar the block runs, and `ta.sma(x, 3)`
7
+ * averages the last 3 values it received, not the last 3 bars.
8
+ *
9
+ * - {@link whenCalled}: vectorized, when the bars of the calls are known in advance.
10
+ * - {@link crossover} / {@link crossunder} / {@link cross} / {@link barssince}: one stateful call site for bar
11
+ * loops, called only on the bars where the Pine call runs.
12
+ *
13
+ * Since PineScript v6, `and` / `or` are lazy: the right operand runs only when the left operand does not decide
14
+ * the result. A ta.* call in the right operand of `a or b` runs on the bars where `a` is false, in `a and b` on the
15
+ * bars where `a` is true, so it needs a call site too:
16
+ *
17
+ * ```typescript
18
+ * // Pine: longCond = longUp or (src > sig and ta.barssince(longUp) <= lookback)
19
+ * const since = callsite.whenCalled(longUp.map((u, i) => !u && src[i] > sig[i]), (c) => taCore.barssince(c.map(Boolean)), longUp);
20
+ * // ta.barssince(longUp) only runs where longUp is false: it never sees true and stays na
21
+ * ```
22
+ *
23
+ * ```typescript
24
+ * // Pine: if inRange
25
+ * // buy = ta.crossover(cumRsi, 60)
26
+ * const buy = callsite.whenCalled(inRange, (a) => taCore.crossover(a, a.map(() => 60)), cumRsi);
27
+ *
28
+ * // Same call in a bar loop
29
+ * const buyCross = callsite.crossover();
30
+ * for (let i = 0; i < n; i++) {
31
+ * if (inRange[i]) {
32
+ * const buy = buyCross(cumRsi[i], 60);
33
+ * }
34
+ * }
35
+ * ```
36
+ *
37
+ * @module callsite
38
+ */
39
+
40
+ import type { Source } from '../types/index.js';
41
+
42
+ /**
43
+ * Runs `fn` on the bars where `called` is true only, like a ta.* call inside an `if` block.
44
+ * `fn` receives the values of `sources` on those bars, in order; its results are placed back on
45
+ * the same bars. The other bars get na (NaN).
46
+ *
47
+ * @param called - true (or non-zero) on the bars where the call runs
48
+ * @param fn - the calculation, for example `(x) => taCore.sma(x, 3)`
49
+ * @param sources - the arguments of the call, one value per chart bar
50
+ */
51
+ export function whenCalled<T extends number | boolean>(
52
+ called: ArrayLike<boolean | number>,
53
+ fn: (...values: number[][]) => ArrayLike<T>,
54
+ ...sources: Source[]
55
+ ): Array<T | number> {
56
+ const bars: number[] = [];
57
+ for (let i = 0; i < called.length; i++) if (called[i]) bars.push(i);
58
+ const result = fn(...sources.map(s => bars.map(i => s[i] ?? NaN)));
59
+ const out = new Array<T | number>(called.length).fill(NaN);
60
+ bars.forEach((bar, k) => {
61
+ out[bar] = result[k]!;
62
+ });
63
+ return out;
64
+ }
65
+
66
+ /** A call site that keeps the two previous arguments (na before the first call). */
67
+ function twoSeriesSite(test: (a: number, b: number, prevA: number, prevB: number) => boolean) {
68
+ let prevA = NaN;
69
+ let prevB = NaN;
70
+ return (a: number, b: number): boolean => {
71
+ const result = test(a, b, prevA, prevB);
72
+ prevA = a;
73
+ prevB = b;
74
+ return result;
75
+ };
76
+ }
77
+
78
+ /** One `ta.crossover(a, b)` call site: false on its first call, as its history is na. */
79
+ export function crossover(): (a: number, b: number) => boolean {
80
+ return twoSeriesSite((a, b, pa, pb) => a > b && pa <= pb);
81
+ }
82
+
83
+ /** One `ta.crossunder(a, b)` call site: false on its first call, as its history is na. */
84
+ export function crossunder(): (a: number, b: number) => boolean {
85
+ return twoSeriesSite((a, b, pa, pb) => a < b && pa >= pb);
86
+ }
87
+
88
+ /**
89
+ * One `ta.barssince(condition)` call site: the number of calls since the condition was true on a call (0 on that
90
+ * call), na before the first true condition. An na condition counts as false.
91
+ */
92
+ export function barssince(): (condition: boolean | number) => number {
93
+ let count = NaN;
94
+ return (condition) => {
95
+ if (condition && !Number.isNaN(condition)) count = 0;
96
+ else if (!Number.isNaN(count)) count++;
97
+ return count;
98
+ };
99
+ }
100
+
101
+ /** One `ta.cross(a, b)` call site: false on its first call, as its history is na. */
102
+ export function cross(): (a: number, b: number) => boolean {
103
+ return twoSeriesSite((a, b, pa, pb) => (a > b && pa <= pb) || (a < b && pa >= pb));
104
+ }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Chart Point namespace
3
+ * Functions for creating and manipulating chart point objects.
4
+ *
5
+ * @remarks
6
+ * Chart points represent specific locations on a chart with time, index, and price coordinates.
7
+ * They are primarily used with polylines and other drawing objects that require multiple points.
8
+ *
9
+ * @version 6
10
+ */
11
+
12
+ import type { ChartPoint } from '../types/index.js';
13
+
14
+ // Re-export the ChartPoint type for convenience
15
+ export type { ChartPoint };
16
+
17
+ /**
18
+ * Creates a new chart point with all coordinates.
19
+ *
20
+ * @param time - UNIX timestamp in milliseconds (or null if using bar index)
21
+ * @param index - Bar index (or null if using time)
22
+ * @param price - Y-axis price value
23
+ * @returns New ChartPoint object
24
+ *
25
+ * @remarks
26
+ * Creates a chart point that can be used with polylines and other multi-point drawing objects.
27
+ * Typically, you would provide either time or index, not both, depending on the xloc mode.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Create a point with both time and index
32
+ * const point = chartPoint.new(1609459200000, 100, 150.5);
33
+ *
34
+ * // Create a point with only index
35
+ * const indexPoint = chartPoint.new(null, 50, 200);
36
+ *
37
+ * // Create a point with only time
38
+ * const timePoint = chartPoint.new(1609459200000, null, 175);
39
+ * ```
40
+ */
41
+ export function new_point(
42
+ time: number | null,
43
+ index: number | null,
44
+ price: number
45
+ ): ChartPoint {
46
+ return {
47
+ time,
48
+ index,
49
+ price,
50
+ };
51
+ }
52
+
53
+ /**
54
+ * Creates a chart point from time and price.
55
+ *
56
+ * @param time - UNIX timestamp in milliseconds
57
+ * @param price - Y-axis price value
58
+ * @returns New ChartPoint object with index set to null
59
+ *
60
+ * @remarks
61
+ * Convenience function for creating points when using xloc.bar_time mode.
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * // Create a point using timestamp
66
+ * const point = chartPoint.from_time(1609459200000, 150.5);
67
+ * ```
68
+ */
69
+ export function from_time(time: number, price: number): ChartPoint {
70
+ return {
71
+ time,
72
+ index: null,
73
+ price,
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Creates a chart point from bar index and price.
79
+ *
80
+ * @param index - Bar index
81
+ * @param price - Y-axis price value
82
+ * @returns New ChartPoint object with time set to null
83
+ *
84
+ * @remarks
85
+ * Convenience function for creating points when using xloc.bar_index mode.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * // Create a point using bar index
90
+ * const point = chartPoint.from_index(50, 150.5);
91
+ * ```
92
+ */
93
+ export function from_index(index: number, price: number): ChartPoint {
94
+ return {
95
+ time: null,
96
+ index,
97
+ price,
98
+ };
99
+ }
100
+
101
+ /**
102
+ * Creates a copy of a chart point.
103
+ *
104
+ * @param point - ChartPoint to copy
105
+ * @returns New ChartPoint object with same values
106
+ *
107
+ * @remarks
108
+ * Creates a shallow copy of the chart point. Since ChartPoint is immutable (readonly properties),
109
+ * this creates an independent copy.
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const original = chartPoint.from_index(10, 100);
114
+ * const copied = chartPoint.copy(original);
115
+ * ```
116
+ */
117
+ export function copy(point: ChartPoint): ChartPoint {
118
+ return {
119
+ time: point.time,
120
+ index: point.index,
121
+ price: point.price,
122
+ };
123
+ }
124
+
125
+ // Alias to match PineScript API (chart.point.new)
126
+ export { new_point as new };
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Color namespace
3
+ * Mirrors PineScript's color.* functions for color creation and manipulation.
4
+ *
5
+ * @remarks
6
+ * All color functions in this namespace follow PineScript v6 API specifications.
7
+ * Colors are represented as RGB or RGBA strings.
8
+ * Transparency values range from 0 (fully opaque) to 100 (fully transparent).
9
+ *
10
+ * @version 6
11
+ */
12
+
13
+ import type { color, int, float, simple_int, simple_float } from '../types/index.js';
14
+
15
+ /** Channel of color.rgb: na is 0, a fraction is truncated. */
16
+ const channel = (v: number): int =>
17
+ v === null || v === undefined || Number.isNaN(v) ? 0 : Math.max(0, Math.min(255, Math.trunc(v)));
18
+
19
+ /** Alpha (0-1) of a transparency given to color.rgb / color.new: na is fully transparent, clamped to 0..100. */
20
+ const alphaOf = (transp: number): float =>
21
+ transp === null || Number.isNaN(transp) ? 0 : 1 - Math.max(0, Math.min(100, transp)) / 100;
22
+
23
+ /**
24
+ * Creates a color from RGB values with optional transparency.
25
+ *
26
+ * @param red - Red component (0-255, values are clamped)
27
+ * @param green - Green component (0-255, values are clamped)
28
+ * @param blue - Blue component (0-255, values are clamped)
29
+ * @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
30
+ * @returns Color string in rgb() or rgba() format
31
+ *
32
+ * @remarks
33
+ * - RGB values are automatically clamped to the 0-255 range
34
+ * - Transparency of 0 or omitted results in rgb() format
35
+ * - Transparency > 0 results in rgba() format
36
+ * - Transparency is converted to alpha channel (0-1 range)
37
+ *
38
+ * PineScript rules:
39
+ * - an `na` channel is 0; a fractional channel is truncated (127.6 is 127)
40
+ * - the transparency is clamped to 0..100 (140 is fully transparent, -5 is opaque); an `na` transparency is fully
41
+ * transparent
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * color.rgb(255, 0, 0) // Returns: "rgb(255, 0, 0)" - Red
46
+ * color.rgb(0, 255, 0, 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
47
+ * color.rgb(300, 0, 0) // Returns: "rgb(255, 0, 0)" - Clamped to 255
48
+ * ```
49
+ */
50
+ export function rgb(red: simple_int, green: simple_int, blue: simple_int, transp?: simple_float): string {
51
+ const r = channel(red);
52
+ const g = channel(green);
53
+ const b = channel(blue);
54
+ const a = transp !== undefined ? alphaOf(transp) : 1;
55
+
56
+ if (a === 1) {
57
+ return `rgb(${r}, ${g}, ${b})`;
58
+ }
59
+ return `rgba(${r}, ${g}, ${b}, ${a})`;
60
+ }
61
+
62
+ /**
63
+ * Creates a color from a hexadecimal string with optional transparency.
64
+ *
65
+ * @param hex - Hex color string (with or without '#' prefix, e.g., "#FF0000" or "FF0000")
66
+ * @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
67
+ * @returns Color string in rgb() or rgba() format
68
+ *
69
+ * @remarks
70
+ * - Accepts hex strings with or without '#' prefix
71
+ * - Case-insensitive (accepts both "FF0000" and "ff0000")
72
+ * - Must be 6 characters (excluding '#')
73
+ * - Format: RRGGBB where each component is 00-FF
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * color.from_hex("#FF0000") // Returns: "rgb(255, 0, 0)" - Red
78
+ * color.from_hex("00FF00", 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
79
+ * color.from_hex("#0000FF") // Returns: "rgb(0, 0, 255)" - Blue
80
+ * color.from_hex("FFA500") // Returns: "rgb(255, 165, 0)" - Orange
81
+ * ```
82
+ */
83
+ export function from_hex(hex: string, transp?: simple_float): string {
84
+ // Remove # if present
85
+ hex = hex.replace('#', '');
86
+
87
+ const r = parseInt(hex.substring(0, 2), 16);
88
+ const g = parseInt(hex.substring(2, 4), 16);
89
+ const b = parseInt(hex.substring(4, 6), 16);
90
+
91
+ return rgb(r, g, b, transp);
92
+ }
93
+
94
+ /**
95
+ * Creates a new color with modified transparency, preserving RGB components.
96
+ *
97
+ * @param baseColor - The base color to modify
98
+ * @param transp - New transparency value (0-100). 0 = opaque, 100 = fully transparent
99
+ * @returns New color with updated transparency
100
+ *
101
+ * @remarks
102
+ * - Preserves the RGB values from the base color
103
+ * - Replaces the transparency with the new value
104
+ * - Useful for creating semi-transparent versions of existing colors
105
+ * - PineScript clamps the transparency to 0..100 (`color.new(c, 140)` is fully transparent, `color.new(c, -5)` is
106
+ * opaque); an `na` transparency is fully transparent
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const red = color.rgb(255, 0, 0)
111
+ * color.new_color(red, 50) // Returns: "rgba(255, 0, 0, 0.5)" - Semi-transparent red
112
+ * color.new_color(red, 0) // Returns: "rgb(255, 0, 0)" - Fully opaque
113
+ * color.new_color(red, 100) // Returns: "rgba(255, 0, 0, 0)" - Fully transparent
114
+ * ```
115
+ */
116
+ export function new_color(baseColor: color, transp: simple_float): string {
117
+ // Parse the color and apply transparency
118
+ const rgba = parseColor(baseColor);
119
+ return rgb(rgba.r, rgba.g, rgba.b, transp);
120
+ }
121
+
122
+ /**
123
+ * Extracts the red component from a color.
124
+ *
125
+ * @param clr - The color to extract from
126
+ * @returns Red component value (0-255)
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * color.r(color.rgb(255, 128, 64)) // Returns: 255
131
+ * color.r(color.from_hex("#FF0000")) // Returns: 255
132
+ * color.r(color.from_hex("#FFA500")) // Returns: 255 (orange)
133
+ * ```
134
+ */
135
+ export function r(clr: color): int {
136
+ return parseColor(clr).r;
137
+ }
138
+
139
+ /**
140
+ * Extracts the green component from a color.
141
+ *
142
+ * @param clr - The color to extract from
143
+ * @returns Green component value (0-255)
144
+ *
145
+ * @example
146
+ * ```typescript
147
+ * color.g(color.rgb(255, 128, 64)) // Returns: 128
148
+ * color.g(color.from_hex("#00FF00")) // Returns: 255
149
+ * color.g(color.from_hex("#FFA500")) // Returns: 165 (orange)
150
+ * ```
151
+ */
152
+ export function g(clr: color): int {
153
+ return parseColor(clr).g;
154
+ }
155
+
156
+ /**
157
+ * Extracts the blue component from a color.
158
+ *
159
+ * @param clr - The color to extract from
160
+ * @returns Blue component value (0-255)
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * color.b(color.rgb(255, 128, 64)) // Returns: 64
165
+ * color.b(color.from_hex("#0000FF")) // Returns: 255
166
+ * color.b(color.from_hex("#FFA500")) // Returns: 0 (orange)
167
+ * ```
168
+ */
169
+ export function b(clr: color): int {
170
+ return parseColor(clr).b;
171
+ }
172
+
173
+ /**
174
+ * Extracts the transparency component from a color.
175
+ *
176
+ * @param clr - The color to extract from
177
+ * @returns Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
178
+ *
179
+ * @remarks
180
+ * - Returns 0 for colors without transparency (rgb format)
181
+ * - Converts alpha channel (0-1) to transparency (0-100)
182
+ * - PineScript stores the alpha as a byte (0-255) and returns an integer transparency:
183
+ * `color.t(color.new(c, 33.3))` is 33
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * color.t(color.rgb(255, 0, 0)) // Returns: 0 (opaque)
188
+ * color.t(color.rgb(255, 0, 0, 50)) // Returns: 50
189
+ * color.t(color.rgb(255, 0, 0, 100)) // Returns: 100 (fully transparent)
190
+ * ```
191
+ */
192
+ export function t(clr: color): float {
193
+ const alpha = Math.round((1 - parseColor(clr).t / 100) * 255);
194
+ return Math.round((1 - alpha / 255) * 100);
195
+ }
196
+
197
+ /**
198
+ * Helper function to parse color string to RGBA components.
199
+ *
200
+ * @internal
201
+ * @param clr - The color string to parse
202
+ * @returns Object containing r, g, b (0-255) and t (0-100) components
203
+ */
204
+ function parseColor(clr: color): { r: int; g: int; b: int; t: float } {
205
+ if (typeof clr === 'string') {
206
+ // Hex: #RRGGBB, #RRGGBBAA (PineScript literals), #RGB, #RGBA
207
+ const hex = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(clr.trim());
208
+ if (hex) {
209
+ let digits = hex[1]!;
210
+ if (digits.length <= 4) digits = [...digits].map((c) => c + c).join('');
211
+ const byte = (k: number) => parseInt(digits.slice(k, k + 2), 16);
212
+ return { r: byte(0), g: byte(2), b: byte(4), t: digits.length === 8 ? (1 - byte(6) / 255) * 100 : 0 };
213
+ }
214
+ // Handle rgb() or rgba() format
215
+ const match = clr.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
216
+ if (match) {
217
+ return {
218
+ r: parseInt(match[1]!),
219
+ g: parseInt(match[2]!),
220
+ b: parseInt(match[3]!),
221
+ t: match[4] ? (1 - parseFloat(match[4])) * 100 : 0,
222
+ };
223
+ }
224
+ }
225
+ return { r: 0, g: 0, b: 0, t: 0 };
226
+ }
227
+
228
+ // Predefined color constants of PineScript v6.
229
+ // PineScript v5 differs for red (#FF5252), teal (#00897B) and yellow (#FFEB3B).
230
+ /**
231
+ * Aqua/Cyan color constant
232
+ * @constant {string} #00BCD4 - RGB(0, 188, 212)
233
+ */
234
+ export const aqua = '#00BCD4';
235
+
236
+ /**
237
+ * Black color constant
238
+ * @constant {string} #363A45 - RGB(54, 58, 69)
239
+ */
240
+ export const black = '#363A45';
241
+
242
+ /**
243
+ * Blue color constant
244
+ * @constant {string} #2962FF - RGB(41, 98, 255)
245
+ */
246
+ export const blue = '#2962FF';
247
+
248
+ /**
249
+ * Fuchsia/Magenta color constant
250
+ * @constant {string} #E040FB - RGB(224, 64, 251)
251
+ */
252
+ export const fuchsia = '#E040FB';
253
+
254
+ /**
255
+ * Gray color constant
256
+ * @constant {string} #787B86 - RGB(120, 123, 134)
257
+ */
258
+ export const gray = '#787B86';
259
+
260
+ /**
261
+ * Green color constant (same as lime)
262
+ * @constant {string} #4CAF50 - RGB(76, 175, 80)
263
+ */
264
+ export const green = '#4CAF50';
265
+
266
+ /**
267
+ * Lime color constant (same as green)
268
+ * @constant {string} #00E676 - RGB(0, 230, 118)
269
+ */
270
+ export const lime = '#00E676';
271
+
272
+ /**
273
+ * Maroon color constant
274
+ * @constant {string} #880E4F - RGB(136, 14, 79)
275
+ */
276
+ export const maroon = '#880E4F';
277
+
278
+ /**
279
+ * Navy color constant
280
+ * @constant {string} #311B92 - RGB(49, 27, 146)
281
+ */
282
+ export const navy = '#311B92';
283
+
284
+ /**
285
+ * Olive color constant
286
+ * @constant {string} #808000 - RGB(128, 128, 0)
287
+ */
288
+ export const olive = '#808000';
289
+
290
+ /**
291
+ * Orange color constant
292
+ * @constant {string} #FF9800 - RGB(255, 152, 0)
293
+ */
294
+ export const orange = '#FF9800';
295
+
296
+ /**
297
+ * Purple color constant
298
+ * @constant {string} #9C27B0 - RGB(156, 39, 176)
299
+ */
300
+ export const purple = '#9C27B0';
301
+
302
+ /**
303
+ * Red color constant
304
+ * @constant {string} #F23645 - RGB(242, 54, 69)
305
+ */
306
+ export const red = '#F23645';
307
+
308
+ /**
309
+ * Silver color constant
310
+ * @constant {string} #B2B5BE - RGB(178, 181, 190)
311
+ */
312
+ export const silver = '#B2B5BE';
313
+
314
+ /**
315
+ * Teal color constant
316
+ * @constant {string} #089981 - RGB(8, 153, 129)
317
+ */
318
+ export const teal = '#089981';
319
+
320
+ /**
321
+ * White color constant
322
+ * @constant {string} #FFFFFF - RGB(255, 255, 255)
323
+ */
324
+ export const white = '#FFFFFF';
325
+
326
+ /**
327
+ * Yellow color constant
328
+ * @constant {string} #FDD835 - RGB(253, 216, 53)
329
+ */
330
+ export const yellow = '#FDD835';
331
+
332
+ /**
333
+ * Creates a color from a gradient based on value position.
334
+ *
335
+ * @param value - Value to calculate position-dependent color
336
+ * @param bottom_value - Bottom position value corresponding to bottom_color
337
+ * @param top_value - Top position value corresponding to top_color
338
+ * @param bottom_color - Bottom position color
339
+ * @param top_color - Top position color
340
+ * @returns Color calculated from linear gradient
341
+ *
342
+ * @remarks
343
+ * PineScript rules:
344
+ * - If value <= bottom_value, returns bottom_color; else if value >= top_value, returns top_color
345
+ * - Otherwise the colours are mixed with their transparency (premultiplied alpha, alpha as a byte); the RGB channels
346
+ * and the alpha are truncated. PineScript's float rounding order is not known: a channel can differ by 1 when the
347
+ * exact result is an integer (same RGB at both ends)
348
+ * - An na value or bottom_value / top_value, or bottom_value == top_value, gives a fully transparent colour
349
+ * - An na colour counts as fully transparent
350
+ * - Works with rgb(), rgba() and hex (#RRGGBB, #RRGGBBAA) colours
351
+ *
352
+ * @example
353
+ * ```typescript
354
+ * // Value at middle of range gets middle color
355
+ * const midColor = color.from_gradient(50, 0, 100,
356
+ * color.rgb(255, 0, 0), // Red at bottom
357
+ * color.rgb(0, 255, 0) // Green at top
358
+ * ); // Returns color between red and green
359
+ *
360
+ * // Value at extremes
361
+ * const lowColor = color.from_gradient(-10, 0, 100, red, green); // Returns red
362
+ * const highColor = color.from_gradient(150, 0, 100, red, green); // Returns green
363
+ * ```
364
+ */
365
+ export function from_gradient(
366
+ value: float,
367
+ bottom_value: float,
368
+ top_value: float,
369
+ bottom_color: color,
370
+ top_color: color
371
+ ): string {
372
+ const transparent = 'rgba(0, 0, 0, 0)';
373
+ if ([value, bottom_value, top_value].some((v) => v === null || v === undefined || Number.isNaN(v)) || bottom_value === top_value) {
374
+ return transparent;
375
+ }
376
+ const k = value <= bottom_value ? 0 : value >= top_value ? 1 : (value - bottom_value) / (top_value - bottom_value);
377
+ // alpha as a byte (0-255), as PineScript stores it; an na colour (null / undefined) is fully transparent
378
+ const rgba = (c: color) => {
379
+ if (c === null || c === undefined) return { r: 0, g: 0, b: 0, a: 0 };
380
+ const p = parseColor(c);
381
+ return { r: p.r, g: p.g, b: p.b, a: Math.round((1 - p.t / 100) * 255) };
382
+ };
383
+ const c1 = rgba(bottom_color);
384
+ const c2 = rgba(top_color);
385
+ const a = c1.a * (1 - k) + c2.a * k;
386
+ if (a === 0) return transparent;
387
+ // operation order with the fewest differences to PineScript (channels as 0-1, alpha as a byte)
388
+ const mix = (x1: number, x2: number) => Math.floor((((x1 / 255) * c1.a) * (1 - k) + ((x2 / 255) * c2.a) * k) / (a / 255));
389
+ const [r, g, b] = [mix(c1.r, c2.r), mix(c1.g, c2.g), mix(c1.b, c2.b)];
390
+ const alpha = Math.floor(a);
391
+ return alpha === 255 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${alpha / 255})`;
392
+ }
393
+
394
+ /**
395
+ * Alias for new_color function.
396
+ * Creates a new color with specified transparency from an existing color.
397
+ *
398
+ * @param baseColor - The base color
399
+ * @param transp - Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
400
+ * @returns New color with applied transparency
401
+ *
402
+ * @remarks
403
+ * This is an alias for `new_color()` to match PineScript's `color.new()` syntax.
404
+ *
405
+ * @example
406
+ * ```typescript
407
+ * const redColor = color.rgb(255, 0, 0);
408
+ * const transparentRed = color.new(redColor, 50); // 50% transparent red
409
+ * ```
410
+ */
411
+ export { new_color as new };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * PineScript comparison operators (`==`, `!=`, `<`, `<=`, `>`, `>=`) on numbers.
3
+ *
4
+ * PineScript rules:
5
+ * - the operators use an absolute tolerance of 1e-10: `a == b` when `|a - b| <= 1e-10`, `a < b` when
6
+ * `b - a > 1e-10` (the same for every magnitude; `0.1 + 0.2 == 0.3` is true)
7
+ * - every comparison with an `na` operand is false, `!=` included
8
+ * - built-in functions (`ta.crossover`, `ta.pivothigh`, `ta.highestbars`...) compare exactly
9
+ *
10
+ * The `Series` comparison methods (`gt`, `gte`, `lt`, `lte`, `eq`, `neq`) follow the same rules.
11
+ */
12
+
13
+ /** Tolerance of PineScript's comparison operators. */
14
+ export const EPSILON = 1e-10;
15
+
16
+ const valid = (a: number, b: number): boolean => !Number.isNaN(a) && !Number.isNaN(b);
17
+
18
+ /** PineScript `a == b`. */
19
+ export function eq(a: number, b: number): boolean {
20
+ return valid(a, b) && Math.abs(a - b) <= EPSILON;
21
+ }
22
+
23
+ /** PineScript `a != b` (false when an operand is `na`). */
24
+ export function ne(a: number, b: number): boolean {
25
+ return valid(a, b) && Math.abs(a - b) > EPSILON;
26
+ }
27
+
28
+ /** PineScript `a < b`. */
29
+ export function lt(a: number, b: number): boolean {
30
+ return valid(a, b) && b - a > EPSILON;
31
+ }
32
+
33
+ /** PineScript `a <= b`. */
34
+ export function le(a: number, b: number): boolean {
35
+ return valid(a, b) && a - b <= EPSILON;
36
+ }
37
+
38
+ /** PineScript `a > b`. */
39
+ export function gt(a: number, b: number): boolean {
40
+ return valid(a, b) && a - b > EPSILON;
41
+ }
42
+
43
+ /** PineScript `a >= b`. */
44
+ export function ge(a: number, b: number): boolean {
45
+ return valid(a, b) && b - a <= EPSILON;
46
+ }