@metamask-previews/advanced-chart-core 0.0.0-preview-e58fe0640 → 0.0.0-preview-238cb7063

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 (321) hide show
  1. package/dist/core/bootstrap.cjs +185 -0
  2. package/dist/core/bootstrap.cjs.map +1 -0
  3. package/dist/core/bootstrap.d.cts +10 -0
  4. package/dist/core/bootstrap.d.cts.map +1 -0
  5. package/dist/core/bootstrap.d.mts +10 -0
  6. package/dist/core/bootstrap.d.mts.map +1 -0
  7. package/dist/core/bootstrap.mjs +181 -0
  8. package/dist/core/bootstrap.mjs.map +1 -0
  9. package/dist/core/bridge.cjs +115 -0
  10. package/dist/core/bridge.cjs.map +1 -0
  11. package/dist/core/bridge.d.cts +37 -0
  12. package/dist/core/bridge.d.cts.map +1 -0
  13. package/dist/core/bridge.d.mts +37 -0
  14. package/dist/core/bridge.d.mts.map +1 -0
  15. package/dist/core/bridge.mjs +108 -0
  16. package/dist/core/bridge.mjs.map +1 -0
  17. package/dist/core/dataLifecycle.cjs +52 -0
  18. package/dist/core/dataLifecycle.cjs.map +1 -0
  19. package/dist/core/dataLifecycle.d.cts +8 -0
  20. package/dist/core/dataLifecycle.d.cts.map +1 -0
  21. package/dist/core/dataLifecycle.d.mts +8 -0
  22. package/dist/core/dataLifecycle.d.mts.map +1 -0
  23. package/dist/core/dataLifecycle.mjs +46 -0
  24. package/dist/core/dataLifecycle.mjs.map +1 -0
  25. package/dist/core/loadLibrary.cjs +63 -0
  26. package/dist/core/loadLibrary.cjs.map +1 -0
  27. package/dist/core/loadLibrary.d.cts +16 -0
  28. package/dist/core/loadLibrary.d.cts.map +1 -0
  29. package/dist/core/loadLibrary.d.mts +16 -0
  30. package/dist/core/loadLibrary.d.mts.map +1 -0
  31. package/dist/core/loadLibrary.mjs +58 -0
  32. package/dist/core/loadLibrary.mjs.map +1 -0
  33. package/dist/core/resolution.cjs +58 -0
  34. package/dist/core/resolution.cjs.map +1 -0
  35. package/dist/core/resolution.d.cts +15 -0
  36. package/dist/core/resolution.d.cts.map +1 -0
  37. package/dist/core/resolution.d.mts +15 -0
  38. package/dist/core/resolution.d.mts.map +1 -0
  39. package/dist/core/resolution.mjs +54 -0
  40. package/dist/core/resolution.mjs.map +1 -0
  41. package/dist/core/state.cjs +343 -0
  42. package/dist/core/state.cjs.map +1 -0
  43. package/dist/core/state.d.cts +67 -0
  44. package/dist/core/state.d.cts.map +1 -0
  45. package/dist/core/state.d.mts +67 -0
  46. package/dist/core/state.d.mts.map +1 -0
  47. package/dist/core/state.mjs +283 -0
  48. package/dist/core/state.mjs.map +1 -0
  49. package/dist/core/timeUtils.cjs +72 -0
  50. package/dist/core/timeUtils.cjs.map +1 -0
  51. package/dist/core/timeUtils.d.cts +32 -0
  52. package/dist/core/timeUtils.d.cts.map +1 -0
  53. package/dist/core/timeUtils.d.mts +32 -0
  54. package/dist/core/timeUtils.d.mts.map +1 -0
  55. package/dist/core/timeUtils.mjs +66 -0
  56. package/dist/core/timeUtils.mjs.map +1 -0
  57. package/dist/core/timezone.cjs +135 -0
  58. package/dist/core/timezone.cjs.map +1 -0
  59. package/dist/core/timezone.d.cts +16 -0
  60. package/dist/core/timezone.d.cts.map +1 -0
  61. package/dist/core/timezone.d.mts +16 -0
  62. package/dist/core/timezone.d.mts.map +1 -0
  63. package/dist/core/timezone.mjs +131 -0
  64. package/dist/core/timezone.mjs.map +1 -0
  65. package/dist/core/types.cjs +20 -0
  66. package/dist/core/types.cjs.map +1 -0
  67. package/dist/core/types.d.cts +323 -0
  68. package/dist/core/types.d.cts.map +1 -0
  69. package/dist/core/types.d.mts +323 -0
  70. package/dist/core/types.d.mts.map +1 -0
  71. package/dist/core/types.mjs +17 -0
  72. package/dist/core/types.mjs.map +1 -0
  73. package/dist/features/indicators/index.cjs +183 -0
  74. package/dist/features/indicators/index.cjs.map +1 -0
  75. package/dist/features/indicators/index.d.cts +6 -0
  76. package/dist/features/indicators/index.d.cts.map +1 -0
  77. package/dist/features/indicators/index.d.mts +6 -0
  78. package/dist/features/indicators/index.d.mts.map +1 -0
  79. package/dist/features/indicators/index.mjs +177 -0
  80. package/dist/features/indicators/index.mjs.map +1 -0
  81. package/dist/features/indicators/legend.cjs +575 -0
  82. package/dist/features/indicators/legend.cjs.map +1 -0
  83. package/dist/features/indicators/legend.d.cts +40 -0
  84. package/dist/features/indicators/legend.d.cts.map +1 -0
  85. package/dist/features/indicators/legend.d.mts +40 -0
  86. package/dist/features/indicators/legend.d.mts.map +1 -0
  87. package/dist/features/indicators/legend.mjs +564 -0
  88. package/dist/features/indicators/legend.mjs.map +1 -0
  89. package/dist/features/indicators/resize.cjs +34 -0
  90. package/dist/features/indicators/resize.cjs.map +1 -0
  91. package/dist/features/indicators/resize.d.cts +2 -0
  92. package/dist/features/indicators/resize.d.cts.map +1 -0
  93. package/dist/features/indicators/resize.d.mts +2 -0
  94. package/dist/features/indicators/resize.d.mts.map +1 -0
  95. package/dist/features/indicators/resize.mjs +30 -0
  96. package/dist/features/indicators/resize.mjs.map +1 -0
  97. package/dist/features/indicators/studies.cjs +147 -0
  98. package/dist/features/indicators/studies.cjs.map +1 -0
  99. package/dist/features/indicators/studies.d.cts +36 -0
  100. package/dist/features/indicators/studies.d.cts.map +1 -0
  101. package/dist/features/indicators/studies.d.mts +36 -0
  102. package/dist/features/indicators/studies.d.mts.map +1 -0
  103. package/dist/features/indicators/studies.mjs +140 -0
  104. package/dist/features/indicators/studies.mjs.map +1 -0
  105. package/dist/features/indicators/subPane.cjs +78 -0
  106. package/dist/features/indicators/subPane.cjs.map +1 -0
  107. package/dist/features/indicators/subPane.d.cts +6 -0
  108. package/dist/features/indicators/subPane.d.cts.map +1 -0
  109. package/dist/features/indicators/subPane.d.mts +6 -0
  110. package/dist/features/indicators/subPane.d.mts.map +1 -0
  111. package/dist/features/indicators/subPane.mjs +72 -0
  112. package/dist/features/indicators/subPane.mjs.map +1 -0
  113. package/dist/features/volume/index.cjs +145 -0
  114. package/dist/features/volume/index.cjs.map +1 -0
  115. package/dist/features/volume/index.d.cts +4 -0
  116. package/dist/features/volume/index.d.cts.map +1 -0
  117. package/dist/features/volume/index.d.mts +4 -0
  118. package/dist/features/volume/index.d.mts.map +1 -0
  119. package/dist/features/volume/index.mjs +140 -0
  120. package/dist/features/volume/index.mjs.map +1 -0
  121. package/dist/index.cjs +20 -0
  122. package/dist/index.cjs.map +1 -0
  123. package/dist/index.d.cts +2 -0
  124. package/dist/index.d.cts.map +1 -0
  125. package/dist/index.d.mts +2 -0
  126. package/dist/index.d.mts.map +1 -0
  127. package/dist/index.mjs +18 -0
  128. package/dist/index.mjs.map +1 -0
  129. package/dist/interaction/crosshair.cjs +147 -0
  130. package/dist/interaction/crosshair.cjs.map +1 -0
  131. package/dist/interaction/crosshair.d.cts +21 -0
  132. package/dist/interaction/crosshair.d.cts.map +1 -0
  133. package/dist/interaction/crosshair.d.mts +21 -0
  134. package/dist/interaction/crosshair.d.mts.map +1 -0
  135. package/dist/interaction/crosshair.mjs +141 -0
  136. package/dist/interaction/crosshair.mjs.map +1 -0
  137. package/dist/interaction/visibleRange.cjs +102 -0
  138. package/dist/interaction/visibleRange.cjs.map +1 -0
  139. package/dist/interaction/visibleRange.d.cts +11 -0
  140. package/dist/interaction/visibleRange.d.cts.map +1 -0
  141. package/dist/interaction/visibleRange.d.mts +11 -0
  142. package/dist/interaction/visibleRange.d.mts.map +1 -0
  143. package/dist/interaction/visibleRange.mjs +97 -0
  144. package/dist/interaction/visibleRange.mjs.map +1 -0
  145. package/dist/messages/contract.cjs +27 -0
  146. package/dist/messages/contract.cjs.map +1 -0
  147. package/dist/messages/contract.d.cts +262 -0
  148. package/dist/messages/contract.d.cts.map +1 -0
  149. package/dist/messages/contract.d.mts +262 -0
  150. package/dist/messages/contract.d.mts.map +1 -0
  151. package/dist/messages/contract.mjs +26 -0
  152. package/dist/messages/contract.mjs.map +1 -0
  153. package/dist/messages/handler.cjs +54 -0
  154. package/dist/messages/handler.cjs.map +1 -0
  155. package/dist/messages/handler.d.cts +25 -0
  156. package/dist/messages/handler.d.cts.map +1 -0
  157. package/dist/messages/handler.d.mts +25 -0
  158. package/dist/messages/handler.d.mts.map +1 -0
  159. package/dist/messages/handler.mjs +48 -0
  160. package/dist/messages/handler.mjs.map +1 -0
  161. package/dist/overlays/focusTime/index.cjs +161 -0
  162. package/dist/overlays/focusTime/index.cjs.map +1 -0
  163. package/dist/overlays/focusTime/index.d.cts +6 -0
  164. package/dist/overlays/focusTime/index.d.cts.map +1 -0
  165. package/dist/overlays/focusTime/index.d.mts +6 -0
  166. package/dist/overlays/focusTime/index.d.mts.map +1 -0
  167. package/dist/overlays/focusTime/index.mjs +155 -0
  168. package/dist/overlays/focusTime/index.mjs.map +1 -0
  169. package/dist/overlays/positionLines/index.cjs +188 -0
  170. package/dist/overlays/positionLines/index.cjs.map +1 -0
  171. package/dist/overlays/positionLines/index.d.cts +4 -0
  172. package/dist/overlays/positionLines/index.d.cts.map +1 -0
  173. package/dist/overlays/positionLines/index.d.mts +4 -0
  174. package/dist/overlays/positionLines/index.d.mts.map +1 -0
  175. package/dist/overlays/positionLines/index.mjs +183 -0
  176. package/dist/overlays/positionLines/index.mjs.map +1 -0
  177. package/dist/overlays/positionLines/state.cjs +35 -0
  178. package/dist/overlays/positionLines/state.cjs.map +1 -0
  179. package/dist/overlays/positionLines/state.d.cts +8 -0
  180. package/dist/overlays/positionLines/state.d.cts.map +1 -0
  181. package/dist/overlays/positionLines/state.d.mts +8 -0
  182. package/dist/overlays/positionLines/state.d.mts.map +1 -0
  183. package/dist/overlays/positionLines/state.mjs +26 -0
  184. package/dist/overlays/positionLines/state.mjs.map +1 -0
  185. package/dist/overlays/socialLeaderboard/index.cjs +229 -0
  186. package/dist/overlays/socialLeaderboard/index.cjs.map +1 -0
  187. package/dist/overlays/socialLeaderboard/index.d.cts +48 -0
  188. package/dist/overlays/socialLeaderboard/index.d.cts.map +1 -0
  189. package/dist/overlays/socialLeaderboard/index.d.mts +48 -0
  190. package/dist/overlays/socialLeaderboard/index.d.mts.map +1 -0
  191. package/dist/overlays/socialLeaderboard/index.mjs +222 -0
  192. package/dist/overlays/socialLeaderboard/index.mjs.map +1 -0
  193. package/dist/overlays/tradeMarkers/animation.cjs +123 -0
  194. package/dist/overlays/tradeMarkers/animation.cjs.map +1 -0
  195. package/dist/overlays/tradeMarkers/animation.d.cts +5 -0
  196. package/dist/overlays/tradeMarkers/animation.d.cts.map +1 -0
  197. package/dist/overlays/tradeMarkers/animation.d.mts +5 -0
  198. package/dist/overlays/tradeMarkers/animation.d.mts.map +1 -0
  199. package/dist/overlays/tradeMarkers/animation.mjs +118 -0
  200. package/dist/overlays/tradeMarkers/animation.mjs.map +1 -0
  201. package/dist/overlays/tradeMarkers/index.cjs +334 -0
  202. package/dist/overlays/tradeMarkers/index.cjs.map +1 -0
  203. package/dist/overlays/tradeMarkers/index.d.cts +35 -0
  204. package/dist/overlays/tradeMarkers/index.d.cts.map +1 -0
  205. package/dist/overlays/tradeMarkers/index.d.mts +35 -0
  206. package/dist/overlays/tradeMarkers/index.d.mts.map +1 -0
  207. package/dist/overlays/tradeMarkers/index.mjs +324 -0
  208. package/dist/overlays/tradeMarkers/index.mjs.map +1 -0
  209. package/dist/overlays/tradeMarkers/markerHitTest.cjs +337 -0
  210. package/dist/overlays/tradeMarkers/markerHitTest.cjs.map +1 -0
  211. package/dist/overlays/tradeMarkers/markerHitTest.d.cts +15 -0
  212. package/dist/overlays/tradeMarkers/markerHitTest.d.cts.map +1 -0
  213. package/dist/overlays/tradeMarkers/markerHitTest.d.mts +15 -0
  214. package/dist/overlays/tradeMarkers/markerHitTest.d.mts.map +1 -0
  215. package/dist/overlays/tradeMarkers/markerHitTest.mjs +331 -0
  216. package/dist/overlays/tradeMarkers/markerHitTest.mjs.map +1 -0
  217. package/dist/overlays/tradeMarkers/state.cjs +75 -0
  218. package/dist/overlays/tradeMarkers/state.cjs.map +1 -0
  219. package/dist/overlays/tradeMarkers/state.d.cts +20 -0
  220. package/dist/overlays/tradeMarkers/state.d.cts.map +1 -0
  221. package/dist/overlays/tradeMarkers/state.d.mts +20 -0
  222. package/dist/overlays/tradeMarkers/state.d.mts.map +1 -0
  223. package/dist/overlays/tradeMarkers/state.mjs +60 -0
  224. package/dist/overlays/tradeMarkers/state.mjs.map +1 -0
  225. package/dist/pagination/priceApi.cjs +102 -0
  226. package/dist/pagination/priceApi.cjs.map +1 -0
  227. package/dist/pagination/priceApi.d.cts +43 -0
  228. package/dist/pagination/priceApi.d.cts.map +1 -0
  229. package/dist/pagination/priceApi.d.mts +43 -0
  230. package/dist/pagination/priceApi.d.mts.map +1 -0
  231. package/dist/pagination/priceApi.mjs +97 -0
  232. package/dist/pagination/priceApi.mjs.map +1 -0
  233. package/dist/pagination/rnBacked.cjs +108 -0
  234. package/dist/pagination/rnBacked.cjs.map +1 -0
  235. package/dist/pagination/rnBacked.d.cts +15 -0
  236. package/dist/pagination/rnBacked.d.cts.map +1 -0
  237. package/dist/pagination/rnBacked.d.mts +15 -0
  238. package/dist/pagination/rnBacked.d.mts.map +1 -0
  239. package/dist/pagination/rnBacked.mjs +100 -0
  240. package/dist/pagination/rnBacked.mjs.map +1 -0
  241. package/dist/widget/chartType.cjs +39 -0
  242. package/dist/widget/chartType.cjs.map +1 -0
  243. package/dist/widget/chartType.d.cts +4 -0
  244. package/dist/widget/chartType.d.cts.map +1 -0
  245. package/dist/widget/chartType.d.mts +4 -0
  246. package/dist/widget/chartType.d.mts.map +1 -0
  247. package/dist/widget/chartType.mjs +34 -0
  248. package/dist/widget/chartType.mjs.map +1 -0
  249. package/dist/widget/datafeed.cjs +228 -0
  250. package/dist/widget/datafeed.cjs.map +1 -0
  251. package/dist/widget/datafeed.d.cts +22 -0
  252. package/dist/widget/datafeed.d.cts.map +1 -0
  253. package/dist/widget/datafeed.d.mts +22 -0
  254. package/dist/widget/datafeed.d.mts.map +1 -0
  255. package/dist/widget/datafeed.mjs +223 -0
  256. package/dist/widget/datafeed.mjs.map +1 -0
  257. package/dist/widget/externalLinkBridge.cjs +134 -0
  258. package/dist/widget/externalLinkBridge.cjs.map +1 -0
  259. package/dist/widget/externalLinkBridge.d.cts +14 -0
  260. package/dist/widget/externalLinkBridge.d.cts.map +1 -0
  261. package/dist/widget/externalLinkBridge.d.mts +14 -0
  262. package/dist/widget/externalLinkBridge.d.mts.map +1 -0
  263. package/dist/widget/externalLinkBridge.mjs +127 -0
  264. package/dist/widget/externalLinkBridge.mjs.map +1 -0
  265. package/dist/widget/initChart.cjs +242 -0
  266. package/dist/widget/initChart.cjs.map +1 -0
  267. package/dist/widget/initChart.d.cts +53 -0
  268. package/dist/widget/initChart.d.cts.map +1 -0
  269. package/dist/widget/initChart.d.mts +53 -0
  270. package/dist/widget/initChart.d.mts.map +1 -0
  271. package/dist/widget/initChart.mjs +235 -0
  272. package/dist/widget/initChart.mjs.map +1 -0
  273. package/dist/widget/ohlcvIngestion.cjs +240 -0
  274. package/dist/widget/ohlcvIngestion.cjs.map +1 -0
  275. package/dist/widget/ohlcvIngestion.d.cts +16 -0
  276. package/dist/widget/ohlcvIngestion.d.cts.map +1 -0
  277. package/dist/widget/ohlcvIngestion.d.mts +16 -0
  278. package/dist/widget/ohlcvIngestion.d.mts.map +1 -0
  279. package/dist/widget/ohlcvIngestion.mjs +233 -0
  280. package/dist/widget/ohlcvIngestion.mjs.map +1 -0
  281. package/dist/widget/priceFormatter.cjs +142 -0
  282. package/dist/widget/priceFormatter.cjs.map +1 -0
  283. package/dist/widget/priceFormatter.d.cts +38 -0
  284. package/dist/widget/priceFormatter.d.cts.map +1 -0
  285. package/dist/widget/priceFormatter.d.mts +38 -0
  286. package/dist/widget/priceFormatter.d.mts.map +1 -0
  287. package/dist/widget/priceFormatter.mjs +134 -0
  288. package/dist/widget/priceFormatter.mjs.map +1 -0
  289. package/dist/widget/scaleLayout.cjs +89 -0
  290. package/dist/widget/scaleLayout.cjs.map +1 -0
  291. package/dist/widget/scaleLayout.d.cts +9 -0
  292. package/dist/widget/scaleLayout.d.cts.map +1 -0
  293. package/dist/widget/scaleLayout.d.mts +9 -0
  294. package/dist/widget/scaleLayout.d.mts.map +1 -0
  295. package/dist/widget/scaleLayout.mjs +85 -0
  296. package/dist/widget/scaleLayout.mjs.map +1 -0
  297. package/dist/widget/theme.cjs +286 -0
  298. package/dist/widget/theme.cjs.map +1 -0
  299. package/dist/widget/theme.d.cts +99 -0
  300. package/dist/widget/theme.d.cts.map +1 -0
  301. package/dist/widget/theme.d.mts +99 -0
  302. package/dist/widget/theme.d.mts.map +1 -0
  303. package/dist/widget/theme.mjs +270 -0
  304. package/dist/widget/theme.mjs.map +1 -0
  305. package/dist/widget/tvDomHelpers.cjs +65 -0
  306. package/dist/widget/tvDomHelpers.cjs.map +1 -0
  307. package/dist/widget/tvDomHelpers.d.cts +19 -0
  308. package/dist/widget/tvDomHelpers.d.cts.map +1 -0
  309. package/dist/widget/tvDomHelpers.d.mts +19 -0
  310. package/dist/widget/tvDomHelpers.d.mts.map +1 -0
  311. package/dist/widget/tvDomHelpers.mjs +60 -0
  312. package/dist/widget/tvDomHelpers.mjs.map +1 -0
  313. package/dist/widget/visualOverrides.cjs +63 -0
  314. package/dist/widget/visualOverrides.cjs.map +1 -0
  315. package/dist/widget/visualOverrides.d.cts +27 -0
  316. package/dist/widget/visualOverrides.d.cts.map +1 -0
  317. package/dist/widget/visualOverrides.d.mts +27 -0
  318. package/dist/widget/visualOverrides.d.mts.map +1 -0
  319. package/dist/widget/visualOverrides.mjs +58 -0
  320. package/dist/widget/visualOverrides.mjs.map +1 -0
  321. package/package.json +3 -1
