@highcharts/grid-pro 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/grid-pro.css +3 -3
- package/css/modules/grid-pro.css +1 -1
- package/es-modules/Accessibility/Components/ContainerComponent.js +0 -1
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +1 -2
- package/es-modules/Accessibility/Components/MenuComponent.js +0 -1
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +0 -1
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +21 -9
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +0 -3
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +0 -1
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +0 -1
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +0 -2
- package/es-modules/Accessibility/FocusBorder.js +5 -5
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +1 -2
- package/es-modules/Accessibility/ProxyElement.d.ts +2 -2
- package/es-modules/Accessibility/ProxyElement.js +2 -2
- package/es-modules/Accessibility/Utils/ChartUtilities.js +0 -1
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +0 -1
- package/es-modules/Core/Chart/Chart.js +8 -1
- package/es-modules/Core/Chart/ChartNavigationComposition.js +0 -1
- package/es-modules/Core/Chart/MapChart.js +2 -0
- package/es-modules/Core/Color/Color.js +0 -1
- package/es-modules/Core/Defaults.js +0 -1
- package/es-modules/Core/Delaunay.d.ts +0 -51
- package/es-modules/Core/Delaunay.js +5 -3
- package/es-modules/Core/Foundation.js +0 -1
- package/es-modules/Core/Globals.js +1 -1
- package/es-modules/Core/MSPointer.js +0 -1
- package/es-modules/Core/Renderer/HTML/HTMLAttributes.d.ts +3 -0
- package/es-modules/Core/Renderer/RendererUtilities.js +0 -1
- package/es-modules/Core/Renderer/SVG/SVGRenderer.d.ts +1 -1
- package/es-modules/Core/Renderer/SVG/Symbols.d.ts +2 -2
- package/es-modules/Core/Utilities.js +4 -2
- package/es-modules/Data/Connectors/DataConnector.d.ts +4 -4
- package/es-modules/Data/Connectors/DataConnector.js +4 -4
- package/es-modules/Data/DataPool.js +2 -2
- package/es-modules/Grid/Core/Globals.d.ts +2 -2
- package/es-modules/Grid/Core/Globals.js +1 -1
- package/es-modules/Grid/Core/Grid.js +4 -4
- package/es-modules/Grid/Core/Pagination/Pagination.js +5 -5
- package/es-modules/Grid/Core/Querying/PaginationController.d.ts +1 -1
- package/es-modules/Grid/Core/Querying/PaginationController.js +4 -3
- package/es-modules/Grid/Core/Responsive/ResponsiveComposition.js +53 -10
- package/es-modules/Grid/Core/Table/Actions/RowsVirtualizer.js +15 -1
- package/es-modules/Grid/Pro/Credits/CreditsProComposition.d.ts +1 -1
- package/es-modules/Grid/Pro/Data/DataSourceHelper.js +20 -10
- package/es-modules/Shared/Utilities.js +3 -11
- package/es-modules/masters/grid-pro.src.d.ts +3 -3
- package/es-modules/masters/grid-pro.src.js +1 -1
- package/grid-pro.d.ts +3 -3
- package/grid-pro.js +3 -3
- package/grid-pro.js.map +1 -1
- package/grid-pro.src.d.ts +3 -3
- package/grid-pro.src.js +117 -57
- package/package.json +1 -1
package/grid-pro.src.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Highcharts Grid Pro v2.3.
|
|
2
|
+
* @license Highcharts Grid Pro v2.3.1 (2026-03-24)
|
|
3
3
|
* @module grid/grid-pro
|
|
4
4
|
*
|
|
5
5
|
* (c) 2009-2026 Highsoft AS
|
|
@@ -112,11 +112,11 @@ declare const G: {
|
|
|
112
112
|
helpers: Record<string, Function>;
|
|
113
113
|
numberFormat: (this: Templating.Owner | void, number: number, decimals: number, decimalPoint?: string, thousandsSep?: string) => string;
|
|
114
114
|
};
|
|
115
|
-
readonly version: "2.3.
|
|
115
|
+
readonly version: "2.3.1";
|
|
116
116
|
readonly win: Window & typeof globalThis;
|
|
117
117
|
};
|
|
118
118
|
export { AST, CellContentPro, CellRenderer, CellRendererRegistry, Column, ColumnResizing, DataConnector, DataConverter, DataCursor, DataModifier, DataProviderRegistry, DataPool, DataTable, _Grid as Grid, HeaderCell, _Options as Options, Pagination, Popup, SvgIcons, Table, TableCell, Templating };
|
|
119
|
-
export declare const classNamePrefix: string, defaultOptions: import("./es-modules/Shared/Types").DeepPartial<_Options>, grid: typeof _Grid.grid, grids: (_Grid | undefined)[], isHighContrastModeActive: () => boolean, product: "Grid Pro", setOptions: typeof import("./es-modules/Grid/Core/Defaults.js").setOptions, version: "2.3.
|
|
119
|
+
export declare const classNamePrefix: string, defaultOptions: import("./es-modules/Shared/Types").DeepPartial<_Options>, grid: typeof _Grid.grid, grids: (_Grid | undefined)[], isHighContrastModeActive: () => boolean, product: "Grid Pro", setOptions: typeof import("./es-modules/Grid/Core/Defaults.js").setOptions, version: "2.3.1", win: Window & typeof globalThis;
|
|
120
120
|
declare namespace G {
|
|
121
121
|
type Options = _Options;
|
|
122
122
|
}
|
package/grid-pro.src.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
2
2
|
/**
|
|
3
|
-
* @license Highcharts Grid Pro v2.3.
|
|
3
|
+
* @license Highcharts Grid Pro v2.3.1 (2026-03-24)
|
|
4
4
|
* @module grid/grid-pro
|
|
5
5
|
*
|
|
6
6
|
* (c) 2009-2026 Highsoft AS
|
|
@@ -79,7 +79,7 @@ var Globals;
|
|
|
79
79
|
* Constants
|
|
80
80
|
*
|
|
81
81
|
* */
|
|
82
|
-
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '2.3.
|
|
82
|
+
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '2.3.1', Globals.win = (typeof window !== 'undefined' ?
|
|
83
83
|
window :
|
|
84
84
|
{}), // eslint-disable-line node/no-unsupported-features/es-builtins
|
|
85
85
|
Globals.doc = Globals.win.document, Globals.svg = !!Globals.doc?.createElementNS?.(Globals.SVG_NS, 'svg')?.createSVGRect, Globals.pageLang = Globals.doc?.documentElement?.closest('[lang]')?.lang, Globals.userAgent = Globals.win.navigator?.userAgent || '', Globals.isChrome = Globals.win.chrome, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.marginNames = [
|
|
@@ -191,7 +191,6 @@ var Globals;
|
|
|
191
191
|
* */
|
|
192
192
|
|
|
193
193
|
const { doc, win } = Core_Globals;
|
|
194
|
-
/* eslint-disable valid-jsdoc */
|
|
195
194
|
/**
|
|
196
195
|
* Add an event listener.
|
|
197
196
|
*
|
|
@@ -217,7 +216,6 @@ const { doc, win } = Core_Globals;
|
|
|
217
216
|
* A callback function to remove the added event.
|
|
218
217
|
*/
|
|
219
218
|
function addEvent(el, type, fn, options = {}) {
|
|
220
|
-
/* eslint-enable valid-jsdoc */
|
|
221
219
|
// Add hcEvents to either the prototype (in case we're running addEvent on a
|
|
222
220
|
// class) or the instance. If hasOwnProperty('hcEvents') is false, it is
|
|
223
221
|
// inherited down the prototype chain, in which case we need to set the
|
|
@@ -616,7 +614,6 @@ function erase(arr, item) {
|
|
|
616
614
|
* Object a, the original object.
|
|
617
615
|
*/
|
|
618
616
|
function extend(a, b) {
|
|
619
|
-
/* eslint-enable valid-jsdoc */
|
|
620
617
|
let n;
|
|
621
618
|
if (!a) {
|
|
622
619
|
a = {};
|
|
@@ -649,7 +646,6 @@ function extendClass(parent, members) {
|
|
|
649
646
|
extend(obj.prototype, members);
|
|
650
647
|
return obj;
|
|
651
648
|
}
|
|
652
|
-
/* eslint-disable valid-jsdoc */
|
|
653
649
|
/**
|
|
654
650
|
* Fire an event that was registered with {@link Highcharts#addEvent}.
|
|
655
651
|
*
|
|
@@ -673,7 +669,6 @@ function extendClass(parent, members) {
|
|
|
673
669
|
* @return {void}
|
|
674
670
|
*/
|
|
675
671
|
function fireEvent(el, type, eventArguments, defaultFunction) {
|
|
676
|
-
/* eslint-enable valid-jsdoc */
|
|
677
672
|
eventArguments = eventArguments || {};
|
|
678
673
|
if (doc?.createEvent &&
|
|
679
674
|
(el.dispatchEvent ||
|
|
@@ -810,7 +805,7 @@ function getMagnitude(num) {
|
|
|
810
805
|
* @param {string} path
|
|
811
806
|
* Path to the property, for example `custom.myValue`.
|
|
812
807
|
*
|
|
813
|
-
* @param {unknown}
|
|
808
|
+
* @param {unknown} parent
|
|
814
809
|
* Instance containing the property on the specific path.
|
|
815
810
|
*
|
|
816
811
|
* @return {unknown}
|
|
@@ -1184,7 +1179,6 @@ function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, ha
|
|
|
1184
1179
|
retInterval = correctFloat(retInterval * magnitude, -Math.round(Math.log(0.001) / Math.LN10));
|
|
1185
1180
|
return retInterval;
|
|
1186
1181
|
}
|
|
1187
|
-
/* eslint-disable valid-jsdoc */
|
|
1188
1182
|
/**
|
|
1189
1183
|
* Iterate over object key pairs in an object.
|
|
1190
1184
|
*
|
|
@@ -1203,7 +1197,6 @@ function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, ha
|
|
|
1203
1197
|
* The context.
|
|
1204
1198
|
*/
|
|
1205
1199
|
function objectEach(obj, fn, ctx) {
|
|
1206
|
-
/* eslint-enable valid-jsdoc */
|
|
1207
1200
|
for (const key in obj) {
|
|
1208
1201
|
if (Object.hasOwnProperty.call(obj, key)) {
|
|
1209
1202
|
fn.call(ctx || obj[key], obj[key], key, obj);
|
|
@@ -1259,7 +1252,7 @@ function pad(number, length, padder) {
|
|
|
1259
1252
|
.replace('-', '')
|
|
1260
1253
|
.length).join(padder || '0') + number;
|
|
1261
1254
|
}
|
|
1262
|
-
/* eslint-disable
|
|
1255
|
+
/* eslint-disable jsdoc/check-param-names */
|
|
1263
1256
|
/**
|
|
1264
1257
|
* Return the first value that is not null or undefined.
|
|
1265
1258
|
*
|
|
@@ -1281,6 +1274,7 @@ function Utilities_pick() {
|
|
|
1281
1274
|
}
|
|
1282
1275
|
}
|
|
1283
1276
|
}
|
|
1277
|
+
/* eslint-enable jsdoc/check-param-names */
|
|
1284
1278
|
/**
|
|
1285
1279
|
* Shortcut for parseInt
|
|
1286
1280
|
*
|
|
@@ -1369,7 +1363,6 @@ function replaceNested(text, ...replacements) {
|
|
|
1369
1363
|
} while (text !== previous);
|
|
1370
1364
|
return text;
|
|
1371
1365
|
}
|
|
1372
|
-
/* eslint-disable valid-jsdoc */
|
|
1373
1366
|
/**
|
|
1374
1367
|
* Remove an event that was added with {@link Highcharts#addEvent}.
|
|
1375
1368
|
*
|
|
@@ -1389,7 +1382,6 @@ function replaceNested(text, ...replacements) {
|
|
|
1389
1382
|
* @return {void}
|
|
1390
1383
|
*/
|
|
1391
1384
|
function removeEvent(el, type, fn) {
|
|
1392
|
-
/* eslint-enable valid-jsdoc */
|
|
1393
1385
|
/** @internal */
|
|
1394
1386
|
function removeOneEvent(type, fn) {
|
|
1395
1387
|
const removeEventListener = el.removeEventListener;
|
|
@@ -1764,6 +1756,7 @@ if (Utilities_win.jQuery) {
|
|
|
1764
1756
|
*
|
|
1765
1757
|
* @external JQuery
|
|
1766
1758
|
*/
|
|
1759
|
+
/* eslint-disable jsdoc/check-param-names */
|
|
1767
1760
|
/**
|
|
1768
1761
|
* Helper function to return the chart of the current JQuery selector
|
|
1769
1762
|
* element.
|
|
@@ -1808,6 +1801,7 @@ if (Utilities_win.jQuery) {
|
|
|
1808
1801
|
return charts[attr(this[0], 'data-highcharts-chart')];
|
|
1809
1802
|
}
|
|
1810
1803
|
};
|
|
1804
|
+
/* eslint-enable jsdoc/check-param-names */
|
|
1811
1805
|
}
|
|
1812
1806
|
/* *
|
|
1813
1807
|
*
|
|
@@ -1867,7 +1861,7 @@ if (Utilities_win.jQuery) {
|
|
|
1867
1861
|
*/ /**
|
|
1868
1862
|
* Radius of the element border.
|
|
1869
1863
|
* @name Highcharts.CSSObject#borderRadius
|
|
1870
|
-
* @type {
|
|
1864
|
+
* @type {string|undefined}
|
|
1871
1865
|
*/ /**
|
|
1872
1866
|
* Color used in the element. The 'contrast' option is a Highcharts custom
|
|
1873
1867
|
* property that results in black or white, depending on the background of the
|
|
@@ -1886,7 +1880,7 @@ if (Utilities_win.jQuery) {
|
|
|
1886
1880
|
*/ /**
|
|
1887
1881
|
* Font size of the element text.
|
|
1888
1882
|
* @name Highcharts.CSSObject#fontSize
|
|
1889
|
-
* @type {string|undefined}
|
|
1883
|
+
* @type {number|string|undefined}
|
|
1890
1884
|
*/ /**
|
|
1891
1885
|
* Font weight of the element text.
|
|
1892
1886
|
* @name Highcharts.CSSObject#fontWeight
|
|
@@ -6177,7 +6171,6 @@ const defaultOptions = {
|
|
|
6177
6171
|
* @since 1.3
|
|
6178
6172
|
* @apioption legend.labelFormat
|
|
6179
6173
|
*/
|
|
6180
|
-
/* eslint-disable valid-jsdoc */
|
|
6181
6174
|
/**
|
|
6182
6175
|
* Callback function to format each of the series' labels. The `this`
|
|
6183
6176
|
* keyword refers to the series object, or the point object in case of
|
|
@@ -10700,10 +10693,10 @@ class DataConnector {
|
|
|
10700
10693
|
/**
|
|
10701
10694
|
* Updates the connector with new options.
|
|
10702
10695
|
*
|
|
10703
|
-
* @param newOptions
|
|
10696
|
+
* @param {object} newOptions
|
|
10704
10697
|
* The new options to be applied to the connector.
|
|
10705
10698
|
*
|
|
10706
|
-
* @param reload
|
|
10699
|
+
* @param {boolean} [reload=true]
|
|
10707
10700
|
* Whether to reload the connector after applying the new options.
|
|
10708
10701
|
*/
|
|
10709
10702
|
async update(newOptions, reload = true) {
|
|
@@ -10808,10 +10801,10 @@ class DataConnector {
|
|
|
10808
10801
|
/**
|
|
10809
10802
|
* Registers a callback for a specific connector event.
|
|
10810
10803
|
*
|
|
10811
|
-
* @param type
|
|
10804
|
+
* @param {string} type
|
|
10812
10805
|
* Event type.
|
|
10813
10806
|
*
|
|
10814
|
-
* @param callback
|
|
10807
|
+
* @param {Function} callback
|
|
10815
10808
|
* Function to register for the connector callback.
|
|
10816
10809
|
*
|
|
10817
10810
|
* @return {Function}
|
|
@@ -11919,7 +11912,7 @@ const whcm = {
|
|
|
11919
11912
|
*
|
|
11920
11913
|
* */
|
|
11921
11914
|
const classNamePrefix = 'hcg-';
|
|
11922
|
-
const version = '2.3.
|
|
11915
|
+
const version = '2.3.1';
|
|
11923
11916
|
const rawClassNames = {
|
|
11924
11917
|
container: 'container',
|
|
11925
11918
|
tableElement: 'table',
|
|
@@ -12742,7 +12735,6 @@ const simulatedEventTarget = HTMLUtilities_win.EventTarget && new HTMLUtilities_
|
|
|
12742
12735
|
* Functions
|
|
12743
12736
|
*
|
|
12744
12737
|
* */
|
|
12745
|
-
/* eslint-disable valid-jsdoc */
|
|
12746
12738
|
/**
|
|
12747
12739
|
* @private
|
|
12748
12740
|
* @param {Highcharts.HTMLDOMElement} el
|
|
@@ -14045,7 +14037,7 @@ class Pagination {
|
|
|
14045
14037
|
return;
|
|
14046
14038
|
}
|
|
14047
14039
|
const { currentPage, currentPageSize, totalItems, totalPages } = this.controller;
|
|
14048
|
-
const startItem = (currentPage - 1) * currentPageSize + 1;
|
|
14040
|
+
const startItem = Math.min(Math.max(0, (currentPage - 1) * currentPageSize + 1), totalItems);
|
|
14049
14041
|
const endItem = Math.min(currentPage * currentPageSize, totalItems);
|
|
14050
14042
|
const pageInfoText = Pagination_formatText(this.lang?.pageInfo ?? '', {
|
|
14051
14043
|
start: startItem,
|
|
@@ -14590,10 +14582,10 @@ class Pagination {
|
|
|
14590
14582
|
* Destroy the pagination instance.
|
|
14591
14583
|
*/
|
|
14592
14584
|
destroy() {
|
|
14593
|
-
|
|
14594
|
-
|
|
14595
|
-
|
|
14596
|
-
|
|
14585
|
+
// Fixed container removal when switching from custom to footer.
|
|
14586
|
+
const tfoot = this.paginationContainer?.closest('tfoot');
|
|
14587
|
+
if (tfoot) {
|
|
14588
|
+
tfoot.remove();
|
|
14597
14589
|
}
|
|
14598
14590
|
else {
|
|
14599
14591
|
this.contentWrapper?.remove();
|
|
@@ -19141,8 +19133,22 @@ class RowsVirtualizer {
|
|
|
19141
19133
|
// Render missing rows, drop out-of-range ones, and ensure last row.
|
|
19142
19134
|
await this.renderRows(this.rowCursor);
|
|
19143
19135
|
const rows = this.viewport.rows;
|
|
19136
|
+
// For non-virtualized rows, re-order rows to match data order.
|
|
19137
|
+
if (!this.viewport.virtualRows) {
|
|
19138
|
+
let node = tbody.firstElementChild;
|
|
19139
|
+
for (let i = 0, iEnd = rows.length; i < iEnd; ++i) {
|
|
19140
|
+
if (node === rows[i].htmlElement) {
|
|
19141
|
+
node = node.nextElementSibling;
|
|
19142
|
+
continue;
|
|
19143
|
+
}
|
|
19144
|
+
// Mismatch found, so append the rest in the correct order.
|
|
19145
|
+
for (let j = i; j < iEnd; ++j) {
|
|
19146
|
+
tbody.appendChild(rows[j].htmlElement);
|
|
19147
|
+
}
|
|
19148
|
+
break;
|
|
19149
|
+
}
|
|
19150
|
+
}
|
|
19144
19151
|
for (let i = 0, iEnd = rows.length; i < iEnd; ++i) {
|
|
19145
|
-
// Update row data so indices map to fresh provider values.
|
|
19146
19152
|
await rows[i].update();
|
|
19147
19153
|
}
|
|
19148
19154
|
if (this.viewport.virtualRows && defined(oldScrollTop)) {
|
|
@@ -21483,13 +21489,14 @@ class PaginationController {
|
|
|
21483
21489
|
return this.currentPageSize > 0 ? Math.ceil(this.totalItems / this.currentPageSize) : 1;
|
|
21484
21490
|
}
|
|
21485
21491
|
/**
|
|
21486
|
-
* Clamps the current page to the
|
|
21492
|
+
* Clamps the current page to the valid range [1, totalPages].
|
|
21487
21493
|
*/
|
|
21488
21494
|
clampPage() {
|
|
21489
|
-
|
|
21495
|
+
const target = Math.max(1, Math.min(this.currentPage, this.totalPages || 1));
|
|
21496
|
+
if (this.currentPage === target) {
|
|
21490
21497
|
return;
|
|
21491
21498
|
}
|
|
21492
|
-
this.currentPage =
|
|
21499
|
+
this.currentPage = target;
|
|
21493
21500
|
this.querying.shouldBeUpdated = true;
|
|
21494
21501
|
}
|
|
21495
21502
|
/**
|
|
@@ -22550,14 +22557,14 @@ class Grid {
|
|
|
22550
22557
|
*/
|
|
22551
22558
|
async renderViewport() {
|
|
22552
22559
|
const viewportMeta = this.viewport?.getStateMeta();
|
|
22553
|
-
const pagination = this.pagination;
|
|
22554
|
-
const paginationPosition = pagination?.options?.position;
|
|
22555
|
-
this.enabledColumns = await this.getEnabledColumnIDs();
|
|
22556
22560
|
this.credits?.destroy();
|
|
22557
22561
|
this.viewport?.destroy();
|
|
22558
22562
|
delete this.viewport;
|
|
22559
|
-
this.resetContentWrapper();
|
|
22560
22563
|
fireEvent(this, 'beforeRenderViewport');
|
|
22564
|
+
this.resetContentWrapper();
|
|
22565
|
+
this.enabledColumns = await this.getEnabledColumnIDs();
|
|
22566
|
+
const pagination = this.pagination;
|
|
22567
|
+
const paginationPosition = pagination?.options?.position;
|
|
22561
22568
|
this.renderCaption();
|
|
22562
22569
|
// Render top pagination if enabled (before table)
|
|
22563
22570
|
if (paginationPosition === 'top') {
|
|
@@ -23081,10 +23088,10 @@ class DataPool {
|
|
|
23081
23088
|
/**
|
|
23082
23089
|
* Sets connector options under the specified `options.id`.
|
|
23083
23090
|
*
|
|
23084
|
-
* @param options
|
|
23091
|
+
* @param {object} options
|
|
23085
23092
|
* Connector options to set.
|
|
23086
23093
|
*
|
|
23087
|
-
* @param update
|
|
23094
|
+
* @param {boolean} [update]
|
|
23088
23095
|
* Whether to update the existing connector with the new options and reload
|
|
23089
23096
|
* it (`true`) or replace it with a new connector instance (`false`).
|
|
23090
23097
|
*/
|
|
@@ -23182,14 +23189,36 @@ function compose(GridClass) {
|
|
|
23182
23189
|
*/
|
|
23183
23190
|
function initResizeObserver() {
|
|
23184
23191
|
destroyResizeObserver.call(this);
|
|
23185
|
-
if (!this.container) {
|
|
23192
|
+
if (!this.container || !this.contentWrapper) {
|
|
23186
23193
|
return;
|
|
23187
23194
|
}
|
|
23188
23195
|
this.activeRules = new Set();
|
|
23196
|
+
// Synchronously evaluate responsive rules so the first render already
|
|
23197
|
+
// uses the correct options (avoids a redundant second render).
|
|
23198
|
+
if (!this.updatingResponsive) {
|
|
23199
|
+
const rules = this.options?.responsive?.rules || [];
|
|
23200
|
+
if (rules.length > 0) {
|
|
23201
|
+
const { clientWidth: width, clientHeight: height } = this.container;
|
|
23202
|
+
const fakeEntry = {
|
|
23203
|
+
contentRect: { width, height }
|
|
23204
|
+
};
|
|
23205
|
+
const matchingRules = [];
|
|
23206
|
+
for (const rule of rules) {
|
|
23207
|
+
if (typeof rule._id === 'undefined') {
|
|
23208
|
+
rule._id = uniqueKey();
|
|
23209
|
+
}
|
|
23210
|
+
if (matchResponsiveRule.call(this, rule, fakeEntry)) {
|
|
23211
|
+
matchingRules.push(rule);
|
|
23212
|
+
}
|
|
23213
|
+
}
|
|
23214
|
+
this.activeRules = new Set(matchingRules);
|
|
23215
|
+
setResponsive.call(this, matchingRules, false);
|
|
23216
|
+
}
|
|
23217
|
+
}
|
|
23189
23218
|
this.resizeObserver = new ResizeObserver((entries) => {
|
|
23190
23219
|
onResize.call(this, entries[0]);
|
|
23191
23220
|
});
|
|
23192
|
-
this.resizeObserver.observe(this.
|
|
23221
|
+
this.resizeObserver.observe(this.contentWrapper);
|
|
23193
23222
|
}
|
|
23194
23223
|
/**
|
|
23195
23224
|
* Destroys the resize observer.
|
|
@@ -23229,20 +23258,28 @@ function matchResponsiveRule(rule, entry) {
|
|
|
23229
23258
|
*
|
|
23230
23259
|
* @param matchingRules
|
|
23231
23260
|
* Active responsive rules.
|
|
23261
|
+
*
|
|
23262
|
+
* @param redraw
|
|
23263
|
+
* Whether to redraw the grid. Default is `true`.
|
|
23232
23264
|
*/
|
|
23233
|
-
function setResponsive(matchingRules) {
|
|
23265
|
+
function setResponsive(matchingRules, redraw = true) {
|
|
23234
23266
|
const ruleIds = matchingRules.map((rule) => rule._id);
|
|
23235
23267
|
const ruleIdsString = (ruleIds.toString() || void 0);
|
|
23236
23268
|
const currentRuleIds = this.currentResponsive?.ruleIds;
|
|
23237
|
-
if (ruleIdsString === currentRuleIds) {
|
|
23269
|
+
if (ruleIdsString === currentRuleIds || this.updatingResponsive) {
|
|
23238
23270
|
return;
|
|
23239
23271
|
}
|
|
23272
|
+
this.updatingResponsive = true;
|
|
23273
|
+
let lastUpdate;
|
|
23240
23274
|
if (this.currentResponsive) {
|
|
23241
23275
|
const undoOptions = this.currentResponsive.undoOptions;
|
|
23242
23276
|
this.currentResponsive = void 0;
|
|
23243
|
-
|
|
23244
|
-
|
|
23245
|
-
|
|
23277
|
+
if (redraw) {
|
|
23278
|
+
lastUpdate = this.update(undoOptions, true);
|
|
23279
|
+
}
|
|
23280
|
+
else {
|
|
23281
|
+
this.update(undoOptions, false);
|
|
23282
|
+
}
|
|
23246
23283
|
}
|
|
23247
23284
|
if (ruleIdsString) {
|
|
23248
23285
|
const mergedOptions = merge(...matchingRules.map((rule) => rule.gridOptions));
|
|
@@ -23259,9 +23296,22 @@ function setResponsive(matchingRules) {
|
|
|
23259
23296
|
mergedOptions,
|
|
23260
23297
|
undoOptions
|
|
23261
23298
|
};
|
|
23262
|
-
if (
|
|
23263
|
-
|
|
23299
|
+
if (redraw) {
|
|
23300
|
+
lastUpdate = this.update(mergedOptions, true);
|
|
23264
23301
|
}
|
|
23302
|
+
else {
|
|
23303
|
+
this.update(mergedOptions, false);
|
|
23304
|
+
}
|
|
23305
|
+
}
|
|
23306
|
+
// Keep the flag alive until the last queued update finishes so that
|
|
23307
|
+
// ResizeObserver callbacks arriving in the meantime are ignored.
|
|
23308
|
+
if (lastUpdate !== void 0) {
|
|
23309
|
+
void lastUpdate.then(() => {
|
|
23310
|
+
this.updatingResponsive = false;
|
|
23311
|
+
});
|
|
23312
|
+
}
|
|
23313
|
+
else {
|
|
23314
|
+
this.updatingResponsive = false;
|
|
23265
23315
|
}
|
|
23266
23316
|
}
|
|
23267
23317
|
/**
|
|
@@ -23342,7 +23392,7 @@ function syncColumnIds(undoOptions, mergedOptions) {
|
|
|
23342
23392
|
* The resize observer entry.
|
|
23343
23393
|
*/
|
|
23344
23394
|
function onResize(entry) {
|
|
23345
|
-
if (!this.activeRules) {
|
|
23395
|
+
if (!this.activeRules || this.updatingResponsive) {
|
|
23346
23396
|
return;
|
|
23347
23397
|
}
|
|
23348
23398
|
const rules = this.options?.responsive?.rules || [];
|
|
@@ -29742,9 +29792,11 @@ const filterOperatorMap = {
|
|
|
29742
29792
|
'<': 'lessThan',
|
|
29743
29793
|
'<=': 'lessThanOrEqualTo',
|
|
29744
29794
|
contains: 'contains',
|
|
29795
|
+
notContains: 'doesNotContain',
|
|
29745
29796
|
startsWith: 'beginsWith',
|
|
29746
29797
|
endsWith: 'endsWith',
|
|
29747
|
-
empty: 'empty'
|
|
29798
|
+
empty: 'empty',
|
|
29799
|
+
notEmpty: 'notEmpty'
|
|
29748
29800
|
};
|
|
29749
29801
|
/**
|
|
29750
29802
|
* Recursively extracts filter conditions from the Grid's FilterCondition
|
|
@@ -29764,21 +29816,29 @@ function extractFilterConditions(condition, filterColumns = []) {
|
|
|
29764
29816
|
return filterColumns;
|
|
29765
29817
|
}
|
|
29766
29818
|
if (condition.operator === 'and' || condition.operator === 'or') {
|
|
29767
|
-
// Logical condition - extract from nested conditions
|
|
29768
29819
|
if (condition.conditions) {
|
|
29769
29820
|
for (const subCondition of condition.conditions) {
|
|
29770
29821
|
extractFilterConditions(subCondition, filterColumns);
|
|
29771
29822
|
}
|
|
29772
29823
|
}
|
|
29773
29824
|
}
|
|
29774
|
-
else if (condition.columnId) {
|
|
29775
|
-
|
|
29776
|
-
|
|
29777
|
-
|
|
29778
|
-
|
|
29779
|
-
condition
|
|
29780
|
-
|
|
29781
|
-
|
|
29825
|
+
else if (condition.columnId || condition.condition?.columnId) {
|
|
29826
|
+
const conditionToUse = condition.columnId ?
|
|
29827
|
+
condition : condition.condition;
|
|
29828
|
+
let key = conditionToUse.operator;
|
|
29829
|
+
if (condition.operator === 'not') {
|
|
29830
|
+
key = condition.operator +
|
|
29831
|
+
conditionToUse.operator.charAt(0).toUpperCase() +
|
|
29832
|
+
conditionToUse.operator.slice(1);
|
|
29833
|
+
}
|
|
29834
|
+
const mapped = filterOperatorMap[key] || conditionToUse.operator;
|
|
29835
|
+
if (conditionToUse.columnId) {
|
|
29836
|
+
filterColumns.push({
|
|
29837
|
+
id: conditionToUse.columnId,
|
|
29838
|
+
condition: mapped,
|
|
29839
|
+
value: conditionToUse.value
|
|
29840
|
+
});
|
|
29841
|
+
}
|
|
29782
29842
|
}
|
|
29783
29843
|
return filterColumns;
|
|
29784
29844
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@highcharts/grid-pro",
|
|
3
3
|
"description": "Highcharts Grid Pro framework",
|
|
4
4
|
"homepage": "https://www.highcharts.com/products/grid/",
|
|
5
|
-
"version": "2.3.
|
|
5
|
+
"version": "2.3.1",
|
|
6
6
|
"author": "Highsoft AS <support@highcharts.com> (http://www.highcharts.com/about)",
|
|
7
7
|
"main": "grid-pro.js",
|
|
8
8
|
"module": "./es-modules/masters/grid-pro.src.js",
|