@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
@@ -0,0 +1,246 @@
1
+ /* *
2
+ *
3
+ * Remote Data Provider class
4
+ *
5
+ * (c) 2020-2025 Highsoft AS
6
+ *
7
+ * License: www.highcharts.com/license
8
+ *
9
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10
+ *
11
+ * Authors:
12
+ * - Dawid Dragula
13
+ *
14
+ * */
15
+ 'use strict';
16
+ import { defined } from '../../../Shared/Utilities.js';
17
+ import T from '../../../Core/Templating.js';
18
+ const { format } = T;
19
+ /* *
20
+ *
21
+ * Definitions
22
+ *
23
+ * */
24
+ /**
25
+ * Mapping from Grid filter operators to standard API filter conditions.
26
+ */
27
+ const filterOperatorMap = {
28
+ '==': 'equals',
29
+ '===': 'equals',
30
+ '!=': 'doesNotEqual',
31
+ '!==': 'doesNotEqual',
32
+ '>': 'greaterThan',
33
+ '>=': 'greaterThanOrEqualTo',
34
+ '<': 'lessThan',
35
+ '<=': 'lessThanOrEqualTo',
36
+ contains: 'contains',
37
+ startsWith: 'beginsWith',
38
+ endsWith: 'endsWith',
39
+ empty: 'empty'
40
+ };
41
+ /**
42
+ * Recursively extracts filter conditions from the Grid's FilterCondition
43
+ * structure into a flat array of API filter conditions.
44
+ *
45
+ * @param condition
46
+ * The filter condition from the Grid's filtering modifier.
47
+ *
48
+ * @param filterColumns
49
+ * The array to accumulate filter conditions into.
50
+ *
51
+ * @returns
52
+ * The accumulated filter conditions array.
53
+ */
54
+ function extractFilterConditions(condition, filterColumns = []) {
55
+ if (!condition) {
56
+ return filterColumns;
57
+ }
58
+ if (condition.operator === 'and' || condition.operator === 'or') {
59
+ // Logical condition - extract from nested conditions
60
+ if (condition.conditions) {
61
+ for (const subCondition of condition.conditions) {
62
+ extractFilterConditions(subCondition, filterColumns);
63
+ }
64
+ }
65
+ }
66
+ else if (condition.columnId) {
67
+ // Single condition
68
+ const mappedOperator = filterOperatorMap[condition.operator] || condition.operator;
69
+ filterColumns.push({
70
+ id: condition.columnId,
71
+ condition: mappedOperator,
72
+ value: condition.value
73
+ });
74
+ }
75
+ return filterColumns;
76
+ }
77
+ /**
78
+ * Returns the active sortings from the query state.
79
+ *
80
+ * @param state
81
+ * The query state.
82
+ *
83
+ * @returns
84
+ * The active sortings.
85
+ */
86
+ const getActiveSortings = (state) => {
87
+ const { currentSortings, currentSorting } = state.query.sorting;
88
+ return (currentSortings ?? (currentSorting ? [currentSorting] : [])).filter((sorting) => defined(sorting?.columnId) && defined(sorting.order));
89
+ };
90
+ const defaultTemplateVariables = {
91
+ page: (state) => (Math.floor(state.offset / (state.limit || 1)) + 1).toFixed(),
92
+ pageSize: (state) => state.limit.toFixed(),
93
+ offset: (state) => state.offset.toFixed(),
94
+ limit: (state) => state.limit.toFixed(),
95
+ format: () => 'js',
96
+ filter: (state) => {
97
+ const filterColumns = [];
98
+ const filterCondition = state.query.filtering.modifier?.options?.condition;
99
+ if (filterCondition) {
100
+ extractFilterConditions(filterCondition, filterColumns);
101
+ }
102
+ if (!filterColumns.length) {
103
+ return '';
104
+ }
105
+ return JSON.stringify({ columns: filterColumns });
106
+ },
107
+ sortBy: (state) => {
108
+ const sortings = getActiveSortings(state);
109
+ if (!sortings.length) {
110
+ return '';
111
+ }
112
+ return sortings.map((sorting) => sorting.columnId).join(',');
113
+ },
114
+ sortOrder: (state) => {
115
+ const sortings = getActiveSortings(state);
116
+ if (!sortings.length) {
117
+ return '';
118
+ }
119
+ const sortOrders = sortings.map((sorting) => sorting.order);
120
+ const uniqueOrders = Array.from(new Set(sortOrders));
121
+ return uniqueOrders.length === 1 ?
122
+ uniqueOrders[0] :
123
+ sortOrders.join(',');
124
+ }
125
+ };
126
+ const defaultParseResponse = async (res) => {
127
+ if (!res.ok) {
128
+ let message = `DataSourceHelper: request failed with status ${res.status} ${res.statusText}`;
129
+ try {
130
+ const body = await res.text();
131
+ if (body) {
132
+ message += ` - ${body}`;
133
+ }
134
+ }
135
+ catch {
136
+ // Ignore response body parsing errors for error responses.
137
+ }
138
+ throw new Error(message);
139
+ }
140
+ const { data, meta } = await res.json();
141
+ return {
142
+ columns: data || {},
143
+ totalRowCount: meta?.totalRowCount || 0,
144
+ rowIds: meta?.rowIds
145
+ };
146
+ };
147
+ /**
148
+ * Builds a URL with query parameters for fetching data from the remote server.
149
+ *
150
+ * @param options
151
+ * The options for building the URL.
152
+ *
153
+ * @param state
154
+ * The query state containing the query, offset and limit.
155
+ *
156
+ * @returns
157
+ * The complete URL string with all query parameters.
158
+ */
159
+ export function buildUrl(options, state) {
160
+ const { urlTemplate, templateVariables, omitEmpty } = options;
161
+ const variables = {
162
+ ...defaultTemplateVariables,
163
+ ...templateVariables
164
+ };
165
+ const context = {};
166
+ // Populate context with template variables in form of getter functions
167
+ // so that only the variables that are actually used in the URL are
168
+ // evaluated.
169
+ Object.keys(variables).forEach((key) => {
170
+ const value = variables[key];
171
+ Object.defineProperty(context, key, {
172
+ enumerable: true,
173
+ get: () => value(state)
174
+ });
175
+ });
176
+ const res = format(urlTemplate, context);
177
+ if (omitEmpty ?? true) {
178
+ return res.replace(/&([^=&]+)=([^&]*)/g, (_, key, value) => (value ? `&${key}=${value}` : ''));
179
+ }
180
+ return res;
181
+ }
182
+ /**
183
+ * Fetches data from the remote server using the data source options.
184
+ *
185
+ * @param options
186
+ * The options for fetching data from the remote server.
187
+ *
188
+ * @param state
189
+ * The query state containing the query, offset and limit.
190
+ *
191
+ * @returns
192
+ * The fetched data.
193
+ */
194
+ export async function dataSourceFetch(options, state) {
195
+ const { parseResponse = defaultParseResponse, fetchTimeout = 30000 } = options;
196
+ try {
197
+ const url = buildUrl(options, state);
198
+ const controller = fetchTimeout > 0 ? new AbortController() : null;
199
+ const externalSignal = state.signal;
200
+ let timeoutId;
201
+ if (controller && externalSignal) {
202
+ if (externalSignal.aborted) {
203
+ controller.abort();
204
+ }
205
+ else {
206
+ externalSignal.addEventListener('abort', () => {
207
+ controller.abort();
208
+ }, { once: true });
209
+ }
210
+ }
211
+ if (controller) {
212
+ timeoutId = setTimeout(() => {
213
+ controller.abort();
214
+ }, fetchTimeout);
215
+ }
216
+ try {
217
+ const signal = controller?.signal ?? externalSignal;
218
+ const res = signal ?
219
+ await fetch(url, { signal }) :
220
+ await fetch(url);
221
+ const data = await parseResponse(res);
222
+ return data;
223
+ }
224
+ finally {
225
+ if (timeoutId) {
226
+ clearTimeout(timeoutId);
227
+ }
228
+ }
229
+ }
230
+ catch (err) {
231
+ if (err instanceof DOMException && err.name === 'AbortError') {
232
+ return {
233
+ columns: {},
234
+ totalRowCount: 0,
235
+ rowIds: []
236
+ };
237
+ }
238
+ // eslint-disable-next-line no-console
239
+ console.error('Error fetching data from remote server.\n', err);
240
+ return {
241
+ columns: {},
242
+ totalRowCount: 0,
243
+ rowIds: []
244
+ };
245
+ }
246
+ }
@@ -0,0 +1,46 @@
1
+ export interface QueryFingerprintInput {
2
+ sorting: {
3
+ modifier?: {
4
+ options?: unknown;
5
+ };
6
+ };
7
+ filtering: {
8
+ modifier?: {
9
+ options?: unknown;
10
+ };
11
+ };
12
+ pagination: {
13
+ enabled: boolean;
14
+ currentPage: number;
15
+ currentPageSize: number;
16
+ };
17
+ }
18
+ /**
19
+ * Creates a deterministic fingerprint of the current query state.
20
+ *
21
+ * @param input
22
+ * Minimal query-like object (duck-typed) containing sorting, filtering and
23
+ * pagination state.
24
+ */
25
+ export declare function createQueryFingerprint(input: QueryFingerprintInput): string;
26
+ /**
27
+ * Serializes a filter condition into a deterministic string.
28
+ *
29
+ * @param condition
30
+ * Filter condition (serializable object, callback, or primitive).
31
+ */
32
+ export declare function serializeFilterCondition(condition: unknown): string;
33
+ /**
34
+ * Serializes an arbitrary value into a deterministic string.
35
+ *
36
+ * @param value
37
+ * Value to serialize.
38
+ */
39
+ export declare function serializeValue(value: unknown): string;
40
+ /**
41
+ * Small deterministic hash for strings (djb2-ish), returned as base36.
42
+ *
43
+ * @param str
44
+ * String to hash.
45
+ */
46
+ export declare function hashString(str: string): string;
@@ -0,0 +1,169 @@
1
+ /* *
2
+ *
3
+ * Grid Query Serializer
4
+ *
5
+ * (c) 2020-2026 Highsoft AS
6
+ *
7
+ * A commercial license may be required depending on use.
8
+ * See www.highcharts.com/license
9
+ *
10
+ * Authors:
11
+ * - Dawid Dragula
12
+ *
13
+ * */
14
+ 'use strict';
15
+ /* *
16
+ *
17
+ * Functions
18
+ *
19
+ * */
20
+ /**
21
+ * Creates a deterministic fingerprint of the current query state.
22
+ *
23
+ * @param input
24
+ * Minimal query-like object (duck-typed) containing sorting, filtering and
25
+ * pagination state.
26
+ */
27
+ export function createQueryFingerprint(input) {
28
+ const sortingOptions = input.sorting.modifier?.options || null;
29
+ const filteringOptions = input.filtering.modifier?.options || null;
30
+ const paginationOptions = {
31
+ enabled: input.pagination.enabled,
32
+ currentPage: input.pagination.currentPage,
33
+ currentPageSize: input.pagination.currentPageSize
34
+ };
35
+ const sortingPart = serializeValue(sortingOptions);
36
+ const paginationPart = serializeValue(paginationOptions);
37
+ const filteringPart = serializeValue(filteringOptions);
38
+ const raw = `s=${sortingPart}|p=${paginationPart}|f=${filteringPart}`;
39
+ return hashString(raw);
40
+ }
41
+ /**
42
+ * Serializes function identity deterministically (name + hash of source).
43
+ *
44
+ * @param fn
45
+ * Function to serialize.
46
+ */
47
+ function serializeFunction(fn) {
48
+ if (typeof fn !== 'function') {
49
+ return '';
50
+ }
51
+ let src = '';
52
+ try {
53
+ src = Function.prototype.toString.call(fn);
54
+ }
55
+ catch {
56
+ src = '';
57
+ }
58
+ return `fn:${fn.name || ''}:${hashString(src)}`;
59
+ }
60
+ /**
61
+ * Serializes a filter condition into a deterministic string.
62
+ *
63
+ * @param condition
64
+ * Filter condition (serializable object, callback, or primitive).
65
+ */
66
+ export function serializeFilterCondition(condition) {
67
+ if (!condition) {
68
+ return '';
69
+ }
70
+ if (typeof condition === 'function') {
71
+ return serializeFunction(condition);
72
+ }
73
+ if (typeof condition !== 'object') {
74
+ return serializeValue(condition);
75
+ }
76
+ const c = condition;
77
+ const op = String(c.operator || '');
78
+ if (op === 'and' || op === 'or') {
79
+ const subs = Array.isArray(c.conditions) ? c.conditions : [];
80
+ const parts = subs
81
+ .map((sub) => serializeFilterCondition(sub))
82
+ .sort(); // Commutative -> stable
83
+ return `${op}(${parts.join(',')})`;
84
+ }
85
+ if (op === 'not') {
86
+ return `not(${serializeFilterCondition(c.condition)})`;
87
+ }
88
+ const col = serializeValue(c.columnId);
89
+ const val = serializeValue(c.value);
90
+ const ignoreCase = serializeValue(c.ignoreCase);
91
+ // Comparison / string condition
92
+ return `${op}:${col}:${val}:${ignoreCase}`;
93
+ }
94
+ /**
95
+ * Serializes an arbitrary value into a deterministic string.
96
+ *
97
+ * @param value
98
+ * Value to serialize.
99
+ */
100
+ export function serializeValue(value) {
101
+ if (value === null) {
102
+ return 'null';
103
+ }
104
+ if (typeof value === 'undefined') {
105
+ return 'undef';
106
+ }
107
+ if (typeof value === 'string') {
108
+ // Escape to keep delimiters stable
109
+ return `str:${encodeURIComponent(value)}`;
110
+ }
111
+ if (typeof value === 'number') {
112
+ if (Number.isNaN(value)) {
113
+ return 'num:NaN';
114
+ }
115
+ if (value === Number.POSITIVE_INFINITY) {
116
+ return 'num:Infinity';
117
+ }
118
+ if (value === Number.NEGATIVE_INFINITY) {
119
+ return 'num:-Infinity';
120
+ }
121
+ return `num:${value}`;
122
+ }
123
+ if (typeof value === 'boolean') {
124
+ return value ? 'bool:1' : 'bool:0';
125
+ }
126
+ if (typeof value === 'bigint') {
127
+ return `big:${String(value)}`;
128
+ }
129
+ if (value instanceof Date) {
130
+ return `date:${value.toISOString()}`;
131
+ }
132
+ if (Array.isArray(value)) {
133
+ return `arr:[${value.map(serializeValue).join(',')}]`;
134
+ }
135
+ if (typeof value === 'function') {
136
+ const fn = value;
137
+ let src = '';
138
+ try {
139
+ src = Function.prototype.toString.call(fn);
140
+ }
141
+ catch {
142
+ src = '';
143
+ }
144
+ return `fn:${fn.name || ''}:${hashString(src)}`;
145
+ }
146
+ // Fallback: deterministic key order
147
+ const obj = value;
148
+ const keys = Object.keys(obj).sort();
149
+ const parts = [];
150
+ for (let i = 0, iEnd = keys.length; i < iEnd; ++i) {
151
+ const k = keys[i];
152
+ parts.push(`${encodeURIComponent(k)}=${serializeValue(obj[k])}`);
153
+ }
154
+ return `obj:{${parts.join(',')}}`;
155
+ }
156
+ /**
157
+ * Small deterministic hash for strings (djb2-ish), returned as base36.
158
+ *
159
+ * @param str
160
+ * String to hash.
161
+ */
162
+ export function hashString(str) {
163
+ let hash = 5381;
164
+ for (let i = 0, iEnd = str.length; i < iEnd; ++i) {
165
+ hash = ((hash << 5) + hash) ^ str.charCodeAt(i);
166
+ }
167
+ // Convert to unsigned 32-bit and base36 for compactness
168
+ return (hash >>> 0).toString(36);
169
+ }
@@ -0,0 +1,187 @@
1
+ import type { RowObject as RowObjectType, Column as DataTableColumnType, CellType as DataTableCellType } from '../../../Data/DataTable';
2
+ import type { DataProviderOptions, RowId } from '../../Core/Data/DataProvider';
3
+ import type { ColumnDataType } from '../../Core/Table/Column';
4
+ import type QueryingController from '../../Core/Querying/QueryingController';
5
+ import type { DataSourceOptions } from './DataSourceHelper';
6
+ import { DataProvider } from '../../Core/Data/DataProvider.js';
7
+ /**
8
+ * Remote data provider for the Grid.
9
+ *
10
+ * Fetches tabular data from a remote API in chunks and exposes it through the
11
+ * standard `DataProvider` interface used by the Grid viewport.
12
+ *
13
+ * - Caches fetched chunks (optionally with an LRU eviction policy).
14
+ * - Deduplicates concurrent requests for the same chunk.
15
+ * - Uses a query fingerprint to invalidate caches when the query changes.
16
+ */
17
+ export declare class RemoteDataProvider extends DataProvider {
18
+ private static readonly DEFAULT_CHUNK_SIZE;
19
+ readonly options: RemoteDataProviderOptions;
20
+ /**
21
+ * Total row count before pagination (from API metadata `totalRowCount`).
22
+ */
23
+ private prePaginationRowCount;
24
+ /**
25
+ * Current row count after pagination (actual rows returned in the chunk).
26
+ * When pagination is disabled, this equals prePaginationRowCount.
27
+ */
28
+ private rowCount;
29
+ /**
30
+ * Array of column IDs that have been fetched from the remote server.
31
+ */
32
+ private columnIds;
33
+ /**
34
+ * Cached chunks are used to store the data for the chunks that have been
35
+ * fetched from the remote server.
36
+ */
37
+ private dataChunks;
38
+ /**
39
+ * Pending chunks are used to deduplicate concurrent requests for the same
40
+ * chunk.
41
+ */
42
+ private pendingChunks;
43
+ /**
44
+ * Reverse lookup map from rowId to { chunkIndex, localIndex } for O(1)
45
+ * lookup in getRowIndex.
46
+ */
47
+ private rowIdToChunkInfo;
48
+ /**
49
+ * Fingerprint of the last applied query; used to avoid clearing caches
50
+ * when the query did not actually change.
51
+ */
52
+ private lastQueryFingerprint;
53
+ /**
54
+ * Epoch used to invalidate stale in-flight requests when the query changes.
55
+ */
56
+ private requestEpoch;
57
+ /**
58
+ * Abort controllers for in-flight requests (latest-only policy).
59
+ */
60
+ private pendingControllers;
61
+ /**
62
+ * Returns the effective chunk size.
63
+ * When pagination is enabled, uses the page size as chunk size,
64
+ * so that one chunk = one page.
65
+ */
66
+ private get maxChunkSize();
67
+ private get requestPolicy();
68
+ private abortPendingRequests;
69
+ private getChunkForRowIndex;
70
+ /**
71
+ * Gets the chunk index for a given row index.
72
+ * When pagination is enabled, all rows are in chunk 0.
73
+ *
74
+ * @param rowIndex
75
+ * The row index passed from the grid.
76
+ *
77
+ * @returns
78
+ * The chunk index.
79
+ */
80
+ private getChunkIndexForRow;
81
+ /**
82
+ * Gets the local index within the cached chunk data.
83
+ * When pagination is enabled, rowIndex is already 0-based within the page.
84
+ * When disabled, need to calculate offset within the chunk.
85
+ *
86
+ * @param rowIndex
87
+ * The row index passed from the grid.
88
+ *
89
+ * @returns
90
+ * The local index within the chunk.
91
+ */
92
+ private getLocalIndexInChunk;
93
+ /**
94
+ * Evicts the least recently used chunk if the cache limit is reached.
95
+ * Also cleans up the reverse lookup map for evicted rowIds.
96
+ */
97
+ private evictLRUChunkIfNeeded;
98
+ /**
99
+ * Fetches a chunk from the remote server and caches it.
100
+ * Deduplicates concurrent requests for the same chunk.
101
+ *
102
+ * @param chunkIndex
103
+ * The index of the chunk to fetch.
104
+ *
105
+ * @returns
106
+ * The cached chunk.
107
+ */
108
+ private fetchChunk;
109
+ getColumnIds(): Promise<string[]>;
110
+ getRowId(rowIndex: number): Promise<RowId | undefined>;
111
+ getRowIndex(rowId: RowId): Promise<number | undefined>;
112
+ getRowObject(rowIndex: number): Promise<RowObjectType | undefined>;
113
+ getPrePaginationRowCount(): Promise<number>;
114
+ getRowCount(): Promise<number>;
115
+ getValue(columnId: string, rowIndex: number): Promise<DataTableCellType>;
116
+ setValue(value: DataTableCellType, columnId: string, rowId: RowId): Promise<void>;
117
+ /**
118
+ * Gets a row object from the local cache without fetching.
119
+ * Returns undefined if the row is not cached.
120
+ *
121
+ * @param rowIndex
122
+ * The row index as passed from the grid.
123
+ *
124
+ * @returns
125
+ * The row object or undefined if not in cache.
126
+ */
127
+ private getRowObjectFromCache;
128
+ getColumnDataType(columnId: string): Promise<ColumnDataType>;
129
+ applyQuery(): Promise<void>;
130
+ destroy(): void;
131
+ }
132
+ export interface RemoteFetchCallbackResult {
133
+ columns: Record<string, DataTableColumnType>;
134
+ totalRowCount: number;
135
+ rowIds?: RowId[];
136
+ }
137
+ export interface DataChunk {
138
+ index: number;
139
+ data: Record<string, DataTableColumnType>;
140
+ rowIds: RowId[];
141
+ }
142
+ export interface RemoteDataProviderOptions extends DataProviderOptions {
143
+ providerType: 'remote';
144
+ /**
145
+ * Serialized data source configuration, alternatively to `fetchCallback`.
146
+ */
147
+ dataSource?: DataSourceOptions;
148
+ /**
149
+ * Custom callback to fetch data from the remote server. Has higher priority
150
+ * than `dataSource`.
151
+ */
152
+ fetchCallback?: (this: RemoteDataProvider, query: QueryingController, offset: number, limit: number, signal?: AbortSignal) => Promise<RemoteFetchCallbackResult>;
153
+ /**
154
+ * Callback to persist value changes to the remote server. If not provided,
155
+ * cell value editing will not be possible.
156
+ *
157
+ * The callback receives the column ID, row ID and value to set.
158
+ */
159
+ setValueCallback?: (this: RemoteDataProvider, columnId: string, rowId: RowId, value: DataTableCellType) => Promise<void>;
160
+ /**
161
+ * The number of rows to fetch per chunk.
162
+ */
163
+ chunkSize?: number;
164
+ /**
165
+ * Maximum number of chunks to keep in memory. When exceeded, the least
166
+ * recently used (LRU) chunk is evicted. If not set, all chunks are kept.
167
+ */
168
+ chunksLimit?: number;
169
+ /**
170
+ * Request policy for rapid query changes. `latest` aborts or ignores
171
+ * in-flight requests so only the final query updates the cache.
172
+ * @default 'latest'
173
+ */
174
+ requestPolicy?: 'latest' | 'all';
175
+ /**
176
+ * The column ID that contains the stable, unique row IDs. If not
177
+ * provided, the row IDs will be extracted from the `result.rowIds` property
178
+ * if available. If `result.rowIds` is also not defined, the row IDs will
179
+ * default to the indices of the rows in their display order.
180
+ */
181
+ idColumn?: string;
182
+ }
183
+ declare module '../../Core/Data/DataProviderType' {
184
+ interface DataProviderTypeRegistry {
185
+ remote: typeof RemoteDataProvider;
186
+ }
187
+ }