photon-grid-core 0.0.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 -0
  2. package/README.md +0 -0
  3. package/cell-selection/active-grid-registry.d.ts +37 -0
  4. package/cell-selection/active-grid-registry.d.ts.map +1 -0
  5. package/cell-selection/active-grid-registry.js +25 -0
  6. package/cell-selection/active-grid-registry.js.map +1 -0
  7. package/cell-selection/cell-selection-engine.d.ts +336 -0
  8. package/cell-selection/cell-selection-engine.d.ts.map +1 -0
  9. package/cell-selection/cell-selection-engine.js +1534 -0
  10. package/cell-selection/cell-selection-engine.js.map +1 -0
  11. package/cell-selection/selection-range.d.ts +16 -0
  12. package/cell-selection/selection-range.d.ts.map +1 -0
  13. package/cell-selection/selection-range.js +48 -0
  14. package/cell-selection/selection-range.js.map +1 -0
  15. package/cell-selection/selection-renderer.d.ts +24 -0
  16. package/cell-selection/selection-renderer.d.ts.map +1 -0
  17. package/cell-selection/selection-renderer.js +107 -0
  18. package/cell-selection/selection-renderer.js.map +1 -0
  19. package/chart/chart-analyzer/aggregation-analyzer.d.ts +18 -0
  20. package/chart/chart-analyzer/aggregation-analyzer.d.ts.map +1 -0
  21. package/chart/chart-analyzer/aggregation-analyzer.js +63 -0
  22. package/chart/chart-analyzer/aggregation-analyzer.js.map +1 -0
  23. package/chart/chart-analyzer/bar-analyzer.d.ts +19 -0
  24. package/chart/chart-analyzer/bar-analyzer.d.ts.map +1 -0
  25. package/chart/chart-analyzer/bar-analyzer.js +56 -0
  26. package/chart/chart-analyzer/bar-analyzer.js.map +1 -0
  27. package/chart/chart-analyzer/bubble-analyzer.d.ts +16 -0
  28. package/chart/chart-analyzer/bubble-analyzer.d.ts.map +1 -0
  29. package/chart/chart-analyzer/bubble-analyzer.js +61 -0
  30. package/chart/chart-analyzer/bubble-analyzer.js.map +1 -0
  31. package/chart/chart-analyzer/cardinality-analyzer.d.ts +13 -0
  32. package/chart/chart-analyzer/cardinality-analyzer.d.ts.map +1 -0
  33. package/chart/chart-analyzer/cardinality-analyzer.js +28 -0
  34. package/chart/chart-analyzer/cardinality-analyzer.js.map +1 -0
  35. package/chart/chart-analyzer/dimension-analyzer.d.ts +12 -0
  36. package/chart/chart-analyzer/dimension-analyzer.d.ts.map +1 -0
  37. package/chart/chart-analyzer/dimension-analyzer.js +33 -0
  38. package/chart/chart-analyzer/dimension-analyzer.js.map +1 -0
  39. package/chart/chart-analyzer/histogram-analyzer.d.ts +11 -0
  40. package/chart/chart-analyzer/histogram-analyzer.d.ts.map +1 -0
  41. package/chart/chart-analyzer/histogram-analyzer.js +43 -0
  42. package/chart/chart-analyzer/histogram-analyzer.js.map +1 -0
  43. package/chart/chart-analyzer/index.d.ts +58 -0
  44. package/chart/chart-analyzer/index.d.ts.map +1 -0
  45. package/chart/chart-analyzer/index.js +130 -0
  46. package/chart/chart-analyzer/index.js.map +1 -0
  47. package/chart/chart-analyzer/line-analyzer.d.ts +23 -0
  48. package/chart/chart-analyzer/line-analyzer.d.ts.map +1 -0
  49. package/chart/chart-analyzer/line-analyzer.js +61 -0
  50. package/chart/chart-analyzer/line-analyzer.js.map +1 -0
  51. package/chart/chart-analyzer/measure-analyzer.d.ts +11 -0
  52. package/chart/chart-analyzer/measure-analyzer.d.ts.map +1 -0
  53. package/chart/chart-analyzer/measure-analyzer.js +44 -0
  54. package/chart/chart-analyzer/measure-analyzer.js.map +1 -0
  55. package/chart/chart-analyzer/pie-analyzer.d.ts +19 -0
  56. package/chart/chart-analyzer/pie-analyzer.d.ts.map +1 -0
  57. package/chart/chart-analyzer/pie-analyzer.js +64 -0
  58. package/chart/chart-analyzer/pie-analyzer.js.map +1 -0
  59. package/chart/chart-analyzer/recommendation-engine.d.ts +18 -0
  60. package/chart/chart-analyzer/recommendation-engine.d.ts.map +1 -0
  61. package/chart/chart-analyzer/recommendation-engine.js +82 -0
  62. package/chart/chart-analyzer/recommendation-engine.js.map +1 -0
  63. package/chart/chart-analyzer/scatter-analyzer.d.ts +16 -0
  64. package/chart/chart-analyzer/scatter-analyzer.d.ts.map +1 -0
  65. package/chart/chart-analyzer/scatter-analyzer.js +70 -0
  66. package/chart/chart-analyzer/scatter-analyzer.js.map +1 -0
  67. package/chart/chart-analyzer/types.d.ts +52 -0
  68. package/chart/chart-analyzer/types.d.ts.map +1 -0
  69. package/chart/chart-analyzer/types.js +10 -0
  70. package/chart/chart-analyzer/types.js.map +1 -0
  71. package/chart/chart-analyzer.d.ts +12 -0
  72. package/chart/chart-analyzer.d.ts.map +1 -0
  73. package/chart/chart-analyzer.js +77 -0
  74. package/chart/chart-analyzer.js.map +1 -0
  75. package/chart/chart-data-transformer.d.ts +26 -0
  76. package/chart/chart-data-transformer.d.ts.map +1 -0
  77. package/chart/chart-data-transformer.js +93 -0
  78. package/chart/chart-data-transformer.js.map +1 -0
  79. package/chart/chart-engine.d.ts +38 -0
  80. package/chart/chart-engine.d.ts.map +1 -0
  81. package/chart/chart-engine.js +96 -0
  82. package/chart/chart-engine.js.map +1 -0
  83. package/chart/chart-panel.d.ts +54 -0
  84. package/chart/chart-panel.d.ts.map +1 -0
  85. package/chart/chart-panel.js +350 -0
  86. package/chart/chart-panel.js.map +1 -0
  87. package/chart/chart-renderer.d.ts +93 -0
  88. package/chart/chart-renderer.d.ts.map +1 -0
  89. package/chart/chart-renderer.js +1330 -0
  90. package/chart/chart-renderer.js.map +1 -0
  91. package/chart/sparkline/sparkline-renderer.d.ts +269 -0
  92. package/chart/sparkline/sparkline-renderer.d.ts.map +1 -0
  93. package/chart/sparkline/sparkline-renderer.js +875 -0
  94. package/chart/sparkline/sparkline-renderer.js.map +1 -0
  95. package/chart/sparkline/sparkline.types.d.ts +214 -0
  96. package/chart/sparkline/sparkline.types.d.ts.map +1 -0
  97. package/chart/sparkline/sparkline.types.js +8 -0
  98. package/chart/sparkline/sparkline.types.js.map +1 -0
  99. package/column-groups/column-group-drag-handler.d.ts +169 -0
  100. package/column-groups/column-group-drag-handler.d.ts.map +1 -0
  101. package/column-groups/column-group-drag-handler.js +517 -0
  102. package/column-groups/column-group-drag-handler.js.map +1 -0
  103. package/column-groups/column-group-header-builder.d.ts +106 -0
  104. package/column-groups/column-group-header-builder.d.ts.map +1 -0
  105. package/column-groups/column-group-header-builder.js +311 -0
  106. package/column-groups/column-group-header-builder.js.map +1 -0
  107. package/column-groups/column-group-model.d.ts +248 -0
  108. package/column-groups/column-group-model.d.ts.map +1 -0
  109. package/column-groups/column-group-model.js +668 -0
  110. package/column-groups/column-group-model.js.map +1 -0
  111. package/column-groups/column-group-state-manager.d.ts +110 -0
  112. package/column-groups/column-group-state-manager.d.ts.map +1 -0
  113. package/column-groups/column-group-state-manager.js +153 -0
  114. package/column-groups/column-group-state-manager.js.map +1 -0
  115. package/column-groups/column-group.types.d.ts +250 -0
  116. package/column-groups/column-group.types.d.ts.map +1 -0
  117. package/column-groups/column-group.types.js +20 -0
  118. package/column-groups/column-group.types.js.map +1 -0
  119. package/column-groups/display-group-builder.d.ts +91 -0
  120. package/column-groups/display-group-builder.d.ts.map +1 -0
  121. package/column-groups/display-group-builder.js +225 -0
  122. package/column-groups/display-group-builder.js.map +1 -0
  123. package/column-groups/display-group-drag-handler.d.ts +205 -0
  124. package/column-groups/display-group-drag-handler.d.ts.map +1 -0
  125. package/column-groups/display-group-drag-handler.js +536 -0
  126. package/column-groups/display-group-drag-handler.js.map +1 -0
  127. package/column-groups/display-group-engine.d.ts +310 -0
  128. package/column-groups/display-group-engine.d.ts.map +1 -0
  129. package/column-groups/display-group-engine.js +549 -0
  130. package/column-groups/display-group-engine.js.map +1 -0
  131. package/column-groups/display-group-header-builder.d.ts +94 -0
  132. package/column-groups/display-group-header-builder.d.ts.map +1 -0
  133. package/column-groups/display-group-header-builder.js +224 -0
  134. package/column-groups/display-group-header-builder.js.map +1 -0
  135. package/column-groups/display-group.types.d.ts +140 -0
  136. package/column-groups/display-group.types.d.ts.map +1 -0
  137. package/column-groups/display-group.types.js +2 -0
  138. package/column-groups/display-group.types.js.map +1 -0
  139. package/column-groups/index.d.ts +25 -0
  140. package/column-groups/index.d.ts.map +1 -0
  141. package/column-groups/index.js +26 -0
  142. package/column-groups/index.js.map +1 -0
  143. package/column-groups/logical-group-registry.d.ts +77 -0
  144. package/column-groups/logical-group-registry.d.ts.map +1 -0
  145. package/column-groups/logical-group-registry.js +118 -0
  146. package/column-groups/logical-group-registry.js.map +1 -0
  147. package/core/column-model.d.ts +30 -0
  148. package/core/column-model.d.ts.map +1 -0
  149. package/core/column-model.js +203 -0
  150. package/core/column-model.js.map +1 -0
  151. package/core/grid-api.d.ts +187 -0
  152. package/core/grid-api.d.ts.map +1 -0
  153. package/core/grid-api.js +569 -0
  154. package/core/grid-api.js.map +1 -0
  155. package/core/grid-context.d.ts +61 -0
  156. package/core/grid-context.d.ts.map +1 -0
  157. package/core/grid-context.js +2 -0
  158. package/core/grid-context.js.map +1 -0
  159. package/core/grid-core.d.ts +49 -0
  160. package/core/grid-core.d.ts.map +1 -0
  161. package/core/grid-core.js +675 -0
  162. package/core/grid-core.js.map +1 -0
  163. package/core/grid-store.d.ts +62 -0
  164. package/core/grid-store.d.ts.map +1 -0
  165. package/core/grid-store.js +104 -0
  166. package/core/grid-store.js.map +1 -0
  167. package/core/row-model.d.ts +32 -0
  168. package/core/row-model.d.ts.map +1 -0
  169. package/core/row-model.js +150 -0
  170. package/core/row-model.js.map +1 -0
  171. package/drag-drop/drag-autoscroll.d.ts +14 -0
  172. package/drag-drop/drag-autoscroll.d.ts.map +1 -0
  173. package/drag-drop/drag-autoscroll.js +66 -0
  174. package/drag-drop/drag-autoscroll.js.map +1 -0
  175. package/drag-drop/drag-drop-engine.d.ts +55 -0
  176. package/drag-drop/drag-drop-engine.d.ts.map +1 -0
  177. package/drag-drop/drag-drop-engine.js +179 -0
  178. package/drag-drop/drag-drop-engine.js.map +1 -0
  179. package/drag-drop/drag-preview.d.ts +32 -0
  180. package/drag-drop/drag-preview.d.ts.map +1 -0
  181. package/drag-drop/drag-preview.js +74 -0
  182. package/drag-drop/drag-preview.js.map +1 -0
  183. package/engines/aggregation/aggregation-engine.d.ts +66 -0
  184. package/engines/aggregation/aggregation-engine.d.ts.map +1 -0
  185. package/engines/aggregation/aggregation-engine.js +149 -0
  186. package/engines/aggregation/aggregation-engine.js.map +1 -0
  187. package/engines/clipboard/clipboard-engine.d.ts +89 -0
  188. package/engines/clipboard/clipboard-engine.d.ts.map +1 -0
  189. package/engines/clipboard/clipboard-engine.js +323 -0
  190. package/engines/clipboard/clipboard-engine.js.map +1 -0
  191. package/engines/editing/cell-editor-engine.d.ts +62 -0
  192. package/engines/editing/cell-editor-engine.d.ts.map +1 -0
  193. package/engines/editing/cell-editor-engine.js +359 -0
  194. package/engines/editing/cell-editor-engine.js.map +1 -0
  195. package/engines/editing/custom-dropdown-editor.d.ts +99 -0
  196. package/engines/editing/custom-dropdown-editor.d.ts.map +1 -0
  197. package/engines/editing/custom-dropdown-editor.js +355 -0
  198. package/engines/editing/custom-dropdown-editor.js.map +1 -0
  199. package/engines/editing/value-parser.d.ts +12 -0
  200. package/engines/editing/value-parser.d.ts.map +1 -0
  201. package/engines/editing/value-parser.js +125 -0
  202. package/engines/editing/value-parser.js.map +1 -0
  203. package/engines/export/export-engine.d.ts +16 -0
  204. package/engines/export/export-engine.d.ts.map +1 -0
  205. package/engines/export/export-engine.js +99 -0
  206. package/engines/export/export-engine.js.map +1 -0
  207. package/engines/filter/filter-condition.d.ts +7 -0
  208. package/engines/filter/filter-condition.d.ts.map +1 -0
  209. package/engines/filter/filter-condition.js +126 -0
  210. package/engines/filter/filter-condition.js.map +1 -0
  211. package/engines/filter/filter-engine.d.ts +35 -0
  212. package/engines/filter/filter-engine.d.ts.map +1 -0
  213. package/engines/filter/filter-engine.js +150 -0
  214. package/engines/filter/filter-engine.js.map +1 -0
  215. package/engines/filter/filter-panel.d.ts +103 -0
  216. package/engines/filter/filter-panel.d.ts.map +1 -0
  217. package/engines/filter/filter-panel.js +645 -0
  218. package/engines/filter/filter-panel.js.map +1 -0
  219. package/engines/grouping/group-node.d.ts +21 -0
  220. package/engines/grouping/group-node.d.ts.map +1 -0
  221. package/engines/grouping/group-node.js +96 -0
  222. package/engines/grouping/group-node.js.map +1 -0
  223. package/engines/grouping/grouping-engine.d.ts +33 -0
  224. package/engines/grouping/grouping-engine.d.ts.map +1 -0
  225. package/engines/grouping/grouping-engine.js +118 -0
  226. package/engines/grouping/grouping-engine.js.map +1 -0
  227. package/engines/master-detail/master-detail-engine.d.ts +77 -0
  228. package/engines/master-detail/master-detail-engine.d.ts.map +1 -0
  229. package/engines/master-detail/master-detail-engine.js +199 -0
  230. package/engines/master-detail/master-detail-engine.js.map +1 -0
  231. package/engines/pagination/pagination-engine.d.ts +33 -0
  232. package/engines/pagination/pagination-engine.d.ts.map +1 -0
  233. package/engines/pagination/pagination-engine.js +110 -0
  234. package/engines/pagination/pagination-engine.js.map +1 -0
  235. package/engines/selection/row-selection-engine.d.ts +26 -0
  236. package/engines/selection/row-selection-engine.d.ts.map +1 -0
  237. package/engines/selection/row-selection-engine.js +145 -0
  238. package/engines/selection/row-selection-engine.js.map +1 -0
  239. package/engines/sort/sort-comparator.d.ts +43 -0
  240. package/engines/sort/sort-comparator.d.ts.map +1 -0
  241. package/engines/sort/sort-comparator.js +113 -0
  242. package/engines/sort/sort-comparator.js.map +1 -0
  243. package/engines/sort/sort-engine.d.ts +67 -0
  244. package/engines/sort/sort-engine.d.ts.map +1 -0
  245. package/engines/sort/sort-engine.js +178 -0
  246. package/engines/sort/sort-engine.js.map +1 -0
  247. package/engines/summary/summary-engine.d.ts +17 -0
  248. package/engines/summary/summary-engine.d.ts.map +1 -0
  249. package/engines/summary/summary-engine.js +72 -0
  250. package/engines/summary/summary-engine.js.map +1 -0
  251. package/engines/tree/tree-data-service.d.ts +117 -0
  252. package/engines/tree/tree-data-service.d.ts.map +1 -0
  253. package/engines/tree/tree-data-service.js +296 -0
  254. package/engines/tree/tree-data-service.js.map +1 -0
  255. package/engines/tree/tree-expansion-service.d.ts +35 -0
  256. package/engines/tree/tree-expansion-service.d.ts.map +1 -0
  257. package/engines/tree/tree-expansion-service.js +84 -0
  258. package/engines/tree/tree-expansion-service.js.map +1 -0
  259. package/engines/tree/tree-node.d.ts +40 -0
  260. package/engines/tree/tree-node.d.ts.map +1 -0
  261. package/engines/tree/tree-node.js +199 -0
  262. package/engines/tree/tree-node.js.map +1 -0
  263. package/engines/tree/tree-selection-service.d.ts +35 -0
  264. package/engines/tree/tree-selection-service.d.ts.map +1 -0
  265. package/engines/tree/tree-selection-service.js +72 -0
  266. package/engines/tree/tree-selection-service.js.map +1 -0
  267. package/engines/undo-redo/undo-redo-engine.d.ts +114 -0
  268. package/engines/undo-redo/undo-redo-engine.d.ts.map +1 -0
  269. package/engines/undo-redo/undo-redo-engine.js +165 -0
  270. package/engines/undo-redo/undo-redo-engine.js.map +1 -0
  271. package/event-bus/event-bus.d.ts +21 -0
  272. package/event-bus/event-bus.d.ts.map +1 -0
  273. package/event-bus/event-bus.js +106 -0
  274. package/event-bus/event-bus.js.map +1 -0
  275. package/icons/icon-registry.d.ts +19 -0
  276. package/icons/icon-registry.d.ts.map +1 -0
  277. package/icons/icon-registry.js +37 -0
  278. package/icons/icon-registry.js.map +1 -0
  279. package/icons/icon-renderer.d.ts +18 -0
  280. package/icons/icon-renderer.d.ts.map +1 -0
  281. package/icons/icon-renderer.js +75 -0
  282. package/icons/icon-renderer.js.map +1 -0
  283. package/icons/icon-sets/core-icons.d.ts +2 -0
  284. package/icons/icon-sets/core-icons.d.ts.map +1 -0
  285. package/icons/icon-sets/core-icons.js +48 -0
  286. package/icons/icon-sets/core-icons.js.map +1 -0
  287. package/index.d.ts +72 -0
  288. package/index.d.ts.map +1 -0
  289. package/index.js +54 -0
  290. package/index.js.map +1 -0
  291. package/package.json +64 -0
  292. package/photon-ai/builtins/filter.commands.d.ts +4 -0
  293. package/photon-ai/builtins/filter.commands.d.ts.map +1 -0
  294. package/photon-ai/builtins/filter.commands.js +189 -0
  295. package/photon-ai/builtins/filter.commands.js.map +1 -0
  296. package/photon-ai/builtins/grouping.commands.d.ts +4 -0
  297. package/photon-ai/builtins/grouping.commands.d.ts.map +1 -0
  298. package/photon-ai/builtins/grouping.commands.js +115 -0
  299. package/photon-ai/builtins/grouping.commands.js.map +1 -0
  300. package/photon-ai/builtins/index.d.ts +10 -0
  301. package/photon-ai/builtins/index.d.ts.map +1 -0
  302. package/photon-ai/builtins/index.js +26 -0
  303. package/photon-ai/builtins/index.js.map +1 -0
  304. package/photon-ai/builtins/info.commands.d.ts +4 -0
  305. package/photon-ai/builtins/info.commands.d.ts.map +1 -0
  306. package/photon-ai/builtins/info.commands.js +201 -0
  307. package/photon-ai/builtins/info.commands.js.map +1 -0
  308. package/photon-ai/builtins/move.commands.d.ts +4 -0
  309. package/photon-ai/builtins/move.commands.d.ts.map +1 -0
  310. package/photon-ai/builtins/move.commands.js +53 -0
  311. package/photon-ai/builtins/move.commands.js.map +1 -0
  312. package/photon-ai/builtins/pin.commands.d.ts +4 -0
  313. package/photon-ai/builtins/pin.commands.d.ts.map +1 -0
  314. package/photon-ai/builtins/pin.commands.js +106 -0
  315. package/photon-ai/builtins/pin.commands.js.map +1 -0
  316. package/photon-ai/builtins/selection.commands.d.ts +4 -0
  317. package/photon-ai/builtins/selection.commands.d.ts.map +1 -0
  318. package/photon-ai/builtins/selection.commands.js +102 -0
  319. package/photon-ai/builtins/selection.commands.js.map +1 -0
  320. package/photon-ai/builtins/sort.commands.d.ts +4 -0
  321. package/photon-ai/builtins/sort.commands.d.ts.map +1 -0
  322. package/photon-ai/builtins/sort.commands.js +67 -0
  323. package/photon-ai/builtins/sort.commands.js.map +1 -0
  324. package/photon-ai/builtins/visibility.commands.d.ts +4 -0
  325. package/photon-ai/builtins/visibility.commands.d.ts.map +1 -0
  326. package/photon-ai/builtins/visibility.commands.js +75 -0
  327. package/photon-ai/builtins/visibility.commands.js.map +1 -0
  328. package/photon-ai/command-builder.d.ts +21 -0
  329. package/photon-ai/command-builder.d.ts.map +1 -0
  330. package/photon-ai/command-builder.js +18 -0
  331. package/photon-ai/command-builder.js.map +1 -0
  332. package/photon-ai/command-executor.d.ts +15 -0
  333. package/photon-ai/command-executor.d.ts.map +1 -0
  334. package/photon-ai/command-executor.js +26 -0
  335. package/photon-ai/command-executor.js.map +1 -0
  336. package/photon-ai/entity-resolver.d.ts +121 -0
  337. package/photon-ai/entity-resolver.d.ts.map +1 -0
  338. package/photon-ai/entity-resolver.js +393 -0
  339. package/photon-ai/entity-resolver.js.map +1 -0
  340. package/photon-ai/fuzzy-match.d.ts +12 -0
  341. package/photon-ai/fuzzy-match.d.ts.map +1 -0
  342. package/photon-ai/fuzzy-match.js +37 -0
  343. package/photon-ai/fuzzy-match.js.map +1 -0
  344. package/photon-ai/index.d.ts +15 -0
  345. package/photon-ai/index.d.ts.map +1 -0
  346. package/photon-ai/index.js +13 -0
  347. package/photon-ai/index.js.map +1 -0
  348. package/photon-ai/intent-parser.d.ts +20 -0
  349. package/photon-ai/intent-parser.d.ts.map +1 -0
  350. package/photon-ai/intent-parser.js +52 -0
  351. package/photon-ai/intent-parser.js.map +1 -0
  352. package/photon-ai/photon-ai-memory.d.ts +42 -0
  353. package/photon-ai/photon-ai-memory.d.ts.map +1 -0
  354. package/photon-ai/photon-ai-memory.js +86 -0
  355. package/photon-ai/photon-ai-memory.js.map +1 -0
  356. package/photon-ai/photon-ai-panel.d.ts +54 -0
  357. package/photon-ai/photon-ai-panel.d.ts.map +1 -0
  358. package/photon-ai/photon-ai-panel.js +191 -0
  359. package/photon-ai/photon-ai-panel.js.map +1 -0
  360. package/photon-ai/photon-ai-registry.d.ts +25 -0
  361. package/photon-ai/photon-ai-registry.d.ts.map +1 -0
  362. package/photon-ai/photon-ai-registry.js +41 -0
  363. package/photon-ai/photon-ai-registry.js.map +1 -0
  364. package/photon-ai/photon-ai-service.d.ts +71 -0
  365. package/photon-ai/photon-ai-service.d.ts.map +1 -0
  366. package/photon-ai/photon-ai-service.js +165 -0
  367. package/photon-ai/photon-ai-service.js.map +1 -0
  368. package/photon-ai/photon-ai.types.d.ts +100 -0
  369. package/photon-ai/photon-ai.types.d.ts.map +1 -0
  370. package/photon-ai/photon-ai.types.js +2 -0
  371. package/photon-ai/photon-ai.types.js.map +1 -0
  372. package/photon-ai/query-splitter.d.ts +22 -0
  373. package/photon-ai/query-splitter.d.ts.map +1 -0
  374. package/photon-ai/query-splitter.js +81 -0
  375. package/photon-ai/query-splitter.js.map +1 -0
  376. package/photon-ai/text-normalizer.d.ts +33 -0
  377. package/photon-ai/text-normalizer.d.ts.map +1 -0
  378. package/photon-ai/text-normalizer.js +132 -0
  379. package/photon-ai/text-normalizer.js.map +1 -0
  380. package/renderer/auto-scroller.d.ts +78 -0
  381. package/renderer/auto-scroller.d.ts.map +1 -0
  382. package/renderer/auto-scroller.js +141 -0
  383. package/renderer/auto-scroller.js.map +1 -0
  384. package/renderer/body-renderer.d.ts +191 -0
  385. package/renderer/body-renderer.d.ts.map +1 -0
  386. package/renderer/body-renderer.js +806 -0
  387. package/renderer/body-renderer.js.map +1 -0
  388. package/renderer/cell-renderer.d.ts +26 -0
  389. package/renderer/cell-renderer.d.ts.map +1 -0
  390. package/renderer/cell-renderer.js +201 -0
  391. package/renderer/cell-renderer.js.map +1 -0
  392. package/renderer/column-menu.d.ts +285 -0
  393. package/renderer/column-menu.d.ts.map +1 -0
  394. package/renderer/column-menu.js +873 -0
  395. package/renderer/column-menu.js.map +1 -0
  396. package/renderer/column-style-manager.d.ts +38 -0
  397. package/renderer/column-style-manager.d.ts.map +1 -0
  398. package/renderer/column-style-manager.js +110 -0
  399. package/renderer/column-style-manager.js.map +1 -0
  400. package/renderer/detail-row-renderer.d.ts +153 -0
  401. package/renderer/detail-row-renderer.d.ts.map +1 -0
  402. package/renderer/detail-row-renderer.js +388 -0
  403. package/renderer/detail-row-renderer.js.map +1 -0
  404. package/renderer/dom-utils.d.ts +22 -0
  405. package/renderer/dom-utils.d.ts.map +1 -0
  406. package/renderer/dom-utils.js +132 -0
  407. package/renderer/dom-utils.js.map +1 -0
  408. package/renderer/footer-renderer.d.ts +25 -0
  409. package/renderer/footer-renderer.d.ts.map +1 -0
  410. package/renderer/footer-renderer.js +168 -0
  411. package/renderer/footer-renderer.js.map +1 -0
  412. package/renderer/grid-renderer.d.ts +295 -0
  413. package/renderer/grid-renderer.d.ts.map +1 -0
  414. package/renderer/grid-renderer.js +1456 -0
  415. package/renderer/grid-renderer.js.map +1 -0
  416. package/renderer/group-context-menu.d.ts +79 -0
  417. package/renderer/group-context-menu.d.ts.map +1 -0
  418. package/renderer/group-context-menu.js +238 -0
  419. package/renderer/group-context-menu.js.map +1 -0
  420. package/renderer/group-drop-zone.d.ts +56 -0
  421. package/renderer/group-drop-zone.d.ts.map +1 -0
  422. package/renderer/group-drop-zone.js +376 -0
  423. package/renderer/group-drop-zone.js.map +1 -0
  424. package/renderer/header-renderer.d.ts +264 -0
  425. package/renderer/header-renderer.d.ts.map +1 -0
  426. package/renderer/header-renderer.js +1321 -0
  427. package/renderer/header-renderer.js.map +1 -0
  428. package/renderer/overlay-renderer.d.ts +16 -0
  429. package/renderer/overlay-renderer.d.ts.map +1 -0
  430. package/renderer/overlay-renderer.js +64 -0
  431. package/renderer/overlay-renderer.js.map +1 -0
  432. package/renderer/renderer-resolver.d.ts +18 -0
  433. package/renderer/renderer-resolver.d.ts.map +1 -0
  434. package/renderer/renderer-resolver.js +18 -0
  435. package/renderer/renderer-resolver.js.map +1 -0
  436. package/renderer/row-animator.d.ts +72 -0
  437. package/renderer/row-animator.d.ts.map +1 -0
  438. package/renderer/row-animator.js +175 -0
  439. package/renderer/row-animator.js.map +1 -0
  440. package/renderer/row-drag-renderer.d.ts +58 -0
  441. package/renderer/row-drag-renderer.d.ts.map +1 -0
  442. package/renderer/row-drag-renderer.js +395 -0
  443. package/renderer/row-drag-renderer.js.map +1 -0
  444. package/renderer/row-offset-search.d.ts +17 -0
  445. package/renderer/row-offset-search.d.ts.map +1 -0
  446. package/renderer/row-offset-search.js +31 -0
  447. package/renderer/row-offset-search.js.map +1 -0
  448. package/renderer/row-position-sheet.d.ts +11 -0
  449. package/renderer/row-position-sheet.d.ts.map +1 -0
  450. package/renderer/row-position-sheet.js +29 -0
  451. package/renderer/row-position-sheet.js.map +1 -0
  452. package/renderer/scroll-controller.d.ts +58 -0
  453. package/renderer/scroll-controller.d.ts.map +1 -0
  454. package/renderer/scroll-controller.js +200 -0
  455. package/renderer/scroll-controller.js.map +1 -0
  456. package/renderer/sticky-row-tracker.d.ts +40 -0
  457. package/renderer/sticky-row-tracker.d.ts.map +1 -0
  458. package/renderer/sticky-row-tracker.js +63 -0
  459. package/renderer/sticky-row-tracker.js.map +1 -0
  460. package/renderer/tooltip-renderer.d.ts +36 -0
  461. package/renderer/tooltip-renderer.d.ts.map +1 -0
  462. package/renderer/tooltip-renderer.js +133 -0
  463. package/renderer/tooltip-renderer.js.map +1 -0
  464. package/renderer/tree-cell-renderer.d.ts +37 -0
  465. package/renderer/tree-cell-renderer.d.ts.map +1 -0
  466. package/renderer/tree-cell-renderer.js +75 -0
  467. package/renderer/tree-cell-renderer.js.map +1 -0
  468. package/renderer/tree-sticky-row-tracker.d.ts +62 -0
  469. package/renderer/tree-sticky-row-tracker.d.ts.map +1 -0
  470. package/renderer/tree-sticky-row-tracker.js +120 -0
  471. package/renderer/tree-sticky-row-tracker.js.map +1 -0
  472. package/renderer/virtual-scroll-renderer.d.ts +37 -0
  473. package/renderer/virtual-scroll-renderer.d.ts.map +1 -0
  474. package/renderer/virtual-scroll-renderer.js +133 -0
  475. package/renderer/virtual-scroll-renderer.js.map +1 -0
  476. package/styles/base-styles.d.ts +3 -0
  477. package/styles/base-styles.d.ts.map +1 -0
  478. package/styles/base-styles.js +3045 -0
  479. package/styles/base-styles.js.map +1 -0
  480. package/styles/themes/theme-alpine.d.ts +2 -0
  481. package/styles/themes/theme-alpine.d.ts.map +1 -0
  482. package/styles/themes/theme-alpine.js +120 -0
  483. package/styles/themes/theme-alpine.js.map +1 -0
  484. package/styles/themes/theme-balham.d.ts +2 -0
  485. package/styles/themes/theme-balham.d.ts.map +1 -0
  486. package/styles/themes/theme-balham.js +120 -0
  487. package/styles/themes/theme-balham.js.map +1 -0
  488. package/styles/themes/theme-dark.d.ts +2 -0
  489. package/styles/themes/theme-dark.d.ts.map +1 -0
  490. package/styles/themes/theme-dark.js +216 -0
  491. package/styles/themes/theme-dark.js.map +1 -0
  492. package/styles/themes/theme-material.d.ts +2 -0
  493. package/styles/themes/theme-material.d.ts.map +1 -0
  494. package/styles/themes/theme-material.js +134 -0
  495. package/styles/themes/theme-material.js.map +1 -0
  496. package/styles/themes/theme-quartz.d.ts +2 -0
  497. package/styles/themes/theme-quartz.d.ts.map +1 -0
  498. package/styles/themes/theme-quartz.js +120 -0
  499. package/styles/themes/theme-quartz.js.map +1 -0
  500. package/theme/css-var-injector.d.ts +10 -0
  501. package/theme/css-var-injector.d.ts.map +1 -0
  502. package/theme/css-var-injector.js +63 -0
  503. package/theme/css-var-injector.js.map +1 -0
  504. package/theme/theme-manager.d.ts +20 -0
  505. package/theme/theme-manager.d.ts.map +1 -0
  506. package/theme/theme-manager.js +79 -0
  507. package/theme/theme-manager.js.map +1 -0
  508. package/theme/themes/dark-theme.d.ts +3 -0
  509. package/theme/themes/dark-theme.d.ts.map +1 -0
  510. package/theme/themes/dark-theme.js +149 -0
  511. package/theme/themes/dark-theme.js.map +1 -0
  512. package/theme/themes/light-theme.d.ts +3 -0
  513. package/theme/themes/light-theme.d.ts.map +1 -0
  514. package/theme/themes/light-theme.js +149 -0
  515. package/theme/themes/light-theme.js.map +1 -0
  516. package/types/column.types.d.ts +195 -0
  517. package/types/column.types.d.ts.map +1 -0
  518. package/types/column.types.js +2 -0
  519. package/types/column.types.js.map +1 -0
  520. package/types/event.types.d.ts +213 -0
  521. package/types/event.types.d.ts.map +1 -0
  522. package/types/event.types.js +67 -0
  523. package/types/event.types.js.map +1 -0
  524. package/types/filter.types.d.ts +42 -0
  525. package/types/filter.types.d.ts.map +1 -0
  526. package/types/filter.types.js +2 -0
  527. package/types/filter.types.js.map +1 -0
  528. package/types/grid.types.d.ts +214 -0
  529. package/types/grid.types.d.ts.map +1 -0
  530. package/types/grid.types.js +2 -0
  531. package/types/grid.types.js.map +1 -0
  532. package/types/master-detail.types.d.ts +112 -0
  533. package/types/master-detail.types.d.ts.map +1 -0
  534. package/types/master-detail.types.js +2 -0
  535. package/types/master-detail.types.js.map +1 -0
  536. package/types/photon-ai.types.d.ts +19 -0
  537. package/types/photon-ai.types.d.ts.map +1 -0
  538. package/types/photon-ai.types.js +2 -0
  539. package/types/photon-ai.types.js.map +1 -0
  540. package/types/renderer.types.d.ts +156 -0
  541. package/types/renderer.types.d.ts.map +1 -0
  542. package/types/renderer.types.js +19 -0
  543. package/types/renderer.types.js.map +1 -0
  544. package/types/row.types.d.ts +127 -0
  545. package/types/row.types.d.ts.map +1 -0
  546. package/types/row.types.js +9 -0
  547. package/types/row.types.js.map +1 -0
  548. package/types/theme.types.d.ts +159 -0
  549. package/types/theme.types.d.ts.map +1 -0
  550. package/types/theme.types.js +2 -0
  551. package/types/theme.types.js.map +1 -0
  552. package/types/tree-data.types.d.ts +94 -0
  553. package/types/tree-data.types.d.ts.map +1 -0
  554. package/types/tree-data.types.js +2 -0
  555. package/types/tree-data.types.js.map +1 -0
