@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.
- package/LICENSE.txt +6 -0
- package/README.md +15 -9
- package/css/grid-pro.css +1289 -1153
- package/css/modules/grid-base-variables.css +131 -0
- package/css/modules/grid-button-variables.css +140 -0
- package/css/modules/grid-caption-variables.css +11 -0
- package/css/modules/grid-description-variables.css +11 -0
- package/css/modules/grid-input-variables.css +114 -0
- package/css/modules/grid-link-variables.css +18 -0
- package/css/modules/grid-menu-variables.css +50 -0
- package/css/modules/grid-pagination-variables.css +12 -0
- package/css/modules/grid-popup-variables.css +24 -0
- package/css/modules/grid-pro.css +234 -0
- package/css/modules/grid-table-variables.css +385 -0
- package/css/modules/grid-theme-default.css +55 -0
- package/es-modules/Accessibility/A11yI18n.js +4 -5
- package/es-modules/Accessibility/Accessibility.js +5 -5
- package/es-modules/Accessibility/AccessibilityComponent.d.ts +3 -3
- package/es-modules/Accessibility/AccessibilityComponent.js +4 -3
- package/es-modules/Accessibility/Components/AnnotationsA11y.js +4 -3
- package/es-modules/Accessibility/Components/ContainerComponent.js +4 -3
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +9 -9
- package/es-modules/Accessibility/Components/LegendComponent.js +5 -5
- package/es-modules/Accessibility/Components/MenuComponent.js +5 -5
- package/es-modules/Accessibility/Components/NavigatorComponent.js +6 -7
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -5
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +15 -5
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +7 -7
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +4 -3
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +7 -7
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +5 -5
- package/es-modules/Accessibility/Components/ZoomComponent.js +5 -5
- package/es-modules/Accessibility/FocusBorder.js +5 -5
- package/es-modules/Accessibility/HighContrastMode.js +4 -3
- package/es-modules/Accessibility/HighContrastTheme.js +4 -3
- package/es-modules/Accessibility/KeyboardNavigation.js +5 -5
- package/es-modules/Accessibility/KeyboardNavigationHandler.js +5 -5
- package/es-modules/Accessibility/Options/A11yDefaults.d.ts +11 -0
- package/es-modules/Accessibility/Options/A11yDefaults.js +15 -3
- package/es-modules/Accessibility/Options/DeprecatedOptions.d.ts +58 -0
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +11 -5
- package/es-modules/Accessibility/Options/LangDefaults.js +13 -3
- package/es-modules/Accessibility/ProxyElement.js +6 -8
- package/es-modules/Accessibility/ProxyProvider.js +5 -5
- package/es-modules/Accessibility/Utils/Announcer.js +6 -6
- package/es-modules/Accessibility/Utils/ChartUtilities.js +5 -5
- package/es-modules/Accessibility/Utils/DOMElementProvider.js +4 -3
- package/es-modules/Accessibility/Utils/EventProvider.d.ts +3 -3
- package/es-modules/Accessibility/Utils/EventProvider.js +10 -5
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +5 -5
- package/es-modules/Core/Animation/AnimationOptions.d.ts +42 -0
- package/es-modules/Core/Animation/AnimationOptions.js +10 -0
- package/es-modules/Core/Animation/AnimationUtilities.js +40 -5
- package/es-modules/Core/Animation/Fx.d.ts +1 -130
- package/es-modules/Core/Animation/Fx.js +14 -8
- package/es-modules/Core/Animation/FxBase.d.ts +1 -0
- package/es-modules/Core/Animation/FxBase.js +11 -0
- package/es-modules/Core/Callback.d.ts +56 -0
- package/es-modules/Core/Callback.js +10 -0
- package/es-modules/Core/Chart/Chart.d.ts +659 -400
- package/es-modules/Core/Chart/Chart.js +112 -95
- package/es-modules/Core/Chart/Chart3D.d.ts +123 -233
- package/es-modules/Core/Chart/Chart3D.js +23 -37
- package/es-modules/Core/Chart/ChartBase.d.ts +3 -0
- package/es-modules/Core/Chart/ChartBase.js +11 -0
- package/es-modules/Core/Chart/ChartDefaults.js +18 -12
- package/es-modules/Core/Chart/ChartNavigationComposition.d.ts +1 -55
- package/es-modules/Core/Chart/ChartNavigationComposition.js +13 -13
- package/es-modules/Core/Chart/ChartOptions.d.ts +1225 -0
- package/es-modules/Core/Chart/ChartOptions.js +10 -0
- package/es-modules/Core/Chart/GanttChart.d.ts +0 -38
- package/es-modules/Core/Chart/GanttChart.js +5 -5
- package/es-modules/Core/Chart/MapChart.d.ts +9 -4
- package/es-modules/Core/Chart/MapChart.js +14 -5
- package/es-modules/Core/Chart/StockChart.d.ts +0 -85
- package/es-modules/Core/Chart/StockChart.js +35 -18
- package/es-modules/Core/Color/Color.d.ts +16 -24
- package/es-modules/Core/Color/Color.js +27 -10
- package/es-modules/Core/Color/ColorString.d.ts +0 -23
- package/es-modules/Core/Color/ColorString.js +11 -0
- package/es-modules/Core/Color/ColorType.d.ts +0 -33
- package/es-modules/Core/Color/ColorType.js +11 -0
- package/es-modules/Core/Color/GradientColor.d.ts +0 -33
- package/es-modules/Core/Color/GradientColor.js +11 -0
- package/es-modules/Core/Color/Palettes.d.ts +1 -84
- package/es-modules/Core/Color/Palettes.js +2 -1
- package/es-modules/Core/Defaults.d.ts +6 -0
- package/es-modules/Core/Defaults.js +66 -75
- package/es-modules/Core/Delaunay.d.ts +52 -0
- package/es-modules/Core/Delaunay.js +310 -0
- package/es-modules/Core/Foundation.d.ts +1 -19
- package/es-modules/Core/Foundation.js +8 -6
- package/es-modules/Core/Geometry/CircleObject.d.ts +5 -0
- package/es-modules/Core/Geometry/CircleObject.js +10 -0
- package/es-modules/Core/Geometry/CircleUtilities.d.ts +1 -189
- package/es-modules/Core/Geometry/CircleUtilities.js +18 -17
- package/es-modules/Core/Geometry/GeometryObject.d.ts +7 -0
- package/es-modules/Core/Geometry/GeometryObject.js +10 -0
- package/es-modules/Core/Geometry/GeometryUtilities.d.ts +1 -48
- package/es-modules/Core/Geometry/GeometryUtilities.js +9 -7
- package/es-modules/Core/Geometry/IntersectionObject.d.ts +7 -0
- package/es-modules/Core/Geometry/IntersectionObject.js +10 -0
- package/es-modules/Core/Geometry/PolygonClip.d.ts +1 -19
- package/es-modules/Core/Geometry/PolygonClip.js +9 -7
- package/es-modules/Core/Globals.d.ts +9 -31
- package/es-modules/Core/Globals.js +9 -10
- package/es-modules/Core/GlobalsBase.d.ts +35 -0
- package/es-modules/Core/GlobalsBase.js +11 -0
- package/es-modules/Core/HttpUtilities.d.ts +54 -17
- package/es-modules/Core/HttpUtilities.js +16 -16
- package/es-modules/Core/JSON.d.ts +29 -0
- package/es-modules/Core/JSON.js +13 -0
- package/es-modules/Core/KeyboardEvent.d.ts +1 -0
- package/es-modules/Core/KeyboardEvent.js +11 -0
- package/es-modules/Core/MSPointer.d.ts +1 -74
- package/es-modules/Core/MSPointer.js +24 -15
- package/es-modules/Core/Math3D.d.ts +1 -117
- package/es-modules/Core/Math3D.js +14 -12
- package/es-modules/Core/Options.d.ts +338 -0
- package/es-modules/Core/Options.js +10 -0
- package/es-modules/Core/Pointer.d.ts +71 -445
- package/es-modules/Core/Pointer.js +74 -69
- package/es-modules/Core/PointerEvent.d.ts +20 -0
- package/es-modules/Core/PointerEvent.js +11 -0
- package/es-modules/Core/Renderer/AlignObject.d.ts +25 -27
- package/es-modules/Core/Renderer/AlignObject.js +11 -0
- package/es-modules/Core/Renderer/BBoxObject.d.ts +20 -31
- package/es-modules/Core/Renderer/BBoxObject.js +11 -0
- package/es-modules/Core/Renderer/CSSObject.d.ts +268 -59
- package/es-modules/Core/Renderer/CSSObject.js +10 -0
- package/es-modules/Core/Renderer/DOMElementType.d.ts +1 -33
- package/es-modules/Core/Renderer/DOMElementType.js +11 -0
- package/es-modules/Core/Renderer/DashStyleValue.d.ts +1 -27
- package/es-modules/Core/Renderer/DashStyleValue.js +11 -0
- package/es-modules/Core/Renderer/FontMetricsObject.d.ts +6 -26
- package/es-modules/Core/Renderer/FontMetricsObject.js +11 -0
- package/es-modules/Core/Renderer/HTML/AST.d.ts +3 -15
- package/es-modules/Core/Renderer/HTML/AST.js +24 -15
- package/es-modules/Core/Renderer/HTML/HTMLAttributes.d.ts +1 -25
- package/es-modules/Core/Renderer/HTML/HTMLAttributes.js +11 -0
- package/es-modules/Core/Renderer/HTML/HTMLElement.d.ts +0 -54
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +28 -24
- package/es-modules/Core/Renderer/PolygonBoxObject.d.ts +15 -12
- package/es-modules/Core/Renderer/PolygonBoxObject.js +11 -0
- package/es-modules/Core/Renderer/Position3DObject.d.ts +6 -30
- package/es-modules/Core/Renderer/Position3DObject.js +11 -0
- package/es-modules/Core/Renderer/PositionObject.d.ts +9 -23
- package/es-modules/Core/Renderer/PositionObject.js +11 -0
- package/es-modules/Core/Renderer/RectangleObject.d.ts +6 -30
- package/es-modules/Core/Renderer/RectangleObject.js +11 -0
- package/es-modules/Core/Renderer/RendererRegistry.d.ts +1 -29
- package/es-modules/Core/Renderer/RendererRegistry.js +6 -3
- package/es-modules/Core/Renderer/RendererType.d.ts +1 -53
- package/es-modules/Core/Renderer/RendererType.js +11 -0
- package/es-modules/Core/Renderer/RendererUtilities.d.ts +1 -26
- package/es-modules/Core/Renderer/RendererUtilities.js +41 -23
- package/es-modules/Core/Renderer/SVG/ButtonThemeObject.d.ts +26 -31
- package/es-modules/Core/Renderer/SVG/SVGArc3D.d.ts +1 -44
- package/es-modules/Core/Renderer/SVG/SVGAttributes.d.ts +15 -51
- package/es-modules/Core/Renderer/SVG/SVGAttributes3D.d.ts +1 -42
- package/es-modules/Core/Renderer/SVG/SVGCuboid.d.ts +1 -42
- package/es-modules/Core/Renderer/SVG/SVGElement.d.ts +459 -0
- package/es-modules/Core/Renderer/SVG/SVGElement3D.d.ts +1 -0
- package/es-modules/Core/Renderer/SVG/SVGElementBase.d.ts +0 -23
- package/es-modules/Core/Renderer/SVG/SVGLabel.d.ts +14 -0
- package/es-modules/Core/Renderer/SVG/SVGPath.d.ts +18 -56
- package/es-modules/Core/Renderer/SVG/SVGPath3D.d.ts +0 -30
- package/es-modules/Core/Renderer/SVG/SVGRenderer.d.ts +652 -0
- package/es-modules/Core/Renderer/SVG/SVGRenderer3D.d.ts +1 -0
- package/es-modules/Core/Renderer/SVG/SVGRendererBase.d.ts +0 -24
- package/es-modules/Core/Renderer/SVG/SymbolOptions.d.ts +3 -26
- package/es-modules/Core/Renderer/SVG/SymbolType.d.ts +1 -41
- package/es-modules/Core/Renderer/SVG/Symbols.d.ts +146 -0
- package/es-modules/Core/Renderer/SVG/TextBuilder.d.ts +1 -0
- package/es-modules/Core/Renderer/ShadowOptionsObject.d.ts +21 -30
- package/es-modules/Core/Renderer/ShadowOptionsObject.js +11 -0
- package/es-modules/Core/Renderer/SizeObject.d.ts +0 -23
- package/es-modules/Core/Renderer/SizeObject.js +11 -0
- package/es-modules/Core/Responsive.d.ts +94 -29
- package/es-modules/Core/Responsive.js +17 -12
- package/es-modules/Core/Templating.d.ts +17 -1
- package/es-modules/Core/Templating.js +12 -8
- package/es-modules/Core/Time.d.ts +18 -1
- package/es-modules/Core/Time.js +6 -5
- package/es-modules/Core/Tooltip.d.ts +67 -123
- package/es-modules/Core/Tooltip.js +161 -108
- package/es-modules/Core/TooltipOptions.d.ts +724 -0
- package/es-modules/Core/TooltipOptions.js +10 -0
- package/es-modules/Core/Utilities.d.ts +32 -703
- package/es-modules/Core/Utilities.js +28 -1443
- package/es-modules/Data/ColumnUtils.d.ts +83 -80
- package/es-modules/Data/ColumnUtils.js +106 -116
- package/es-modules/Data/Connectors/CSVConnector.d.ts +9 -14
- package/es-modules/Data/Connectors/CSVConnector.js +6 -7
- package/es-modules/Data/Connectors/CSVConnectorOptions.d.ts +3 -3
- package/es-modules/Data/Connectors/DataConnector.d.ts +63 -54
- package/es-modules/Data/Connectors/DataConnector.js +67 -56
- package/es-modules/Data/Connectors/DataConnectorOptions.d.ts +3 -3
- package/es-modules/Data/Connectors/DataConnectorType.d.ts +3 -3
- package/es-modules/Data/Connectors/GoogleSheetsConnector.d.ts +40 -42
- package/es-modules/Data/Connectors/GoogleSheetsConnector.js +76 -91
- package/es-modules/Data/Connectors/GoogleSheetsConnectorOptions.d.ts +7 -5
- package/es-modules/Data/Connectors/HTMLTableConnector.d.ts +23 -28
- package/es-modules/Data/Connectors/HTMLTableConnector.js +6 -7
- package/es-modules/Data/Connectors/HTMLTableConnectorOptions.d.ts +3 -3
- package/es-modules/Data/Connectors/JSONConnector.d.ts +9 -14
- package/es-modules/Data/Connectors/JSONConnector.js +6 -7
- package/es-modules/Data/Connectors/JSONConnectorOptions.d.ts +3 -3
- package/es-modules/Data/Converters/CSVConverter.d.ts +5 -5
- package/es-modules/Data/Converters/CSVConverter.js +6 -7
- package/es-modules/Data/Converters/CSVConverterOptions.d.ts +5 -5
- package/es-modules/Data/Converters/DataConverter.d.ts +76 -78
- package/es-modules/Data/Converters/DataConverter.js +29 -56
- package/es-modules/Data/Converters/DataConverterType.d.ts +3 -3
- package/es-modules/Data/Converters/DataConverterUtils.d.ts +88 -81
- package/es-modules/Data/Converters/DataConverterUtils.js +172 -184
- package/es-modules/Data/Converters/GoogleSheetsConverter.d.ts +4 -4
- package/es-modules/Data/Converters/GoogleSheetsConverter.js +6 -6
- package/es-modules/Data/Converters/GoogleSheetsConverterOptions.d.ts +5 -5
- package/es-modules/Data/Converters/HTMLTableConverter.d.ts +4 -4
- package/es-modules/Data/Converters/HTMLTableConverter.js +5 -6
- package/es-modules/Data/Converters/HTMLTableConverterOptions.d.ts +5 -5
- package/es-modules/Data/Converters/JSONConverter.d.ts +7 -7
- package/es-modules/Data/Converters/JSONConverter.js +9 -9
- package/es-modules/Data/Converters/JSONConverterOptions.d.ts +5 -5
- package/es-modules/Data/DataCursor.d.ts +65 -70
- package/es-modules/Data/DataCursor.js +122 -142
- package/es-modules/Data/DataEvent.d.ts +55 -57
- package/es-modules/Data/DataEvent.js +3 -3
- package/es-modules/Data/DataPool.d.ts +10 -17
- package/es-modules/Data/DataPool.js +23 -12
- package/es-modules/Data/DataPoolOptions.d.ts +3 -3
- package/es-modules/Data/DataTable.d.ts +115 -117
- package/es-modules/Data/DataTable.js +67 -33
- package/es-modules/Data/DataTableCore.d.ts +11 -11
- package/es-modules/Data/DataTableCore.js +7 -7
- package/es-modules/Data/DataTableOptions.js +3 -3
- package/es-modules/Data/Formula/Formula.js +3 -3
- package/es-modules/Data/Formula/FormulaParser.js +4 -5
- package/es-modules/Data/Formula/FormulaProcessor.js +4 -5
- package/es-modules/Data/Formula/FormulaTypes.js +3 -3
- package/es-modules/Data/Formula/Functions/ABS.js +3 -3
- package/es-modules/Data/Formula/Functions/AND.js +3 -3
- package/es-modules/Data/Formula/Functions/AVERAGE.js +3 -3
- package/es-modules/Data/Formula/Functions/AVERAGEA.js +3 -3
- package/es-modules/Data/Formula/Functions/COUNT.js +3 -3
- package/es-modules/Data/Formula/Functions/COUNTA.js +3 -3
- package/es-modules/Data/Formula/Functions/IF.js +3 -3
- package/es-modules/Data/Formula/Functions/ISNA.js +3 -3
- package/es-modules/Data/Formula/Functions/MAX.js +3 -3
- package/es-modules/Data/Formula/Functions/MEDIAN.js +3 -3
- package/es-modules/Data/Formula/Functions/MIN.js +3 -3
- package/es-modules/Data/Formula/Functions/MOD.js +3 -3
- package/es-modules/Data/Formula/Functions/MODE.js +3 -3
- package/es-modules/Data/Formula/Functions/NOT.js +3 -3
- package/es-modules/Data/Formula/Functions/OR.js +3 -3
- package/es-modules/Data/Formula/Functions/PRODUCT.js +3 -3
- package/es-modules/Data/Formula/Functions/SUM.js +3 -3
- package/es-modules/Data/Formula/Functions/XOR.js +3 -3
- package/es-modules/Data/Modifiers/ChainModifier.d.ts +29 -34
- package/es-modules/Data/Modifiers/ChainModifier.js +10 -11
- package/es-modules/Data/Modifiers/ChainModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/DataModifier.d.ts +36 -41
- package/es-modules/Data/Modifiers/DataModifier.js +34 -56
- package/es-modules/Data/Modifiers/DataModifierEvent.js +3 -3
- package/es-modules/Data/Modifiers/DataModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/DataModifierType.d.ts +3 -3
- package/es-modules/Data/Modifiers/FilterModifier.d.ts +4 -4
- package/es-modules/Data/Modifiers/FilterModifier.js +6 -7
- package/es-modules/Data/Modifiers/FilterModifierOptions.d.ts +3 -2
- package/es-modules/Data/Modifiers/FilterModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/InvertModifier.d.ts +4 -4
- package/es-modules/Data/Modifiers/InvertModifier.js +6 -7
- package/es-modules/Data/Modifiers/InvertModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/MathModifier.d.ts +5 -4
- package/es-modules/Data/Modifiers/MathModifier.js +3 -3
- package/es-modules/Data/Modifiers/MathModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/RangeModifier.d.ts +4 -4
- package/es-modules/Data/Modifiers/RangeModifier.js +6 -7
- package/es-modules/Data/Modifiers/RangeModifierOptions.js +3 -3
- package/es-modules/Data/Modifiers/SortModifier.d.ts +6 -11
- package/es-modules/Data/Modifiers/SortModifier.js +35 -10
- package/es-modules/Data/Modifiers/SortModifierOptions.d.ts +43 -6
- package/es-modules/Data/Modifiers/SortModifierOptions.js +3 -3
- package/es-modules/Grid/Core/Accessibility/A11yOptions.d.ts +77 -0
- package/es-modules/Grid/Core/Accessibility/A11yOptions.js +4 -3
- package/es-modules/Grid/Core/Accessibility/Accessibility.d.ts +68 -1
- package/es-modules/Grid/Core/Accessibility/Accessibility.js +179 -7
- package/es-modules/Grid/Core/Credits.js +3 -3
- package/es-modules/Grid/Core/Data/DataProvider.d.ts +97 -0
- package/es-modules/Grid/Core/Data/DataProvider.js +89 -0
- package/es-modules/Grid/Core/Data/DataProviderRegistry.d.ts +20 -0
- package/es-modules/Grid/Core/Data/DataProviderRegistry.js +52 -0
- package/es-modules/Grid/Core/Data/DataProviderType.d.ts +19 -0
- package/es-modules/Grid/Core/Data/DataProviderType.js +15 -0
- package/es-modules/Grid/Core/Data/LocalDataProvider.d.ts +165 -0
- package/es-modules/Grid/Core/Data/LocalDataProvider.js +341 -0
- package/es-modules/Grid/Core/Defaults.js +21 -7
- package/es-modules/Grid/Core/Globals.d.ts +20 -16
- package/es-modules/Grid/Core/Globals.js +13 -11
- package/es-modules/Grid/Core/Grid.d.ts +43 -23
- package/es-modules/Grid/Core/Grid.js +316 -136
- package/es-modules/Grid/Core/GridUtils.d.ts +33 -0
- package/es-modules/Grid/Core/GridUtils.js +53 -6
- package/es-modules/Grid/Core/Options.d.ts +162 -5
- package/es-modules/Grid/Core/Options.js +3 -3
- package/es-modules/Grid/Core/Pagination/Pagination.d.ts +3 -0
- package/es-modules/Grid/Core/Pagination/Pagination.js +66 -26
- package/es-modules/Grid/Core/Pagination/PaginationOptions.d.ts +4 -40
- package/es-modules/Grid/Core/Pagination/PaginationOptions.js +11 -0
- package/es-modules/Grid/Core/Querying/FilteringController.js +4 -5
- package/es-modules/Grid/Core/Querying/PaginationController.d.ts +2 -2
- package/es-modules/Grid/Core/Querying/PaginationController.js +6 -6
- package/es-modules/Grid/Core/Querying/QueryingController.d.ts +1 -1
- package/es-modules/Grid/Core/Querying/QueryingController.js +5 -29
- package/es-modules/Grid/Core/Querying/SortingController.d.ts +15 -0
- package/es-modules/Grid/Core/Querying/SortingController.js +89 -51
- package/es-modules/Grid/Core/Responsive/ResponsiveComposition.d.ts +53 -0
- package/es-modules/Grid/Core/Responsive/ResponsiveComposition.js +229 -0
- package/es-modules/Grid/Core/Responsive/ResponsiveOptions.d.ts +58 -0
- package/es-modules/Grid/Core/Responsive/ResponsiveOptions.js +15 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/ColumnFiltering.js +5 -6
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.d.ts +3 -3
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.js +6 -7
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.d.ts +1 -1
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.js +5 -5
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilteringTypes.js +3 -3
- package/es-modules/Grid/Core/Table/Actions/ColumnSorting.d.ts +29 -3
- package/es-modules/Grid/Core/Table/Actions/ColumnSorting.js +136 -26
- package/es-modules/Grid/Core/Table/Actions/ColumnsResizer.js +4 -6
- package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.d.ts +94 -3
- package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.js +481 -91
- package/es-modules/Grid/Core/Table/Body/CellContextMenu.d.ts +11 -0
- package/es-modules/Grid/Core/Table/Body/CellContextMenu.js +84 -0
- package/es-modules/Grid/Core/Table/Body/TableCell.d.ts +36 -15
- package/es-modules/Grid/Core/Table/Body/TableCell.js +89 -33
- package/es-modules/Grid/Core/Table/Body/TableRow.d.ts +15 -5
- package/es-modules/Grid/Core/Table/Body/TableRow.js +70 -19
- package/es-modules/Grid/Core/Table/Cell.d.ts +16 -10
- package/es-modules/Grid/Core/Table/Cell.js +41 -6
- package/es-modules/Grid/Core/Table/CellContent/CellContent.js +3 -3
- package/es-modules/Grid/Core/Table/CellContent/TextContent.js +7 -12
- package/es-modules/Grid/Core/Table/Column.d.ts +11 -5
- package/es-modules/Grid/Core/Table/Column.js +26 -37
- package/es-modules/Grid/Core/Table/ColumnResizing/AdjacentResizingMode.js +3 -3
- package/es-modules/Grid/Core/Table/ColumnResizing/ColumnResizing.js +3 -3
- package/es-modules/Grid/Core/Table/ColumnResizing/DistributedResizingMode.js +3 -3
- package/es-modules/Grid/Core/Table/ColumnResizing/IndependentResizingMode.js +12 -11
- package/es-modules/Grid/Core/Table/ColumnResizing/ResizingMode.js +7 -6
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.d.ts +5 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.js +21 -7
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/FilterPopup.js +4 -5
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/FilterMenuButton.js +4 -5
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.d.ts +9 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.js +37 -9
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuPopup.js +5 -4
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/StateHelpers.js +11 -7
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/FilterToolbarButton.js +4 -5
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/MenuToolbarButton.js +4 -5
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.d.ts +4 -1
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.js +88 -15
- package/es-modules/Grid/Core/Table/Header/HeaderCell.d.ts +8 -3
- package/es-modules/Grid/Core/Table/Header/HeaderCell.js +36 -15
- package/es-modules/Grid/Core/Table/Header/HeaderRow.js +7 -8
- package/es-modules/Grid/Core/Table/Header/TableHeader.d.ts +1 -1
- package/es-modules/Grid/Core/Table/Header/TableHeader.js +6 -6
- package/es-modules/Grid/Core/Table/Row.d.ts +1 -1
- package/es-modules/Grid/Core/Table/Row.js +5 -5
- package/es-modules/Grid/Core/Table/Table.d.ts +68 -12
- package/es-modules/Grid/Core/Table/Table.js +296 -92
- package/es-modules/Grid/Core/UI/Button.js +3 -3
- package/es-modules/Grid/Core/UI/ContextMenu.js +3 -3
- package/es-modules/Grid/Core/UI/ContextMenuButton.d.ts +6 -7
- package/es-modules/Grid/Core/UI/ContextMenuButton.js +8 -6
- package/es-modules/Grid/Core/UI/Popup.js +10 -12
- package/es-modules/Grid/Core/UI/SvgIcons.d.ts +42 -7
- package/es-modules/Grid/Core/UI/SvgIcons.js +209 -36
- package/es-modules/Grid/Core/UI/Toolbar.d.ts +5 -0
- package/es-modules/Grid/Core/UI/Toolbar.js +3 -3
- package/es-modules/Grid/Core/UI/ToolbarButton.d.ts +4 -12
- package/es-modules/Grid/Core/UI/ToolbarButton.js +11 -29
- package/es-modules/Grid/Pro/CellEditing/CellEditMode.d.ts +4 -45
- package/es-modules/Grid/Pro/CellEditing/CellEditMode.js +16 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditing.js +13 -13
- package/es-modules/Grid/Pro/CellEditing/CellEditingComposition.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/CellContentPro.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/CellRenderer.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/CellRendererRegistry.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/CellRendererType.d.ts +1 -34
- package/es-modules/Grid/Pro/CellRendering/CellRendererType.js +15 -0
- package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.d.ts +1 -1
- package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.js +7 -5
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.d.ts +2 -2
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContent.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContentBase.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateTimeInputContent.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/NumberInputContent.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.d.ts +2 -2
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.d.ts +7 -5
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.d.ts +2 -2
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TimeInputContent.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/Renderers/CheckboxRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRendererBase.js +3 -3
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateTimeInputRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/NumberInputRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/SelectRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.d.ts +4 -4
- package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextInputRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextRenderer.js +4 -5
- package/es-modules/Grid/Pro/CellRendering/Renderers/TimeInputRenderer.js +4 -5
- package/es-modules/Grid/Pro/ColumnTypes/Validator.d.ts +10 -1
- package/es-modules/Grid/Pro/ColumnTypes/Validator.js +56 -12
- package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.d.ts +1 -1
- package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.js +6 -7
- package/es-modules/Grid/Pro/Credits/CreditsPro.js +3 -3
- package/es-modules/Grid/Pro/Credits/CreditsProComposition.js +4 -6
- package/es-modules/Grid/Pro/Data/DataSourceHelper.d.ts +74 -0
- package/es-modules/Grid/Pro/Data/DataSourceHelper.js +246 -0
- package/es-modules/Grid/Pro/Data/QuerySerializer.d.ts +46 -0
- package/es-modules/Grid/Pro/Data/QuerySerializer.js +169 -0
- package/es-modules/Grid/Pro/Data/RemoteDataProvider.d.ts +187 -0
- package/es-modules/Grid/Pro/Data/RemoteDataProvider.js +500 -0
- package/es-modules/Grid/Pro/Export/Exporting.js +5 -7
- package/es-modules/Grid/Pro/Export/ExportingComposition.js +4 -5
- package/es-modules/Grid/Pro/GridEvents.d.ts +1 -0
- package/es-modules/Grid/Pro/GridEvents.js +4 -5
- package/es-modules/Grid/Pro/Pagination/PaginationComposition.d.ts +0 -1
- package/es-modules/Grid/Pro/Pagination/PaginationComposition.js +4 -5
- package/es-modules/Grid/index.js +3 -3
- package/es-modules/Shared/BaseForm.js +4 -5
- package/es-modules/Shared/DownloadURL.d.ts +1 -85
- package/es-modules/Shared/DownloadURL.js +15 -13
- package/es-modules/Shared/LangOptionsCore.d.ts +4 -3
- package/es-modules/Shared/TimeBase.d.ts +1 -46
- package/es-modules/Shared/TimeBase.js +11 -10
- package/es-modules/Shared/Types.d.ts +11 -3
- package/es-modules/Shared/Utilities.d.ts +576 -0
- package/es-modules/Shared/Utilities.js +1368 -0
- package/es-modules/masters/grid-pro.src.d.ts +18 -19
- package/es-modules/masters/grid-pro.src.js +24 -9
- package/grid-pro.d.ts +18 -19
- package/grid-pro.js +6 -5
- package/grid-pro.js.map +1 -1
- package/grid-pro.src.d.ts +18 -19
- package/grid-pro.src.js +8132 -4531
- package/package.json +1 -1
- package/es-modules/Grid/Core/Pagination/Icons.d.ts +0 -7
- package/es-modules/Grid/Core/Pagination/Icons.js +0 -7
- 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
|
+
}
|