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