@highcharts/grid-pro 2.0.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/README.md +35 -0
- package/css/grid-pro.css +1756 -0
- package/es-modules/Accessibility/A11yI18n.d.ts +95 -0
- package/es-modules/Accessibility/A11yI18n.js +290 -0
- package/es-modules/Accessibility/Accessibility.d.ts +116 -0
- package/es-modules/Accessibility/Accessibility.js +402 -0
- package/es-modules/Accessibility/AccessibilityComponent.d.ts +97 -0
- package/es-modules/Accessibility/AccessibilityComponent.js +147 -0
- package/es-modules/Accessibility/Components/AnnotationsA11y.d.ts +43 -0
- package/es-modules/Accessibility/Components/AnnotationsA11y.js +160 -0
- package/es-modules/Accessibility/Components/ContainerComponent.d.ts +48 -0
- package/es-modules/Accessibility/Components/ContainerComponent.js +142 -0
- package/es-modules/Accessibility/Components/InfoRegionsComponent.d.ts +144 -0
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +555 -0
- package/es-modules/Accessibility/Components/LegendComponent.d.ts +124 -0
- package/es-modules/Accessibility/Components/LegendComponent.js +474 -0
- package/es-modules/Accessibility/Components/MenuComponent.d.ts +93 -0
- package/es-modules/Accessibility/Components/MenuComponent.js +430 -0
- package/es-modules/Accessibility/Components/NavigatorComponent.d.ts +57 -0
- package/es-modules/Accessibility/Components/NavigatorComponent.js +235 -0
- package/es-modules/Accessibility/Components/RangeSelectorComponent.d.ts +126 -0
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +473 -0
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.d.ts +18 -0
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +234 -0
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.d.ts +87 -0
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +309 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.d.ts +53 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +130 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.d.ts +28 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +415 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.d.ts +114 -0
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +721 -0
- package/es-modules/Accessibility/Components/ZoomComponent.d.ts +96 -0
- package/es-modules/Accessibility/Components/ZoomComponent.js +314 -0
- package/es-modules/Accessibility/FocusBorder.d.ts +40 -0
- package/es-modules/Accessibility/FocusBorder.js +301 -0
- package/es-modules/Accessibility/HighContrastMode.d.ts +35 -0
- package/es-modules/Accessibility/HighContrastMode.js +100 -0
- package/es-modules/Accessibility/HighContrastTheme.d.ts +11 -0
- package/es-modules/Accessibility/HighContrastTheme.js +212 -0
- package/es-modules/Accessibility/KeyboardNavigation.d.ts +133 -0
- package/es-modules/Accessibility/KeyboardNavigation.js +450 -0
- package/es-modules/Accessibility/KeyboardNavigationHandler.d.ts +48 -0
- package/es-modules/Accessibility/KeyboardNavigationHandler.js +126 -0
- package/es-modules/Accessibility/Options/A11yDefaults.d.ts +68 -0
- package/es-modules/Accessibility/Options/A11yDefaults.js +971 -0
- package/es-modules/Accessibility/Options/DeprecatedOptions.d.ts +22 -0
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +265 -0
- package/es-modules/Accessibility/Options/LangDefaults.d.ts +4 -0
- package/es-modules/Accessibility/Options/LangDefaults.js +440 -0
- package/es-modules/Accessibility/ProxyElement.d.ts +78 -0
- package/es-modules/Accessibility/ProxyElement.js +223 -0
- package/es-modules/Accessibility/ProxyProvider.d.ts +90 -0
- package/es-modules/Accessibility/ProxyProvider.js +315 -0
- package/es-modules/Accessibility/Utils/Announcer.d.ts +26 -0
- package/es-modules/Accessibility/Utils/Announcer.js +90 -0
- package/es-modules/Accessibility/Utils/ChartUtilities.d.ts +90 -0
- package/es-modules/Accessibility/Utils/ChartUtilities.js +298 -0
- package/es-modules/Accessibility/Utils/DOMElementProvider.d.ts +20 -0
- package/es-modules/Accessibility/Utils/DOMElementProvider.js +69 -0
- package/es-modules/Accessibility/Utils/EventProvider.d.ts +26 -0
- package/es-modules/Accessibility/Utils/EventProvider.js +65 -0
- package/es-modules/Accessibility/Utils/HTMLUtilities.d.ts +108 -0
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +319 -0
- package/es-modules/Core/Animation/AnimationUtilities.d.ts +107 -0
- package/es-modules/Core/Animation/AnimationUtilities.js +200 -0
- package/es-modules/Core/Animation/Fx.d.ts +130 -0
- package/es-modules/Core/Animation/Fx.js +388 -0
- package/es-modules/Core/Chart/Chart.d.ts +1009 -0
- package/es-modules/Core/Chart/Chart.js +3008 -0
- package/es-modules/Core/Chart/Chart3D.d.ts +276 -0
- package/es-modules/Core/Chart/Chart3D.js +1686 -0
- package/es-modules/Core/Chart/ChartDefaults.d.ts +8 -0
- package/es-modules/Core/Chart/ChartDefaults.js +1304 -0
- package/es-modules/Core/Chart/ChartNavigationComposition.d.ts +55 -0
- package/es-modules/Core/Chart/ChartNavigationComposition.js +90 -0
- package/es-modules/Core/Chart/GanttChart.d.ts +74 -0
- package/es-modules/Core/Chart/GanttChart.js +189 -0
- package/es-modules/Core/Chart/MapChart.d.ts +132 -0
- package/es-modules/Core/Chart/MapChart.js +232 -0
- package/es-modules/Core/Chart/StockChart.d.ts +117 -0
- package/es-modules/Core/Chart/StockChart.js +641 -0
- package/es-modules/Core/Color/Color.d.ts +112 -0
- package/es-modules/Core/Color/Color.js +418 -0
- package/es-modules/Core/Color/Palettes.d.ts +84 -0
- package/es-modules/Core/Color/Palettes.js +23 -0
- package/es-modules/Core/Defaults.d.ts +42 -0
- package/es-modules/Core/Defaults.js +2977 -0
- package/es-modules/Core/Foundation.d.ts +19 -0
- package/es-modules/Core/Foundation.js +63 -0
- package/es-modules/Core/Geometry/CircleUtilities.d.ts +189 -0
- package/es-modules/Core/Geometry/CircleUtilities.js +388 -0
- package/es-modules/Core/Geometry/GeometryUtilities.d.ts +48 -0
- package/es-modules/Core/Geometry/GeometryUtilities.js +105 -0
- package/es-modules/Core/Geometry/PolygonClip.d.ts +19 -0
- package/es-modules/Core/Geometry/PolygonClip.js +96 -0
- package/es-modules/Core/Globals.d.ts +110 -0
- package/es-modules/Core/Globals.js +127 -0
- package/es-modules/Core/HttpUtilities.d.ts +61 -0
- package/es-modules/Core/HttpUtilities.js +214 -0
- package/es-modules/Core/MSPointer.d.ts +74 -0
- package/es-modules/Core/MSPointer.js +218 -0
- package/es-modules/Core/Math3D.d.ts +117 -0
- package/es-modules/Core/Math3D.js +250 -0
- package/es-modules/Core/Pointer.d.ts +590 -0
- package/es-modules/Core/Pointer.js +1631 -0
- package/es-modules/Core/Renderer/HTML/AST.d.ts +163 -0
- package/es-modules/Core/Renderer/HTML/AST.js +562 -0
- package/es-modules/Core/Renderer/HTML/HTMLElement.d.ts +76 -0
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +471 -0
- package/es-modules/Core/Renderer/RendererRegistry.d.ts +29 -0
- package/es-modules/Core/Renderer/RendererRegistry.js +76 -0
- package/es-modules/Core/Renderer/RendererUtilities.d.ts +26 -0
- package/es-modules/Core/Renderer/RendererUtilities.js +172 -0
- package/es-modules/Core/Responsive.d.ts +55 -0
- package/es-modules/Core/Responsive.js +260 -0
- package/es-modules/Core/Templating.d.ts +125 -0
- package/es-modules/Core/Templating.js +428 -0
- package/es-modules/Core/Time.d.ts +69 -0
- package/es-modules/Core/Time.js +172 -0
- package/es-modules/Core/Tooltip.d.ts +297 -0
- package/es-modules/Core/Tooltip.js +1377 -0
- package/es-modules/Core/Utilities.d.ts +770 -0
- package/es-modules/Core/Utilities.js +1989 -0
- package/es-modules/Data/ColumnUtils.d.ts +87 -0
- package/es-modules/Data/ColumnUtils.js +140 -0
- package/es-modules/Data/Connectors/CSVConnector.d.ts +63 -0
- package/es-modules/Data/Connectors/CSVConnector.js +149 -0
- package/es-modules/Data/Connectors/CSVConnectorOptions.d.ts +149 -0
- package/es-modules/Data/Connectors/DataConnector.d.ts +204 -0
- package/es-modules/Data/Connectors/DataConnector.js +345 -0
- package/es-modules/Data/Connectors/DataConnectorOptions.d.ts +87 -0
- package/es-modules/Data/Connectors/DataConnectorType.d.ts +45 -0
- package/es-modules/Data/Connectors/GoogleSheetsConnector.d.ts +65 -0
- package/es-modules/Data/Connectors/GoogleSheetsConnector.js +226 -0
- package/es-modules/Data/Connectors/GoogleSheetsConnectorOptions.d.ts +167 -0
- package/es-modules/Data/Connectors/HTMLTableConnector.d.ts +77 -0
- package/es-modules/Data/Connectors/HTMLTableConnector.js +119 -0
- package/es-modules/Data/Connectors/HTMLTableConnectorOptions.d.ts +49 -0
- package/es-modules/Data/Connectors/JSONConnector.d.ts +64 -0
- package/es-modules/Data/Connectors/JSONConnector.js +156 -0
- package/es-modules/Data/Connectors/JSONConnectorOptions.d.ts +185 -0
- package/es-modules/Data/Converters/CSVConverter.d.ts +64 -0
- package/es-modules/Data/Converters/CSVConverter.js +374 -0
- package/es-modules/Data/Converters/CSVConverterOptions.d.ts +53 -0
- package/es-modules/Data/Converters/DataConverter.d.ts +168 -0
- package/es-modules/Data/Converters/DataConverter.js +387 -0
- package/es-modules/Data/Converters/DataConverterType.d.ts +40 -0
- package/es-modules/Data/Converters/DataConverterUtils.d.ts +82 -0
- package/es-modules/Data/Converters/DataConverterUtils.js +216 -0
- package/es-modules/Data/Converters/GoogleSheetsConverter.d.ts +46 -0
- package/es-modules/Data/Converters/GoogleSheetsConverter.js +135 -0
- package/es-modules/Data/Converters/GoogleSheetsConverterOptions.d.ts +52 -0
- package/es-modules/Data/Converters/HTMLTableConverter.d.ts +72 -0
- package/es-modules/Data/Converters/HTMLTableConverter.js +362 -0
- package/es-modules/Data/Converters/HTMLTableConverterOptions.d.ts +51 -0
- package/es-modules/Data/Converters/JSONConverter.d.ts +99 -0
- package/es-modules/Data/Converters/JSONConverter.js +239 -0
- package/es-modules/Data/Converters/JSONConverterOptions.d.ts +52 -0
- package/es-modules/Data/DataCursor.d.ts +176 -0
- package/es-modules/Data/DataCursor.js +379 -0
- package/es-modules/Data/DataEvent.d.ts +81 -0
- package/es-modules/Data/DataEvent.js +14 -0
- package/es-modules/Data/DataPool.d.ts +130 -0
- package/es-modules/Data/DataPool.js +257 -0
- package/es-modules/Data/DataPoolOptions.d.ts +66 -0
- package/es-modules/Data/DataTable.d.ts +563 -0
- package/es-modules/Data/DataTable.js +930 -0
- package/es-modules/Data/DataTableCore.d.ts +165 -0
- package/es-modules/Data/DataTableCore.js +316 -0
- package/es-modules/Data/DataTableOptions.d.ts +25 -0
- package/es-modules/Data/DataTableOptions.js +15 -0
- package/es-modules/Data/Formula/Formula.d.ts +21 -0
- package/es-modules/Data/Formula/Formula.js +54 -0
- package/es-modules/Data/Formula/FormulaParser.d.ts +31 -0
- package/es-modules/Data/Formula/FormulaParser.js +488 -0
- package/es-modules/Data/Formula/FormulaProcessor.d.ts +155 -0
- package/es-modules/Data/Formula/FormulaProcessor.js +529 -0
- package/es-modules/Data/Formula/FormulaTypes.d.ts +138 -0
- package/es-modules/Data/Formula/FormulaTypes.js +135 -0
- package/es-modules/Data/Formula/Functions/ABS.d.ts +19 -0
- package/es-modules/Data/Formula/Functions/ABS.js +67 -0
- package/es-modules/Data/Formula/Functions/AND.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/AND.js +59 -0
- package/es-modules/Data/Formula/Functions/AVERAGE.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/AVERAGE.js +74 -0
- package/es-modules/Data/Formula/Functions/AVERAGEA.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/AVERAGEA.js +90 -0
- package/es-modules/Data/Formula/Functions/COUNT.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/COUNT.js +65 -0
- package/es-modules/Data/Formula/Functions/COUNTA.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/COUNTA.js +71 -0
- package/es-modules/Data/Formula/Functions/IF.d.ts +21 -0
- package/es-modules/Data/Formula/Functions/IF.js +54 -0
- package/es-modules/Data/Formula/Functions/ISNA.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/ISNA.js +52 -0
- package/es-modules/Data/Formula/Functions/MAX.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/MAX.js +69 -0
- package/es-modules/Data/Formula/Functions/MEDIAN.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/MEDIAN.js +78 -0
- package/es-modules/Data/Formula/Functions/MIN.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/MIN.js +69 -0
- package/es-modules/Data/Formula/Functions/MOD.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/MOD.js +63 -0
- package/es-modules/Data/Formula/Functions/MODE.d.ts +41 -0
- package/es-modules/Data/Formula/Functions/MODE.js +149 -0
- package/es-modules/Data/Formula/Functions/NOT.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/NOT.js +60 -0
- package/es-modules/Data/Formula/Functions/OR.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/OR.js +62 -0
- package/es-modules/Data/Formula/Functions/PRODUCT.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/PRODUCT.js +68 -0
- package/es-modules/Data/Formula/Functions/SUM.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/SUM.js +65 -0
- package/es-modules/Data/Formula/Functions/XOR.d.ts +20 -0
- package/es-modules/Data/Formula/Functions/XOR.js +81 -0
- package/es-modules/Data/Modifiers/ChainModifier.d.ts +128 -0
- package/es-modules/Data/Modifiers/ChainModifier.js +231 -0
- package/es-modules/Data/Modifiers/ChainModifierOptions.d.ts +20 -0
- package/es-modules/Data/Modifiers/ChainModifierOptions.js +14 -0
- package/es-modules/Data/Modifiers/DataModifier.d.ts +117 -0
- package/es-modules/Data/Modifiers/DataModifier.js +202 -0
- package/es-modules/Data/Modifiers/DataModifierEvent.d.ts +28 -0
- package/es-modules/Data/Modifiers/DataModifierEvent.js +15 -0
- package/es-modules/Data/Modifiers/DataModifierOptions.d.ts +11 -0
- package/es-modules/Data/Modifiers/DataModifierOptions.js +15 -0
- package/es-modules/Data/Modifiers/DataModifierType.d.ts +44 -0
- package/es-modules/Data/Modifiers/FilterModifier.d.ts +53 -0
- package/es-modules/Data/Modifiers/FilterModifier.js +172 -0
- package/es-modules/Data/Modifiers/FilterModifierOptions.d.ts +110 -0
- package/es-modules/Data/Modifiers/FilterModifierOptions.js +14 -0
- package/es-modules/Data/Modifiers/InvertModifier.d.ts +48 -0
- package/es-modules/Data/Modifiers/InvertModifier.js +116 -0
- package/es-modules/Data/Modifiers/InvertModifierOptions.d.ts +11 -0
- package/es-modules/Data/Modifiers/InvertModifierOptions.js +15 -0
- package/es-modules/Data/Modifiers/MathModifier.d.ts +68 -0
- package/es-modules/Data/Modifiers/MathModifier.js +165 -0
- package/es-modules/Data/Modifiers/MathModifierOptions.d.ts +50 -0
- package/es-modules/Data/Modifiers/MathModifierOptions.js +14 -0
- package/es-modules/Data/Modifiers/RangeModifier.d.ts +46 -0
- package/es-modules/Data/Modifiers/RangeModifier.js +96 -0
- package/es-modules/Data/Modifiers/RangeModifierOptions.d.ts +22 -0
- package/es-modules/Data/Modifiers/RangeModifierOptions.js +15 -0
- package/es-modules/Data/Modifiers/SortModifier.d.ts +54 -0
- package/es-modules/Data/Modifiers/SortModifier.js +144 -0
- package/es-modules/Data/Modifiers/SortModifierOptions.d.ts +44 -0
- package/es-modules/Data/Modifiers/SortModifierOptions.js +14 -0
- package/es-modules/Grid/Core/Accessibility/A11yOptions.d.ts +148 -0
- package/es-modules/Grid/Core/Accessibility/A11yOptions.js +17 -0
- package/es-modules/Grid/Core/Accessibility/Accessibility.d.ts +115 -0
- package/es-modules/Grid/Core/Accessibility/Accessibility.js +231 -0
- package/es-modules/Grid/Core/Credits.d.ts +57 -0
- package/es-modules/Grid/Core/Credits.js +125 -0
- package/es-modules/Grid/Core/Defaults.d.ts +20 -0
- package/es-modules/Grid/Core/Defaults.js +148 -0
- package/es-modules/Grid/Core/Globals.d.ts +103 -0
- package/es-modules/Grid/Core/Globals.js +134 -0
- package/es-modules/Grid/Core/Grid.d.ts +295 -0
- package/es-modules/Grid/Core/Grid.js +730 -0
- package/es-modules/Grid/Core/GridUtils.d.ts +110 -0
- package/es-modules/Grid/Core/GridUtils.js +191 -0
- package/es-modules/Grid/Core/Options.d.ts +599 -0
- package/es-modules/Grid/Core/Options.js +16 -0
- package/es-modules/Grid/Core/Pagination/Icons.d.ts +7 -0
- package/es-modules/Grid/Core/Pagination/Icons.js +7 -0
- package/es-modules/Grid/Core/Pagination/Pagination.d.ts +278 -0
- package/es-modules/Grid/Core/Pagination/Pagination.js +842 -0
- package/es-modules/Grid/Core/Pagination/PaginationOptions.d.ts +228 -0
- package/es-modules/Grid/Core/Querying/FilteringController.d.ts +66 -0
- package/es-modules/Grid/Core/Querying/FilteringController.js +256 -0
- package/es-modules/Grid/Core/Querying/PaginationController.d.ts +50 -0
- package/es-modules/Grid/Core/Querying/PaginationController.js +101 -0
- package/es-modules/Grid/Core/Querying/QueryingController.d.ts +58 -0
- package/es-modules/Grid/Core/Querying/QueryingController.js +127 -0
- package/es-modules/Grid/Core/Querying/SortingController.d.ts +67 -0
- package/es-modules/Grid/Core/Querying/SortingController.js +136 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/ColumnFiltering.d.ts +114 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/ColumnFiltering.js +351 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.d.ts +14 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterCell.js +86 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.d.ts +19 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilterRow.js +80 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilteringTypes.d.ts +52 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnFiltering/FilteringTypes.js +81 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnSorting.d.ts +56 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnSorting.js +170 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnsResizer.d.ts +55 -0
- package/es-modules/Grid/Core/Table/Actions/ColumnsResizer.js +182 -0
- package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.d.ts +87 -0
- package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.js +346 -0
- package/es-modules/Grid/Core/Table/Body/TableCell.d.ts +88 -0
- package/es-modules/Grid/Core/Table/Body/TableCell.js +231 -0
- package/es-modules/Grid/Core/Table/Body/TableRow.d.ts +79 -0
- package/es-modules/Grid/Core/Table/Body/TableRow.js +177 -0
- package/es-modules/Grid/Core/Table/Cell.d.ts +92 -0
- package/es-modules/Grid/Core/Table/Cell.js +223 -0
- package/es-modules/Grid/Core/Table/CellContent/CellContent.d.ts +30 -0
- package/es-modules/Grid/Core/Table/CellContent/CellContent.js +40 -0
- package/es-modules/Grid/Core/Table/CellContent/TextContent.d.ts +19 -0
- package/es-modules/Grid/Core/Table/CellContent/TextContent.js +98 -0
- package/es-modules/Grid/Core/Table/Column.d.ts +136 -0
- package/es-modules/Grid/Core/Table/Column.js +230 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/AdjacentResizingMode.d.ts +7 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/AdjacentResizingMode.js +62 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/ColumnResizing.d.ts +32 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/ColumnResizing.js +68 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/DistributedResizingMode.d.ts +7 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/DistributedResizingMode.js +53 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/IndependentResizingMode.d.ts +7 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/IndependentResizingMode.js +63 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/ResizingMode.d.ts +92 -0
- package/es-modules/Grid/Core/Table/ColumnResizing/ResizingMode.js +194 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.d.ts +68 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ColumnToolbar.js +187 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/FilterPopup.d.ts +29 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/FilterPopup.js +77 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/FilterMenuButton.d.ts +13 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/FilterMenuButton.js +79 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.d.ts +12 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuButtons/SortMenuButton.js +71 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuPopup.d.ts +12 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/MenuPopup.js +66 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/StateHelpers.d.ts +25 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/StateHelpers.js +65 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/FilterToolbarButton.d.ts +12 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/FilterToolbarButton.js +81 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/MenuToolbarButton.d.ts +12 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/MenuToolbarButton.js +80 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.d.ts +11 -0
- package/es-modules/Grid/Core/Table/Header/ColumnToolbar/ToolbarButtons/SortToolbarButton.js +81 -0
- package/es-modules/Grid/Core/Table/Header/HeaderCell.d.ts +70 -0
- package/es-modules/Grid/Core/Table/Header/HeaderCell.js +225 -0
- package/es-modules/Grid/Core/Table/Header/HeaderRow.d.ts +53 -0
- package/es-modules/Grid/Core/Table/Header/HeaderRow.js +182 -0
- package/es-modules/Grid/Core/Table/Header/TableHeader.d.ts +65 -0
- package/es-modules/Grid/Core/Table/Header/TableHeader.js +159 -0
- package/es-modules/Grid/Core/Table/Row.d.ts +76 -0
- package/es-modules/Grid/Core/Table/Row.js +131 -0
- package/es-modules/Grid/Core/Table/Table.d.ts +181 -0
- package/es-modules/Grid/Core/Table/Table.js +399 -0
- package/es-modules/Grid/Core/UI/Button.d.ts +31 -0
- package/es-modules/Grid/Core/UI/Button.js +16 -0
- package/es-modules/Grid/Core/UI/ContextMenu.d.ts +38 -0
- package/es-modules/Grid/Core/UI/ContextMenu.js +132 -0
- package/es-modules/Grid/Core/UI/ContextMenuButton.d.ts +126 -0
- package/es-modules/Grid/Core/UI/ContextMenuButton.js +183 -0
- package/es-modules/Grid/Core/UI/Popup.d.ts +149 -0
- package/es-modules/Grid/Core/UI/Popup.js +271 -0
- package/es-modules/Grid/Core/UI/SvgIcons.d.ts +53 -0
- package/es-modules/Grid/Core/UI/SvgIcons.js +158 -0
- package/es-modules/Grid/Core/UI/Toolbar.d.ts +16 -0
- package/es-modules/Grid/Core/UI/Toolbar.js +16 -0
- package/es-modules/Grid/Core/UI/ToolbarButton.d.ts +135 -0
- package/es-modules/Grid/Core/UI/ToolbarButton.js +191 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditMode.d.ts +112 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditing.d.ts +80 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditing.js +211 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditingComposition.d.ts +123 -0
- package/es-modules/Grid/Pro/CellEditing/CellEditingComposition.js +198 -0
- package/es-modules/Grid/Pro/CellRendering/CellContentPro.d.ts +23 -0
- package/es-modules/Grid/Pro/CellRendering/CellContentPro.js +45 -0
- package/es-modules/Grid/Pro/CellRendering/CellRenderer.d.ts +50 -0
- package/es-modules/Grid/Pro/CellRendering/CellRenderer.js +41 -0
- package/es-modules/Grid/Pro/CellRendering/CellRendererRegistry.d.ts +18 -0
- package/es-modules/Grid/Pro/CellRendering/CellRendererRegistry.js +58 -0
- package/es-modules/Grid/Pro/CellRendering/CellRendererType.d.ts +48 -0
- package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.d.ts +18 -0
- package/es-modules/Grid/Pro/CellRendering/CellRenderersComposition.js +79 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.d.ts +30 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/CheckboxContent.js +122 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContent.d.ts +12 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContent.js +39 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContentBase.d.ts +66 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateInputContentBase.js +145 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateTimeInputContent.d.ts +12 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/DateTimeInputContent.js +38 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/NumberInputContent.d.ts +58 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/NumberInputContent.js +158 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.d.ts +58 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SelectContent.js +173 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.d.ts +28 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/SparklineContent.js +157 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.d.ts +58 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TextInputContent.js +168 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TimeInputContent.d.ts +13 -0
- package/es-modules/Grid/Pro/CellRendering/ContentTypes/TimeInputContent.js +41 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/CheckboxRenderer.d.ts +50 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/CheckboxRenderer.js +65 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRenderer.d.ts +37 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRenderer.js +65 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRendererBase.d.ts +26 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateInputRendererBase.js +16 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateTimeInputRenderer.d.ts +37 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/DateTimeInputRenderer.js +64 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/NumberInputRenderer.d.ts +52 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/NumberInputRenderer.js +64 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/SelectRenderer.d.ts +74 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/SelectRenderer.js +66 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.d.ts +45 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/SparklineRenderer.js +89 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextInputRenderer.d.ts +54 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextInputRenderer.js +65 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextRenderer.d.ts +43 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TextRenderer.js +74 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TimeInputRenderer.d.ts +37 -0
- package/es-modules/Grid/Pro/CellRendering/Renderers/TimeInputRenderer.js +64 -0
- package/es-modules/Grid/Pro/ColumnTypes/ColumnDataType.d.ts +29 -0
- package/es-modules/Grid/Pro/ColumnTypes/Validator.d.ts +118 -0
- package/es-modules/Grid/Pro/ColumnTypes/Validator.js +270 -0
- package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.d.ts +32 -0
- package/es-modules/Grid/Pro/ColumnTypes/ValidatorComposition.js +63 -0
- package/es-modules/Grid/Pro/Credits/CreditsPro.d.ts +35 -0
- package/es-modules/Grid/Pro/Credits/CreditsPro.js +112 -0
- package/es-modules/Grid/Pro/Credits/CreditsProComposition.d.ts +28 -0
- package/es-modules/Grid/Pro/Credits/CreditsProComposition.js +61 -0
- package/es-modules/Grid/Pro/Export/Exporting.d.ts +68 -0
- package/es-modules/Grid/Pro/Export/Exporting.js +202 -0
- package/es-modules/Grid/Pro/Export/ExportingComposition.d.ts +68 -0
- package/es-modules/Grid/Pro/Export/ExportingComposition.js +55 -0
- package/es-modules/Grid/Pro/GridEvents.d.ts +119 -0
- package/es-modules/Grid/Pro/GridEvents.js +107 -0
- package/es-modules/Grid/Pro/Pagination/PaginationComposition.d.ts +75 -0
- package/es-modules/Grid/Pro/Pagination/PaginationComposition.js +76 -0
- package/es-modules/Grid/Pro/highcharts.d.ts +7 -0
- package/es-modules/Grid/index.d.ts +5 -0
- package/es-modules/Grid/index.js +19 -0
- package/es-modules/Shared/BaseForm.d.ts +49 -0
- package/es-modules/Shared/BaseForm.js +126 -0
- package/es-modules/Shared/DownloadURL.d.ts +85 -0
- package/es-modules/Shared/DownloadURL.js +198 -0
- package/es-modules/Shared/LangOptionsCore.d.ts +27 -0
- package/es-modules/Shared/TimeBase.d.ts +353 -0
- package/es-modules/Shared/TimeBase.js +830 -0
- package/es-modules/Shared/Types.d.ts +48 -0
- package/es-modules/masters/grid-pro.src.d.ts +99 -0
- package/es-modules/masters/grid-pro.src.js +129 -0
- package/grid-pro.d.ts +50 -0
- package/grid-pro.js +12 -0
- package/grid-pro.js.map +1 -0
- package/grid-pro.src.d.ts +50 -0
- package/grid-pro.src.js +26623 -0
- package/package.json +21 -0
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
/* *
|
|
2
|
+
*
|
|
3
|
+
* Highcharts Grid 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
|
+
* - Sebastian Bochan
|
|
14
|
+
*
|
|
15
|
+
* */
|
|
16
|
+
'use strict';
|
|
17
|
+
import Accessibility from './Accessibility/Accessibility.js';
|
|
18
|
+
import AST from '../../Core/Renderer/HTML/AST.js';
|
|
19
|
+
import Defaults from './Defaults.js';
|
|
20
|
+
import GridUtils from './GridUtils.js';
|
|
21
|
+
import DataTable from '../../Data/DataTable.js';
|
|
22
|
+
import Table from './Table/Table.js';
|
|
23
|
+
import U from '../../Core/Utilities.js';
|
|
24
|
+
import QueryingController from './Querying/QueryingController.js';
|
|
25
|
+
import Globals from './Globals.js';
|
|
26
|
+
import TimeBase from '../../Shared/TimeBase.js';
|
|
27
|
+
import Pagination from './Pagination/Pagination.js';
|
|
28
|
+
const { makeHTMLElement, setHTMLContent } = GridUtils;
|
|
29
|
+
const { extend, fireEvent, getStyle, merge, pick, isObject } = U;
|
|
30
|
+
/* *
|
|
31
|
+
*
|
|
32
|
+
* Class
|
|
33
|
+
*
|
|
34
|
+
* */
|
|
35
|
+
/**
|
|
36
|
+
* A base class for the Grid.
|
|
37
|
+
*/
|
|
38
|
+
class Grid {
|
|
39
|
+
// Implementation
|
|
40
|
+
static grid(renderTo, options, async) {
|
|
41
|
+
if (async) {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
void new Grid(renderTo, options, (grid) => {
|
|
44
|
+
resolve(grid);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return new Grid(renderTo, options);
|
|
49
|
+
}
|
|
50
|
+
/* *
|
|
51
|
+
*
|
|
52
|
+
* Constructor
|
|
53
|
+
*
|
|
54
|
+
* */
|
|
55
|
+
/**
|
|
56
|
+
* Constructs a new Grid.
|
|
57
|
+
*
|
|
58
|
+
* @param renderTo
|
|
59
|
+
* The render target (container) of the Grid.
|
|
60
|
+
*
|
|
61
|
+
* @param options
|
|
62
|
+
* The options of the Grid.
|
|
63
|
+
*
|
|
64
|
+
* @param afterLoadCallback
|
|
65
|
+
* The callback that is called after the Grid is loaded.
|
|
66
|
+
*/
|
|
67
|
+
constructor(renderTo, options, afterLoadCallback) {
|
|
68
|
+
/**
|
|
69
|
+
* The user options declared for the columns as an object of column ID to
|
|
70
|
+
* column options.
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
this.columnOptionsMap = {};
|
|
74
|
+
/**
|
|
75
|
+
* The options that were declared by the user when creating the Grid
|
|
76
|
+
* or when updating it.
|
|
77
|
+
*/
|
|
78
|
+
this.userOptions = {};
|
|
79
|
+
/**
|
|
80
|
+
* The initial height of the container. Can be 0 also if not set.
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
this.initialContainerHeight = 0;
|
|
84
|
+
/**
|
|
85
|
+
* The list of currently shown popups.
|
|
86
|
+
*/
|
|
87
|
+
this.popups = new Set();
|
|
88
|
+
/**
|
|
89
|
+
* Functions that unregister events attached to the grid's data table,
|
|
90
|
+
* that need to be removed when the grid is destroyed.
|
|
91
|
+
*/
|
|
92
|
+
this.dataTableEventDestructors = [];
|
|
93
|
+
this.loadUserOptions(options);
|
|
94
|
+
this.id = this.options?.id || U.uniqueKey();
|
|
95
|
+
this.querying = new QueryingController(this);
|
|
96
|
+
this.locale = this.options?.lang?.locale || (this.container?.closest('[lang]')?.lang);
|
|
97
|
+
this.time = new TimeBase(extend(this.options?.time, { locale: this.locale }), this.options?.lang);
|
|
98
|
+
fireEvent(this, 'beforeLoad');
|
|
99
|
+
Grid.grids.push(this);
|
|
100
|
+
this.initContainers(renderTo);
|
|
101
|
+
this.initAccessibility();
|
|
102
|
+
this.initPagination();
|
|
103
|
+
this.loadDataTable();
|
|
104
|
+
this.querying.loadOptions();
|
|
105
|
+
void this.querying.proceed().then(() => {
|
|
106
|
+
this.renderViewport();
|
|
107
|
+
afterLoadCallback?.(this);
|
|
108
|
+
fireEvent(this, 'afterLoad');
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/* *
|
|
112
|
+
*
|
|
113
|
+
* Methods
|
|
114
|
+
*
|
|
115
|
+
* */
|
|
116
|
+
/*
|
|
117
|
+
* Initializes the accessibility controller.
|
|
118
|
+
*/
|
|
119
|
+
initAccessibility() {
|
|
120
|
+
this.accessibility?.destroy();
|
|
121
|
+
delete this.accessibility;
|
|
122
|
+
if (this.options?.accessibility?.enabled) {
|
|
123
|
+
this.accessibility = new Accessibility(this);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/*
|
|
127
|
+
* Initializes the pagination.
|
|
128
|
+
*/
|
|
129
|
+
initPagination() {
|
|
130
|
+
let state;
|
|
131
|
+
if (this.pagination) {
|
|
132
|
+
const { currentPageSize, currentPage } = this.pagination || {};
|
|
133
|
+
state = {
|
|
134
|
+
currentPageSize,
|
|
135
|
+
currentPage
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
this.pagination?.destroy();
|
|
139
|
+
delete this.pagination;
|
|
140
|
+
const rawOptions = this.options?.pagination;
|
|
141
|
+
const options = isObject(rawOptions) ? rawOptions : {
|
|
142
|
+
enabled: rawOptions
|
|
143
|
+
};
|
|
144
|
+
if (options?.enabled) {
|
|
145
|
+
this.pagination = new Pagination(this, options, state);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Initializes the container of the Grid.
|
|
150
|
+
*
|
|
151
|
+
* @param renderTo
|
|
152
|
+
* The render target (html element or id) of the Grid.
|
|
153
|
+
*
|
|
154
|
+
*/
|
|
155
|
+
initContainers(renderTo) {
|
|
156
|
+
const container = (typeof renderTo === 'string') ?
|
|
157
|
+
Globals.win.document.getElementById(renderTo) : renderTo;
|
|
158
|
+
// Display an error if the renderTo is wrong
|
|
159
|
+
if (!container) {
|
|
160
|
+
// eslint-disable-next-line no-console
|
|
161
|
+
console.error(`
|
|
162
|
+
Rendering div not found. It is unable to find the HTML element
|
|
163
|
+
to render the Grid in.
|
|
164
|
+
`);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.initialContainerHeight = getStyle(container, 'height', true) || 0;
|
|
168
|
+
this.container = container;
|
|
169
|
+
this.container.innerHTML = AST.emptyHTML;
|
|
170
|
+
this.contentWrapper = makeHTMLElement('div', {
|
|
171
|
+
className: Globals.getClassName('container')
|
|
172
|
+
}, this.container);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Loads the new user options to all the important fields (`userOptions`,
|
|
176
|
+
* `options` and `columnOptionsMap`).
|
|
177
|
+
*
|
|
178
|
+
* @param newOptions
|
|
179
|
+
* The options that were declared by the user.
|
|
180
|
+
*
|
|
181
|
+
* @param oneToOne
|
|
182
|
+
* When `false` (default), the existing column options will be merged with
|
|
183
|
+
* the ones that are currently defined in the user options. When `true`,
|
|
184
|
+
* the columns not defined in the new options will be removed.
|
|
185
|
+
*/
|
|
186
|
+
loadUserOptions(newOptions, oneToOne = false) {
|
|
187
|
+
// Operate on a copy of the options argument
|
|
188
|
+
newOptions = merge(newOptions);
|
|
189
|
+
if (newOptions.columns) {
|
|
190
|
+
if (oneToOne) {
|
|
191
|
+
this.setColumnOptionsOneToOne(newOptions.columns);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this.setColumnOptions(newOptions.columns);
|
|
195
|
+
}
|
|
196
|
+
delete newOptions.columns;
|
|
197
|
+
}
|
|
198
|
+
this.userOptions = merge(this.userOptions, newOptions);
|
|
199
|
+
this.options = merge(this.options ?? Defaults.defaultOptions, this.userOptions);
|
|
200
|
+
// Generate column options map
|
|
201
|
+
const columnOptionsArray = this.options?.columns;
|
|
202
|
+
if (!columnOptionsArray) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const columnOptionsMap = {};
|
|
206
|
+
for (let i = 0, iEnd = columnOptionsArray?.length ?? 0; i < iEnd; ++i) {
|
|
207
|
+
columnOptionsMap[columnOptionsArray[i].id] = {
|
|
208
|
+
index: i,
|
|
209
|
+
options: columnOptionsArray[i]
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
this.columnOptionsMap = columnOptionsMap;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Sets the new column options to the userOptions field.
|
|
216
|
+
*
|
|
217
|
+
* @param newColumnOptions
|
|
218
|
+
* The new column options that should be loaded.
|
|
219
|
+
*
|
|
220
|
+
* @param overwrite
|
|
221
|
+
* Whether to overwrite the existing column options with the new ones.
|
|
222
|
+
* Default is `false`.
|
|
223
|
+
*/
|
|
224
|
+
setColumnOptions(newColumnOptions, overwrite = false) {
|
|
225
|
+
if (!this.userOptions.columns) {
|
|
226
|
+
this.userOptions.columns = this.options?.columns ?? [];
|
|
227
|
+
}
|
|
228
|
+
const columnOptions = this.userOptions.columns;
|
|
229
|
+
for (let i = 0, iEnd = newColumnOptions.length; i < iEnd; ++i) {
|
|
230
|
+
const newOptions = newColumnOptions[i];
|
|
231
|
+
const colOptionsIndex = this.columnOptionsMap?.[newOptions.id]?.index ?? -1;
|
|
232
|
+
// If the new column options contain only the id.
|
|
233
|
+
if (Object.keys(newOptions).length < 2) {
|
|
234
|
+
if (overwrite && colOptionsIndex !== -1) {
|
|
235
|
+
columnOptions.splice(colOptionsIndex, 1);
|
|
236
|
+
}
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (colOptionsIndex === -1) {
|
|
240
|
+
columnOptions.push(newOptions);
|
|
241
|
+
}
|
|
242
|
+
else if (overwrite) {
|
|
243
|
+
columnOptions[colOptionsIndex] = newOptions;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
merge(true, columnOptions[colOptionsIndex], newOptions);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (columnOptions.length < 1) {
|
|
250
|
+
delete this.userOptions.columns;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Loads the new column options to the userOptions field in a one-to-one
|
|
255
|
+
* manner. It means that all the columns that are not defined in the new
|
|
256
|
+
* options will be removed.
|
|
257
|
+
*
|
|
258
|
+
* @param newColumnOptions
|
|
259
|
+
* The new column options that should be loaded.
|
|
260
|
+
*/
|
|
261
|
+
setColumnOptionsOneToOne(newColumnOptions) {
|
|
262
|
+
const prevColumnOptions = this.userOptions.columns;
|
|
263
|
+
const columnOptions = [];
|
|
264
|
+
let prevOptions;
|
|
265
|
+
for (let i = 0, iEnd = newColumnOptions.length; i < iEnd; ++i) {
|
|
266
|
+
const newOptions = newColumnOptions[i];
|
|
267
|
+
const indexInPrevOptions = prevColumnOptions?.findIndex((prev) => prev.id === newOptions.id);
|
|
268
|
+
if (indexInPrevOptions !== void 0 && indexInPrevOptions !== -1) {
|
|
269
|
+
prevOptions = prevColumnOptions?.[indexInPrevOptions];
|
|
270
|
+
}
|
|
271
|
+
const resultOptions = merge(prevOptions ?? {}, newOptions);
|
|
272
|
+
if (Object.keys(resultOptions).length > 1) {
|
|
273
|
+
columnOptions.push(resultOptions);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
this.userOptions.columns = columnOptions;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Updates the Grid with new options.
|
|
280
|
+
*
|
|
281
|
+
* @param options
|
|
282
|
+
* The options of the Grid that should be updated. If not provided,
|
|
283
|
+
* the update will be proceeded based on the `this.userOptions` property.
|
|
284
|
+
* The `column` options are merged using the `id` property as a key.
|
|
285
|
+
*
|
|
286
|
+
* @param render
|
|
287
|
+
* Whether to re-render the Grid after updating the options.
|
|
288
|
+
*
|
|
289
|
+
* @param oneToOne
|
|
290
|
+
* When `false` (default), the existing column options will be merged with
|
|
291
|
+
* the ones that are currently defined in the user options. When `true`,
|
|
292
|
+
* the columns not defined in the new options will be removed.
|
|
293
|
+
*/
|
|
294
|
+
async update(options = {}, render = true, oneToOne = false) {
|
|
295
|
+
this.loadUserOptions(options, oneToOne);
|
|
296
|
+
if (!this.dataTable || options.dataTable) {
|
|
297
|
+
this.userOptions.dataTable = options.dataTable;
|
|
298
|
+
(this.options ?? {}).dataTable = options.dataTable;
|
|
299
|
+
this.loadDataTable();
|
|
300
|
+
this.querying.shouldBeUpdated = true;
|
|
301
|
+
}
|
|
302
|
+
if (!render) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
this.initAccessibility();
|
|
306
|
+
this.initPagination();
|
|
307
|
+
this.querying.loadOptions();
|
|
308
|
+
// Update locale.
|
|
309
|
+
const locale = options.lang?.locale;
|
|
310
|
+
if (locale) {
|
|
311
|
+
this.locale = locale;
|
|
312
|
+
this.time.update(extend(options.time || {}, { locale: this.locale }));
|
|
313
|
+
}
|
|
314
|
+
await this.querying.proceed();
|
|
315
|
+
this.renderViewport();
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Updates the column of the Grid with new options.
|
|
319
|
+
*
|
|
320
|
+
* @param columnId
|
|
321
|
+
* The ID of the column that should be updated.
|
|
322
|
+
*
|
|
323
|
+
* @param options
|
|
324
|
+
* The options of the columns that should be updated. If null,
|
|
325
|
+
* column options for this column ID will be removed.
|
|
326
|
+
*
|
|
327
|
+
* @param render
|
|
328
|
+
* Whether to re-render the Grid after updating the columns.
|
|
329
|
+
*
|
|
330
|
+
* @param overwrite
|
|
331
|
+
* If true, the column options will be updated by replacing the existing
|
|
332
|
+
* options with the new ones instead of merging them.
|
|
333
|
+
*/
|
|
334
|
+
async updateColumn(columnId, options, render = true, overwrite = false) {
|
|
335
|
+
this.setColumnOptions([{
|
|
336
|
+
id: columnId,
|
|
337
|
+
...options
|
|
338
|
+
}], overwrite);
|
|
339
|
+
await this.update(void 0, render);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Hovers the row with the provided index. It removes the hover effect from
|
|
343
|
+
* the previously hovered row.
|
|
344
|
+
*
|
|
345
|
+
* @param rowIndex
|
|
346
|
+
* The index of the row.
|
|
347
|
+
*/
|
|
348
|
+
hoverRow(rowIndex) {
|
|
349
|
+
const rows = this.viewport?.rows;
|
|
350
|
+
if (!rows) {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
const firstRowIndex = this.viewport?.rows[0]?.index ?? 0;
|
|
354
|
+
if (this.hoveredRowIndex !== void 0) {
|
|
355
|
+
rows[this.hoveredRowIndex - firstRowIndex]?.setHoveredState(false);
|
|
356
|
+
}
|
|
357
|
+
if (rowIndex !== void 0) {
|
|
358
|
+
rows[rowIndex - firstRowIndex]?.setHoveredState(true);
|
|
359
|
+
}
|
|
360
|
+
this.hoveredRowIndex = rowIndex;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Hovers the column with the provided ID. It removes the hover effect from
|
|
364
|
+
* the previously hovered column.
|
|
365
|
+
*
|
|
366
|
+
* @param columnId
|
|
367
|
+
* The ID of the column.
|
|
368
|
+
*/
|
|
369
|
+
hoverColumn(columnId) {
|
|
370
|
+
const vp = this.viewport;
|
|
371
|
+
if (!vp) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if (this.hoveredColumnId) {
|
|
375
|
+
vp.getColumn(this.hoveredColumnId)?.setHoveredState(false);
|
|
376
|
+
}
|
|
377
|
+
if (columnId) {
|
|
378
|
+
vp.getColumn(columnId)?.setHoveredState(true);
|
|
379
|
+
}
|
|
380
|
+
this.hoveredColumnId = columnId;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Sets the sync state to the row with the provided index. It removes the
|
|
384
|
+
* synced effect from the previously synced row.
|
|
385
|
+
*
|
|
386
|
+
* @param rowIndex
|
|
387
|
+
* The index of the row.
|
|
388
|
+
*/
|
|
389
|
+
syncRow(rowIndex) {
|
|
390
|
+
const rows = this.viewport?.rows;
|
|
391
|
+
if (!rows) {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const firstRowIndex = this.viewport?.rows[0]?.index ?? 0;
|
|
395
|
+
if (this.syncedRowIndex !== void 0) {
|
|
396
|
+
rows[this.syncedRowIndex - firstRowIndex]?.setSyncedState(false);
|
|
397
|
+
}
|
|
398
|
+
if (rowIndex !== void 0) {
|
|
399
|
+
rows[rowIndex - firstRowIndex]?.setSyncedState(true);
|
|
400
|
+
}
|
|
401
|
+
this.syncedRowIndex = rowIndex;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Sets the sync state to the column with the provided ID. It removes the
|
|
405
|
+
* synced effect from the previously synced column.
|
|
406
|
+
*
|
|
407
|
+
* @param columnId
|
|
408
|
+
* The ID of the column.
|
|
409
|
+
*/
|
|
410
|
+
syncColumn(columnId) {
|
|
411
|
+
const vp = this.viewport;
|
|
412
|
+
if (!vp) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
if (this.syncedColumnId) {
|
|
416
|
+
vp.getColumn(this.syncedColumnId)?.setSyncedState(false);
|
|
417
|
+
}
|
|
418
|
+
if (columnId) {
|
|
419
|
+
vp.getColumn(columnId)?.setSyncedState(true);
|
|
420
|
+
}
|
|
421
|
+
this.syncedColumnId = columnId;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Render caption above the grid.
|
|
425
|
+
* @internal
|
|
426
|
+
*/
|
|
427
|
+
renderCaption() {
|
|
428
|
+
const captionOptions = this.options?.caption;
|
|
429
|
+
const captionText = captionOptions?.text;
|
|
430
|
+
if (!captionText) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
// Create a caption element.
|
|
434
|
+
this.captionElement = makeHTMLElement('div', {
|
|
435
|
+
className: Globals.getClassName('captionElement'),
|
|
436
|
+
id: this.id + '-caption'
|
|
437
|
+
}, this.contentWrapper);
|
|
438
|
+
// Render the caption element content.
|
|
439
|
+
setHTMLContent(this.captionElement, captionText);
|
|
440
|
+
if (captionOptions.className) {
|
|
441
|
+
this.captionElement.classList.add(...captionOptions.className.split(/\s+/g));
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Render description under the grid.
|
|
446
|
+
*
|
|
447
|
+
* @internal
|
|
448
|
+
*/
|
|
449
|
+
renderDescription() {
|
|
450
|
+
const descriptionOptions = this.options?.description;
|
|
451
|
+
const descriptionText = descriptionOptions?.text;
|
|
452
|
+
if (!descriptionText) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
// Create a description element.
|
|
456
|
+
this.descriptionElement = makeHTMLElement('div', {
|
|
457
|
+
className: Globals.getClassName('descriptionElement'),
|
|
458
|
+
id: this.id + '-description'
|
|
459
|
+
}, this.contentWrapper);
|
|
460
|
+
// Render the description element content.
|
|
461
|
+
setHTMLContent(this.descriptionElement, descriptionText);
|
|
462
|
+
if (descriptionOptions.className) {
|
|
463
|
+
this.descriptionElement.classList.add(...descriptionOptions.className.split(/\s+/g));
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Resets the content wrapper of the Grid. It clears the content and
|
|
468
|
+
* resets the class names.
|
|
469
|
+
* @internal
|
|
470
|
+
*/
|
|
471
|
+
resetContentWrapper() {
|
|
472
|
+
if (!this.contentWrapper) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
this.contentWrapper.innerHTML = AST.emptyHTML;
|
|
476
|
+
this.contentWrapper.className =
|
|
477
|
+
Globals.getClassName('container') + ' ' +
|
|
478
|
+
this.options?.rendering?.theme || '';
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Renders the viewport of the Grid. If the Grid is already
|
|
482
|
+
* rendered, it will be destroyed and re-rendered with the new data.
|
|
483
|
+
* @internal
|
|
484
|
+
*/
|
|
485
|
+
renderViewport() {
|
|
486
|
+
const viewportMeta = this.viewport?.getStateMeta();
|
|
487
|
+
const pagination = this.pagination;
|
|
488
|
+
const paginationPosition = pagination?.options.position;
|
|
489
|
+
this.enabledColumns = this.getEnabledColumnIDs();
|
|
490
|
+
this.credits?.destroy();
|
|
491
|
+
this.viewport?.destroy();
|
|
492
|
+
delete this.viewport;
|
|
493
|
+
this.resetContentWrapper();
|
|
494
|
+
fireEvent(this, 'beforeRenderViewport');
|
|
495
|
+
this.renderCaption();
|
|
496
|
+
// Render top pagination if enabled (before table)
|
|
497
|
+
if (paginationPosition === 'top') {
|
|
498
|
+
pagination?.render();
|
|
499
|
+
}
|
|
500
|
+
if (this.enabledColumns.length > 0) {
|
|
501
|
+
this.viewport = this.renderTable();
|
|
502
|
+
if (viewportMeta && this.viewport) {
|
|
503
|
+
this.viewport.applyStateMeta(viewportMeta);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
else {
|
|
507
|
+
this.renderNoData();
|
|
508
|
+
}
|
|
509
|
+
this.accessibility?.setA11yOptions();
|
|
510
|
+
// Render bottom pagination, footer pagination,
|
|
511
|
+
// or custom container pagination (after table).
|
|
512
|
+
if (paginationPosition !== 'top') {
|
|
513
|
+
pagination?.render();
|
|
514
|
+
}
|
|
515
|
+
this.renderDescription();
|
|
516
|
+
fireEvent(this, 'afterRenderViewport');
|
|
517
|
+
this.viewport?.reflow();
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Renders the table (viewport) of the Grid.
|
|
521
|
+
*
|
|
522
|
+
* @returns
|
|
523
|
+
* The newly rendered table (viewport) of the Grid.
|
|
524
|
+
*/
|
|
525
|
+
renderTable() {
|
|
526
|
+
this.tableElement = makeHTMLElement('table', {
|
|
527
|
+
className: Globals.getClassName('tableElement')
|
|
528
|
+
}, this.contentWrapper);
|
|
529
|
+
this.tableElement.setAttribute('role', 'grid');
|
|
530
|
+
return new Table(this, this.tableElement);
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Renders a message that there is no data to display.
|
|
534
|
+
*/
|
|
535
|
+
renderNoData() {
|
|
536
|
+
makeHTMLElement('div', {
|
|
537
|
+
className: Globals.getClassName('noData'),
|
|
538
|
+
innerText: this.options?.lang?.noData
|
|
539
|
+
}, this.contentWrapper);
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Returns the array of IDs of columns that should be displayed in the data
|
|
543
|
+
* grid, in the correct order.
|
|
544
|
+
*/
|
|
545
|
+
getEnabledColumnIDs() {
|
|
546
|
+
const { columnOptionsMap } = this;
|
|
547
|
+
const header = this.options?.header;
|
|
548
|
+
const headerColumns = this.getColumnIds(header || [], false);
|
|
549
|
+
const columnsIncluded = this.options?.rendering?.columns?.included || (headerColumns && headerColumns.length > 0 ?
|
|
550
|
+
headerColumns : this.dataTable?.getColumnIds());
|
|
551
|
+
if (!columnsIncluded?.length) {
|
|
552
|
+
return [];
|
|
553
|
+
}
|
|
554
|
+
if (!columnOptionsMap) {
|
|
555
|
+
return columnsIncluded;
|
|
556
|
+
}
|
|
557
|
+
let columnId;
|
|
558
|
+
const result = [];
|
|
559
|
+
for (let i = 0, iEnd = columnsIncluded.length; i < iEnd; ++i) {
|
|
560
|
+
columnId = columnsIncluded[i];
|
|
561
|
+
if (columnOptionsMap?.[columnId]?.options?.enabled !== false) {
|
|
562
|
+
result.push(columnId);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return result;
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Loads the data table of the Grid. If the data table is passed as a
|
|
569
|
+
* reference, it should be used instead of creating a new one.
|
|
570
|
+
*/
|
|
571
|
+
loadDataTable() {
|
|
572
|
+
// Unregister all events attached to the previous data table.
|
|
573
|
+
this.dataTableEventDestructors.forEach((fn) => fn());
|
|
574
|
+
const tableOptions = this.options?.dataTable;
|
|
575
|
+
// If the table is passed as a reference, it should be used instead of
|
|
576
|
+
// creating a new one.
|
|
577
|
+
if (tableOptions?.clone) {
|
|
578
|
+
this.dataTable = tableOptions;
|
|
579
|
+
this.presentationTable = this.dataTable.getModified();
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
const dt = this.dataTable = this.presentationTable =
|
|
583
|
+
new DataTable(tableOptions);
|
|
584
|
+
// If the data table is modified, mark the querying controller to be
|
|
585
|
+
// updated on the next proceed.
|
|
586
|
+
[
|
|
587
|
+
'afterDeleteColumns',
|
|
588
|
+
'afterDeleteRows',
|
|
589
|
+
'afterSetCell',
|
|
590
|
+
'afterSetColumns',
|
|
591
|
+
'afterSetRows'
|
|
592
|
+
].forEach((eventName) => {
|
|
593
|
+
this.dataTableEventDestructors.push(dt.on(eventName, () => {
|
|
594
|
+
this.querying.shouldBeUpdated = true;
|
|
595
|
+
}));
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Extracts all references to columnIds on all levels below defined level
|
|
600
|
+
* in the settings.header structure.
|
|
601
|
+
*
|
|
602
|
+
* @param columnsTree
|
|
603
|
+
* Structure that we start calculation
|
|
604
|
+
*
|
|
605
|
+
* @param [onlyEnabledColumns=true]
|
|
606
|
+
* Extract all columns from header or columns filtered by enabled param
|
|
607
|
+
* @returns
|
|
608
|
+
*/
|
|
609
|
+
getColumnIds(columnsTree, onlyEnabledColumns = true) {
|
|
610
|
+
let columnIds = [];
|
|
611
|
+
const { enabledColumns } = this;
|
|
612
|
+
for (const column of columnsTree) {
|
|
613
|
+
const columnId = typeof column === 'string' ? column : column.columnId;
|
|
614
|
+
if (columnId &&
|
|
615
|
+
(!onlyEnabledColumns || (enabledColumns?.includes(columnId)))) {
|
|
616
|
+
columnIds.push(columnId);
|
|
617
|
+
}
|
|
618
|
+
if (typeof column !== 'string' && column.columns) {
|
|
619
|
+
columnIds = columnIds.concat(this.getColumnIds(column.columns, onlyEnabledColumns));
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
return columnIds;
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Destroys the Grid.
|
|
626
|
+
*/
|
|
627
|
+
destroy() {
|
|
628
|
+
const dgIndex = Grid.grids.findIndex((dg) => dg === this);
|
|
629
|
+
this.dataTableEventDestructors.forEach((fn) => fn());
|
|
630
|
+
this.viewport?.destroy();
|
|
631
|
+
if (this.container) {
|
|
632
|
+
this.container.innerHTML = AST.emptyHTML;
|
|
633
|
+
this.container.classList.remove(Globals.getClassName('container'));
|
|
634
|
+
}
|
|
635
|
+
// Clear all properties
|
|
636
|
+
Object.keys(this).forEach((key) => {
|
|
637
|
+
delete this[key];
|
|
638
|
+
});
|
|
639
|
+
Grid.grids.splice(dgIndex, 1);
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* Grey out the Grid and show a loading indicator.
|
|
643
|
+
*
|
|
644
|
+
* @param message
|
|
645
|
+
* The message to display in the loading indicator.
|
|
646
|
+
*/
|
|
647
|
+
showLoading(message) {
|
|
648
|
+
if (this.loadingWrapper) {
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
// Create loading wrapper.
|
|
652
|
+
this.loadingWrapper = makeHTMLElement('div', {
|
|
653
|
+
className: Globals.getClassName('loadingWrapper')
|
|
654
|
+
}, this.contentWrapper);
|
|
655
|
+
// Create spinner element.
|
|
656
|
+
makeHTMLElement('div', {
|
|
657
|
+
className: Globals.getClassName('loadingSpinner')
|
|
658
|
+
}, this.loadingWrapper);
|
|
659
|
+
// Create loading message span element.
|
|
660
|
+
const loadingSpan = makeHTMLElement('span', {
|
|
661
|
+
className: Globals.getClassName('loadingMessage')
|
|
662
|
+
}, this.loadingWrapper);
|
|
663
|
+
setHTMLContent(loadingSpan, pick(message, this.options?.lang?.loading, ''));
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Removes the loading indicator.
|
|
667
|
+
*/
|
|
668
|
+
hideLoading() {
|
|
669
|
+
this.loadingWrapper?.remove();
|
|
670
|
+
delete this.loadingWrapper;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Returns the grid data as a JSON string.
|
|
674
|
+
*
|
|
675
|
+
* @param modified
|
|
676
|
+
* Whether to return the modified data table (after filtering/sorting/etc.)
|
|
677
|
+
* or the unmodified, original one. Default value is set to `true`.
|
|
678
|
+
*
|
|
679
|
+
* @return
|
|
680
|
+
* JSON representation of the data
|
|
681
|
+
*/
|
|
682
|
+
getData(modified = true) {
|
|
683
|
+
const dataTable = modified ? this.viewport?.dataTable : this.dataTable;
|
|
684
|
+
const columns = dataTable?.columns;
|
|
685
|
+
if (!this.enabledColumns || !columns) {
|
|
686
|
+
return '{}';
|
|
687
|
+
}
|
|
688
|
+
for (const key of Object.keys(columns)) {
|
|
689
|
+
if (this.enabledColumns.indexOf(key) === -1) {
|
|
690
|
+
delete columns[key];
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
return JSON.stringify(columns, null, 2);
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Returns the current Grid options.
|
|
697
|
+
*
|
|
698
|
+
* @param onlyUserOptions
|
|
699
|
+
* Whether to return only the user options or all options (user options
|
|
700
|
+
* merged with the default ones). Default is `true`.
|
|
701
|
+
*
|
|
702
|
+
* @returns
|
|
703
|
+
* Grid options.
|
|
704
|
+
*/
|
|
705
|
+
getOptions(onlyUserOptions = true) {
|
|
706
|
+
const options = onlyUserOptions ? merge(this.userOptions) : merge(this.options);
|
|
707
|
+
if (options.dataTable?.id) {
|
|
708
|
+
options.dataTable = {
|
|
709
|
+
columns: options.dataTable.columns
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
return options;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
/* *
|
|
716
|
+
*
|
|
717
|
+
* Properties
|
|
718
|
+
*
|
|
719
|
+
* */
|
|
720
|
+
/**
|
|
721
|
+
* An array containing the current Grid objects in the page.
|
|
722
|
+
* @private
|
|
723
|
+
*/
|
|
724
|
+
Grid.grids = [];
|
|
725
|
+
/* *
|
|
726
|
+
*
|
|
727
|
+
* Default Export
|
|
728
|
+
*
|
|
729
|
+
* */
|
|
730
|
+
export default Grid;
|