@@ -0,0 +1,875 @@
1
+ /**
2
+ * @module SparklineRenderer
3
+ *
4
+ * Canvas-based sparkline renderer for PhotonGrid.
5
+ *
6
+ * Supports seven chart types: `line`, `area`, `bar`, `column`, `win-loss`,
7
+ * `candlestick`, and `ohlc`. Each instance is bound to a single
8
+ * `<canvas>` element and manages its own event listeners.
9
+ *
10
+ * Typical lifecycle (managed by {@link CellRenderer}):
11
+ * ```
12
+ * const renderer = new SparklineRenderer(canvas, rawCellValue, config);
13
+ * // … cell lives in the DOM …
14
+ * renderer.destroy(); // called when the cell is recycled
15
+ * ```
16
+ */
17
+ // ─────────────────────────────────────────────────────────────────────────────
18
+ // Singleton tooltip manager
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ /**
21
+ * @internal
22
+ * Lazily-created singleton tooltip `<div>` that floats above sparkline cells.
23
+ * Only one tooltip is ever in the DOM; each hovered sparkline repositions it.
24
+ */
25
+ const SparklineTooltip = {
26
+ _el: null,
27
+ /** Returns the shared tooltip element, creating it on first access. */
28
+ get() {
29
+ if (!SparklineTooltip._el) {
30
+ const el = document.createElement('div');
31
+ el.className = 'pg-sparkline-tooltip';
32
+ el.setAttribute('role', 'tooltip');
33
+ el.setAttribute('aria-live', 'polite');
34
+ document.body.appendChild(el);
35
+ SparklineTooltip._el = el;
36
+ }
37
+ return SparklineTooltip._el;
38
+ },
39
+ /**
40
+ * Shows the tooltip with a single numeric value, optionally preceded by a
41
+ * label row (from `xKey`).
42
+ *
43
+ * @param clientX - Cursor x in viewport coordinates.
44
+ * @param clientY - Cursor y in viewport coordinates.
45
+ * @param label - Optional x-axis label (only shown when `hasLabel` is true).
46
+ * @param value - Numeric y-value to display.
47
+ * @param hasLabel - Whether a label row should be rendered.
48
+ */
49
+ show(clientX, clientY, label, value, hasLabel) {
50
+ const el = SparklineTooltip.get();
51
+ el.innerHTML = '';
52
+ if (hasLabel && label !== undefined) {
53
+ const labelEl = document.createElement('div');
54
+ labelEl.className = 'pg-sparkline-tooltip__label';
55
+ labelEl.textContent = label;
56
+ el.appendChild(labelEl);
57
+ }
58
+ const valueEl = document.createElement('div');
59
+ valueEl.className = 'pg-sparkline-tooltip__value';
60
+ valueEl.textContent = formatNumber(value);
61
+ el.appendChild(valueEl);
62
+ SparklineTooltip._position(el, clientX, clientY);
63
+ },
64
+ /**
65
+ * Shows the tooltip with four OHLC values.
66
+ *
67
+ * @param clientX - Cursor x in viewport coordinates.
68
+ * @param clientY - Cursor y in viewport coordinates.
69
+ * @param pt - Normalised OHLC data point.
70
+ * @param hasLabel - Whether a label row should be rendered.
71
+ */
72
+ showOHLC(clientX, clientY, pt, hasLabel) {
73
+ const el = SparklineTooltip.get();
74
+ el.innerHTML = '';
75
+ if (hasLabel && pt.label !== undefined) {
76
+ const labelEl = document.createElement('div');
77
+ labelEl.className = 'pg-sparkline-tooltip__label';
78
+ labelEl.textContent = pt.label;
79
+ el.appendChild(labelEl);
80
+ }
81
+ const rows = [
82
+ ['O', pt.open],
83
+ ['H', pt.high],
84
+ ['L', pt.low],
85
+ ['C', pt.close],
86
+ ];
87
+ for (const [key, val] of rows) {
88
+ const row = document.createElement('div');
89
+ row.className = 'pg-sparkline-tooltip__ohlc-row';
90
+ const keyEl = document.createElement('span');
91
+ keyEl.className = 'pg-sparkline-tooltip__ohlc-key';
92
+ keyEl.textContent = key;
93
+ const valEl = document.createElement('span');
94
+ valEl.className = 'pg-sparkline-tooltip__value';
95
+ valEl.textContent = formatNumber(val);
96
+ row.appendChild(keyEl);
97
+ row.appendChild(valEl);
98
+ el.appendChild(row);
99
+ }
100
+ SparklineTooltip._position(el, clientX, clientY);
101
+ },
102
+ /** Hides the tooltip without removing it from the DOM. */
103
+ hide() {
104
+ if (SparklineTooltip._el) {
105
+ SparklineTooltip._el.className = 'pg-sparkline-tooltip pg-sparkline-tooltip--hidden';
106
+ }
107
+ },
108
+ /** @internal Positions and reveals the tooltip near the cursor. */
109
+ _position(el, cx, cy) {
110
+ el.className = 'pg-sparkline-tooltip';
111
+ // Force a layout pass to get real dimensions after innerHTML change
112
+ const ew = el.offsetWidth || 80;
113
+ const eh = el.offsetHeight || 40;
114
+ const vw = window.innerWidth;
115
+ const vh = window.innerHeight;
116
+ let left = cx + 14;
117
+ if (left + ew > vw - 8)
118
+ left = cx - ew - 14;
119
+ let top = cy - Math.round(eh / 2);
120
+ if (top < 4)
121
+ top = 4;
122
+ if (top + eh > vh - 4)
123
+ top = vh - eh - 4;
124
+ el.style.left = `${left}px`;
125
+ el.style.top = `${top}px`;
126
+ },
127
+ };
128
+ // ─────────────────────────────────────────────────────────────────────────────
129
+ // Helpers
130
+ // ─────────────────────────────────────────────────────────────────────────────
131
+ /**
132
+ * Formats a number for tooltip display.
133
+ * Large values use K / M suffixes; decimals are truncated to two places.
134
+ *
135
+ * @param n - The value to format.
136
+ * @returns A compact, human-readable string.
137
+ */
138
+ function formatNumber(n) {
139
+ if (!isFinite(n))
140
+ return '—';
141
+ const abs = Math.abs(n);
142
+ if (abs >= 1000000)
143
+ return (n / 1000000).toFixed(1) + 'M';
144
+ if (abs >= 1000)
145
+ return (n / 1000).toFixed(1) + 'K';
146
+ if (n !== Math.floor(n))
147
+ return n.toFixed(2);
148
+ return String(n);
149
+ }
150
+ /**
151
+ * Reads a CSS custom property from the computed style of an element.
152
+ * Returns `fallback` when the property is absent or empty.
153
+ *
154
+ * @param el - Reference element for `getComputedStyle`.
155
+ * @param varName - CSS variable name including leading `--`.
156
+ * @param fallback - Value to use when the variable is not found.
157
+ */
158
+ function cssVar(el, varName, fallback) {
159
+ const raw = getComputedStyle(el).getPropertyValue(varName).trim();
160
+ return raw || fallback;
161
+ }
162
+ /**
163
+ * Converts a hex colour string to an `rgba(…)` string with the given opacity.
164
+ *
165
+ * @param hex - Six-digit hex colour, e.g. `'#2563eb'`.
166
+ * @param opacity - Opacity fraction (0–1).
167
+ * @returns An `rgba(…)` colour string.
168
+ */
169
+ function hexToRgba(hex, opacity) {
170
+ const clean = hex.replace('#', '');
171
+ if (clean.length !== 6)
172
+ return hex;
173
+ const r = parseInt(clean.slice(0, 2), 16);
174
+ const g = parseInt(clean.slice(2, 4), 16);
175
+ const b = parseInt(clean.slice(4, 6), 16);
176
+ return `rgba(${r},${g},${b},${opacity})`;
177
+ }
178
+ // ─────────────────────────────────────────────────────────────────────────────
179
+ // SparklineRenderer
180
+ // ─────────────────────────────────────────────────────────────────────────────
181
+ /**
182
+ * Renders a mini chart onto a `<canvas>` element inside a grid cell.
183
+ *
184
+ * The renderer is instantiated once per visible cell by {@link CellRenderer}
185
+ * after the canvas has been mounted to the DOM and has non-zero dimensions.
186
+ * It handles its own mouse events and delegates tooltip display to the
187
+ * shared {@link SparklineTooltip} singleton.
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * const renderer = new SparklineRenderer(canvasEl, row.data.history, {
192
+ * type: 'line',
193
+ * stroke: '#2563eb',
194
+ * showMarkers: true,
195
+ * });
196
+ *
197
+ * // Later, when the cell is recycled:
198
+ * renderer.destroy();
199
+ * ```
200
+ */
201
+ export class SparklineRenderer {
202
+ /**
203
+ * Creates a new SparklineRenderer and immediately draws the chart.
204
+ *
205
+ * The canvas **must** already have non-zero CSS dimensions when this
206
+ * constructor is called; the constructor reads `clientWidth` / `clientHeight`
207
+ * to set the backing-buffer resolution for retina displays.
208
+ *
209
+ * @param canvas - The `<canvas>` element to draw onto.
210
+ * @param rawData - The cell value; a flat `number[]` or `object[]`.
211
+ * @param config - Sparkline appearance configuration.
212
+ */
213
+ constructor(canvas, rawData, config) {
214
+ const ctx = canvas.getContext('2d');
215
+ if (!ctx) {
216
+ throw new Error('[PhotonGrid] SparklineRenderer: failed to get 2D context');
217
+ }
218
+ this.canvas = canvas;
219
+ this.ctx = ctx;
220
+ this.cfg = this._resolveConfig(config);
221
+ this.rawData = rawData;
222
+ this.isOHLC = this.cfg.type === 'candlestick' || this.cfg.type === 'ohlc';
223
+ this.hasLabels = this._rawHasLabels(rawData, this.cfg);
224
+ if (this.isOHLC) {
225
+ this.ohlcPoints = this._parseOHLC(rawData);
226
+ this.points = [];
227
+ }
228
+ else {
229
+ this.points = this._parsePoints(rawData);
230
+ this.ohlcPoints = [];
231
+ }
232
+ // Scale canvas buffer for device pixel ratio
233
+ this._syncSize();
234
+ this._onMouseMove = this._handleMouseMove.bind(this);
235
+ this._onMouseLeave = this._handleMouseLeave.bind(this);
236
+ if (this.cfg.showTooltip) {
237
+ this.canvas.addEventListener('mousemove', this._onMouseMove);
238
+ this.canvas.addEventListener('mouseleave', this._onMouseLeave);
239
+ }
240
+ this._draw();
241
+ }
242
+ // ─── Public API ────────────────────────────────────────────────────────────
243
+ /**
244
+ * Re-parses {@link rawData} and redraws the chart onto the canvas.
245
+ *
246
+ * Designed for real-time use cases where the same array reference is
247
+ * mutated in-place on each tick (e.g. a live stock ticker). No new data
248
+ * reference is needed — the renderer reads from the same array it received
249
+ * at construction time.
250
+ *
251
+ * @example
252
+ * ```ts
253
+ * // Shift the live array and call redraw — no new SparklineRenderer needed.
254
+ * history.shift();
255
+ * history.push(newPrice);
256
+ * renderer.redraw();
257
+ * ```
258
+ */
259
+ redraw() {
260
+ if (this.isOHLC) {
261
+ this.ohlcPoints = this._parseOHLC(this.rawData);
262
+ }
263
+ else {
264
+ this.points = this._parsePoints(this.rawData);
265
+ }
266
+ this._syncSize();
267
+ this._draw();
268
+ }
269
+ /**
270
+ * Releases all event listeners held by this renderer.
271
+ * Must be called when the host cell element is removed from the DOM to
272
+ * prevent memory leaks.
273
+ */
274
+ destroy() {
275
+ this.canvas.removeEventListener('mousemove', this._onMouseMove);
276
+ this.canvas.removeEventListener('mouseleave', this._onMouseLeave);
277
+ SparklineTooltip.hide();
278
+ }
279
+ // ─── Initialisation helpers ────────────────────────────────────────────────
280
+ /**
281
+ * Sets `canvas.width` / `canvas.height` to the physical pixel resolution
282
+ * (CSS size × device pixel ratio) and resets the transform.
283
+ */
284
+ _syncSize() {
285
+ const dpr = window.devicePixelRatio || 1;
286
+ const w = this.canvas.clientWidth;
287
+ const h = this.canvas.clientHeight;
288
+ this.canvas.width = Math.round(w * dpr);
289
+ this.canvas.height = Math.round(h * dpr);
290
+ this.ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
291
+ }
292
+ /**
293
+ * Builds the {@link ResolvedConfig} by merging caller-provided options with
294
+ * theme CSS variables and hard-coded defaults.
295
+ *
296
+ * @param config - Raw user-supplied configuration.
297
+ * @returns Fully resolved configuration object.
298
+ */
299
+ _resolveConfig(config) {
300
+ const el = this.canvas;
301
+ const primaryColor = cssVar(el, '--pg-primary', '#2563eb');
302
+ const errorColor = cssVar(el, '--pg-colors-error', '#ef4444');
303
+ const successColor = cssVar(el, '--pg-colors-success', '#22c55e');
304
+ const stroke = config.stroke ?? primaryColor;
305
+ const positiveColor = config.positiveColor ?? stroke;
306
+ let fillColor = config.fill ?? '';
307
+ if (!fillColor) {
308
+ if (stroke.startsWith('#') && stroke.length === 7) {
309
+ fillColor = hexToRgba(stroke, 0.18);
310
+ }
311
+ else {
312
+ fillColor = stroke;
313
+ }
314
+ }
315
+ return {
316
+ type: config.type ?? 'line',
317
+ stroke,
318
+ fill: fillColor,
319
+ lineWidth: config.lineWidth ?? 1.5,
320
+ showMarkers: config.showMarkers ?? false,
321
+ markerSize: config.markerSize ?? 2.5,
322
+ markerFill: config.markerFill ?? stroke,
323
+ padding: config.padding ?? 3,
324
+ barSpacing: config.barSpacing ?? 0.15,
325
+ positiveColor,
326
+ negativeColor: config.negativeColor ?? errorColor,
327
+ bullColor: config.bullColor ?? successColor,
328
+ bearColor: config.bearColor ?? errorColor,
329
+ showTooltip: config.showTooltip ?? true,
330
+ xKey: config.xKey ?? '',
331
+ yKey: config.yKey ?? 'value',
332
+ openKey: config.openKey ?? 'open',
333
+ highKey: config.highKey ?? 'high',
334
+ lowKey: config.lowKey ?? 'low',
335
+ closeKey: config.closeKey ?? 'close',
336
+ };
337
+ }
338
+ /**
339
+ * Returns `true` when the raw cell value is an object array that contains
340
+ * an x-axis label key (from `config.xKey`).
341
+ *
342
+ * @param rawData - The cell value.
343
+ * @param cfg - Resolved configuration.
344
+ */
345
+ _rawHasLabels(rawData, cfg) {
346
+ if (!Array.isArray(rawData) || rawData.length === 0)
347
+ return false;
348
+ return typeof rawData[0] === 'object' && rawData[0] !== null && !!cfg.xKey;
349
+ }
350
+ /**
351
+ * Normalises the raw cell value into an array of {@link SparklinePoint}s.
352
+ * Accepts `number[]` or `object[]`; non-numeric / null values become `0`.
353
+ *
354
+ * @param rawData - The cell value.
355
+ * @returns Array of normalised data points.
356
+ */
357
+ _parsePoints(rawData) {
358
+ if (!Array.isArray(rawData) || rawData.length === 0)
359
+ return [];
360
+ return rawData.map((item, index) => {
361
+ if (typeof item === 'number') {
362
+ return { index, value: item };
363
+ }
364
+ if (typeof item === 'object' && item !== null) {
365
+ const obj = item;
366
+ const value = Number(obj[this.cfg.yKey] ?? 0);
367
+ const label = this.cfg.xKey ? String(obj[this.cfg.xKey] ?? index) : undefined;
368
+ return { index, value: isFinite(value) ? value : 0, label };
369
+ }
370
+ return { index, value: Number(item) || 0 };
371
+ });
372
+ }
373
+ /**
374
+ * Normalises the raw cell value into an array of {@link OHLCPoint}s.
375
+ * Used for `candlestick` and `ohlc` chart types.
376
+ *
377
+ * @param rawData - The cell value.
378
+ * @returns Array of normalised OHLC data points.
379
+ */
380
+ _parseOHLC(rawData) {
381
+ if (!Array.isArray(rawData) || rawData.length === 0)
382
+ return [];
383
+ return rawData.map((item, index) => {
384
+ const obj = (typeof item === 'object' && item !== null)
385
+ ? item
386
+ : {};
387
+ const num = (key) => {
388
+ const v = Number(obj[key] ?? 0);
389
+ return isFinite(v) ? v : 0;
390
+ };
391
+ const label = this.cfg.xKey ? String(obj[this.cfg.xKey] ?? index) : undefined;
392
+ return {
393
+ index,
394
+ open: num(this.cfg.openKey),
395
+ high: num(this.cfg.highKey),
396
+ low: num(this.cfg.lowKey),
397
+ close: num(this.cfg.closeKey),
398
+ label,
399
+ };
400
+ });
401
+ }
402
+ // ─── Drawing dispatch ──────────────────────────────────────────────────────
403
+ /**
404
+ * Clears the canvas and delegates to the type-specific draw method.
405
+ */
406
+ _draw() {
407
+ const { ctx } = this;
408
+ const w = this.canvas.clientWidth;
409
+ const h = this.canvas.clientHeight;
410
+ ctx.clearRect(0, 0, w, h);
411
+ switch (this.cfg.type) {
412
+ case 'line':
413
+ this._drawLine(w, h);
414
+ break;
415
+ case 'area':
416
+ this._drawArea(w, h);
417
+ break;
418
+ case 'column':
419
+ this._drawColumn(w, h);
420
+ break;
421
+ case 'bar':
422
+ this._drawBar(w, h);
423
+ break;
424
+ case 'win-loss':
425
+ this._drawWinLoss(w, h);
426
+ break;
427
+ case 'candlestick':
428
+ this._drawCandlestick(w, h);
429
+ break;
430
+ case 'ohlc':
431
+ this._drawOHLC(w, h);
432
+ break;
433
+ }
434
+ }
435
+ // ─── Type-specific renderers ───────────────────────────────────────────────
436
+ /**
437
+ * Renders a `line` sparkline: a polyline connecting all data points.
438
+ *
439
+ * @param w - CSS logical canvas width.
440
+ * @param h - CSS logical canvas height.
441
+ */
442
+ _drawLine(w, h) {
443
+ const pts = this.points;
444
+ if (pts.length < 2)
445
+ return;
446
+ const { ctx, cfg } = this;
447
+ const { pad, plotW, plotH, plotLeft, plotTop, minV, range } = this._plotMetrics(w, h, pts);
448
+ ctx.beginPath();
449
+ ctx.strokeStyle = cfg.stroke;
450
+ ctx.lineWidth = cfg.lineWidth;
451
+ ctx.lineJoin = 'round';
452
+ ctx.lineCap = 'round';
453
+ for (let i = 0; i < pts.length; i++) {
454
+ const x = this._xPos(i, pts.length, plotLeft, plotW);
455
+ const y = this._yPos(pts[i].value, minV, range, plotTop, plotH);
456
+ if (i === 0)
457
+ ctx.moveTo(x, y);
458
+ else
459
+ ctx.lineTo(x, y);
460
+ }
461
+ ctx.stroke();
462
+ if (cfg.showMarkers)
463
+ this._drawMarkers(pts, plotLeft, plotTop, plotW, plotH, minV, range);
464
+ void pad; // suppress unused-variable lint for symmetry with other methods
465
+ }
466
+ /**
467
+ * Renders an `area` sparkline: a filled region beneath a line chart.
468
+ *
469
+ * @param w - CSS logical canvas width.
470
+ * @param h - CSS logical canvas height.
471
+ */
472
+ _drawArea(w, h) {
473
+ const pts = this.points;
474
+ if (pts.length < 2)
475
+ return;
476
+ const { ctx, cfg } = this;
477
+ const { plotW, plotH, plotLeft, plotTop, plotBottom, minV, range } = this._plotMetrics(w, h, pts);
478
+ // Filled area
479
+ ctx.beginPath();
480
+ for (let i = 0; i < pts.length; i++) {
481
+ const x = this._xPos(i, pts.length, plotLeft, plotW);
482
+ const y = this._yPos(pts[i].value, minV, range, plotTop, plotH);
483
+ if (i === 0)
484
+ ctx.moveTo(x, y);
485
+ else
486
+ ctx.lineTo(x, y);
487
+ }
488
+ const lastX = this._xPos(pts.length - 1, pts.length, plotLeft, plotW);
489
+ const firstX = this._xPos(0, pts.length, plotLeft, plotW);
490
+ ctx.lineTo(lastX, plotBottom);
491
+ ctx.lineTo(firstX, plotBottom);
492
+ ctx.closePath();
493
+ ctx.fillStyle = cfg.fill;
494
+ ctx.fill();
495
+ // Stroke on top
496
+ ctx.beginPath();
497
+ ctx.strokeStyle = cfg.stroke;
498
+ ctx.lineWidth = cfg.lineWidth;
499
+ ctx.lineJoin = 'round';
500
+ ctx.lineCap = 'round';
501
+ for (let i = 0; i < pts.length; i++) {
502
+ const x = this._xPos(i, pts.length, plotLeft, plotW);
503
+ const y = this._yPos(pts[i].value, minV, range, plotTop, plotH);
504
+ if (i === 0)
505
+ ctx.moveTo(x, y);
506
+ else
507
+ ctx.lineTo(x, y);
508
+ }
509
+ ctx.stroke();
510
+ if (cfg.showMarkers)
511
+ this._drawMarkers(pts, plotLeft, plotTop, plotW, plotH, minV, range);
512
+ }
513
+ /**
514
+ * Renders a `column` sparkline: vertical bars anchored at the zero line.
515
+ *
516
+ * @param w - CSS logical canvas width.
517
+ * @param h - CSS logical canvas height.
518
+ */
519
+ _drawColumn(w, h) {
520
+ const pts = this.points;
521
+ if (pts.length === 0)
522
+ return;
523
+ const { ctx, cfg } = this;
524
+ const { plotW, plotH, plotLeft, plotTop, minV, range } = this._plotMetrics(w, h, pts);
525
+ const n = pts.length;
526
+ const bandW = plotW / n;
527
+ const gap = bandW * cfg.barSpacing;
528
+ const barW = Math.max(1, bandW - gap);
529
+ const zeroY = this._yPos(0, minV, range, plotTop, plotH);
530
+ for (const pt of pts) {
531
+ const x = plotLeft + pt.index * bandW + gap / 2;
532
+ const yVal = this._yPos(pt.value, minV, range, plotTop, plotH);
533
+ const top = Math.min(yVal, zeroY);
534
+ const barH = Math.max(1, Math.abs(yVal - zeroY));
535
+ ctx.fillStyle = pt.value >= 0 ? cfg.positiveColor : cfg.negativeColor;
536
+ ctx.fillRect(x, top, barW, barH);
537
+ }
538
+ }
539
+ /**
540
+ * Renders a `bar` sparkline: horizontal bars anchored at the zero line.
541
+ *
542
+ * @param w - CSS logical canvas width.
543
+ * @param h - CSS logical canvas height.
544
+ */
545
+ _drawBar(w, h) {
546
+ const pts = this.points;
547
+ if (pts.length === 0)
548
+ return;
549
+ const { ctx, cfg } = this;
550
+ const pad = cfg.padding;
551
+ const plotH = h - pad * 2;
552
+ const plotW = w - pad * 2;
553
+ const plotTop = pad;
554
+ const plotLeft = pad;
555
+ const minV = Math.min(...pts.map((p) => p.value), 0);
556
+ const maxV = Math.max(...pts.map((p) => p.value), 0);
557
+ const range = maxV - minV || 1;
558
+ const n = pts.length;
559
+ const bandH = plotH / n;
560
+ const gap = bandH * cfg.barSpacing;
561
+ const barH = Math.max(1, bandH - gap);
562
+ const zeroX = plotLeft + ((0 - minV) / range) * plotW;
563
+ for (const pt of pts) {
564
+ const y = plotTop + pt.index * bandH + gap / 2;
565
+ const xVal = plotLeft + ((pt.value - minV) / range) * plotW;
566
+ const left = Math.min(xVal, zeroX);
567
+ const barW = Math.max(1, Math.abs(xVal - zeroX));
568
+ ctx.fillStyle = pt.value >= 0 ? cfg.positiveColor : cfg.negativeColor;
569
+ ctx.fillRect(left, y, barW, barH);
570
+ }
571
+ }
572
+ /**
573
+ * Renders a `win-loss` sparkline: uniform-height bars indicating
574
+ * positive (win), negative (loss), or zero (neutral) values.
575
+ *
576
+ * @param w - CSS logical canvas width.
577
+ * @param h - CSS logical canvas height.
578
+ */
579
+ _drawWinLoss(w, h) {
580
+ const pts = this.points;
581
+ if (pts.length === 0)
582
+ return;
583
+ const { ctx, cfg } = this;
584
+ const pad = cfg.padding;
585
+ const plotTop = pad;
586
+ const plotH = h - pad * 2;
587
+ const plotLeft = pad;
588
+ const plotW = w - pad * 2;
589
+ const n = pts.length;
590
+ const bandW = plotW / n;
591
+ const gap = bandW * cfg.barSpacing;
592
+ const barW = Math.max(1, bandW - gap);
593
+ const midY = plotTop + plotH / 2;
594
+ const halfH = Math.max(1, plotH / 2 - 1);
595
+ for (const pt of pts) {
596
+ const x = plotLeft + pt.index * bandW + gap / 2;
597
+ if (pt.value > 0) {
598
+ ctx.fillStyle = cfg.positiveColor;
599
+ ctx.fillRect(x, midY - halfH, barW, halfH);
600
+ }
601
+ else if (pt.value < 0) {
602
+ ctx.fillStyle = cfg.negativeColor;
603
+ ctx.fillRect(x, midY, barW, halfH);
604
+ }
605
+ else {
606
+ // Neutral — draw a thin line at midpoint
607
+ ctx.fillStyle = cssVar(this.canvas, '--pg-colors-border', '#e2e8f0');
608
+ ctx.fillRect(x, midY - 1, barW, 2);
609
+ }
610
+ }
611
+ }
612
+ /**
613
+ * Renders a `candlestick` sparkline: OHLC data as filled bodies with wicks.
614
+ *
615
+ * @param w - CSS logical canvas width.
616
+ * @param h - CSS logical canvas height.
617
+ */
618
+ _drawCandlestick(w, h) {
619
+ const pts = this.ohlcPoints;
620
+ if (pts.length === 0)
621
+ return;
622
+ const { ctx, cfg } = this;
623
+ const metrics = this._ohlcMetrics(w, h, pts);
624
+ const { plotLeft, plotTop, plotW, plotH, minV, range, bandW, gap } = metrics;
625
+ for (const pt of pts) {
626
+ const isBull = pt.close >= pt.open;
627
+ const color = isBull ? cfg.bullColor : cfg.bearColor;
628
+ const cx = plotLeft + pt.index * bandW + bandW / 2;
629
+ const highY = this._yPos(pt.high, minV, range, plotTop, plotH);
630
+ const lowY = this._yPos(pt.low, minV, range, plotTop, plotH);
631
+ const openY = this._yPos(pt.open, minV, range, plotTop, plotH);
632
+ const closeY = this._yPos(pt.close, minV, range, plotTop, plotH);
633
+ const bodyTop = Math.min(openY, closeY);
634
+ const bodyH = Math.max(1, Math.abs(closeY - openY));
635
+ const barW = Math.max(2, bandW - gap);
636
+ // Wick
637
+ ctx.strokeStyle = color;
638
+ ctx.lineWidth = 1;
639
+ ctx.beginPath();
640
+ ctx.moveTo(cx, highY);
641
+ ctx.lineTo(cx, lowY);
642
+ ctx.stroke();
643
+ // Body
644
+ ctx.fillStyle = color;
645
+ ctx.fillRect(cx - barW / 2, bodyTop, barW, bodyH);
646
+ }
647
+ }
648
+ /**
649
+ * Renders an `ohlc` sparkline: high-low wicks with open / close tick marks.
650
+ *
651
+ * @param w - CSS logical canvas width.
652
+ * @param h - CSS logical canvas height.
653
+ */
654
+ _drawOHLC(w, h) {
655
+ const pts = this.ohlcPoints;
656
+ if (pts.length === 0)
657
+ return;
658
+ const { ctx, cfg } = this;
659
+ const metrics = this._ohlcMetrics(w, h, pts);
660
+ const { plotLeft, plotTop, plotW, plotH, minV, range, bandW } = metrics;
661
+ const tickLen = Math.max(2, Math.min(4, bandW * 0.35));
662
+ for (const pt of pts) {
663
+ const isBull = pt.close >= pt.open;
664
+ const color = isBull ? cfg.bullColor : cfg.bearColor;
665
+ const cx = plotLeft + pt.index * bandW + bandW / 2;
666
+ const highY = this._yPos(pt.high, minV, range, plotTop, plotH);
667
+ const lowY = this._yPos(pt.low, minV, range, plotTop, plotH);
668
+ const openY = this._yPos(pt.open, minV, range, plotTop, plotH);
669
+ const closeY = this._yPos(pt.close, minV, range, plotTop, plotH);
670
+ ctx.strokeStyle = color;
671
+ ctx.lineWidth = Math.max(1, bandW * 0.15);
672
+ ctx.lineCap = 'square';
673
+ // High-low wick
674
+ ctx.beginPath();
675
+ ctx.moveTo(cx, highY);
676
+ ctx.lineTo(cx, lowY);
677
+ ctx.stroke();
678
+ // Open tick (left)
679
+ ctx.beginPath();
680
+ ctx.moveTo(cx - tickLen, openY);
681
+ ctx.lineTo(cx, openY);
682
+ ctx.stroke();
683
+ // Close tick (right)
684
+ ctx.beginPath();
685
+ ctx.moveTo(cx, closeY);
686
+ ctx.lineTo(cx + tickLen, closeY);
687
+ ctx.stroke();
688
+ }
689
+ void plotW; // referenced indirectly through plotLeft / metrics
690
+ }
691
+ // ─── Shared drawing utilities ──────────────────────────────────────────────
692
+ /**
693
+ * Draws circular markers at each data point for `line` and `area` charts.
694
+ *
695
+ * @param pts - Normalised data points.
696
+ * @param plotLeft - Left edge of the plot area (logical px).
697
+ * @param plotTop - Top edge of the plot area (logical px).
698
+ * @param plotW - Width of the plot area (logical px).
699
+ * @param plotH - Height of the plot area (logical px).
700
+ * @param minV - Minimum value in the series.
701
+ * @param range - Value range (maxV - minV).
702
+ */
703
+ _drawMarkers(pts, plotLeft, plotTop, plotW, plotH, minV, range) {
704
+ const { ctx, cfg } = this;
705
+ ctx.fillStyle = cfg.markerFill;
706
+ for (let i = 0; i < pts.length; i++) {
707
+ const x = this._xPos(i, pts.length, plotLeft, plotW);
708
+ const y = this._yPos(pts[i].value, minV, range, plotTop, plotH);
709
+ ctx.beginPath();
710
+ ctx.arc(x, y, cfg.markerSize, 0, Math.PI * 2);
711
+ ctx.fill();
712
+ }
713
+ }
714
+ // ─── Coordinate helpers ────────────────────────────────────────────────────
715
+ /**
716
+ * Computes common plot-area metrics for scalar (non-OHLC) chart types.
717
+ *
718
+ * @param w - Logical canvas width.
719
+ * @param h - Logical canvas height.
720
+ * @param pts - Data points to compute value domain from.
721
+ * @returns Plot dimensions and domain bounds.
722
+ */
723
+ _plotMetrics(w, h, pts) {
724
+ const pad = this.cfg.padding;
725
+ const plotLeft = pad;
726
+ const plotTop = pad;
727
+ const plotRight = w - pad;
728
+ const plotBottom = h - pad;
729
+ const plotW = plotRight - plotLeft;
730
+ const plotH = plotBottom - plotTop;
731
+ const values = pts.map((p) => p.value);
732
+ const minV = Math.min(...values, 0);
733
+ const maxV = Math.max(...values, 0);
734
+ const range = maxV - minV || 1;
735
+ return { pad, plotLeft, plotTop, plotRight, plotBottom, plotW, plotH, minV, maxV, range };
736
+ }
737
+ /**
738
+ * Computes common plot-area metrics for OHLC chart types.
739
+ *
740
+ * @param w - Logical canvas width.
741
+ * @param h - Logical canvas height.
742
+ * @param pts - OHLC data points.
743
+ * @returns Plot dimensions, domain bounds, and band dimensions.
744
+ */
745
+ _ohlcMetrics(w, h, pts) {
746
+ const pad = this.cfg.padding;
747
+ const plotLeft = pad;
748
+ const plotTop = pad;
749
+ const plotRight = w - pad;
750
+ const plotBottom = h - pad;
751
+ const plotW = plotRight - plotLeft;
752
+ const plotH = plotBottom - plotTop;
753
+ const highs = pts.map((p) => p.high);
754
+ const lows = pts.map((p) => p.low);
755
+ const minV = Math.min(...lows);
756
+ const maxV = Math.max(...highs);
757
+ const range = maxV - minV || 1;
758
+ const n = pts.length;
759
+ const bandW = plotW / Math.max(n, 1);
760
+ const gap = bandW * this.cfg.barSpacing;
761
+ return { plotLeft, plotTop, plotRight, plotBottom, plotW, plotH, minV, maxV, range, bandW, gap };
762
+ }
763
+ /**
764
+ * Maps an x-index to a canvas x-coordinate within the plot area.
765
+ *
766
+ * For a single point the x is centred; for multiple points, points are
767
+ * distributed linearly from plotLeft to plotLeft + plotW.
768
+ *
769
+ * @param index - Zero-based data-point index.
770
+ * @param total - Total number of data points.
771
+ * @param plotLeft - Left edge of the plot area.
772
+ * @param plotW - Width of the plot area.
773
+ */
774
+ _xPos(index, total, plotLeft, plotW) {
775
+ if (total === 1)
776
+ return plotLeft + plotW / 2;
777
+ return plotLeft + (index / (total - 1)) * plotW;
778
+ }
779
+ /**
780
+ * Maps a data value to a canvas y-coordinate within the plot area.
781
+ * Higher values produce smaller y coordinates (canvas y increases downward).
782
+ *
783
+ * @param value - Data value to map.
784
+ * @param minV - Minimum value in the series.
785
+ * @param range - Value range (maxV - minV).
786
+ * @param plotTop - Top edge of the plot area.
787
+ * @param plotH - Height of the plot area.
788
+ */
789
+ _yPos(value, minV, range, plotTop, plotH) {
790
+ return plotTop + (1 - (value - minV) / range) * plotH;
791
+ }
792
+ // ─── Hover / tooltip ───────────────────────────────────────────────────────
793
+ /**
794
+ * Handles `mousemove` on the canvas.
795
+ * Finds the nearest data point by x-position and shows the tooltip.
796
+ *
797
+ * @param e - The native `MouseEvent`.
798
+ */
799
+ _handleMouseMove(e) {
800
+ const rect = this.canvas.getBoundingClientRect();
801
+ const dpr = window.devicePixelRatio || 1;
802
+ // Convert to logical (CSS) coordinates
803
+ const logicalX = (e.clientX - rect.left);
804
+ const w = this.canvas.clientWidth;
805
+ const h = this.canvas.clientHeight;
806
+ void dpr;
807
+ if (this.isOHLC) {
808
+ this._showOHLCTooltip(logicalX, w, h, e.clientX, e.clientY);
809
+ }
810
+ else {
811
+ this._showPointTooltip(logicalX, w, h, e.clientX, e.clientY);
812
+ }
813
+ }
814
+ /**
815
+ * Locates the nearest scalar data point and shows the shared tooltip.
816
+ *
817
+ * @param logX - Cursor x in logical canvas coordinates.
818
+ * @param w - Logical canvas width.
819
+ * @param h - Logical canvas height.
820
+ * @param clientX - Cursor viewport x.
821
+ * @param clientY - Cursor viewport y.
822
+ */
823
+ _showPointTooltip(logX, w, h, clientX, clientY) {
824
+ const pts = this.points;
825
+ if (pts.length === 0)
826
+ return;
827
+ const pad = this.cfg.padding;
828
+ const plotLeft = pad;
829
+ const plotW = w - pad * 2;
830
+ void h;
831
+ let idx;
832
+ if (pts.length === 1) {
833
+ idx = 0;
834
+ }
835
+ else {
836
+ const xStep = plotW / (pts.length - 1);
837
+ const raw = Math.round((logX - plotLeft) / xStep);
838
+ idx = Math.max(0, Math.min(pts.length - 1, raw));
839
+ }
840
+ const pt = pts[idx];
841
+ if (pt) {
842
+ SparklineTooltip.show(clientX, clientY, pt.label, pt.value, this.hasLabels);
843
+ }
844
+ }
845
+ /**
846
+ * Locates the nearest OHLC data point and shows the shared OHLC tooltip.
847
+ *
848
+ * @param logX - Cursor x in logical canvas coordinates.
849
+ * @param w - Logical canvas width.
850
+ * @param h - Logical canvas height.
851
+ * @param clientX - Cursor viewport x.
852
+ * @param clientY - Cursor viewport y.
853
+ */
854
+ _showOHLCTooltip(logX, w, h, clientX, clientY) {
855
+ const pts = this.ohlcPoints;
856
+ if (pts.length === 0)
857
+ return;
858
+ const pad = this.cfg.padding;
859
+ const plotLeft = pad;
860
+ const plotW = w - pad * 2;
861
+ void h;
862
+ const bandW = plotW / pts.length;
863
+ const raw = Math.floor((logX - plotLeft) / bandW);
864
+ const idx = Math.max(0, Math.min(pts.length - 1, raw));
865
+ const pt = pts[idx];
866
+ if (pt) {
867
+ SparklineTooltip.showOHLC(clientX, clientY, pt, this.hasLabels);
868
+ }
869
+ }
870
+ /** Hides the shared tooltip on mouse leave. */
871
+ _handleMouseLeave() {
872
+ SparklineTooltip.hide();
873
+ }
874
+ }
875
+ //# sourceMappingURL=sparkline-renderer.js.map