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,350 @@
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
+ import { alphaByte, parseColor } from './parse.js';
13
+ /** Channel of color.rgb: na is 0, a fraction is truncated. */
14
+ const channel = (v) => v === null || v === undefined || Number.isNaN(v) ? 0 : Math.max(0, Math.min(255, Math.trunc(v)));
15
+ /**
16
+ * Alpha (0-1) of a transparency given to color.rgb / color.new: na is fully transparent, clamped to 0..100.
17
+ * `1 - t / 100` as in PineScript: `color.new(c, 90)` has the alpha byte 25 (0.09999999999999998 * 255 rounded).
18
+ */
19
+ const alphaOf = (transp) => transp === null || Number.isNaN(transp) ? 0 : 1 - Math.max(0, Math.min(100, transp)) / 100;
20
+ /**
21
+ * Creates a color from RGB values with optional transparency.
22
+ *
23
+ * @param red - Red component (0-255, values are clamped)
24
+ * @param green - Green component (0-255, values are clamped)
25
+ * @param blue - Blue component (0-255, values are clamped)
26
+ * @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
27
+ * @returns Color string in rgb() or rgba() format
28
+ *
29
+ * @remarks
30
+ * - RGB values are automatically clamped to the 0-255 range
31
+ * - Transparency of 0 or omitted results in rgb() format
32
+ * - Transparency > 0 results in rgba() format
33
+ * - Transparency is converted to alpha channel (0-1 range)
34
+ *
35
+ * PineScript rules:
36
+ * - an `na` channel is 0; a fractional channel is truncated (127.6 is 127)
37
+ * - the transparency is clamped to 0..100 (140 is fully transparent, -5 is opaque); an `na` transparency is fully
38
+ * transparent
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * color.rgb(255, 0, 0) // Returns: "rgb(255, 0, 0)" - Red
43
+ * color.rgb(0, 255, 0, 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
44
+ * color.rgb(300, 0, 0) // Returns: "rgb(255, 0, 0)" - Clamped to 255
45
+ * ```
46
+ */
47
+ export function rgb(red, green, blue, transp) {
48
+ const r = channel(red);
49
+ const g = channel(green);
50
+ const b = channel(blue);
51
+ const a = transp !== undefined ? alphaOf(transp) : 1;
52
+ if (a === 1) {
53
+ return `rgb(${r}, ${g}, ${b})`;
54
+ }
55
+ return `rgba(${r}, ${g}, ${b}, ${a})`;
56
+ }
57
+ /**
58
+ * Creates a color from a hexadecimal string with optional transparency.
59
+ *
60
+ * @param hex - Hex color string (with or without '#' prefix, e.g., "#FF0000" or "FF0000")
61
+ * @param transp - Optional transparency (0-100). 0 = opaque, 100 = fully transparent
62
+ * @returns Color string in rgb() or rgba() format
63
+ *
64
+ * @remarks
65
+ * - Accepts hex strings with or without '#' prefix
66
+ * - Case-insensitive (accepts both "FF0000" and "ff0000")
67
+ * - Must be 6 characters (excluding '#')
68
+ * - Format: RRGGBB where each component is 00-FF
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * color.from_hex("#FF0000") // Returns: "rgb(255, 0, 0)" - Red
73
+ * color.from_hex("00FF00", 50) // Returns: "rgba(0, 255, 0, 0.5)" - Semi-transparent green
74
+ * color.from_hex("#0000FF") // Returns: "rgb(0, 0, 255)" - Blue
75
+ * color.from_hex("FFA500") // Returns: "rgb(255, 165, 0)" - Orange
76
+ * ```
77
+ */
78
+ export function from_hex(hex, transp) {
79
+ // Remove # if present
80
+ hex = hex.replace('#', '');
81
+ const r = parseInt(hex.substring(0, 2), 16);
82
+ const g = parseInt(hex.substring(2, 4), 16);
83
+ const b = parseInt(hex.substring(4, 6), 16);
84
+ return rgb(r, g, b, transp);
85
+ }
86
+ /**
87
+ * Creates a new color with modified transparency, preserving RGB components.
88
+ *
89
+ * @param baseColor - The base color to modify
90
+ * @param transp - New transparency value (0-100). 0 = opaque, 100 = fully transparent
91
+ * @returns New color with updated transparency
92
+ *
93
+ * @remarks
94
+ * - Preserves the RGB values from the base color
95
+ * - Replaces the transparency with the new value
96
+ * - Useful for creating semi-transparent versions of existing colors
97
+ * - PineScript clamps the transparency to 0..100 (`color.new(c, 140)` is fully transparent, `color.new(c, -5)` is
98
+ * opaque); an `na` transparency is fully transparent
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const red = color.rgb(255, 0, 0)
103
+ * color.new_color(red, 50) // Returns: "rgba(255, 0, 0, 0.5)" - Semi-transparent red
104
+ * color.new_color(red, 0) // Returns: "rgb(255, 0, 0)" - Fully opaque
105
+ * color.new_color(red, 100) // Returns: "rgba(255, 0, 0, 0)" - Fully transparent
106
+ * ```
107
+ */
108
+ export function new_color(baseColor, transp) {
109
+ // Parse the color and apply transparency
110
+ const rgba = parseColor(baseColor);
111
+ return rgb(rgba.r, rgba.g, rgba.b, transp);
112
+ }
113
+ /**
114
+ * Extracts the red component from a color.
115
+ *
116
+ * @param clr - The color to extract from
117
+ * @returns Red component value (0-255)
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * color.r(color.rgb(255, 128, 64)) // Returns: 255
122
+ * color.r(color.from_hex("#FF0000")) // Returns: 255
123
+ * color.r(color.from_hex("#FFA500")) // Returns: 255 (orange)
124
+ * ```
125
+ */
126
+ export function r(clr) {
127
+ return parseColor(clr).r;
128
+ }
129
+ /**
130
+ * Extracts the green component from a color.
131
+ *
132
+ * @param clr - The color to extract from
133
+ * @returns Green component value (0-255)
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * color.g(color.rgb(255, 128, 64)) // Returns: 128
138
+ * color.g(color.from_hex("#00FF00")) // Returns: 255
139
+ * color.g(color.from_hex("#FFA500")) // Returns: 165 (orange)
140
+ * ```
141
+ */
142
+ export function g(clr) {
143
+ return parseColor(clr).g;
144
+ }
145
+ /**
146
+ * Extracts the blue component from a color.
147
+ *
148
+ * @param clr - The color to extract from
149
+ * @returns Blue component value (0-255)
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * color.b(color.rgb(255, 128, 64)) // Returns: 64
154
+ * color.b(color.from_hex("#0000FF")) // Returns: 255
155
+ * color.b(color.from_hex("#FFA500")) // Returns: 0 (orange)
156
+ * ```
157
+ */
158
+ export function b(clr) {
159
+ return parseColor(clr).b;
160
+ }
161
+ /**
162
+ * Extracts the transparency component from a color.
163
+ *
164
+ * @param clr - The color to extract from
165
+ * @returns Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
166
+ *
167
+ * @remarks
168
+ * - Returns 0 for colors without transparency (rgb format)
169
+ * - Converts alpha channel (0-1) to transparency (0-100)
170
+ * - PineScript stores the alpha as a byte (0-255) and returns an integer transparency:
171
+ * `color.t(color.new(c, 33.3))` is 33
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * color.t(color.rgb(255, 0, 0)) // Returns: 0 (opaque)
176
+ * color.t(color.rgb(255, 0, 0, 50)) // Returns: 50
177
+ * color.t(color.rgb(255, 0, 0, 100)) // Returns: 100 (fully transparent)
178
+ * ```
179
+ */
180
+ export function t(clr) {
181
+ return Math.round((1 - alphaByte(parseColor(clr).a) / 255) * 100);
182
+ }
183
+ // Predefined color constants of PineScript v6.
184
+ // PineScript v5 differs for red (#FF5252), teal (#00897B) and yellow (#FFEB3B).
185
+ /**
186
+ * Aqua/Cyan color constant
187
+ * @constant {string} #00BCD4 - RGB(0, 188, 212)
188
+ */
189
+ export const aqua = '#00BCD4';
190
+ /**
191
+ * Black color constant
192
+ * @constant {string} #363A45 - RGB(54, 58, 69)
193
+ */
194
+ export const black = '#363A45';
195
+ /**
196
+ * Blue color constant
197
+ * @constant {string} #2962FF - RGB(41, 98, 255)
198
+ */
199
+ export const blue = '#2962FF';
200
+ /**
201
+ * Fuchsia/Magenta color constant
202
+ * @constant {string} #E040FB - RGB(224, 64, 251)
203
+ */
204
+ export const fuchsia = '#E040FB';
205
+ /**
206
+ * Gray color constant
207
+ * @constant {string} #787B86 - RGB(120, 123, 134)
208
+ */
209
+ export const gray = '#787B86';
210
+ /**
211
+ * Green color constant (same as lime)
212
+ * @constant {string} #4CAF50 - RGB(76, 175, 80)
213
+ */
214
+ export const green = '#4CAF50';
215
+ /**
216
+ * Lime color constant (same as green)
217
+ * @constant {string} #00E676 - RGB(0, 230, 118)
218
+ */
219
+ export const lime = '#00E676';
220
+ /**
221
+ * Maroon color constant
222
+ * @constant {string} #880E4F - RGB(136, 14, 79)
223
+ */
224
+ export const maroon = '#880E4F';
225
+ /**
226
+ * Navy color constant
227
+ * @constant {string} #311B92 - RGB(49, 27, 146)
228
+ */
229
+ export const navy = '#311B92';
230
+ /**
231
+ * Olive color constant
232
+ * @constant {string} #808000 - RGB(128, 128, 0)
233
+ */
234
+ export const olive = '#808000';
235
+ /**
236
+ * Orange color constant
237
+ * @constant {string} #FF9800 - RGB(255, 152, 0)
238
+ */
239
+ export const orange = '#FF9800';
240
+ /**
241
+ * Purple color constant
242
+ * @constant {string} #9C27B0 - RGB(156, 39, 176)
243
+ */
244
+ export const purple = '#9C27B0';
245
+ /**
246
+ * Red color constant
247
+ * @constant {string} #F23645 - RGB(242, 54, 69)
248
+ */
249
+ export const red = '#F23645';
250
+ /**
251
+ * Silver color constant
252
+ * @constant {string} #B2B5BE - RGB(178, 181, 190)
253
+ */
254
+ export const silver = '#B2B5BE';
255
+ /**
256
+ * Teal color constant
257
+ * @constant {string} #089981 - RGB(8, 153, 129)
258
+ */
259
+ export const teal = '#089981';
260
+ /**
261
+ * White color constant
262
+ * @constant {string} #FFFFFF - RGB(255, 255, 255)
263
+ */
264
+ export const white = '#FFFFFF';
265
+ /**
266
+ * Yellow color constant
267
+ * @constant {string} #FDD835 - RGB(253, 216, 53)
268
+ */
269
+ export const yellow = '#FDD835';
270
+ /**
271
+ * Creates a color from a gradient based on value position.
272
+ *
273
+ * @param value - Value to calculate position-dependent color
274
+ * @param bottom_value - Bottom position value corresponding to bottom_color
275
+ * @param top_value - Top position value corresponding to top_color
276
+ * @param bottom_color - Bottom position color
277
+ * @param top_color - Top position color
278
+ * @returns Color calculated from linear gradient
279
+ *
280
+ * @remarks
281
+ * PineScript rules:
282
+ * - If value <= bottom_value, returns bottom_color; else if value >= top_value, returns top_color
283
+ * - An inverted range (bottom_value > top_value) returns bottom_color, wherever the value is
284
+ * - Otherwise the colours are mixed with their transparency (premultiplied alpha, alpha as a byte); the RGB channels
285
+ * and the alpha are truncated. PineScript's float rounding order is not known: a channel can differ by 1 when the
286
+ * exact result is an integer (same RGB at both ends)
287
+ * - An na value or bottom_value / top_value, or bottom_value == top_value, gives a fully transparent colour
288
+ * - An na colour counts as fully transparent
289
+ * - Works with rgb(), rgba() and hex (#RRGGBB, #RRGGBBAA) colours
290
+ *
291
+ * @example
292
+ * ```typescript
293
+ * // Value at middle of range gets middle color
294
+ * const midColor = color.from_gradient(50, 0, 100,
295
+ * color.rgb(255, 0, 0), // Red at bottom
296
+ * color.rgb(0, 255, 0) // Green at top
297
+ * ); // Returns color between red and green
298
+ *
299
+ * // Value at extremes
300
+ * const lowColor = color.from_gradient(-10, 0, 100, red, green); // Returns red
301
+ * const highColor = color.from_gradient(150, 0, 100, red, green); // Returns green
302
+ * ```
303
+ */
304
+ export function from_gradient(value, bottom_value, top_value, bottom_color, top_color) {
305
+ const transparent = 'rgba(0, 0, 0, 0)';
306
+ if ([value, bottom_value, top_value].some((v) => v === null || v === undefined || Number.isNaN(v)) || bottom_value === top_value) {
307
+ return transparent;
308
+ }
309
+ const k = value <= bottom_value || bottom_value > top_value
310
+ ? 0
311
+ : value >= top_value
312
+ ? 1
313
+ : (value - bottom_value) / (top_value - bottom_value);
314
+ // alpha as a byte (0-255), as PineScript stores it; an na colour (null / undefined) is fully transparent
315
+ const rgba = (c) => {
316
+ if (c === null || c === undefined)
317
+ return { r: 0, g: 0, b: 0, a: 0 };
318
+ const p = parseColor(c);
319
+ return { r: p.r, g: p.g, b: p.b, a: alphaByte(p.a) };
320
+ };
321
+ const c1 = rgba(bottom_color);
322
+ const c2 = rgba(top_color);
323
+ const a = c1.a * (1 - k) + c2.a * k;
324
+ if (a === 0)
325
+ return transparent;
326
+ // operation order with the fewest differences to PineScript (channels as 0-1, alpha as a byte)
327
+ const mix = (x1, x2) => Math.floor((((x1 / 255) * c1.a) * (1 - k) + ((x2 / 255) * c2.a) * k) / (a / 255));
328
+ const [r, g, b] = [mix(c1.r, c2.r), mix(c1.g, c2.g), mix(c1.b, c2.b)];
329
+ const alpha = Math.floor(a);
330
+ return alpha === 255 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${alpha / 255})`;
331
+ }
332
+ /**
333
+ * Alias for new_color function.
334
+ * Creates a new color with specified transparency from an existing color.
335
+ *
336
+ * @param baseColor - The base color
337
+ * @param transp - Transparency value (0-100). 0 = fully opaque, 100 = fully transparent
338
+ * @returns New color with applied transparency
339
+ *
340
+ * @remarks
341
+ * This is an alias for `new_color()` to match PineScript's `color.new()` syntax.
342
+ *
343
+ * @example
344
+ * ```typescript
345
+ * const redColor = color.rgb(255, 0, 0);
346
+ * const transparentRed = color.new(redColor, 50); // 50% transparent red
347
+ * ```
348
+ */
349
+ export { new_color as new };
350
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/color/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Colour parsing shared by the color namespace and input.color (internal, not part of the public API).
3
+ */
4
+ import type { color, int, float } from '../types/index.js';
5
+ /**
6
+ * Parses a colour string to its channels (0-255) and alpha (0-1).
7
+ * Hex: #RRGGBB, #RRGGBBAA (PineScript literals), #RGB, #RGBA; rgb() / rgba(). Anything else is opaque black.
8
+ */
9
+ export declare function parseColor(clr: color): {
10
+ r: int;
11
+ g: int;
12
+ b: int;
13
+ a: float;
14
+ };
15
+ /** Alpha byte (0-255) of an alpha (0-1), as PineScript stores it. */
16
+ export declare const alphaByte: (a: float) => int;
17
+ /**
18
+ * The colour a script receives for the default of `input.color(defval)`.
19
+ *
20
+ * PineScript rules (measured):
21
+ * - the default is stored with an alpha of 2 decimals: a `color.new(c, t)` / `color.rgb(r, g, b, t)` default keeps
22
+ * `(100 - trunc(t)) / 100` (90 gives 0.1, 9.9 gives 0.91), a hex literal `#RRGGBBAA` keeps `round(AA / 255, 2)`
23
+ * - the input value is then the alpha byte `round(255 * alpha)`: `color.new(c, 90)` as an input default has the
24
+ * byte 26, where `color.new(c, 90)` in the script has 25
25
+ *
26
+ * A default whose alpha byte does not change is returned unchanged.
27
+ */
28
+ export declare function inputColorDefault(defval: color): color;
29
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/color/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG;IAAE,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,EAAE,KAAK,CAAA;CAAE,CAoB3E;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,GAAI,GAAG,KAAK,KAAG,GAA0B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAStD"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Colour parsing shared by the color namespace and input.color (internal, not part of the public API).
3
+ */
4
+ /**
5
+ * Parses a colour string to its channels (0-255) and alpha (0-1).
6
+ * Hex: #RRGGBB, #RRGGBBAA (PineScript literals), #RGB, #RGBA; rgb() / rgba(). Anything else is opaque black.
7
+ */
8
+ export function parseColor(clr) {
9
+ if (typeof clr === 'string') {
10
+ const hex = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(clr.trim());
11
+ if (hex) {
12
+ let digits = hex[1];
13
+ if (digits.length <= 4)
14
+ digits = [...digits].map((c) => c + c).join('');
15
+ const byte = (k) => parseInt(digits.slice(k, k + 2), 16);
16
+ return { r: byte(0), g: byte(2), b: byte(4), a: digits.length === 8 ? byte(6) / 255 : 1 };
17
+ }
18
+ const match = clr.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
19
+ if (match) {
20
+ return {
21
+ r: parseInt(match[1]),
22
+ g: parseInt(match[2]),
23
+ b: parseInt(match[3]),
24
+ a: match[4] ? parseFloat(match[4]) : 1,
25
+ };
26
+ }
27
+ }
28
+ return { r: 0, g: 0, b: 0, a: 1 };
29
+ }
30
+ /** Alpha byte (0-255) of an alpha (0-1), as PineScript stores it. */
31
+ export const alphaByte = (a) => Math.round(a * 255);
32
+ /**
33
+ * The colour a script receives for the default of `input.color(defval)`.
34
+ *
35
+ * PineScript rules (measured):
36
+ * - the default is stored with an alpha of 2 decimals: a `color.new(c, t)` / `color.rgb(r, g, b, t)` default keeps
37
+ * `(100 - trunc(t)) / 100` (90 gives 0.1, 9.9 gives 0.91), a hex literal `#RRGGBBAA` keeps `round(AA / 255, 2)`
38
+ * - the input value is then the alpha byte `round(255 * alpha)`: `color.new(c, 90)` as an input default has the
39
+ * byte 26, where `color.new(c, 90)` in the script has 25
40
+ *
41
+ * A default whose alpha byte does not change is returned unchanged.
42
+ */
43
+ export function inputColorDefault(defval) {
44
+ if (typeof defval !== 'string')
45
+ return defval;
46
+ const p = parseColor(defval);
47
+ const hex = defval.trim().startsWith('#');
48
+ // rgba() from color.new / color.rgb: alpha = 1 - t / 100, so alpha * 100 = 100 - t (float noise removed first)
49
+ const stored = hex ? Math.round(p.a * 100) / 100 : Math.ceil(Math.round(p.a * 100 * 1e6) / 1e6) / 100;
50
+ const byte = alphaByte(stored);
51
+ if (byte === alphaByte(p.a))
52
+ return defval;
53
+ return byte === 255 ? `rgb(${p.r}, ${p.g}, ${p.b})` : `rgba(${p.r}, ${p.g}, ${p.b}, ${byte / 255})`;
54
+ }
55
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/color/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAU;IACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;YACrB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC7E,IAAI,KAAK,EAAE,CAAC;YACV,OAAO;gBACL,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAa;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1C,+GAA+G;IAC/G,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACtG,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;AACtG,CAAC"}
@@ -0,0 +1,26 @@
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
+ /** Tolerance of PineScript's comparison operators. */
13
+ export declare const EPSILON = 1e-10;
14
+ /** PineScript `a == b`. */
15
+ export declare function eq(a: number, b: number): boolean;
16
+ /** PineScript `a != b` (false when an operand is `na`). */
17
+ export declare function ne(a: number, b: number): boolean;
18
+ /** PineScript `a < b`. */
19
+ export declare function lt(a: number, b: number): boolean;
20
+ /** PineScript `a <= b`. */
21
+ export declare function le(a: number, b: number): boolean;
22
+ /** PineScript `a > b`. */
23
+ export declare function gt(a: number, b: number): boolean;
24
+ /** PineScript `a >= b`. */
25
+ export declare function ge(a: number, b: number): boolean;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compare/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sDAAsD;AACtD,eAAO,MAAM,OAAO,QAAQ,CAAC;AAI7B,2BAA2B;AAC3B,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,2DAA2D;AAC3D,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,0BAA0B;AAC1B,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,2BAA2B;AAC3B,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,0BAA0B;AAC1B,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,2BAA2B;AAC3B,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD"}
@@ -0,0 +1,39 @@
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
+ /** Tolerance of PineScript's comparison operators. */
13
+ export const EPSILON = 1e-10;
14
+ const valid = (a, b) => !Number.isNaN(a) && !Number.isNaN(b);
15
+ /** PineScript `a == b`. */
16
+ export function eq(a, b) {
17
+ return valid(a, b) && Math.abs(a - b) <= EPSILON;
18
+ }
19
+ /** PineScript `a != b` (false when an operand is `na`). */
20
+ export function ne(a, b) {
21
+ return valid(a, b) && Math.abs(a - b) > EPSILON;
22
+ }
23
+ /** PineScript `a < b`. */
24
+ export function lt(a, b) {
25
+ return valid(a, b) && b - a > EPSILON;
26
+ }
27
+ /** PineScript `a <= b`. */
28
+ export function le(a, b) {
29
+ return valid(a, b) && a - b <= EPSILON;
30
+ }
31
+ /** PineScript `a > b`. */
32
+ export function gt(a, b) {
33
+ return valid(a, b) && a - b > EPSILON;
34
+ }
35
+ /** PineScript `a >= b`. */
36
+ export function ge(a, b) {
37
+ return valid(a, b) && b - a <= EPSILON;
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compare/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;AAE7B,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtF,2BAA2B;AAC3B,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC;AACnD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAClD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACxC,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;AACzC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACxC,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;AACzC,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Registry of the live drawing objects (lines, labels, boxes, polylines, linefills), as PineScript
3
+ * keeps them. PineScript rules:
4
+ *
5
+ * - `line.all`, `label.all`, ... list the live objects in creation order (a copy of the list)
6
+ * - `delete` removes an object; the object becomes `na`: its getters return NaN and its setters
7
+ * do nothing. Deleting a line with `line.delete` also deletes the linefills that use it
8
+ * - when a creation brings the count above `max_*_count + 5`, the oldest objects are deleted until
9
+ * `max_*_count` remain (default 50). Copies count as creations. Linefills follow the same rule with
10
+ * `max_lines_count`; lines deleted by this rule do not delete their linefills
11
+ *
12
+ * The script API (`executeScript`) resets the registry at the start of every run and applies the
13
+ * `max_*_count` values of `indicator()`. Outside a script run the registry is global to the module.
14
+ *
15
+ * @module drawing/registry
16
+ */
17
+ import type { Box, Label, Line, Linefill, Polyline } from '../types/index.js';
18
+ export type DrawingKind = 'line' | 'label' | 'box' | 'polyline' | 'linefill';
19
+ interface DrawingTypes {
20
+ line: Line;
21
+ label: Label;
22
+ box: Box;
23
+ polyline: Polyline;
24
+ linefill: Linefill;
25
+ }
26
+ /** Default `max_lines_count`, `max_labels_count`, `max_boxes_count`, `max_polylines_count`. */
27
+ export declare const DEFAULT_MAX_COUNT = 50;
28
+ export type DrawingLimits = Partial<Record<Exclude<DrawingKind, 'linefill'>, number>>;
29
+ /** Records a new object and deletes the oldest objects of its kind when the count is too high. */
30
+ export declare function register<K extends DrawingKind>(kind: K, obj: DrawingTypes[K]): DrawingTypes[K];
31
+ /** Deletes an object (no effect when it is already deleted). */
32
+ export declare function remove<K extends DrawingKind>(kind: K, obj: DrawingTypes[K]): void;
33
+ /** True when the object was deleted (by `delete` or by the maximum count). */
34
+ export declare function isDeleted(obj: unknown): boolean;
35
+ /** The live objects of a kind, in creation order (a new array). */
36
+ export declare function all<K extends DrawingKind>(kind: K): Array<DrawingTypes[K]>;
37
+ /** Forgets all objects (without deleting them) and sets the maximum counts (default 50). */
38
+ export declare function resetDrawings(newLimits?: DrawingLimits): void;
39
+ /** Changes the maximum counts without forgetting the objects (PineScript `indicator(max_*_count)`). */
40
+ export declare function setDrawingLimits(newLimits: DrawingLimits): void;
41
+ export {};
42
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/drawing/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAE7E,UAAU,YAAY;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,+FAA+F;AAC/F,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAIpC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AA4BtF,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQ9F;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAKjF;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,mEAAmE;AACnE,wBAAgB,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAE1E;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,SAAS,GAAE,aAAkB,GAAG,IAAI,CAQjE;AAED,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAE/D"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Registry of the live drawing objects (lines, labels, boxes, polylines, linefills), as PineScript
3
+ * keeps them. PineScript rules:
4
+ *
5
+ * - `line.all`, `label.all`, ... list the live objects in creation order (a copy of the list)
6
+ * - `delete` removes an object; the object becomes `na`: its getters return NaN and its setters
7
+ * do nothing. Deleting a line with `line.delete` also deletes the linefills that use it
8
+ * - when a creation brings the count above `max_*_count + 5`, the oldest objects are deleted until
9
+ * `max_*_count` remain (default 50). Copies count as creations. Linefills follow the same rule with
10
+ * `max_lines_count`; lines deleted by this rule do not delete their linefills
11
+ *
12
+ * The script API (`executeScript`) resets the registry at the start of every run and applies the
13
+ * `max_*_count` values of `indicator()`. Outside a script run the registry is global to the module.
14
+ *
15
+ * @module drawing/registry
16
+ */
17
+ /** Default `max_lines_count`, `max_labels_count`, `max_boxes_count`, `max_polylines_count`. */
18
+ export const DEFAULT_MAX_COUNT = 50;
19
+ /** Objects above the maximum that PineScript keeps before it deletes the oldest ones. */
20
+ const SLACK = 5;
21
+ const live = { line: [], label: [], box: [], polyline: [], linefill: [] };
22
+ let limits = {
23
+ line: DEFAULT_MAX_COUNT,
24
+ label: DEFAULT_MAX_COUNT,
25
+ box: DEFAULT_MAX_COUNT,
26
+ polyline: DEFAULT_MAX_COUNT,
27
+ };
28
+ const deleted = new WeakSet();
29
+ /** Numeric fields that become NaN when an object is deleted, so that its getters return `na`. */
30
+ const COORDINATES = {
31
+ line: ['x1', 'y1', 'x2', 'y2'],
32
+ label: ['x', 'y'],
33
+ box: ['left', 'top', 'right', 'bottom'],
34
+ polyline: [],
35
+ linefill: [],
36
+ };
37
+ function markDeleted(kind, obj, explicit) {
38
+ deleted.add(obj);
39
+ for (const field of COORDINATES[kind])
40
+ obj[field] = NaN;
41
+ if (kind === 'line' && explicit) {
42
+ for (const fill of live.linefill.filter((f) => f.line1 === obj || f.line2 === obj))
43
+ remove('linefill', fill);
44
+ }
45
+ }
46
+ /** Records a new object and deletes the oldest objects of its kind when the count is too high. */
47
+ export function register(kind, obj) {
48
+ const list = live[kind];
49
+ list.push(obj);
50
+ const max = limits[kind === 'linefill' ? 'line' : kind];
51
+ if (list.length > max + SLACK) {
52
+ for (const old of list.splice(0, list.length - max))
53
+ markDeleted(kind, old, false);
54
+ }
55
+ return obj;
56
+ }
57
+ /** Deletes an object (no effect when it is already deleted). */
58
+ export function remove(kind, obj) {
59
+ const list = live[kind];
60
+ const index = list.indexOf(obj);
61
+ if (index !== -1)
62
+ list.splice(index, 1);
63
+ if (!deleted.has(obj))
64
+ markDeleted(kind, obj, true);
65
+ }
66
+ /** True when the object was deleted (by `delete` or by the maximum count). */
67
+ export function isDeleted(obj) {
68
+ return typeof obj === 'object' && obj !== null && deleted.has(obj);
69
+ }
70
+ /** The live objects of a kind, in creation order (a new array). */
71
+ export function all(kind) {
72
+ return [...live[kind]];
73
+ }
74
+ /** Forgets all objects (without deleting them) and sets the maximum counts (default 50). */
75
+ export function resetDrawings(newLimits = {}) {
76
+ for (const kind of Object.keys(live))
77
+ live[kind].length = 0;
78
+ limits = {
79
+ line: newLimits.line ?? DEFAULT_MAX_COUNT,
80
+ label: newLimits.label ?? DEFAULT_MAX_COUNT,
81
+ box: newLimits.box ?? DEFAULT_MAX_COUNT,
82
+ polyline: newLimits.polyline ?? DEFAULT_MAX_COUNT,
83
+ };
84
+ }
85
+ /** Changes the maximum counts without forgetting the objects (PineScript `indicator(max_*_count)`). */
86
+ export function setDrawingLimits(newLimits) {
87
+ limits = { ...limits, ...Object.fromEntries(Object.entries(newLimits).filter(([, v]) => v !== undefined)) };
88
+ }
89
+ //# sourceMappingURL=registry.js.map