@highcharts/grid-pro 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE.txt +6 -0
  2. package/README.md +15 -9
  3. package/css/grid-pro.css +1289 -1153
  4. package/css/modules/grid-base-variables.css +131 -0
  5. package/css/modules/grid-button-variables.css +140 -0
  6. package/css/modules/grid-caption-variables.css +11 -0
  7. package/css/modules/grid-description-variables.css +11 -0
  8. package/css/modules/grid-input-variables.css +114 -0
  9. package/css/modules/grid-link-variables.css +18 -0
  10. package/css/modules/grid-menu-variables.css +50 -0
  11. package/css/modules/grid-pagination-variables.css +12 -0
  12. package/css/modules/grid-popup-variables.css +24 -0
  13. package/css/modules/grid-pro.css +234 -0
  14. package/css/modules/grid-table-variables.css +385 -0
  15. package/css/modules/grid-theme-default.css +55 -0
  16. package/es-modules/Accessibility/A11yI18n.js +4 -5
  17. package/es-modules/Accessibility/Accessibility.js +5 -5
  18. package/es-modules/Accessibility/AccessibilityComponent.d.ts +3 -3
  19. package/es-modules/Accessibility/AccessibilityComponent.js +4 -3
  20. package/es-modules/Accessibility/Components/AnnotationsA11y.js +4 -3
  21. package/es-modules/Accessibility/Components/ContainerComponent.js +4 -3
  22. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +9 -9
  23. package/es-modules/Accessibility/Components/LegendComponent.js +5 -5
  24. package/es-modules/Accessibility/Components/MenuComponent.js +5 -5
  25. package/es-modules/Accessibility/Components/NavigatorComponent.js +6 -7
  26. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -5
  27. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +15 -5
  28. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +7 -7
  29. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +4 -3
  30. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +7 -7
  31. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +5 -5
  32. package/es-modules/Accessibility/Components/ZoomComponent.js +5 -5
  33. package/es-modules/Accessibility/FocusBorder.js +5 -5
  34. package/es-modules/Accessibility/HighContrastMode.js +4 -3
  35. package/es-modules/Accessibility/HighContrastTheme.js +4 -3
  36. package/es-modules/Accessibility/KeyboardNavigation.js +5 -5
  37. package/es-modules/Accessibility/KeyboardNavigationHandler.js +5 -5
  38. package/es-modules/Accessibility/Options/A11yDefaults.d.ts +11 -0
  39. package/es-modules/Accessibility/Options/A11yDefaults.js +15 -3
  40. package/es-modules/Accessibility/Options/DeprecatedOptions.d.ts +58 -0
  41. package/es-modules/Accessibility/Options/DeprecatedOptions.js +11 -5
  42. package/es-modules/Accessibility/Options/LangDefaults.js +13 -3
  43. package/es-modules/Accessibility/ProxyElement.js +6 -8
  44. package/es-modules/Accessibility/ProxyProvider.js +5 -5
  45. package/es-modules/Accessibility/Utils/Announcer.js +6 -6
  46. package/es-modules/Accessibility/Utils/ChartUtilities.js +5 -5
  47. package/es-modules/Accessibility/Utils/DOMElementProvider.js +4 -3
  48. package/es-modules/Accessibility/Utils/EventProvider.d.ts +3 -3
  49. package/es-modules/Accessibility/Utils/EventProvider.js +10 -5
  50. package/es-modules/Accessibility/Utils/HTMLUtilities.js +5 -5
  51. package/es-modules/Core/Animation/AnimationOptions.d.ts +42 -0
  52. package/es-modules/Core/Animation/AnimationOptions.js +10 -0
  53. package/es-modules/Core/Animation/AnimationUtilities.js +40 -5
  54. package/es-modules/Core/Animation/Fx.d.ts +1 -130
  55. package/es-modules/Core/Animation/Fx.js +14 -8
  56. package/es-modules/Core/Animation/FxBase.d.ts +1 -0
  57. package/es-modules/Core/Animation/FxBase.js +11 -0
  58. package/es-modules/Core/Callback.d.ts +56 -0
  59. package/es-modules/Core/Callback.js +10 -0
  60. package/es-modules/Core/Chart/Chart.d.ts +659 -400
  61. package/es-modules/Core/Chart/Chart.js +112 -95
  62. package/es-modules/Core/Chart/Chart3D.d.ts +123 -233
  63. package/es-modules/Core/Chart/Chart3D.js +23 -37
  64. package/es-modules/Core/Chart/ChartBase.d.ts +3 -0
  65. package/es-modules/Core/Chart/ChartBase.js +11 -0
  66. package/es-modules/Core/Chart/ChartDefaults.js +18 -12
  67. package/es-modules/Core/Chart/ChartNavigationComposition.d.ts +1 -55
  68. package/es-modules/Core/Chart/ChartNavigationComposition.js +13 -13
  69. package/es-modules/Core/Chart/ChartOptions.d.ts +1225 -0
  70. package/es-modules/Core/Chart/ChartOptions.js +10 -0
  71. package/es-modules/Core/Chart/GanttChart.d.ts +0 -38
  72. package/es-modules/Core/Chart/GanttChart.js +5 -5
  73. package/es-modules/Core/Chart/MapChart.d.ts +9 -4
  74. package/es-modules/Core/Chart/MapChart.js +14 -5
  75. package/es-modules/Core/Chart/StockChart.d.ts +0 -85
  76. package/es-modules/Core/Chart/StockChart.js +35 -18
  77. package/es-modules/Core/Color/Color.d.ts +16 -24
  78. package/es-modules/Core/Color/Color.js +27 -10
  79. package/es-modules/Core/Color/ColorString.d.ts +0 -23
  80. package/es-modules/Core/Color/ColorString.js +11 -0
  81. package/es-modules/Core/Color/ColorType.d.ts +0 -33
  82. package/es-modules/Core/Color/ColorType.js +11 -0
  83. package/es-modules/Core/Color/GradientColor.d.ts +0 -33
  84. package/es-modules/Core/Color/GradientColor.js +11 -0
  85. package/es-modules/Core/Color/Palettes.d.ts +1 -84
  86. package/es-modules/Core/Color/Palettes.js +2 -1
  87. package/es-modules/Core/Defaults.d.ts +6 -0
  88. package/es-modules/Core/Defaults.js +66 -75
  89. package/es-modules/Core/Delaunay.d.ts +52 -0
  90. package/es-modules/Core/Delaunay.js +310 -0
  91. package/es-modules/Core/Foundation.d.ts +1 -19
  92. package/es-modules/Core/Foundation.js +8 -6
  93. package/es-modules/Core/Geometry/CircleObject.d.ts +5 -0
  94. package/es-modules/Core/Geometry/CircleObject.js +10 -0
  95. package/es-modules/Core/Geometry/CircleUtilities.d.ts +1 -189
  96. package/es-modules/Core/Geometry/CircleUtilities.js +18 -17
  97. package/es-modules/Core/Geometry/GeometryObject.d.ts +7 -0
  98. package/es-modules/Core/Geometry/GeometryObject.js +10 -0
  99. package/es-modules/Core/Geometry/GeometryUtilities.d.ts +1 -48
  100. package/es-modules/Core/Geometry/GeometryUtilities.js +9 -7
  101. package/es-modules/Core/Geometry/IntersectionObject.d.ts +7 -0
  102. package/es-modules/Core/Geometry/IntersectionObject.js +10 -0
  103. package/es-modules/Core/Geometry/PolygonClip.d.ts +1 -19
  104. package/es-modules/Core/Geometry/PolygonClip.js +9 -7
  105. package/es-modules/Core/Globals.d.ts +9 -31
  106. package/es-modules/Core/Globals.js +9 -10
  107. package/es-modules/Core/GlobalsBase.d.ts +35 -0
  108. package/es-modules/Core/GlobalsBase.js +11 -0
  109. package/es-modules/Core/HttpUtilities.d.ts +54 -17
  110. package/es-modules/Core/HttpUtilities.js +16 -16
  111. package/es-modules/Core/JSON.d.ts +29 -0
  112. package/es-modules/Core/JSON.js +13 -0
  113. package/es-modules/Core/KeyboardEvent.d.ts +1 -0
  114. package/es-modules/Core/KeyboardEvent.js +11 -0
  115. package/es-modules/Core/MSPointer.d.ts +1 -74
  116. package/es-modules/Core/MSPointer.js +24 -15
  117. package/es-modules/Core/Math3D.d.ts +1 -117
  118. package/es-modules/Core/Math3D.js +14 -12
  119. package/es-modules/Core/Options.d.ts +338 -0
  120. package/es-modules/Core/Options.js +10 -0
  121. package/es-modules/Core/Pointer.d.ts +71 -445
  122. package/es-modules/Core/Pointer.js +74 -69
  123. package/es-modules/Core/PointerEvent.d.ts +20 -0
  124. package/es-modules/Core/PointerEvent.js +11 -0
  125. package/es-modules/Core/Renderer/AlignObject.d.ts +25 -27
  126. package/es-modules/Core/Renderer/AlignObject.js +11 -0
  127. package/es-modules/Core/Renderer/BBoxObject.d.ts +20 -31
  128. package/es-modules/Core/Renderer/BBoxObject.js +11 -0
  129. package/es-modules/Core/Renderer/CSSObject.d.ts +268 -59
  130. package/es-modules/Core/Renderer/CSSObject.js +10 -0
  131. package/es-modules/Core/Renderer/DOMElementType.d.ts +1 -33
  132. package/es-modules/Core/Renderer/DOMElementType.js +11 -0
  133. package/es-modules/Core/Renderer/DashStyleValue.d.ts +1 -27
  134. package/es-modules/Core/Renderer/DashStyleValue.js +11 -0
  135. package/es-modules/Core/Renderer/FontMetricsObject.d.ts +6 -26
  136. package/es-modules/Core/Renderer/FontMetricsObject.js +11 -0
  137. package/es-modules/Core/Renderer/HTML/AST.d.ts +3 -15
  138. package/es-modules/Core/Renderer/HTML/AST.js +24 -15
  139. package/es-modules/Core/Renderer/HTML/HTMLAttributes.d.ts +1 -25
  140. package/es-modules/Core/Renderer/HTML/HTMLAttributes.js +11 -0
  141. package/es-modules/Core/Renderer/HTML/HTMLElement.d.ts +0 -54
  142. package/es-modules/Core/Renderer/HTML/HTMLElement.js +28 -24
  143. package/es-modules/Core/Renderer/PolygonBoxObject.d.ts +15 -12
  144. package/es-modules/Core/Renderer/PolygonBoxObject.js +11 -0
  145. package/es-modules/Core/Renderer/Position3DObject.d.ts +6 -30
  146. package/es-modules/Core/Renderer/Position3DObject.js +11 -0
  147. package/es-modules/Core/Renderer/PositionObject.d.ts +9 -23
  148. package/es-modules/Core/Renderer/PositionObject.js +11 -0
  149. package/es-modules/Core/Renderer/RectangleObject.d.ts +6 -30
  150. package/es-modules/Core/Renderer/RectangleObject.js +11 -0
  151. package/es-modules/Core/Renderer/RendererRegistry.d.ts +1 -29
  152. package/es-modules/Core/Renderer/RendererRegistry.js +6 -3
  153. package/es-modules/Core/Renderer/RendererType.d.ts +1 -53
  154. package/es-modules/Core/Renderer/RendererType.js +11 -0
  155. package/es-modules/Core/Renderer/RendererUtilities.d.ts +1 -26
  156. package/es-modules/Core/Renderer/RendererUtilities.js +41 -23
  157. package/es-modules/Core/Renderer/SVG/ButtonThemeObject.d.ts +26 -31
  158. package/es-modules/Core/Renderer/SVG/SVGArc3D.d.ts +1 -44
  159. package/es-modules/Core/Renderer/SVG/SVGAttributes.d.ts +15 -51
  160. package/es-modules/Core/Renderer/SVG/SVGAttributes3D.d.ts +1 -42
  161. package/es-modules/Core/Renderer/SVG/SVGCuboid.d.ts +1 -42
  162. package/es-modules/Core/Renderer/SVG/SVGElement.d.ts +459 -0
  163. package/es-modules/Core/Renderer/SVG/SVGElement3D.d.ts +1 -0
  164. package/es-modules/Core/Renderer/SVG/SVGElementBase.d.ts +0 -23
  165. package/es-modules/Core/Renderer/SVG/SVGLabel.d.ts +14 -0
  166. package/es-modules/Core/Renderer/SVG/SVGPath.d.ts +18 -56
  167. package/es-modules/Core/Renderer/SVG/SVGPath3D.d.ts +0 -30
  168. package/es-modules/Core/Renderer/SVG/SVGRenderer.d.ts +652 -0
  169. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.d.ts +1 -0
  170. package/es-modules/Core/Renderer/SVG/SVGRendererBase.d.ts +0 -24
  171. package/es-modules/Core/Renderer/SVG/SymbolOptions.d.ts +3 -26
  172. package/es-modules/Core/Renderer/SVG/SymbolType.d.ts +1 -41
  173. package/es-modules/Core/Renderer/SVG/Symbols.d.ts +146 -0
  174. package/es-modules/Core/Renderer/SVG/TextBuilder.d.ts +1 -0
  175. package/es-modules/Core/Renderer/ShadowOptionsObject.d.ts +21 -30
  176. package/es-modules/Core/Renderer/ShadowOptionsObject.js +11 -0
  177. package/es-modules/Core/Renderer/SizeObject.d.ts +0 -23
  178. package/es-modules/Core/Renderer/SizeObject.js +11 -0
  179. package/es-modules/Core/Responsive.d.ts +94 -29
  180. package/es-modules/Core/Responsive.js +17 -12
  181. package/es-modules/Core/Templating.d.ts +17 -1
  182. package/es-modules/Core/Templating.js +12 -8
  183. package/es-modules/Core/Time.d.ts +18 -1
  184. package/es-modules/Core/Time.js +6 -5
  185. package/es-modules/Core/Tooltip.d.ts +67 -123
  186. package/es-modules/Core/Tooltip.js +161 -108
  187. package/es-modules/Core/TooltipOptions.d.ts +724 -0
  188. package/es-modules/Core/TooltipOptions.js +10 -0
  189. package/es-modules/Core/Utilities.d.ts +32 -703
  190. package/es-modules/Core/Utilities.js +28 -1443
  191. package/es-modules/Data/ColumnUtils.d.ts +83 -80
  192. package/es-modules/Data/ColumnUtils.js +106 -116
  193. package/es-modules/Data/Connectors/CSVConnector.d.ts +9 -14
  194. package/es-modules/Data/Connectors/CSVConnector.js +6 -7
  195. package/es-modules/Data/Connectors/CSVConnectorOptions.d.ts +3 -3
  196. package/es-modules/Data/Connectors/DataConnector.d.ts +63 -54
  197. package/es-modules/Data/Connectors/DataConnector.js +67 -56
  198. package/es-modules/Data/Connectors/DataConnectorOptions.d.ts +3 -3
  199. package/es-modules/Data/Connectors/DataConnectorType.d.ts +3 -3
  200. package/es-modules/Data/Connectors/GoogleSheetsConnector.d.ts +40 -42
  201. package/es-modules/Data/Connectors/GoogleSheetsConnector.js +76 -91
  202. package/es-modules/Data/Connectors/GoogleSheetsConnectorOptions.d.ts +7 -5
  203. package/es-modules/Data/Connectors/HTMLTableConnector.d.ts +23 -28
  204. package/es-modules/Data/Connectors/HTMLTableConnector.js +6 -7
  205. package/es-modules/Data/Connectors/HTMLTableConnectorOptions.d.ts +3 -3
  206. package/es-modules/Data/Connectors/JSONConnector.d.ts +9 -14
  207. package/es-modules/Data/Connectors/JSONConnector.js +6 -7
  208. package/es-modules/Data/Connectors/JSONConnectorOptions.d.ts +3 -3
  209. package/es-modules/Data/Converters/CSVConverter.d.ts +5 -5
  210. package/es-modules/Data/Converters/CSVConverter.js +6 -7
  211. package/es-modules/Data/Converters/CSVConverterOptions.d.ts +5 -5
  212. package/es-modules/Data/Converters/DataConverter.d.ts +76 -78
  213. package/es-modules/Data/Converters/DataConverter.js +29 -56
  214. package/es-modules/Data/Converters/DataConverterType.d.ts +3 -3
  215. package/es-modules/Data/Converters/DataConverterUtils.d.ts +88 -81
  216. package/es-modules/Data/Converters/DataConverterUtils.js +172 -184
  217. package/es-modules/Data/Converters/GoogleSheetsConverter.d.ts +4 -4
  218. package/es-modules/Data/Converters/GoogleSheetsConverter.js +6 -6
  219. package/es-modules/Data/Converters/GoogleSheetsConverterOptions.d.ts +5 -5
  220. package/es-modules/Data/Converters/HTMLTableConverter.d.ts +4 -4
  221. package/es-modules/Data/Converters/HTMLTableConverter.js +5 -6
  222. package/es-modules/Data/Converters/HTMLTableConverterOptions.d.ts +5 -5
  223. package/es-modules/Data/Converters/JSONConverter.d.ts +7 -7
  224. package/es-modules/Data/Converters/JSONConverter.js +9 -9
  225. package/es-modules/Data/Converters/JSONConverterOptions.d.ts +5 -5
  226. package/es-modules/Data/DataCursor.d.ts +65 -70
  227. package/es-modules/Data/DataCursor.js +122 -142
  228. package/es-modules/Data/DataEvent.d.ts +55 -57
  229. package/es-modules/Data/DataEvent.js +3 -3
  230. package/es-modules/Data/DataPool.d.ts +10 -17
  231. package/es-modules/Data/DataPool.js +23 -12
  232. package/es-modules/Data/DataPoolOptions.d.ts +3 -3
  233. package/es-modules/Data/DataTable.d.ts +115 -117
  234. package/es-modules/Data/DataTable.js +67 -33
  235. package/es-modules/Data/DataTableCore.d.ts +11 -11
  236. package/es-modules/Data/DataTableCore.js +7 -7
  237. package/es-modules/Data/DataTableOptions.js +3 -3
  238. package/es-modules/Data/Formula/Formula.js +3 -3
  239. package/es-modules/Data/Formula/FormulaParser.js +4 -5
  240. package/es-modules/Data/Formula/FormulaProcessor.js +4 -5
  241. package/es-modules/Data/Formula/FormulaTypes.js +3 -3
  242. package/es-modules/Data/Formula/Functions/ABS.js +3 -3
  243. package/es-modules/Data/Formula/Functions/AND.js +3 -3
  244. package/es-modules/Data/Formula/Functions/AVERAGE.js +3 -3
  245. package/es-modules/Data/Formula/Functions/AVERAGEA.js +3 -3
  246. package/es-modules/Data/Formula/Functions/COUNT.js +3 -3
  247. package/es-modules/Data/Formula/Functions/COUNTA.js +3 -3
  248. package/es-modules/Data/Formula/Functions/IF.js +3 -3
  249. package/es-modules/Data/Formula/Functions/ISNA.js +3 -3
  250. package/es-modules/Data/Formula/Functions/MAX.js +3 -3
  251. package/es-modules/Data/Formula/Functions/MEDIAN.js +3 -3
  252. package/es-modules/Data/Formula/Functions/MIN.js +3 -3
  253. package/es-modules/Data/Formula/Functions/MOD.js +3 -3
  254. package/es-modules/Data/Formula/Functions/MODE.js +3 -3
  255. package/es-modules/Data/Formula/Functions/NOT.js +3 -3
  256. package/es-modules/Data/Formula/Functions/OR.js +3 -3
  257. package/es-modules/Data/Formula/Functions/PRODUCT.js +3 -3
  258. package/es-modules/Data/Formula/Functions/SUM.js +3 -3
  259. package/es-modules/Data/Formula/Functions/XOR.js +3 -3
  260. package/es-modules/Data/Modifiers/ChainModifier.d.ts +29 -34
  261. package/es-modules/Data/Modifiers/ChainModifier.js +10 -11
  262. package/es-modules/Data/Modifiers/ChainModifierOptions.js +3 -3
  263. package/es-modules/Data/Modifiers/DataModifier.d.ts +36 -41
  264. package/es-modules/Data/Modifiers/DataModifier.js +34 -56
  265. package/es-modules/Data/Modifiers/DataModifierEvent.js +3 -3
  266. package/es-modules/Data/Modifiers/DataModifierOptions.js +3 -3
  267. package/es-modules/Data/Modifiers/DataModifierType.d.ts +3 -3
  268. package/es-modules/Data/Modifiers/FilterModifier.d.ts +4 -4
  269. package/es-modules/Data/Modifiers/FilterModifier.js +6 -7
  270. package/es-modules/Data/Modifiers/FilterModifierOptions.d.ts +3 -2
  271. package/es-modules/Data/Modifiers/FilterModifierOptions.js +3 -3
  272. package/es-modules/Data/Modifiers/InvertModifier.d.ts +4 -4
  273. package/es-modules/Data/Modifiers/InvertModifier.js +6 -7
  274. package/es-modules/Data/Modifiers/InvertModifierOptions.js +3 -3
  275. package/es-modules/Data/Modifiers/MathModifier.d.ts +5 -4
  276. package/es-modules/Data/Modifiers/MathModifier.js +3 -3
  277. package/es-modules/Data/Modifiers/MathModifierOptions.js +3 -3
  278. package/es-modules/Data/Modifiers/RangeModifier.d.ts +4 -4
  279. package/es-modules/Data/Modifiers/RangeModifier.js +6 -7
  280. package/es-modules/Data/Modifiers/RangeModifierOptions.js +3 -3
  281. package/es-modules/Data/Modifiers/SortModifier.d.ts +6 -11
  282. package/es-modules/Data/Modifiers/SortModifier.js +35 -10
  283. package/es-modules/Data/Modifiers/SortModifierOptions.d.ts +43 -6
  284. package/es-modules/Data/Modifiers/SortModifierOptions.js +3 -3
  285. package/es-modules/Grid/Core/Accessibility/A11yOptions.d.ts +77 -0
  286. package/es-modules/Grid/Core/Accessibility/A11yOptions.js +4 -3
  287. package/es-modules/Grid/Core/Accessibility/Accessibility.d.ts +68 -1
  288. package/es-modules/Grid/Core/Accessibility/Accessibility.js +179 -7
  289. package/es-modules/Grid/Core/Credits.js +3 -3
  290. package/es-modules/Grid/Core/Data/DataProvider.d.ts +97 -0
  291. package/es-modules/Grid/Core/Data/DataProvider.js +89 -0
  292. package/es-modules/Grid/Core/Data/DataProviderRegistry.d.ts +20 -0
  293. package/es-modules/Grid/Core/Data/DataProviderRegistry.js +52 -0
  294. package/es-modules/Grid/Core/Data/DataProviderType.d.ts +19 -0
  295. package/es-modules/Grid/Core/Data/DataProviderType.js +15 -0
  296. package/es-modules/Grid/Core/Data/LocalDataProvider.d.ts +165 -0
  297. package/es-modules/Grid/Core/Data/LocalDataProvider.js +341 -0
  298. package/es-modules/Grid/Core/Defaults.js +21 -7
  299. package/es-modules/Grid/Core/Globals.d.ts +20 -16
  300. package/es-modules/Grid/Core/Globals.js +13 -11
  301. package/es-modules/Grid/Core/Grid.d.ts +43 -23
  302. package/es-modules/Grid/Core/Grid.js +316 -136
  303. package/es-modules/Grid/Core/GridUtils.d.ts +33 -0
  304. package/es-modules/Grid/Core/GridUtils.js +53 -6
  305. package/es-modules/Grid/Core/Options.d.ts +162 -5
  306. package/es-modules/Grid/Core/Options.js +3 -3
  307. package/es-modules/Grid/Core/Pagination/Pagination.d.ts +3 -0
  308. package/es-modules/Grid/Core/Pagination/Pagination.js +66 -26
  309. package/es-modules/Grid/Core/Pagination/PaginationOptions.d.ts +4 -40
  310. package/es-modules/Grid/Core/Pagination/PaginationOptions.js +11 -0
  311. package/es-modules/Grid/Core/Querying/FilteringController.js +4 -5
  312. package/es-modules/Grid/Core/Querying/PaginationController.d.ts +2 -2
  313. package/es-modules/Grid/Core/Querying/PaginationController.js +6 -6
  314. package/es-modules/Grid/Core/Querying/QueryingController.d.ts +1 -1
  315. package/es-modules/Grid/Core/Querying/QueryingController.js +5 -29
  316. package/es-modules/Grid/Core/Querying/SortingController.d.ts +15 -0
  317. package/es-modules/Grid/Core/Querying/SortingController.js +89 -51
  318. package/es-modules/Grid/Core/Responsive/ResponsiveComposition.d.ts +53 -0
  319. package/es-modules/Grid/Core/Responsive/ResponsiveComposition.js +229 -0
  320. package/es-modules/Grid/Core/Responsive/ResponsiveOptions.d.ts +58 -0
  321. package/es-modules/Grid/Core/Responsive/ResponsiveOptions.js +15 -0
  322. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/ColumnFiltering.js +5 -6
  323. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.d.ts +3 -3
  324. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.js +6 -7
  325. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.d.ts +1 -1
  326. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.js +5 -5
  327. package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilteringTypes.js +3 -3
  328. package/es-modules/Grid/Core/Table/Actions/ColumnSorting.d.ts +29 -3
  329. package/es-modules/Grid/Core/Table/Actions/ColumnSorting.js +136 -26
  330. package/es-modules/Grid/Core/Table/Actions/ColumnsResizer.js +4 -6
  331. package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.d.ts +94 -3
  332. package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.js +481 -91
  333. package/es-modules/Grid/Core/Table/Body/CellContextMenu.d.ts +11 -0
  334. package/es-modules/Grid/Core/Table/Body/CellContextMenu.js +84 -0
  335. package/es-modules/Grid/Core/Table/Body/TableCell.d.ts +36 -15
  336. package/es-modules/Grid/Core/Table/Body/TableCell.js +89 -33
  337. package/es-modules/Grid/Core/Table/Body/TableRow.d.ts +15 -5
  338. package/es-modules/Grid/Core/Table/Body/TableRow.js +70 -19
  339. package/es-modules/Grid/Core/Table/Cell.d.ts +16 -10
  340. package/es-modules/Grid/Core/Table/Cell.js +41 -6
  341. package/es-modules/Grid/Core/Table/CellContent/CellContent.js +3 -3
  342. package/es-modules/Grid/Core/Table/CellContent/TextContent.js +7 -12
  343. package/es-modules/Grid/Core/Table/Column.d.ts +11 -5
  344. package/es-modules/Grid/Core/Table/Column.js +26 -37
  345. package/es-modules/Grid/Core/Table/ColumnResizing/AdjacentResizingMode.js +3 -3
  346. package/es-modules/Grid/Core/Table/ColumnResizing/ColumnResizing.js +3 -3
  347. package/es-modules/Grid/Core/Table/ColumnResizing/DistributedResizingMode.js +3 -3
  348. package/es-modules/Grid/Core/Table/ColumnResizing/IndependentResizingMode.js +12 -11
  349. package/es-modules/Grid/Core/Table/ColumnResizing/ResizingMode.js +7 -6
  350. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.d.ts +5 -0
  351. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.js +21 -7
  352. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/FilterPopup.js +4 -5
  353. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/FilterMenuButton.js +4 -5
  354. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.d.ts +9 -0
  355. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.js +37 -9
  356. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuPopup.js +5 -4
  357. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/StateHelpers.js +11 -7
  358. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/FilterToolbarButton.js +4 -5
  359. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/MenuToolbarButton.js +4 -5
  360. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.d.ts +4 -1
  361. package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.js +88 -15
  362. package/es-modules/Grid/Core/Table/Header/HeaderCell.d.ts +8 -3
  363. package/es-modules/Grid/Core/Table/Header/HeaderCell.js +36 -15
  364. package/es-modules/Grid/Core/Table/Header/HeaderRow.js +7 -8
  365. package/es-modules/Grid/Core/Table/Header/TableHeader.d.ts +1 -1
  366. package/es-modules/Grid/Core/Table/Header/TableHeader.js +6 -6
  367. package/es-modules/Grid/Core/Table/Row.d.ts +1 -1
  368. package/es-modules/Grid/Core/Table/Row.js +5 -5
  369. package/es-modules/Grid/Core/Table/Table.d.ts +68 -12
  370. package/es-modules/Grid/Core/Table/Table.js +296 -92
  371. package/es-modules/Grid/Core/UI/Button.js +3 -3
  372. package/es-modules/Grid/Core/UI/ContextMenu.js +3 -3
  373. package/es-modules/Grid/Core/UI/ContextMenuButton.d.ts +6 -7
  374. package/es-modules/Grid/Core/UI/ContextMenuButton.js +8 -6
  375. package/es-modules/Grid/Core/UI/Popup.js +10 -12
  376. package/es-modules/Grid/Core/UI/SvgIcons.d.ts +42 -7
  377. package/es-modules/Grid/Core/UI/SvgIcons.js +209 -36
  378. package/es-modules/Grid/Core/UI/Toolbar.d.ts +5 -0
  379. package/es-modules/Grid/Core/UI/Toolbar.js +3 -3
  380. package/es-modules/Grid/Core/UI/ToolbarButton.d.ts +4 -12
  381. package/es-modules/Grid/Core/UI/ToolbarButton.js +11 -29
  382. package/es-modules/Grid/Pro/CellEditing/CellEditMode.d.ts +4 -45
  383. package/es-modules/Grid/Pro/CellEditing/CellEditMode.js +16 -0
  384. package/es-modules/Grid/Pro/CellEditing/CellEditing.js +13 -13
  385. package/es-modules/Grid/Pro/CellEditing/CellEditingComposition.js +4 -5
  386. package/es-modules/Grid/Pro/CellRendering/CellContentPro.js +3 -3
  387. package/es-modules/Grid/Pro/CellRendering/CellRenderer.js +3 -3
  388. package/es-modules/Grid/Pro/CellRendering/CellRendererRegistry.js +3 -3
  389. package/es-modules/Grid/Pro/CellRendering/CellRendererType.d.ts +1 -34
  390. package/es-modules/Grid/Pro/CellRendering/CellRendererType.js +15 -0
  391. package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.d.ts +1 -1
  392. package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.js +7 -5
  393. package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.d.ts +2 -2
  394. package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.js +3 -3
  395. package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContent.js +3 -3
  396. package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContentBase.js +3 -3
  397. package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateTimeInputContent.js +3 -3
  398. package/es-modules/Grid/Pro/CellRendering/ContentTypes/NumberInputContent.js +4 -5
  399. package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.d.ts +2 -2
  400. package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.js +3 -3
  401. package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.d.ts +7 -5
  402. package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.js +4 -5
  403. package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.d.ts +2 -2
  404. package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.js +4 -5
  405. package/es-modules/Grid/Pro/CellRendering/ContentTypes/TimeInputContent.js +3 -3
  406. package/es-modules/Grid/Pro/CellRendering/Renderers/CheckboxRenderer.js +4 -5
  407. package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRenderer.js +4 -5
  408. package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRendererBase.js +3 -3
  409. package/es-modules/Grid/Pro/CellRendering/Renderers/DateTimeInputRenderer.js +4 -5
  410. package/es-modules/Grid/Pro/CellRendering/Renderers/NumberInputRenderer.js +4 -5
  411. package/es-modules/Grid/Pro/CellRendering/Renderers/SelectRenderer.js +4 -5
  412. package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.d.ts +4 -4
  413. package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.js +4 -5
  414. package/es-modules/Grid/Pro/CellRendering/Renderers/TextInputRenderer.js +4 -5
  415. package/es-modules/Grid/Pro/CellRendering/Renderers/TextRenderer.js +4 -5
  416. package/es-modules/Grid/Pro/CellRendering/Renderers/TimeInputRenderer.js +4 -5
  417. package/es-modules/Grid/Pro/ColumnTypes/Validator.d.ts +10 -1
  418. package/es-modules/Grid/Pro/ColumnTypes/Validator.js +56 -12
  419. package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.d.ts +1 -1
  420. package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.js +6 -7
  421. package/es-modules/Grid/Pro/Credits/CreditsPro.js +3 -3
  422. package/es-modules/Grid/Pro/Credits/CreditsProComposition.js +4 -6
  423. package/es-modules/Grid/Pro/Data/DataSourceHelper.d.ts +74 -0
  424. package/es-modules/Grid/Pro/Data/DataSourceHelper.js +246 -0
  425. package/es-modules/Grid/Pro/Data/QuerySerializer.d.ts +46 -0
  426. package/es-modules/Grid/Pro/Data/QuerySerializer.js +169 -0
  427. package/es-modules/Grid/Pro/Data/RemoteDataProvider.d.ts +187 -0
  428. package/es-modules/Grid/Pro/Data/RemoteDataProvider.js +500 -0
  429. package/es-modules/Grid/Pro/Export/Exporting.js +5 -7
  430. package/es-modules/Grid/Pro/Export/ExportingComposition.js +4 -5
  431. package/es-modules/Grid/Pro/GridEvents.d.ts +1 -0
  432. package/es-modules/Grid/Pro/GridEvents.js +4 -5
  433. package/es-modules/Grid/Pro/Pagination/PaginationComposition.d.ts +0 -1
  434. package/es-modules/Grid/Pro/Pagination/PaginationComposition.js +4 -5
  435. package/es-modules/Grid/index.js +3 -3
  436. package/es-modules/Shared/BaseForm.js +4 -5
  437. package/es-modules/Shared/DownloadURL.d.ts +1 -85
  438. package/es-modules/Shared/DownloadURL.js +15 -13
  439. package/es-modules/Shared/LangOptionsCore.d.ts +4 -3
  440. package/es-modules/Shared/TimeBase.d.ts +1 -46
  441. package/es-modules/Shared/TimeBase.js +11 -10
  442. package/es-modules/Shared/Types.d.ts +11 -3
  443. package/es-modules/Shared/Utilities.d.ts +576 -0
  444. package/es-modules/Shared/Utilities.js +1368 -0
  445. package/es-modules/masters/grid-pro.src.d.ts +18 -19
  446. package/es-modules/masters/grid-pro.src.js +24 -9
  447. package/grid-pro.d.ts +18 -19
  448. package/grid-pro.js +6 -5
  449. package/grid-pro.js.map +1 -1
  450. package/grid-pro.src.d.ts +18 -19
  451. package/grid-pro.src.js +8132 -4531
  452. package/package.json +1 -1
  453. package/es-modules/Grid/Core/Pagination/Icons.d.ts +0 -7
  454. package/es-modules/Grid/Core/Pagination/Icons.js +0 -7
  455. package/es-modules/Grid/Pro/highcharts.d.ts +0 -7