@@ -0,0 +1,54 @@
1
+ // Maps OHLCV bar intervals (milliseconds) to TradingView resolution strings.
2
+ //
3
+ // Ported verbatim from chartLogic.js INTERVAL_MS_TO_TV + detectResolution
4
+ // (lines ~463-505). Phase 2 consumes this from widget/ohlcvIngestion.ts.
5
+ /** OHLCV bar interval in milliseconds → TradingView resolution code. */
6
+ export const INTERVAL_MS_TO_TV = {
7
+ 60000: '1',
8
+ 180000: '3',
9
+ 300000: '5',
10
+ 900000: '15',
11
+ 1800000: '30',
12
+ 3600000: '60',
13
+ 7200000: '120',
14
+ 14400000: '240',
15
+ 28800000: '480',
16
+ 43200000: '720',
17
+ 86400000: '1D',
18
+ 259200000: '3D',
19
+ 604800000: '1W',
20
+ 2592000000: '1M',
21
+ };
22
+ const DEFAULT_RESOLUTION = '5';
23
+ /**
24
+ * Picks the closest matching TV resolution for an OHLCV bar series.
25
+ * Uses the median diff over the first few bars so a single gap doesn't skew
26
+ * the result (matches legacy chartLogic.js detectResolution semantics).
27
+ *
28
+ * @param data - The OHLCV bar series (each bar carries a `time` in ms).
29
+ * @returns The closest matching TradingView resolution.
30
+ */
31
+ export function detectResolution(data) {
32
+ if (data.length < 2) {
33
+ return DEFAULT_RESOLUTION;
34
+ }
35
+ const sampleCount = Math.min(data.length - 1, 10);
36
+ const diffs = [];
37
+ for (let i = 0; i < sampleCount; i++) {
38
+ diffs.push(data[i + 1].time - data[i].time);
39
+ }
40
+ diffs.sort((a, b) => a - b);
41
+ const median = diffs[Math.floor(diffs.length / 2)];
42
+ let best = DEFAULT_RESOLUTION;
43
+ let bestDist = Infinity;
44
+ for (const key of Object.keys(INTERVAL_MS_TO_TV)) {
45
+ const intervalMs = Number(key);
46
+ const distance = Math.abs(intervalMs - median);
47
+ if (distance < bestDist) {
48
+ bestDist = distance;
49
+ best = INTERVAL_MS_TO_TV[intervalMs];
50
+ }
51
+ }
52
+ return best;
53
+ }
54
+ //# sourceMappingURL=resolution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.mjs","sourceRoot":"","sources":["../../src/core/resolution.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AAIzE,wEAAwE;AACxE,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,KAAM,EAAE,GAAG;IACX,MAAO,EAAE,GAAG;IACZ,MAAO,EAAE,GAAG;IACZ,MAAO,EAAE,IAAI;IACb,OAAS,EAAE,IAAI;IACf,OAAS,EAAE,IAAI;IACf,OAAS,EAAE,KAAK;IAChB,QAAU,EAAE,KAAK;IACjB,QAAU,EAAE,KAAK;IACjB,QAAU,EAAE,KAAK;IACjB,QAAU,EAAE,IAAI;IAChB,SAAW,EAAE,IAAI;IACjB,SAAW,EAAE,IAAI;IACjB,UAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,kBAAkB,GAAiB,GAAG,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,IAAI,GAAG,kBAAkB,CAAC;IAC9B,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;YACxB,QAAQ,GAAG,QAAQ,CAAC;YACpB,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Maps OHLCV bar intervals (milliseconds) to TradingView resolution strings.\n//\n// Ported verbatim from chartLogic.js INTERVAL_MS_TO_TV + detectResolution\n// (lines ~463-505). Phase 2 consumes this from widget/ohlcvIngestion.ts.\n\nimport type { TVResolution } from './types.js';\n\n/** OHLCV bar interval in milliseconds → TradingView resolution code. */\nexport const INTERVAL_MS_TO_TV: Readonly<Record<number, TVResolution>> = {\n 60_000: '1',\n 180_000: '3',\n 300_000: '5',\n 900_000: '15',\n 1_800_000: '30',\n 3_600_000: '60',\n 7_200_000: '120',\n 14_400_000: '240',\n 28_800_000: '480',\n 43_200_000: '720',\n 86_400_000: '1D',\n 259_200_000: '3D',\n 604_800_000: '1W',\n 2_592_000_000: '1M',\n};\n\nconst DEFAULT_RESOLUTION: TVResolution = '5';\n\n/**\n * Picks the closest matching TV resolution for an OHLCV bar series.\n * Uses the median diff over the first few bars so a single gap doesn't skew\n * the result (matches legacy chartLogic.js detectResolution semantics).\n *\n * @param data - The OHLCV bar series (each bar carries a `time` in ms).\n * @returns The closest matching TradingView resolution.\n */\nexport function detectResolution(data: { time: number }[]): TVResolution {\n if (data.length < 2) {\n return DEFAULT_RESOLUTION;\n }\n const sampleCount = Math.min(data.length - 1, 10);\n const diffs: number[] = [];\n for (let i = 0; i < sampleCount; i++) {\n diffs.push(data[i + 1].time - data[i].time);\n }\n diffs.sort((a, b) => a - b);\n const median = diffs[Math.floor(diffs.length / 2)];\n\n let best = DEFAULT_RESOLUTION;\n let bestDist = Infinity;\n for (const key of Object.keys(INTERVAL_MS_TO_TV)) {\n const intervalMs = Number(key);\n const distance = Math.abs(intervalMs - median);\n if (distance < bestDist) {\n bestDist = distance;\n best = INTERVAL_MS_TO_TV[intervalMs];\n }\n }\n return best;\n}\n"]}
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ // Module-local state container for the AdvancedChart WebView.
3
+ //
4
+ // Replaces the legacy `window.chartWidget`, `window.isChartReady`,
5
+ // `window.currentSymbol`, etc. (chartLogic.js lines ~21-60). Module-scoped
6
+ // variables — not window.* globals — so behaviour is testable and ownership
7
+ // is explicit. Future phases extend this with the OHLCV slice, the indicator
8
+ // slice, and so on; the convention is "core state goes here, feature-local
9
+ // state goes in features/<feature>/state.ts or overlays/<feature>/state.ts".
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.isSlbCenteringPending = exports.setSlbMode = exports.getSlbMode = exports.getHotReloadSeq = exports.bumpHotReloadSeq = exports.setRnBackedPagination = exports.getRnBackedPagination = exports.setSubPaneHeightRatio = exports.getSubPaneHeightRatio = exports.setVolumeIsOverlay = exports.getVolumeIsOverlay = exports.setVolumeStudyId = exports.getVolumeStudyId = exports.unregisterStudy = exports.registerStudy = exports.getLegendStudyOrder = exports.getMaStudies = exports.getActiveStudies = exports.getRealtimeCallbacks = exports.unregisterRealtimeCallback = exports.registerRealtimeCallback = exports.setVisibleToMs = exports.getVisibleToMs = exports.setVisibleFromMs = exports.getVisibleFromMs = exports.clearOhlcvPagination = exports.setOhlcvPagination = exports.getOhlcvPagination = exports.bumpOhlcvGeneration = exports.getOhlcvGeneration = exports.prependOhlcvBars = exports.appendOrReplaceLastBar = exports.setOhlcvData = exports.getOhlcvData = exports.setCurrentChartType = exports.getCurrentChartType = exports.setLibraryError = exports.getLibraryError = exports.setLibraryLoaded = exports.isLibraryLoaded = exports.setTheme = exports.getTheme = exports.setCurrentResolution = exports.getCurrentResolution = exports.setCurrentSymbol = exports.getCurrentSymbol = exports.setChartReady = exports.isChartReady = exports.setWidget = exports.getWidget = void 0;
12
+ exports._resetStateForTests = exports.setHasExplicitCurrentPriceLine = exports.getHasExplicitCurrentPriceLine = exports.doesLegendOwnLayoutSettle = exports.setLegendOwnsLayoutSettle = exports.setSlbCenteringPending = void 0;
13
+ const emptyPagination = () => ({
14
+ nextCursor: null,
15
+ hasMore: false,
16
+ assetId: null,
17
+ vsCurrency: null,
18
+ });
19
+ const state = {
20
+ widget: null,
21
+ isChartReady: false,
22
+ currentSymbol: 'ASSET',
23
+ currentResolution: '5',
24
+ currentChartType: 2,
25
+ theme: null,
26
+ libraryLoaded: false,
27
+ libraryError: null,
28
+ ohlcvData: [],
29
+ ohlcvGeneration: 0,
30
+ ohlcvPagination: emptyPagination(),
31
+ visibleFromMs: null,
32
+ visibleToMs: null,
33
+ realtimeCallbacks: {},
34
+ activeStudies: new Map(),
35
+ maStudies: new Map(),
36
+ legendStudyOrder: new Map(),
37
+ volumeStudyId: null,
38
+ volumeIsOverlay: null,
39
+ subPaneHeightRatio: null,
40
+ rnBackedPagination: { enabled: false },
41
+ hasExplicitCurrentPriceLine: false,
42
+ hotReloadSeq: 0,
43
+ slbMode: false,
44
+ slbCenteringPending: false,
45
+ legendOwnsLayoutSettle: false,
46
+ };
47
+ // ----- Widget lifecycle ---------------------------------------------------
48
+ function getWidget() {
49
+ return state.widget;
50
+ }
51
+ exports.getWidget = getWidget;
52
+ function setWidget(widget) {
53
+ state.widget = widget;
54
+ }
55
+ exports.setWidget = setWidget;
56
+ function isChartReady() {
57
+ return state.isChartReady;
58
+ }
59
+ exports.isChartReady = isChartReady;
60
+ function setChartReady(ready) {
61
+ state.isChartReady = ready;
62
+ }
63
+ exports.setChartReady = setChartReady;
64
+ // ----- Symbol + resolution ------------------------------------------------
65
+ function getCurrentSymbol() {
66
+ return state.currentSymbol;
67
+ }
68
+ exports.getCurrentSymbol = getCurrentSymbol;
69
+ function setCurrentSymbol(symbol) {
70
+ state.currentSymbol = symbol;
71
+ }
72
+ exports.setCurrentSymbol = setCurrentSymbol;
73
+ function getCurrentResolution() {
74
+ return state.currentResolution;
75
+ }
76
+ exports.getCurrentResolution = getCurrentResolution;
77
+ function setCurrentResolution(resolution) {
78
+ state.currentResolution = resolution;
79
+ }
80
+ exports.setCurrentResolution = setCurrentResolution;
81
+ // ----- Theme --------------------------------------------------------------
82
+ function getTheme() {
83
+ return state.theme;
84
+ }
85
+ exports.getTheme = getTheme;
86
+ function setTheme(theme) {
87
+ state.theme = theme;
88
+ }
89
+ exports.setTheme = setTheme;
90
+ // ----- Library load -------------------------------------------------------
91
+ function isLibraryLoaded() {
92
+ return state.libraryLoaded;
93
+ }
94
+ exports.isLibraryLoaded = isLibraryLoaded;
95
+ function setLibraryLoaded(loaded) {
96
+ state.libraryLoaded = loaded;
97
+ }
98
+ exports.setLibraryLoaded = setLibraryLoaded;
99
+ function getLibraryError() {
100
+ return state.libraryError;
101
+ }
102
+ exports.getLibraryError = getLibraryError;
103
+ function setLibraryError(error) {
104
+ state.libraryError = error;
105
+ }
106
+ exports.setLibraryError = setLibraryError;
107
+ // ----- Chart type --------------------------------------------------------
108
+ function getCurrentChartType() {
109
+ return state.currentChartType;
110
+ }
111
+ exports.getCurrentChartType = getCurrentChartType;
112
+ function setCurrentChartType(type) {
113
+ state.currentChartType = type;
114
+ }
115
+ exports.setCurrentChartType = setCurrentChartType;
116
+ // ----- OHLCV data --------------------------------------------------------
117
+ function getOhlcvData() {
118
+ return state.ohlcvData;
119
+ }
120
+ exports.getOhlcvData = getOhlcvData;
121
+ function setOhlcvData(data) {
122
+ state.ohlcvData = data;
123
+ }
124
+ exports.setOhlcvData = setOhlcvData;
125
+ function appendOrReplaceLastBar(bar) {
126
+ const data = state.ohlcvData;
127
+ const last = data.at(-1);
128
+ if (data.length > 0 && last?.time === bar.time) {
129
+ data[data.length - 1] = bar;
130
+ }
131
+ else {
132
+ data.push(bar);
133
+ }
134
+ }
135
+ exports.appendOrReplaceLastBar = appendOrReplaceLastBar;
136
+ function prependOhlcvBars(bars) {
137
+ state.ohlcvData = bars.concat(state.ohlcvData);
138
+ }
139
+ exports.prependOhlcvBars = prependOhlcvBars;
140
+ function getOhlcvGeneration() {
141
+ return state.ohlcvGeneration;
142
+ }
143
+ exports.getOhlcvGeneration = getOhlcvGeneration;
144
+ function bumpOhlcvGeneration() {
145
+ state.ohlcvGeneration += 1;
146
+ return state.ohlcvGeneration;
147
+ }
148
+ exports.bumpOhlcvGeneration = bumpOhlcvGeneration;
149
+ function getOhlcvPagination() {
150
+ return state.ohlcvPagination;
151
+ }
152
+ exports.getOhlcvPagination = getOhlcvPagination;
153
+ function setOhlcvPagination(pagination) {
154
+ state.ohlcvPagination = pagination;
155
+ }
156
+ exports.setOhlcvPagination = setOhlcvPagination;
157
+ function clearOhlcvPagination() {
158
+ state.ohlcvPagination = emptyPagination();
159
+ }
160
+ exports.clearOhlcvPagination = clearOhlcvPagination;
161
+ // ----- Visible range ------------------------------------------------------
162
+ function getVisibleFromMs() {
163
+ return state.visibleFromMs;
164
+ }
165
+ exports.getVisibleFromMs = getVisibleFromMs;
166
+ function setVisibleFromMs(ms) {
167
+ state.visibleFromMs = ms;
168
+ }
169
+ exports.setVisibleFromMs = setVisibleFromMs;
170
+ function getVisibleToMs() {
171
+ return state.visibleToMs;
172
+ }
173
+ exports.getVisibleToMs = getVisibleToMs;
174
+ function setVisibleToMs(ms) {
175
+ state.visibleToMs = ms;
176
+ }
177
+ exports.setVisibleToMs = setVisibleToMs;
178
+ // ----- Realtime tick subscribers ------------------------------------------
179
+ function registerRealtimeCallback(listenerGuid, callback) {
180
+ state.realtimeCallbacks[listenerGuid] = callback;
181
+ }
182
+ exports.registerRealtimeCallback = registerRealtimeCallback;
183
+ function unregisterRealtimeCallback(listenerGuid) {
184
+ delete state.realtimeCallbacks[listenerGuid];
185
+ }
186
+ exports.unregisterRealtimeCallback = unregisterRealtimeCallback;
187
+ function getRealtimeCallbacks() {
188
+ return state.realtimeCallbacks;
189
+ }
190
+ exports.getRealtimeCallbacks = getRealtimeCallbacks;
191
+ // ----- Indicator studies --------------------------------------------------
192
+ function getActiveStudies() {
193
+ return state.activeStudies;
194
+ }
195
+ exports.getActiveStudies = getActiveStudies;
196
+ function getMaStudies() {
197
+ return state.maStudies;
198
+ }
199
+ exports.getMaStudies = getMaStudies;
200
+ function getLegendStudyOrder() {
201
+ return state.legendStudyOrder;
202
+ }
203
+ exports.getLegendStudyOrder = getLegendStudyOrder;
204
+ function registerStudy(bucket, name, studyId) {
205
+ if (bucket === 'active') {
206
+ state.activeStudies.set(name, studyId);
207
+ }
208
+ else {
209
+ state.maStudies.set(name, studyId);
210
+ }
211
+ state.legendStudyOrder.set(name, studyId);
212
+ }
213
+ exports.registerStudy = registerStudy;
214
+ function unregisterStudy(name) {
215
+ const fromActive = state.activeStudies.get(name);
216
+ const fromMA = state.maStudies.get(name);
217
+ state.activeStudies.delete(name);
218
+ state.maStudies.delete(name);
219
+ state.legendStudyOrder.delete(name);
220
+ return fromActive ?? fromMA;
221
+ }
222
+ exports.unregisterStudy = unregisterStudy;
223
+ // ----- Volume study -------------------------------------------------------
224
+ function getVolumeStudyId() {
225
+ return state.volumeStudyId;
226
+ }
227
+ exports.getVolumeStudyId = getVolumeStudyId;
228
+ function setVolumeStudyId(id) {
229
+ state.volumeStudyId = id;
230
+ if (id) {
231
+ state.legendStudyOrder.set('Volume', id);
232
+ }
233
+ else {
234
+ state.legendStudyOrder.delete('Volume');
235
+ }
236
+ }
237
+ exports.setVolumeStudyId = setVolumeStudyId;
238
+ function getVolumeIsOverlay() {
239
+ return state.volumeIsOverlay;
240
+ }
241
+ exports.getVolumeIsOverlay = getVolumeIsOverlay;
242
+ function setVolumeIsOverlay(isOverlay) {
243
+ state.volumeIsOverlay = isOverlay;
244
+ }
245
+ exports.setVolumeIsOverlay = setVolumeIsOverlay;
246
+ // ----- Sub-pane height ratio ----------------------------------------------
247
+ function getSubPaneHeightRatio() {
248
+ return state.subPaneHeightRatio;
249
+ }
250
+ exports.getSubPaneHeightRatio = getSubPaneHeightRatio;
251
+ function setSubPaneHeightRatio(ratio) {
252
+ state.subPaneHeightRatio = ratio;
253
+ }
254
+ exports.setSubPaneHeightRatio = setSubPaneHeightRatio;
255
+ // ----- RN-backed pagination --------------------------------------------------
256
+ function getRnBackedPagination() {
257
+ return state.rnBackedPagination;
258
+ }
259
+ exports.getRnBackedPagination = getRnBackedPagination;
260
+ function setRnBackedPagination(config) {
261
+ state.rnBackedPagination = config;
262
+ }
263
+ exports.setRnBackedPagination = setRnBackedPagination;
264
+ // ----- Hot-reload sequence guards --------------------------------------------
265
+ function bumpHotReloadSeq() {
266
+ state.hotReloadSeq += 1;
267
+ return state.hotReloadSeq;
268
+ }
269
+ exports.bumpHotReloadSeq = bumpHotReloadSeq;
270
+ function getHotReloadSeq() {
271
+ return state.hotReloadSeq;
272
+ }
273
+ exports.getHotReloadSeq = getHotReloadSeq;
274
+ // ----- SLB (Social Leaderboard) mode -----------------------------------------
275
+ function getSlbMode() {
276
+ return state.slbMode;
277
+ }
278
+ exports.getSlbMode = getSlbMode;
279
+ function setSlbMode(enabled) {
280
+ state.slbMode = enabled;
281
+ }
282
+ exports.setSlbMode = setSlbMode;
283
+ function isSlbCenteringPending() {
284
+ return state.slbCenteringPending;
285
+ }
286
+ exports.isSlbCenteringPending = isSlbCenteringPending;
287
+ function setSlbCenteringPending(pending) {
288
+ state.slbCenteringPending = pending;
289
+ }
290
+ exports.setSlbCenteringPending = setSlbCenteringPending;
291
+ // ----- Legend owns layout settle ---------------------------------------------
292
+ function setLegendOwnsLayoutSettle(owns) {
293
+ state.legendOwnsLayoutSettle = owns;
294
+ }
295
+ exports.setLegendOwnsLayoutSettle = setLegendOwnsLayoutSettle;
296
+ function doesLegendOwnLayoutSettle() {
297
+ return state.legendOwnsLayoutSettle;
298
+ }
299
+ exports.doesLegendOwnLayoutSettle = doesLegendOwnLayoutSettle;
300
+ // ----- Explicit current price line -------------------------------------------
301
+ function getHasExplicitCurrentPriceLine() {
302
+ return state.hasExplicitCurrentPriceLine;
303
+ }
304
+ exports.getHasExplicitCurrentPriceLine = getHasExplicitCurrentPriceLine;
305
+ function setHasExplicitCurrentPriceLine(has) {
306
+ state.hasExplicitCurrentPriceLine = has;
307
+ }
308
+ exports.setHasExplicitCurrentPriceLine = setHasExplicitCurrentPriceLine;
309
+ /**
310
+ * Resets state to defaults — useful for unit tests. NOT for runtime use; the
311
+ * WebView is created fresh per mount (the RN side recreates the HTML when
312
+ * the theme or feature flags change).
313
+ */
314
+ function _resetStateForTests() {
315
+ state.widget = null;
316
+ state.isChartReady = false;
317
+ state.currentSymbol = 'ASSET';
318
+ state.currentResolution = '5';
319
+ state.currentChartType = 2;
320
+ state.theme = null;
321
+ state.libraryLoaded = false;
322
+ state.libraryError = null;
323
+ state.ohlcvData = [];
324
+ state.ohlcvGeneration = 0;
325
+ state.ohlcvPagination = emptyPagination();
326
+ state.visibleFromMs = null;
327
+ state.visibleToMs = null;
328
+ state.realtimeCallbacks = {};
329
+ state.activeStudies = new Map();
330
+ state.maStudies = new Map();
331
+ state.legendStudyOrder = new Map();
332
+ state.volumeStudyId = null;
333
+ state.volumeIsOverlay = null;
334
+ state.subPaneHeightRatio = null;
335
+ state.rnBackedPagination = { enabled: false };
336
+ state.hasExplicitCurrentPriceLine = false;
337
+ state.hotReloadSeq = 0;
338
+ state.slbMode = false;
339
+ state.slbCenteringPending = false;
340
+ state.legendOwnsLayoutSettle = false;
341
+ }
342
+ exports._resetStateForTests = _resetStateForTests;
343
+ //# sourceMappingURL=state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.cjs","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,EAAE;AACF,mEAAmE;AACnE,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;;;;AA+D7E,MAAM,eAAe,GAAG,GAA0B,EAAE,CAAC,CAAC;IACpD,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAc;IACvB,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE,GAAG;IACtB,gBAAgB,EAAE,CAAC;IACnB,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,EAAE;IACb,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,eAAe,EAAE;IAClC,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,IAAI,GAAG,EAAE;IACxB,SAAS,EAAE,IAAI,GAAG,EAAE;IACpB,gBAAgB,EAAE,IAAI,GAAG,EAAE;IAC3B,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;IACtC,2BAA2B,EAAE,KAAK;IAClC,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,KAAK;IACd,mBAAmB,EAAE,KAAK;IAC1B,sBAAsB,EAAE,KAAK;CAC9B,CAAC;AAEF,6EAA6E;AAE7E,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAFD,8BAEC;AAED,SAAgB,SAAS,CAAC,MAAsC;IAC9D,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACxB,CAAC;AAFD,8BAEC;AAED,SAAgB,YAAY;IAC1B,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,CAAC;AAFD,oCAEC;AAED,SAAgB,aAAa,CAAC,KAAc;IAC1C,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,CAAC;AAFD,sCAEC;AAED,6EAA6E;AAE7E,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,4CAEC;AAED,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC/B,CAAC;AAFD,4CAEC;AAED,SAAgB,oBAAoB;IAClC,OAAO,KAAK,CAAC,iBAAiB,CAAC;AACjC,CAAC;AAFD,oDAEC;AAED,SAAgB,oBAAoB,CAAC,UAAkB;IACrD,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAAC;AACvC,CAAC;AAFD,oDAEC;AAED,6EAA6E;AAE7E,SAAgB,QAAQ;IACtB,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAFD,4BAEC;AAED,SAAgB,QAAQ,CAAC,KAAiB;IACxC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,CAAC;AAFD,4BAEC;AAED,6EAA6E;AAE7E,SAAgB,eAAe;IAC7B,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,0CAEC;AAED,SAAgB,gBAAgB,CAAC,MAAe;IAC9C,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC/B,CAAC;AAFD,4CAEC;AAED,SAAgB,eAAe;IAC7B,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,CAAC;AAFD,0CAEC;AAED,SAAgB,eAAe,CAAC,KAAoB;IAClD,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;AAC7B,CAAC;AAFD,0CAEC;AAED,4EAA4E;AAE5E,SAAgB,mBAAmB;IACjC,OAAO,KAAK,CAAC,gBAAgB,CAAC;AAChC,CAAC;AAFD,kDAEC;AAED,SAAgB,mBAAmB,CAAC,IAAe;IACjD,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAChC,CAAC;AAFD,kDAEC;AAED,4EAA4E;AAE5E,SAAgB,YAAY;IAC1B,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC;AAFD,oCAEC;AAED,SAAgB,YAAY,CAAC,IAAgB;IAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AACzB,CAAC;AAFD,oCAEC;AAED,SAAgB,sBAAsB,CAAC,GAAa;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AARD,wDAQC;AAED,SAAgB,gBAAgB,CAAC,IAAgB;IAC/C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAFD,4CAEC;AAED,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,eAAe,CAAC;AAC/B,CAAC;AAFD,gDAEC;AAED,SAAgB,mBAAmB;IACjC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC,eAAe,CAAC;AAC/B,CAAC;AAHD,kDAGC;AAED,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,eAAe,CAAC;AAC/B,CAAC;AAFD,gDAEC;AAED,SAAgB,kBAAkB,CAAC,UAAiC;IAClE,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC;AACrC,CAAC;AAFD,gDAEC;AAED,SAAgB,oBAAoB;IAClC,KAAK,CAAC,eAAe,GAAG,eAAe,EAAE,CAAC;AAC5C,CAAC;AAFD,oDAEC;AAED,6EAA6E;AAE7E,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,4CAEC;AAED,SAAgB,gBAAgB,CAAC,EAAiB;IAChD,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;AAC3B,CAAC;AAFD,4CAEC;AAED,SAAgB,cAAc;IAC5B,OAAO,KAAK,CAAC,WAAW,CAAC;AAC3B,CAAC;AAFD,wCAEC;AAED,SAAgB,cAAc,CAAC,EAAiB;IAC9C,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;AACzB,CAAC;AAFD,wCAEC;AAED,6EAA6E;AAE7E,SAAgB,wBAAwB,CACtC,YAAoB,EACpB,QAA8B;IAE9B,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;AACnD,CAAC;AALD,4DAKC;AAED,SAAgB,0BAA0B,CAAC,YAAoB;IAC7D,OAAO,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAFD,gEAEC;AAED,SAAgB,oBAAoB;IAClC,OAAO,KAAK,CAAC,iBAAiB,CAAC;AACjC,CAAC;AAFD,oDAEC;AAED,6EAA6E;AAE7E,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,4CAEC;AAED,SAAgB,YAAY;IAC1B,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC;AAFD,oCAEC;AAED,SAAgB,mBAAmB;IACjC,OAAO,KAAK,CAAC,gBAAgB,CAAC;AAChC,CAAC;AAFD,kDAEC;AAED,SAAgB,aAAa,CAC3B,MAAuB,EACvB,IAAY,EACZ,OAAgB;IAEhB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAXD,sCAWC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,UAAU,IAAI,MAAM,CAAC;AAC9B,CAAC;AAPD,0CAOC;AAED,6EAA6E;AAE7E,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC,aAAa,CAAC;AAC7B,CAAC;AAFD,4CAEC;AAED,SAAgB,gBAAgB,CAAC,EAAkB;IACjD,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;IACzB,IAAI,EAAE,EAAE,CAAC;QACP,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAPD,4CAOC;AAED,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,eAAe,CAAC;AAC/B,CAAC;AAFD,gDAEC;AAED,SAAgB,kBAAkB,CAAC,SAAyB;IAC1D,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;AACpC,CAAC;AAFD,gDAEC;AAED,6EAA6E;AAE7E,SAAgB,qBAAqB;IACnC,OAAO,KAAK,CAAC,kBAAkB,CAAC;AAClC,CAAC;AAFD,sDAEC;AAED,SAAgB,qBAAqB,CAAC,KAAoB;IACxD,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACnC,CAAC;AAFD,sDAEC;AAED,gFAAgF;AAEhF,SAAgB,qBAAqB;IACnC,OAAO,KAAK,CAAC,kBAAkB,CAAC;AAClC,CAAC;AAFD,sDAEC;AAED,SAAgB,qBAAqB,CAAC,MAA4B;IAChE,KAAK,CAAC,kBAAkB,GAAG,MAAM,CAAC;AACpC,CAAC;AAFD,sDAEC;AAED,gFAAgF;AAEhF,SAAgB,gBAAgB;IAC9B,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,CAAC;AAHD,4CAGC;AAED,SAAgB,eAAe;IAC7B,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,CAAC;AAFD,0CAEC;AAED,gFAAgF;AAEhF,SAAgB,UAAU;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAFD,gCAEC;AAED,SAAgB,UAAU,CAAC,OAAgB;IACzC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,CAAC;AAFD,gCAEC;AAED,SAAgB,qBAAqB;IACnC,OAAO,KAAK,CAAC,mBAAmB,CAAC;AACnC,CAAC;AAFD,sDAEC;AAED,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,KAAK,CAAC,mBAAmB,GAAG,OAAO,CAAC;AACtC,CAAC;AAFD,wDAEC;AAED,gFAAgF;AAEhF,SAAgB,yBAAyB,CAAC,IAAa;IACrD,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACtC,CAAC;AAFD,8DAEC;AAED,SAAgB,yBAAyB;IACvC,OAAO,KAAK,CAAC,sBAAsB,CAAC;AACtC,CAAC;AAFD,8DAEC;AAED,gFAAgF;AAEhF,SAAgB,8BAA8B;IAC5C,OAAO,KAAK,CAAC,2BAA2B,CAAC;AAC3C,CAAC;AAFD,wEAEC;AAED,SAAgB,8BAA8B,CAAC,GAAY;IACzD,KAAK,CAAC,2BAA2B,GAAG,GAAG,CAAC;AAC1C,CAAC;AAFD,wEAEC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB;IACjC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC9B,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;IAC5B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;IACrB,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,eAAe,GAAG,eAAe,EAAE,CAAC;IAC1C,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC7B,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;IACnC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,kBAAkB,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9C,KAAK,CAAC,2BAA2B,GAAG,KAAK,CAAC;IAC1C,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACvC,CAAC;AA3BD,kDA2BC","sourcesContent":["// Module-local state container for the AdvancedChart WebView.\n//\n// Replaces the legacy `window.chartWidget`, `window.isChartReady`,\n// `window.currentSymbol`, etc. (chartLogic.js lines ~21-60). Module-scoped\n// variables — not window.* globals — so behaviour is testable and ownership\n// is explicit. Future phases extend this with the OHLCV slice, the indicator\n// slice, and so on; the convention is \"core state goes here, feature-local\n// state goes in features/<feature>/state.ts or overlays/<feature>/state.ts\".\n\nimport type {\n ChartTheme,\n ChartType,\n OHLCVBar,\n OHLCVPaginationConfig,\n RealtimeTickCallback,\n StudyId,\n TVChartingLibraryWidget,\n} from './types.js';\n\ntype CoreState = {\n widget: TVChartingLibraryWidget | null;\n isChartReady: boolean;\n currentSymbol: string;\n currentResolution: string;\n currentChartType: ChartType;\n theme: ChartTheme | null;\n libraryLoaded: boolean;\n libraryError: string | null;\n ohlcvData: OHLCVBar[];\n /** Bumped on every SET_OHLCV_DATA; stale async resolutions discard via this token. */\n ohlcvGeneration: number;\n ohlcvPagination: OHLCVPaginationConfig;\n /** Visible-range bounds (ms) for the next setVisibleRange after reset; null = use TV default. */\n visibleFromMs: number | null;\n visibleToMs: number | null;\n /** TradingView subscribeBars listenerGuid → tick callback (forwarded by REALTIME_UPDATE). */\n realtimeCallbacks: Record<string, RealtimeTickCallback>;\n /** Curated indicators (MACD, RSI, BOL, MA200) keyed by indicator name → studyId. */\n activeStudies: Map<string, StudyId>;\n /** MA visibility-driven studies (MA5/10/20/50/200) keyed by name → studyId. */\n maStudies: Map<string, StudyId>;\n /** Insertion order used to render legend pills consistently across renders. */\n legendStudyOrder: Map<string, StudyId>;\n volumeStudyId: StudyId | null;\n /** null when no volume; tracks overlay vs sub-pane for toggle continuity. */\n volumeIsOverlay: boolean | null;\n /** Effective ratio in (0, 1] for sub-pane height; null = TV default. */\n subPaneHeightRatio: number | null;\n /** When enabled, getBars sends FETCH_OLDER_BARS_REQUEST to RN instead of Price API. */\n rnBackedPagination: { enabled: boolean };\n /** True when position lines include a currentPrice line; hides TV's native price line. */\n hasExplicitCurrentPriceLine: boolean;\n /** Sequence counter for setResolution callbacks; stale callbacks bail when mismatched. */\n hotReloadSeq: number;\n /** SLB scoping flag — activates Strategy C (bulk back-fill) pagination. */\n slbMode: boolean;\n /**\n * Set to true when SLB data arrives and the viewport hasn't been\n * centered yet. Cleared after the first successful setVisibleRange\n * so re-centering only happens on a fresh SET_OHLCV_DATA.\n */\n slbCenteringPending: boolean;\n /**\n * When true, the legend module owns the CHART_LAYOUT_SETTLED signal.\n * ohlcvIngestion skips its early 2-rAF-tick emit and lets the legend\n * fire it after the first successful render post-reset.\n */\n legendOwnsLayoutSettle: boolean;\n};\n\nconst emptyPagination = (): OHLCVPaginationConfig => ({\n nextCursor: null,\n hasMore: false,\n assetId: null,\n vsCurrency: null,\n});\n\nconst state: CoreState = {\n widget: null,\n isChartReady: false,\n currentSymbol: 'ASSET',\n currentResolution: '5',\n currentChartType: 2,\n theme: null,\n libraryLoaded: false,\n libraryError: null,\n ohlcvData: [],\n ohlcvGeneration: 0,\n ohlcvPagination: emptyPagination(),\n visibleFromMs: null,\n visibleToMs: null,\n realtimeCallbacks: {},\n activeStudies: new Map(),\n maStudies: new Map(),\n legendStudyOrder: new Map(),\n volumeStudyId: null,\n volumeIsOverlay: null,\n subPaneHeightRatio: null,\n rnBackedPagination: { enabled: false },\n hasExplicitCurrentPriceLine: false,\n hotReloadSeq: 0,\n slbMode: false,\n slbCenteringPending: false,\n legendOwnsLayoutSettle: false,\n};\n\n// ----- Widget lifecycle ---------------------------------------------------\n\nexport function getWidget(): TVChartingLibraryWidget | null {\n return state.widget;\n}\n\nexport function setWidget(widget: TVChartingLibraryWidget | null): void {\n state.widget = widget;\n}\n\nexport function isChartReady(): boolean {\n return state.isChartReady;\n}\n\nexport function setChartReady(ready: boolean): void {\n state.isChartReady = ready;\n}\n\n// ----- Symbol + resolution ------------------------------------------------\n\nexport function getCurrentSymbol(): string {\n return state.currentSymbol;\n}\n\nexport function setCurrentSymbol(symbol: string): void {\n state.currentSymbol = symbol;\n}\n\nexport function getCurrentResolution(): string {\n return state.currentResolution;\n}\n\nexport function setCurrentResolution(resolution: string): void {\n state.currentResolution = resolution;\n}\n\n// ----- Theme --------------------------------------------------------------\n\nexport function getTheme(): ChartTheme | null {\n return state.theme;\n}\n\nexport function setTheme(theme: ChartTheme): void {\n state.theme = theme;\n}\n\n// ----- Library load -------------------------------------------------------\n\nexport function isLibraryLoaded(): boolean {\n return state.libraryLoaded;\n}\n\nexport function setLibraryLoaded(loaded: boolean): void {\n state.libraryLoaded = loaded;\n}\n\nexport function getLibraryError(): string | null {\n return state.libraryError;\n}\n\nexport function setLibraryError(error: string | null): void {\n state.libraryError = error;\n}\n\n// ----- Chart type --------------------------------------------------------\n\nexport function getCurrentChartType(): ChartType {\n return state.currentChartType;\n}\n\nexport function setCurrentChartType(type: ChartType): void {\n state.currentChartType = type;\n}\n\n// ----- OHLCV data --------------------------------------------------------\n\nexport function getOhlcvData(): OHLCVBar[] {\n return state.ohlcvData;\n}\n\nexport function setOhlcvData(data: OHLCVBar[]): void {\n state.ohlcvData = data;\n}\n\nexport function appendOrReplaceLastBar(bar: OHLCVBar): void {\n const data = state.ohlcvData;\n const last = data.at(-1);\n if (data.length > 0 && last?.time === bar.time) {\n data[data.length - 1] = bar;\n } else {\n data.push(bar);\n }\n}\n\nexport function prependOhlcvBars(bars: OHLCVBar[]): void {\n state.ohlcvData = bars.concat(state.ohlcvData);\n}\n\nexport function getOhlcvGeneration(): number {\n return state.ohlcvGeneration;\n}\n\nexport function bumpOhlcvGeneration(): number {\n state.ohlcvGeneration += 1;\n return state.ohlcvGeneration;\n}\n\nexport function getOhlcvPagination(): OHLCVPaginationConfig {\n return state.ohlcvPagination;\n}\n\nexport function setOhlcvPagination(pagination: OHLCVPaginationConfig): void {\n state.ohlcvPagination = pagination;\n}\n\nexport function clearOhlcvPagination(): void {\n state.ohlcvPagination = emptyPagination();\n}\n\n// ----- Visible range ------------------------------------------------------\n\nexport function getVisibleFromMs(): number | null {\n return state.visibleFromMs;\n}\n\nexport function setVisibleFromMs(ms: number | null): void {\n state.visibleFromMs = ms;\n}\n\nexport function getVisibleToMs(): number | null {\n return state.visibleToMs;\n}\n\nexport function setVisibleToMs(ms: number | null): void {\n state.visibleToMs = ms;\n}\n\n// ----- Realtime tick subscribers ------------------------------------------\n\nexport function registerRealtimeCallback(\n listenerGuid: string,\n callback: RealtimeTickCallback,\n): void {\n state.realtimeCallbacks[listenerGuid] = callback;\n}\n\nexport function unregisterRealtimeCallback(listenerGuid: string): void {\n delete state.realtimeCallbacks[listenerGuid];\n}\n\nexport function getRealtimeCallbacks(): Record<string, RealtimeTickCallback> {\n return state.realtimeCallbacks;\n}\n\n// ----- Indicator studies --------------------------------------------------\n\nexport function getActiveStudies(): Map<string, StudyId> {\n return state.activeStudies;\n}\n\nexport function getMaStudies(): Map<string, StudyId> {\n return state.maStudies;\n}\n\nexport function getLegendStudyOrder(): Map<string, StudyId> {\n return state.legendStudyOrder;\n}\n\nexport function registerStudy(\n bucket: 'active' | 'ma',\n name: string,\n studyId: StudyId,\n): void {\n if (bucket === 'active') {\n state.activeStudies.set(name, studyId);\n } else {\n state.maStudies.set(name, studyId);\n }\n state.legendStudyOrder.set(name, studyId);\n}\n\nexport function unregisterStudy(name: string): StudyId | undefined {\n const fromActive = state.activeStudies.get(name);\n const fromMA = state.maStudies.get(name);\n state.activeStudies.delete(name);\n state.maStudies.delete(name);\n state.legendStudyOrder.delete(name);\n return fromActive ?? fromMA;\n}\n\n// ----- Volume study -------------------------------------------------------\n\nexport function getVolumeStudyId(): StudyId | null {\n return state.volumeStudyId;\n}\n\nexport function setVolumeStudyId(id: StudyId | null): void {\n state.volumeStudyId = id;\n if (id) {\n state.legendStudyOrder.set('Volume', id);\n } else {\n state.legendStudyOrder.delete('Volume');\n }\n}\n\nexport function getVolumeIsOverlay(): boolean | null {\n return state.volumeIsOverlay;\n}\n\nexport function setVolumeIsOverlay(isOverlay: boolean | null): void {\n state.volumeIsOverlay = isOverlay;\n}\n\n// ----- Sub-pane height ratio ----------------------------------------------\n\nexport function getSubPaneHeightRatio(): number | null {\n return state.subPaneHeightRatio;\n}\n\nexport function setSubPaneHeightRatio(ratio: number | null): void {\n state.subPaneHeightRatio = ratio;\n}\n\n// ----- RN-backed pagination --------------------------------------------------\n\nexport function getRnBackedPagination(): { enabled: boolean } {\n return state.rnBackedPagination;\n}\n\nexport function setRnBackedPagination(config: { enabled: boolean }): void {\n state.rnBackedPagination = config;\n}\n\n// ----- Hot-reload sequence guards --------------------------------------------\n\nexport function bumpHotReloadSeq(): number {\n state.hotReloadSeq += 1;\n return state.hotReloadSeq;\n}\n\nexport function getHotReloadSeq(): number {\n return state.hotReloadSeq;\n}\n\n// ----- SLB (Social Leaderboard) mode -----------------------------------------\n\nexport function getSlbMode(): boolean {\n return state.slbMode;\n}\n\nexport function setSlbMode(enabled: boolean): void {\n state.slbMode = enabled;\n}\n\nexport function isSlbCenteringPending(): boolean {\n return state.slbCenteringPending;\n}\n\nexport function setSlbCenteringPending(pending: boolean): void {\n state.slbCenteringPending = pending;\n}\n\n// ----- Legend owns layout settle ---------------------------------------------\n\nexport function setLegendOwnsLayoutSettle(owns: boolean): void {\n state.legendOwnsLayoutSettle = owns;\n}\n\nexport function doesLegendOwnLayoutSettle(): boolean {\n return state.legendOwnsLayoutSettle;\n}\n\n// ----- Explicit current price line -------------------------------------------\n\nexport function getHasExplicitCurrentPriceLine(): boolean {\n return state.hasExplicitCurrentPriceLine;\n}\n\nexport function setHasExplicitCurrentPriceLine(has: boolean): void {\n state.hasExplicitCurrentPriceLine = has;\n}\n\n/**\n * Resets state to defaults — useful for unit tests. NOT for runtime use; the\n * WebView is created fresh per mount (the RN side recreates the HTML when\n * the theme or feature flags change).\n */\nexport function _resetStateForTests(): void {\n state.widget = null;\n state.isChartReady = false;\n state.currentSymbol = 'ASSET';\n state.currentResolution = '5';\n state.currentChartType = 2;\n state.theme = null;\n state.libraryLoaded = false;\n state.libraryError = null;\n state.ohlcvData = [];\n state.ohlcvGeneration = 0;\n state.ohlcvPagination = emptyPagination();\n state.visibleFromMs = null;\n state.visibleToMs = null;\n state.realtimeCallbacks = {};\n state.activeStudies = new Map();\n state.maStudies = new Map();\n state.legendStudyOrder = new Map();\n state.volumeStudyId = null;\n state.volumeIsOverlay = null;\n state.subPaneHeightRatio = null;\n state.rnBackedPagination = { enabled: false };\n state.hasExplicitCurrentPriceLine = false;\n state.hotReloadSeq = 0;\n state.slbMode = false;\n state.slbCenteringPending = false;\n state.legendOwnsLayoutSettle = false;\n}\n"]}
@@ -0,0 +1,67 @@
1
+ import type { ChartTheme, ChartType, OHLCVBar, OHLCVPaginationConfig, RealtimeTickCallback, StudyId, TVChartingLibraryWidget } from "./types.cjs";
2
+ export declare function getWidget(): TVChartingLibraryWidget | null;
3
+ export declare function setWidget(widget: TVChartingLibraryWidget | null): void;
4
+ export declare function isChartReady(): boolean;
5
+ export declare function setChartReady(ready: boolean): void;
6
+ export declare function getCurrentSymbol(): string;
7
+ export declare function setCurrentSymbol(symbol: string): void;
8
+ export declare function getCurrentResolution(): string;
9
+ export declare function setCurrentResolution(resolution: string): void;
10
+ export declare function getTheme(): ChartTheme | null;
11
+ export declare function setTheme(theme: ChartTheme): void;
12
+ export declare function isLibraryLoaded(): boolean;
13
+ export declare function setLibraryLoaded(loaded: boolean): void;
14
+ export declare function getLibraryError(): string | null;
15
+ export declare function setLibraryError(error: string | null): void;
16
+ export declare function getCurrentChartType(): ChartType;
17
+ export declare function setCurrentChartType(type: ChartType): void;
18
+ export declare function getOhlcvData(): OHLCVBar[];
19
+ export declare function setOhlcvData(data: OHLCVBar[]): void;
20
+ export declare function appendOrReplaceLastBar(bar: OHLCVBar): void;
21
+ export declare function prependOhlcvBars(bars: OHLCVBar[]): void;
22
+ export declare function getOhlcvGeneration(): number;
23
+ export declare function bumpOhlcvGeneration(): number;
24
+ export declare function getOhlcvPagination(): OHLCVPaginationConfig;
25
+ export declare function setOhlcvPagination(pagination: OHLCVPaginationConfig): void;
26
+ export declare function clearOhlcvPagination(): void;
27
+ export declare function getVisibleFromMs(): number | null;
28
+ export declare function setVisibleFromMs(ms: number | null): void;
29
+ export declare function getVisibleToMs(): number | null;
30
+ export declare function setVisibleToMs(ms: number | null): void;
31
+ export declare function registerRealtimeCallback(listenerGuid: string, callback: RealtimeTickCallback): void;
32
+ export declare function unregisterRealtimeCallback(listenerGuid: string): void;
33
+ export declare function getRealtimeCallbacks(): Record<string, RealtimeTickCallback>;
34
+ export declare function getActiveStudies(): Map<string, StudyId>;
35
+ export declare function getMaStudies(): Map<string, StudyId>;
36
+ export declare function getLegendStudyOrder(): Map<string, StudyId>;
37
+ export declare function registerStudy(bucket: 'active' | 'ma', name: string, studyId: StudyId): void;
38
+ export declare function unregisterStudy(name: string): StudyId | undefined;
39
+ export declare function getVolumeStudyId(): StudyId | null;
40
+ export declare function setVolumeStudyId(id: StudyId | null): void;
41
+ export declare function getVolumeIsOverlay(): boolean | null;
42
+ export declare function setVolumeIsOverlay(isOverlay: boolean | null): void;
43
+ export declare function getSubPaneHeightRatio(): number | null;
44
+ export declare function setSubPaneHeightRatio(ratio: number | null): void;
45
+ export declare function getRnBackedPagination(): {
46
+ enabled: boolean;
47
+ };
48
+ export declare function setRnBackedPagination(config: {
49
+ enabled: boolean;
50
+ }): void;
51
+ export declare function bumpHotReloadSeq(): number;
52
+ export declare function getHotReloadSeq(): number;
53
+ export declare function getSlbMode(): boolean;
54
+ export declare function setSlbMode(enabled: boolean): void;
55
+ export declare function isSlbCenteringPending(): boolean;
56
+ export declare function setSlbCenteringPending(pending: boolean): void;
57
+ export declare function setLegendOwnsLayoutSettle(owns: boolean): void;
58
+ export declare function doesLegendOwnLayoutSettle(): boolean;
59
+ export declare function getHasExplicitCurrentPriceLine(): boolean;
60
+ export declare function setHasExplicitCurrentPriceLine(has: boolean): void;
61
+ /**
62
+ * Resets state to defaults — useful for unit tests. NOT for runtime use; the
63
+ * WebView is created fresh per mount (the RN side recreates the HTML when
64
+ * the theme or feature flags change).
65
+ */
66
+ export declare function _resetStateForTests(): void;
67
+ //# sourceMappingURL=state.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.cts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { ChartTheme, ChartType, OHLCVBar, OHLCVPaginationConfig, RealtimeTickCallback, StudyId, TVChartingLibraryWidget } from "./types.mjs";
2
+ export declare function getWidget(): TVChartingLibraryWidget | null;
3
+ export declare function setWidget(widget: TVChartingLibraryWidget | null): void;
4
+ export declare function isChartReady(): boolean;
5
+ export declare function setChartReady(ready: boolean): void;
6
+ export declare function getCurrentSymbol(): string;
7
+ export declare function setCurrentSymbol(symbol: string): void;
8
+ export declare function getCurrentResolution(): string;
9
+ export declare function setCurrentResolution(resolution: string): void;
10
+ export declare function getTheme(): ChartTheme | null;
11
+ export declare function setTheme(theme: ChartTheme): void;
12
+ export declare function isLibraryLoaded(): boolean;
13
+ export declare function setLibraryLoaded(loaded: boolean): void;
14
+ export declare function getLibraryError(): string | null;
15
+ export declare function setLibraryError(error: string | null): void;
16
+ export declare function getCurrentChartType(): ChartType;
17
+ export declare function setCurrentChartType(type: ChartType): void;
18
+ export declare function getOhlcvData(): OHLCVBar[];
19
+ export declare function setOhlcvData(data: OHLCVBar[]): void;
20
+ export declare function appendOrReplaceLastBar(bar: OHLCVBar): void;
21
+ export declare function prependOhlcvBars(bars: OHLCVBar[]): void;
22
+ export declare function getOhlcvGeneration(): number;
23
+ export declare function bumpOhlcvGeneration(): number;
24
+ export declare function getOhlcvPagination(): OHLCVPaginationConfig;
25
+ export declare function setOhlcvPagination(pagination: OHLCVPaginationConfig): void;
26
+ export declare function clearOhlcvPagination(): void;
27
+ export declare function getVisibleFromMs(): number | null;
28
+ export declare function setVisibleFromMs(ms: number | null): void;
29
+ export declare function getVisibleToMs(): number | null;
30
+ export declare function setVisibleToMs(ms: number | null): void;
31
+ export declare function registerRealtimeCallback(listenerGuid: string, callback: RealtimeTickCallback): void;
32
+ export declare function unregisterRealtimeCallback(listenerGuid: string): void;
33
+ export declare function getRealtimeCallbacks(): Record<string, RealtimeTickCallback>;
34
+ export declare function getActiveStudies(): Map<string, StudyId>;
35
+ export declare function getMaStudies(): Map<string, StudyId>;
36
+ export declare function getLegendStudyOrder(): Map<string, StudyId>;
37
+ export declare function registerStudy(bucket: 'active' | 'ma', name: string, studyId: StudyId): void;
38
+ export declare function unregisterStudy(name: string): StudyId | undefined;
39
+ export declare function getVolumeStudyId(): StudyId | null;
40
+ export declare function setVolumeStudyId(id: StudyId | null): void;
41
+ export declare function getVolumeIsOverlay(): boolean | null;
42
+ export declare function setVolumeIsOverlay(isOverlay: boolean | null): void;
43
+ export declare function getSubPaneHeightRatio(): number | null;
44
+ export declare function setSubPaneHeightRatio(ratio: number | null): void;
45
+ export declare function getRnBackedPagination(): {
46
+ enabled: boolean;
47
+ };
48
+ export declare function setRnBackedPagination(config: {
49
+ enabled: boolean;
50
+ }): void;
51
+ export declare function bumpHotReloadSeq(): number;
52
+ export declare function getHotReloadSeq(): number;
53
+ export declare function getSlbMode(): boolean;
54
+ export declare function setSlbMode(enabled: boolean): void;
55
+ export declare function isSlbCenteringPending(): boolean;
56
+ export declare function setSlbCenteringPending(pending: boolean): void;
57
+ export declare function setLegendOwnsLayoutSettle(owns: boolean): void;
58
+ export declare function doesLegendOwnLayoutSettle(): boolean;
59
+ export declare function getHasExplicitCurrentPriceLine(): boolean;
60
+ export declare function setHasExplicitCurrentPriceLine(has: boolean): void;
61
+ /**
62
+ * Resets state to defaults — useful for unit tests. NOT for runtime use; the
63
+ * WebView is created fresh per mount (the RN side recreates the HTML when
64
+ * the theme or feature flags change).
65
+ */
66
+ export declare function _resetStateForTests(): void;
67
+ //# sourceMappingURL=state.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.mts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}