@@ -1,5 +1,6 @@
1
1
  import type TableRow from './Body/TableRow';
2
- import DataTable from '../../../Data/DataTable.js';
2
+ import type DataTable from '../../../Data/DataTable';
3
+ import type { RowId } from '../Data/DataProvider';
3
4
  import ColumnResizingMode from './ColumnResizing/ResizingMode.js';
4
5
  import Column from './Column.js';
5
6
  import TableHeader from './Header/TableHeader.js';
@@ -13,14 +14,6 @@ declare class Table {
13
14
  * The data grid instance which the table (viewport) belongs to.
14
15
  */
15
16
  readonly grid: Grid;
16
- /**
17
- * The presentation version of the data table. It has applied modifiers
18
- * and is ready to be rendered.
19
- *
20
- * If you want to modify the data table, you should use the original
21
- * instance that is stored in the `grid.dataTable` property.
22
- */
23
- dataTable: DataTable;
24
17
  /**
25
18
  * The HTML element of the table.
26
19
  */
@@ -63,6 +56,10 @@ declare class Table {
63
56
  * The flag that indicates if the table rows are virtualized.
64
57
  */
65
58
  virtualRows: boolean;
59
+ /**
60
+ * Cell context menu instance (lazy created).
61
+ */
62
+ private cellContextMenu?;
66
63
  /**
67
64
  * Constructs a new data grid table.
68
65
  *
@@ -74,9 +71,17 @@ declare class Table {
74
71
  */
75
72
  constructor(grid: Grid, tableElement: HTMLTableElement);
76
73
  /**
77
- * Initializes the data grid table.
74
+ * The presentation version of the data table. It has applied modifiers
75
+ * and is ready to be rendered.
76
+ *
77
+ * @deprecated Use `grid.dataProvider` instead.
78
+ */
79
+ get dataTable(): DataTable | undefined;
80
+ /**
81
+ * Initializes the table. Should be called after creation so that the table
82
+ * can be asynchronously initialized.
78
83
  */
79
- private init;
84
+ init(): Promise<void>;
80
85
  /**
81
86
  * Sets the minimum height of the table body.
82
87
  */
@@ -115,6 +120,57 @@ declare class Table {
115
120
  * Handles the scroll event.
116
121
  */
117
122
  private onScroll;
123
+ /**
124
+ * Delegated click handler for cells.
125
+ * @param e Mouse event
126
+ */
127
+ private onCellClick;
128
+ /**
129
+ * Delegated double-click handler for cells.
130
+ * @param e Mouse event
131
+ */
132
+ private onCellDblClick;
133
+ /**
134
+ * Delegated context menu handler for cells.
135
+ * @param e Mouse event
136
+ */
137
+ private onCellContextMenu;
138
+ /**
139
+ * Delegated mousedown handler for cells.
140
+ * @param e Mouse event
141
+ */
142
+ private onCellMouseDown;
143
+ /**
144
+ * Delegated mouseover handler for cells.
145
+ * @param e Mouse event
146
+ */
147
+ private onCellMouseOver;
148
+ /**
149
+ * Delegated mouseout handler for cells.
150
+ * @param e Mouse event
151
+ */
152
+ private onCellMouseOut;
153
+ /**
154
+ * Delegated keydown handler for cells.
155
+ * @param e Keyboard event
156
+ */
157
+ private onCellKeyDown;
158
+ /**
159
+ * Opens a cell context menu if configured and enabled.
160
+ *
161
+ * @param tableCell
162
+ * The target cell.
163
+ *
164
+ * @param clientX
165
+ * The viewport X coordinate for anchoring.
166
+ *
167
+ * @param clientY
168
+ * The viewport Y coordinate for anchoring.
169
+ *
170
+ * @returns
171
+ * True if the menu was opened.
172
+ */
173
+ private openCellContextMenu;
118
174
  /**
119
175
  * Scrolls the table to the specified row.
120
176
  *
@@ -164,7 +220,7 @@ declare class Table {
164
220
  * @param id
165
221
  * The ID of the row.
166
222
  */
167
- getRow(id: number): TableRow | undefined;
223
+ getRow(id: RowId): TableRow | undefined;
168
224
  }
169
225
  /**
170
226
  * Represents the metadata of the viewport state. It is used to save the
@@ -2,11 +2,11 @@
2
2
  *
3
3
  * Grid Table Viewport class
4
4
  *
5
- * (c) 2020-2025 Highsoft AS
5
+ * (c) 2020-2026 Highsoft AS
6
6
  *
7
- * License: www.highcharts.com/license
7
+ * A commercial license may be required depending on use.
8
+ * See www.highcharts.com/license
8
9
  *
9
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10
10
  *
11
11
  * Authors:
12
12
  * - Dawid Dragula
@@ -15,15 +15,15 @@
15
15
  * */
16
16
  'use strict';
17
17
  import GridUtils from '../GridUtils.js';
18
- import Utils from '../../../Core/Utilities.js';
19
18
  import ColumnResizing from './ColumnResizing/ColumnResizing.js';
20
19
  import Column from './Column.js';
21
20
  import TableHeader from './Header/TableHeader.js';
22
21
  import RowsVirtualizer from './Actions/RowsVirtualizer.js';
23
22
  import ColumnsResizer from './Actions/ColumnsResizer.js';
24
23
  import Globals from '../Globals.js';
24
+ import { defined, fireEvent, getStyle } from '../../../Shared/Utilities.js';
25
+ import CellContextMenu from './Body/CellContextMenu.js';
25
26
  const { makeHTMLElement } = GridUtils;
26
- const { fireEvent, getStyle, defined } = Utils;
27
27
  /* *
28
28
  *
29
29
  * Class
@@ -56,6 +56,10 @@ class Table {
56
56
  * The visible rows of the table.
57
57
  */
58
58
  this.rows = [];
59
+ /**
60
+ * The flag that indicates if the table rows are virtualized.
61
+ */
62
+ this.virtualRows = true;
59
63
  /**
60
64
  * Handles the focus event on the table body.
61
65
  *
@@ -78,42 +82,126 @@ class Table {
78
82
  */
79
83
  this.onScroll = () => {
80
84
  if (this.virtualRows) {
81
- this.rowsVirtualizer.scroll();
85
+ void this.rowsVirtualizer.scroll();
82
86
  }
83
87
  this.header?.scrollHorizontally(this.tbodyElement.scrollLeft);
84
88
  };
89
+ /**
90
+ * Delegated click handler for cells.
91
+ * @param e Mouse event
92
+ */
93
+ this.onCellClick = (e) => {
94
+ const cell = this.getCellFromElement(e.target);
95
+ if (cell) {
96
+ cell
97
+ .onClick(e);
98
+ }
99
+ };
100
+ /**
101
+ * Delegated double-click handler for cells.
102
+ * @param e Mouse event
103
+ */
104
+ this.onCellDblClick = (e) => {
105
+ const cell = this.getCellFromElement(e.target);
106
+ if (cell && 'onDblClick' in cell) {
107
+ cell.onDblClick(e);
108
+ }
109
+ };
110
+ /**
111
+ * Delegated context menu handler for cells.
112
+ * @param e Mouse event
113
+ */
114
+ this.onCellContextMenu = (e) => {
115
+ const cell = this.getCellFromElement(e.target);
116
+ if (!cell || !('column' in cell) || !('row' in cell)) {
117
+ return;
118
+ }
119
+ const tableCell = cell;
120
+ if (this.openCellContextMenu(tableCell, e.clientX, e.clientY)) {
121
+ e.preventDefault();
122
+ }
123
+ };
124
+ /**
125
+ * Delegated mousedown handler for cells.
126
+ * @param e Mouse event
127
+ */
128
+ this.onCellMouseDown = (e) => {
129
+ const cell = this.getCellFromElement(e.target);
130
+ if (cell && 'onMouseDown' in cell) {
131
+ cell.onMouseDown(e);
132
+ }
133
+ };
134
+ /**
135
+ * Delegated mouseover handler for cells.
136
+ * @param e Mouse event
137
+ */
138
+ this.onCellMouseOver = (e) => {
139
+ const cell = this.getCellFromElement(e.target);
140
+ if (cell) {
141
+ cell.onMouseOver();
142
+ }
143
+ };
144
+ /**
145
+ * Delegated mouseout handler for cells.
146
+ * @param e Mouse event
147
+ */
148
+ this.onCellMouseOut = (e) => {
149
+ const cell = this.getCellFromElement(e.target);
150
+ if (cell) {
151
+ cell.onMouseOut();
152
+ }
153
+ };
154
+ /**
155
+ * Delegated keydown handler for cells.
156
+ * @param e Keyboard event
157
+ */
158
+ this.onCellKeyDown = (e) => {
159
+ const cell = this.getCellFromElement(e.target);
160
+ if (!cell) {
161
+ return;
162
+ }
163
+ // Disabled until meaningful functionality is ready.
164
+ // const isContextMenuKey = (
165
+ // e.key === 'ContextMenu' || (e.key === 'F10' && e.shiftKey)
166
+ // );
167
+ // if (isContextMenuKey && 'column' in cell && 'row' in cell) {
168
+ // const tableCell = cell as TableCell;
169
+ // const rect = tableCell.htmlElement.getBoundingClientRect();
170
+ // const opened = this.openCellContextMenu(
171
+ // tableCell,
172
+ // rect.left + 4,
173
+ // rect.bottom - 2
174
+ // );
175
+ // if (opened) {
176
+ // e.preventDefault();
177
+ // e.stopPropagation();
178
+ // return;
179
+ // }
180
+ // }
181
+ cell.onKeyDown(e);
182
+ };
85
183
  this.grid = grid;
86
184
  this.tableElement = tableElement;
87
- this.dataTable = this.grid.presentationTable;
88
- const dgOptions = grid.options;
89
- const customClassName = dgOptions?.rendering?.table?.className;
90
185
  this.columnResizing = ColumnResizing.initMode(this);
91
- this.virtualRows = this.shouldVirtualizeRows();
92
- if (dgOptions?.rendering?.header?.enabled) {
186
+ if (grid.options?.rendering?.header?.enabled) {
93
187
  this.theadElement = makeHTMLElement('thead', {}, tableElement);
94
188
  }
95
189
  this.tbodyElement = makeHTMLElement('tbody', {}, tableElement);
96
- if (this.virtualRows) {
97
- tableElement.classList.add(Globals.getClassName('virtualization'));
98
- }
99
- if (dgOptions?.rendering?.columns?.resizing?.enabled) {
100
- this.columnsResizer = new ColumnsResizer(this);
101
- }
102
- if (customClassName) {
103
- tableElement.classList.add(...customClassName.split(/\s+/g));
104
- }
105
- tableElement.classList.add(Globals.getClassName('scrollableContent'));
106
- // Load columns
107
- this.loadColumns();
108
- // Virtualization
109
190
  this.rowsVirtualizer = new RowsVirtualizer(this);
110
- // Init Table
111
- this.init();
191
+ fireEvent(this, 'beforeInit');
112
192
  // Add event listeners
113
193
  this.resizeObserver = new ResizeObserver(this.onResize);
114
194
  this.resizeObserver.observe(tableElement);
115
195
  this.tbodyElement.addEventListener('scroll', this.onScroll);
116
196
  this.tbodyElement.addEventListener('focus', this.onTBodyFocus);
197
+ // Delegated cell events
198
+ this.tbodyElement.addEventListener('click', this.onCellClick);
199
+ this.tbodyElement.addEventListener('dblclick', this.onCellDblClick);
200
+ this.tbodyElement.addEventListener('contextmenu', this.onCellContextMenu);
201
+ this.tbodyElement.addEventListener('mousedown', this.onCellMouseDown);
202
+ this.tbodyElement.addEventListener('mouseover', this.onCellMouseOver);
203
+ this.tbodyElement.addEventListener('mouseout', this.onCellMouseOut);
204
+ this.tbodyElement.addEventListener('keydown', this.onCellKeyDown);
117
205
  }
118
206
  /* *
119
207
  *
@@ -121,21 +209,55 @@ class Table {
121
209
  *
122
210
  * */
123
211
  /**
124
- * Initializes the data grid table.
212
+ * The presentation version of the data table. It has applied modifiers
213
+ * and is ready to be rendered.
214
+ *
215
+ * @deprecated Use `grid.dataProvider` instead.
125
216
  */
126
- init() {
127
- fireEvent(this, 'beforeInit');
128
- this.setTbodyMinHeight();
129
- // Load & render head
130
- if (this.grid.options?.rendering?.header?.enabled) {
131
- this.header = new TableHeader(this);
132
- this.header.render();
217
+ get dataTable() {
218
+ const dp = this.grid.dataProvider;
219
+ if (dp && 'getDataTable' in dp) {
220
+ return dp.getDataTable(true);
221
+ }
222
+ }
223
+ /**
224
+ * Initializes the table. Should be called after creation so that the table
225
+ * can be asynchronously initialized.
226
+ */
227
+ async init() {
228
+ try {
229
+ this.grid.showLoading();
230
+ const { tableElement } = this;
231
+ const renderingOptions = this.grid.options?.rendering;
232
+ const customClassName = renderingOptions?.table?.className;
233
+ this.virtualRows = await this.shouldVirtualizeRows();
234
+ if (this.virtualRows) {
235
+ tableElement.classList.add(Globals.getClassName('virtualization'));
236
+ }
237
+ if (renderingOptions?.columns?.resizing?.enabled) {
238
+ this.columnsResizer = new ColumnsResizer(this);
239
+ }
240
+ if (customClassName) {
241
+ tableElement.classList.add(...customClassName.split(/\s+/g));
242
+ }
243
+ tableElement.classList.add(Globals.getClassName('scrollableContent'));
244
+ await this.loadColumns();
245
+ this.setTbodyMinHeight();
246
+ // Load & render head
247
+ if (this.grid.options?.rendering?.header?.enabled) {
248
+ this.header = new TableHeader(this);
249
+ await this.header.render();
250
+ }
251
+ // TODO(footer): Load & render footer
252
+ // this.footer = new TableFooter(this);
253
+ // this.footer.render();
254
+ await this.rowsVirtualizer.initialRender();
255
+ }
256
+ finally {
257
+ fireEvent(this, 'afterInit');
258
+ this.reflow();
259
+ this.grid.hideLoading();
133
260
  }
134
- // TODO: Load & render footer
135
- // this.footer = new TableFooter(this);
136
- // this.footer.render();
137
- this.rowsVirtualizer.initialRender();
138
- fireEvent(this, 'afterInit');
139
261
  }
140
262
  /**
141
263
  * Sets the minimum height of the table body.
@@ -155,7 +277,7 @@ class Table {
155
277
  * @returns
156
278
  * Whether rows virtualization should be enabled.
157
279
  */
158
- shouldVirtualizeRows() {
280
+ async shouldVirtualizeRows() {
159
281
  const { grid } = this;
160
282
  const rows = grid.userOptions.rendering?.rows;
161
283
  if (defined(rows?.virtualization)) {
@@ -163,7 +285,7 @@ class Table {
163
285
  }
164
286
  // Consider changing this to use the presentation table row count
165
287
  // instead of the original data table row count.
166
- const rowCount = Number(grid.dataTable?.rowCount);
288
+ const rowCount = (await this.grid.dataProvider?.getRowCount()) ?? 0;
167
289
  const threshold = rows?.virtualizationThreshold ?? 50;
168
290
  if (grid.pagination) {
169
291
  return grid.querying.pagination.currentPageSize >= threshold;
@@ -173,7 +295,7 @@ class Table {
173
295
  /**
174
296
  * Loads the columns of the table.
175
297
  */
176
- loadColumns() {
298
+ async loadColumns() {
177
299
  const { enabledColumns } = this.grid;
178
300
  if (!enabledColumns) {
179
301
  return;
@@ -181,7 +303,9 @@ class Table {
181
303
  let columnId;
182
304
  for (let i = 0, iEnd = enabledColumns.length; i < iEnd; ++i) {
183
305
  columnId = enabledColumns[i];
184
- this.columns.push(new Column(this, columnId, i));
306
+ const column = new Column(this, columnId, i);
307
+ await column.init();
308
+ this.columns.push(column);
185
309
  }
186
310
  this.columnResizing.loadColumns();
187
311
  }
@@ -190,53 +314,52 @@ class Table {
190
314
  */
191
315
  async updateRows() {
192
316
  const vp = this;
193
- let focusedRowId;
194
- if (vp.focusCursor) {
195
- focusedRowId = vp.dataTable.getOriginalRowIndex(vp.focusCursor[0]);
317
+ const { dataProvider: dp } = vp.grid;
318
+ if (!dp) {
319
+ return;
196
320
  }
197
321
  vp.grid.querying.pagination.clampPage();
198
- // Update data
199
- const oldRowsCount = (vp.rows[vp.rows.length - 1]?.index ?? -1) + 1;
200
- await vp.grid.querying.proceed();
201
- vp.dataTable = vp.grid.presentationTable;
202
- for (const column of vp.columns) {
203
- column.loadData();
204
- }
205
- // Update virtualization if needed
206
- const shouldVirtualize = this.shouldVirtualizeRows();
207
- let shouldRerender = false;
208
- if (this.virtualRows !== shouldVirtualize) {
209
- this.virtualRows = shouldVirtualize;
210
- vp.tableElement.classList.toggle(Globals.getClassName('virtualization'), shouldVirtualize);
211
- shouldRerender = true;
212
- }
213
- if (shouldRerender || oldRowsCount !== vp.dataTable.rowCount) {
214
- // Rerender all rows
215
- vp.rowsVirtualizer.rerender();
216
- }
217
- else {
218
- // Update existing rows
219
- for (let i = 0, iEnd = vp.rows.length; i < iEnd; ++i) {
220
- vp.rows[i].update();
322
+ try {
323
+ this.grid.showLoading();
324
+ // Update data
325
+ const oldRowsCount = vp.rows.length > 0 ?
326
+ (vp.rows[vp.rows.length - 1]?.index ?? -1) + 1 :
327
+ 0;
328
+ await vp.grid.querying.proceed();
329
+ for (const column of vp.columns) {
330
+ column.loadData();
221
331
  }
222
- }
223
- // Update the pagination controls
224
- vp.grid.pagination?.updateControls();
225
- vp.reflow();
226
- // Scroll to the focused row
227
- if (focusedRowId !== void 0 && vp.focusCursor) {
228
- const newRowIndex = vp.dataTable.getLocalRowIndex(focusedRowId);
229
- if (newRowIndex !== void 0) {
230
- // Scroll to the focused row.
231
- vp.scrollToRow(newRowIndex);
232
- // Focus the cell that was focused before the update.
233
- setTimeout(() => {
234
- if (!defined(vp.focusCursor?.[1])) {
235
- return;
236
- }
237
- vp.rows[newRowIndex - vp.rows[0].index]?.cells[vp.focusCursor[1]].htmlElement.focus();
238
- });
332
+ // Update virtualization if needed
333
+ const shouldVirtualize = await this.shouldVirtualizeRows();
334
+ let shouldRerender = false;
335
+ if (this.virtualRows !== shouldVirtualize) {
336
+ this.virtualRows = shouldVirtualize;
337
+ vp.tableElement.classList.toggle(Globals.getClassName('virtualization'), shouldVirtualize);
338
+ shouldRerender = true;
339
+ }
340
+ const newRowCount = await dp.getRowCount();
341
+ if (shouldRerender) {
342
+ // Rerender all rows
343
+ await vp.rowsVirtualizer.rerender();
344
+ }
345
+ else if (oldRowsCount !== newRowCount) {
346
+ // Refresh rows without full teardown
347
+ await vp.rowsVirtualizer.refreshRows();
348
+ }
349
+ else {
350
+ // Update existing rows - create a snapshot to avoid issues
351
+ // if array changes during iteration
352
+ const rowsToUpdate = [...vp.rows];
353
+ for (let i = 0, iEnd = rowsToUpdate.length; i < iEnd; ++i) {
354
+ await rowsToUpdate[i].update();
355
+ }
239
356
  }
357
+ // Update the pagination controls
358
+ vp.grid.pagination?.updateControls();
359
+ vp.reflow();
360
+ }
361
+ finally {
362
+ this.grid.hideLoading();
240
363
  }
241
364
  vp.grid.dirtyFlags.delete('rows');
242
365
  }
@@ -244,8 +367,6 @@ class Table {
244
367
  * Reflows the table's content dimensions.
245
368
  */
246
369
  reflow() {
247
- // TODO: More `needsReflow` logic can be added in the future to avoid
248
- // unnecessary reflows of the table parts.
249
370
  this.columnResizing.reflow();
250
371
  // Reflow the head
251
372
  this.header?.reflow();
@@ -259,6 +380,46 @@ class Table {
259
380
  });
260
381
  this.grid.dirtyFlags.delete('reflow');
261
382
  }
383
+ /**
384
+ * Opens a cell context menu if configured and enabled.
385
+ *
386
+ * @param tableCell
387
+ * The target cell.
388
+ *
389
+ * @param clientX
390
+ * The viewport X coordinate for anchoring.
391
+ *
392
+ * @param clientY
393
+ * The viewport Y coordinate for anchoring.
394
+ *
395
+ * @returns
396
+ * True if the menu was opened.
397
+ */
398
+ openCellContextMenu(tableCell, clientX, clientY) {
399
+ const options = tableCell.column?.options.cells?.contextMenu;
400
+ if (options?.enabled === false) {
401
+ return false;
402
+ }
403
+ const items = options?.items || [];
404
+ if (!items.length) {
405
+ return false; // Keep native browser menu
406
+ }
407
+ if (!this.cellContextMenu) {
408
+ this.cellContextMenu = new CellContextMenu(this.grid);
409
+ }
410
+ // Close any existing popups before opening a new menu.
411
+ // Copy to array to avoid mutation during iteration.
412
+ for (const popup of Array.from(this.grid.popups)) {
413
+ if (popup !== this.cellContextMenu) {
414
+ popup.hide();
415
+ }
416
+ }
417
+ if (this.cellContextMenu.isVisible) {
418
+ this.cellContextMenu.hide();
419
+ }
420
+ this.cellContextMenu.showAt(tableCell, clientX, clientY);
421
+ return true;
422
+ }
262
423
  /**
263
424
  * Scrolls the table to the specified row.
264
425
  *
@@ -309,17 +470,63 @@ class Table {
309
470
  getWidthFromRatio(ratio) {
310
471
  return this.tbodyElement.clientWidth * ratio;
311
472
  }
473
+ /**
474
+ * Finds a cell from a DOM element within the table body.
475
+ *
476
+ * @param element
477
+ * The DOM element to find the cell for (typically event.target).
478
+ *
479
+ * @returns
480
+ * The Cell instance or undefined if not found.
481
+ *
482
+ * @internal
483
+ */
484
+ getCellFromElement(element) {
485
+ if (!(element instanceof Element)) {
486
+ return;
487
+ }
488
+ const td = element.closest('td');
489
+ if (!td) {
490
+ return;
491
+ }
492
+ const tr = td.parentElement;
493
+ if (!tr) {
494
+ return;
495
+ }
496
+ const rowIndexAttr = tr.getAttribute('data-row-index');
497
+ if (rowIndexAttr === null) {
498
+ return;
499
+ }
500
+ const rowIndex = parseInt(rowIndexAttr, 10);
501
+ const firstRowIndex = this.rows[0]?.index ?? 0;
502
+ const row = this.rows[rowIndex - firstRowIndex];
503
+ if (!row) {
504
+ return;
505
+ }
506
+ // Find cell index by position in row
507
+ const cellIndex = Array.prototype.indexOf.call(tr.children, td);
508
+ return row.cells[cellIndex];
509
+ }
312
510
  /**
313
511
  * Destroys the grid table.
314
512
  */
315
513
  destroy() {
316
514
  this.tbodyElement.removeEventListener('focus', this.onTBodyFocus);
317
515
  this.tbodyElement.removeEventListener('scroll', this.onScroll);
516
+ this.tbodyElement.removeEventListener('click', this.onCellClick);
517
+ this.tbodyElement.removeEventListener('dblclick', this.onCellDblClick);
518
+ this.tbodyElement.removeEventListener('contextmenu', this.onCellContextMenu);
519
+ this.tbodyElement.removeEventListener('mousedown', this.onCellMouseDown);
520
+ this.tbodyElement.removeEventListener('mouseover', this.onCellMouseOver);
521
+ this.tbodyElement.removeEventListener('mouseout', this.onCellMouseOut);
522
+ this.tbodyElement.removeEventListener('keydown', this.onCellKeyDown);
318
523
  this.resizeObserver.disconnect();
319
524
  this.columnsResizer?.removeEventListeners();
320
525
  this.header?.destroy();
526
+ this.cellContextMenu?.hide();
527
+ delete this.cellContextMenu;
321
528
  for (let i = 0, iEnd = this.rows.length; i < iEnd; ++i) {
322
- this.rows[i].destroy();
529
+ this.rows[i]?.destroy();
323
530
  }
324
531
  fireEvent(this, 'afterDestroy');
325
532
  }
@@ -389,9 +596,6 @@ class Table {
389
596
  * The ID of the row.
390
597
  */
391
598
  getRow(id) {
392
- // TODO: Change `find` to a method using `vp.dataTable.getLocalRowIndex`
393
- // and rows[presentationRowIndex - firstRowIndex]. Needs more testing,
394
- // but it should be faster.
395
599
  return this.rows.find((row) => row.id === id);
396
600
  }
397
601
  }
@@ -2,11 +2,11 @@
2
2
  *
3
3
  * Grid Button interface
4
4
  *
5
- * (c) 2020-2025 Highsoft AS
5
+ * (c) 2020-2026 Highsoft AS
6
6
  *
7
- * License: www.highcharts.com/license
7
+ * A commercial license may be required depending on use.
8
+ * See www.highcharts.com/license
8
9
  *
9
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10
10
  *
11
11
  * Authors:
12
12
  * - Dawid Dragula
@@ -2,11 +2,11 @@
2
2
  *
3
3
  * Grid Context Menu abstract class
4
4
  *
5
- * (c) 2020-2025 Highsoft AS
5
+ * (c) 2020-2026 Highsoft AS
6
6
  *
7
- * License: www.highcharts.com/license
7
+ * A commercial license may be required depending on use.
8
+ * See www.highcharts.com/license
8
9
  *
9
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10
10
  *
11
11
  * Authors:
12
12
  * - Dawid Dragula