@dhtmlx/grid 9.3.9 → 9.3.11
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 +1 -1
- package/codebase/grid.min.css +1 -1
- package/codebase/grid.min.js +3 -3
- package/codebase/grid.min.js.map +1 -1
- package/codebase/types/ts-combobox/sources/types.d.ts +1 -0
- package/codebase/types/ts-grid/sources/Grid.d.ts +13 -0
- package/codebase/types/ts-grid/sources/ProGrid.d.ts +1 -0
- package/codebase/types/ts-grid/sources/helpers/cells.d.ts +1 -0
- package/codebase/types/ts-grid/sources/helpers/locale.d.ts +10 -0
- package/codebase/types/ts-grid/sources/locales/en.d.ts +26 -0
- package/codebase/types/ts-grid/sources/modules/BlockSelection.d.ts +0 -1
- package/codebase/types/ts-grid/sources/types.d.ts +6 -1
- package/codebase/types/ts-grid/sources/ui/cells.d.ts +3 -2
- package/codebase/types/ts-grid/sources/ui/common.d.ts +7 -0
- package/codebase/types/ts-grid/sources/ui/editors/InputEditor.d.ts +3 -0
- package/package.json +1 -1
- package/whatsnew.txt +34 -0
|
@@ -29,6 +29,7 @@ export interface IComboboxConfig {
|
|
|
29
29
|
[className: string]: (event: Event, id: Id) => void | boolean;
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
|
+
ariaLabel?: string;
|
|
32
33
|
/** @deprecated See a documentation: https://docs.dhtmlx.com/ */
|
|
33
34
|
cellHeight?: number;
|
|
34
35
|
/** @deprecated See a documentation: https://docs.dhtmlx.com/ */
|
|
@@ -24,6 +24,7 @@ export declare class Grid extends View implements IGrid {
|
|
|
24
24
|
protected _scroll: IScrollState;
|
|
25
25
|
protected _events: IEventSystem<GridSystemEvents, ISystemEventHandlersMap>;
|
|
26
26
|
protected _htmlEvents: any;
|
|
27
|
+
protected _tooltipFocusHandler: (e: Event) => void;
|
|
27
28
|
protected _sortingStates: ISortingStates;
|
|
28
29
|
protected _activeFilters: object;
|
|
29
30
|
protected _dropManager: any;
|
|
@@ -36,6 +37,7 @@ export declare class Grid extends View implements IGrid {
|
|
|
36
37
|
protected _colWidths: PrefixSums;
|
|
37
38
|
protected _rowHeightsRebuild: boolean;
|
|
38
39
|
private _observedEl;
|
|
40
|
+
private _liveRegion;
|
|
39
41
|
private _filterData;
|
|
40
42
|
private _hiddenFilters;
|
|
41
43
|
private _commonSummary;
|
|
@@ -68,6 +70,17 @@ export declare class Grid extends View implements IGrid {
|
|
|
68
70
|
editEnd(withoutSave?: boolean): void;
|
|
69
71
|
getHeaderFilter(colId: Id): IHeaderFilter;
|
|
70
72
|
getSummary(colId?: Id): ISummaryList;
|
|
73
|
+
/**
|
|
74
|
+
* Sends a message to the grid's polite live region, so a screen reader
|
|
75
|
+
* announces a status change that happened without moving focus.
|
|
76
|
+
*/
|
|
77
|
+
announce(message: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* The live region is kept as a sibling of the widget root, outside the
|
|
80
|
+
* `role="grid"` element: a `role="status"` node is not an allowed child of
|
|
81
|
+
* a grid, and the node must survive redraws, so it is not part of the vdom.
|
|
82
|
+
*/
|
|
83
|
+
protected _getLiveRegion(): HTMLElement | null;
|
|
71
84
|
/** @deprecated See a documentation: https://docs.dhtmlx.com/suite/migration/ */
|
|
72
85
|
getSortingState(): {
|
|
73
86
|
dir?: TSortDir;
|
|
@@ -27,6 +27,7 @@ export declare class ProGrid implements IProGrid {
|
|
|
27
27
|
history: IHistory;
|
|
28
28
|
constructor(container: HTMLElement | string | null, config?: IProGridConfig);
|
|
29
29
|
paint(): void;
|
|
30
|
+
announce(message: string): void;
|
|
30
31
|
destructor(): void;
|
|
31
32
|
expand(rowId: Id): void;
|
|
32
33
|
collapse(rowId: Id): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ICell, ICol, IGrid, IRow, ISpan } from "./../types";
|
|
2
2
|
import { Id } from "../../../ts-common/types";
|
|
3
3
|
export declare function getWidth(columns: ICol[], colspan: number, index: number): number;
|
|
4
|
+
export declare function getSourceCellIndex(currentIdx: number, minIdx: number, count: number): number;
|
|
4
5
|
export declare function getSpanHeight(rows: IRow[], span: ISpan): number;
|
|
5
6
|
export declare function getReducedColspan(columns: ICol[], colId: Id, colspan: number): number;
|
|
6
7
|
export declare function getReducedRowspan(initialRows: IRow[], currRows: IRow[], rowIndex: number, span: ISpan): number;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ILocaleParams {
|
|
2
|
+
[key: string]: string | number;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Returns a localized string by its key, substituting `{name}` placeholders.
|
|
6
|
+
*
|
|
7
|
+
* The locale object is read on every call, so `dhx.i18n.setLocale("grid", ...)`
|
|
8
|
+
* is picked up without rebuilding anything.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getLocaleString(key: string, params?: ILocaleParams): string;
|
|
@@ -3,5 +3,31 @@ declare const locale: {
|
|
|
3
3
|
groupText: string;
|
|
4
4
|
dropAreaTitle: string;
|
|
5
5
|
dropAreaPlaceholder: string;
|
|
6
|
+
aria_sortedAscending: string;
|
|
7
|
+
aria_sortedDescending: string;
|
|
8
|
+
aria_filterApplied: string;
|
|
9
|
+
aria_filterCleared: string;
|
|
10
|
+
aria_rowsLoaded: string;
|
|
11
|
+
aria_valueOutOfRange: string;
|
|
12
|
+
aria_valueBelowMin: string;
|
|
13
|
+
aria_valueAboveMax: string;
|
|
14
|
+
aria_valueClamped: string;
|
|
15
|
+
aria_filter: string;
|
|
16
|
+
aria_filterByDate: string;
|
|
17
|
+
aria_sortBy: string;
|
|
18
|
+
aria_expandGroup: string;
|
|
19
|
+
aria_collapseGroup: string;
|
|
20
|
+
aria_expandRow: string;
|
|
21
|
+
aria_collapseRow: string;
|
|
22
|
+
aria_editContent: string;
|
|
23
|
+
aria_subRow: string;
|
|
24
|
+
aria_enterGrid: string;
|
|
25
|
+
aria_exitGrid: string;
|
|
26
|
+
aria_dragPanel: string;
|
|
27
|
+
aria_panelHeader: string;
|
|
28
|
+
aria_panelFooter: string;
|
|
29
|
+
aria_panelContent: string;
|
|
30
|
+
aria_draggableRows: string;
|
|
31
|
+
aria_rowId: string;
|
|
6
32
|
};
|
|
7
33
|
export default locale;
|
|
@@ -30,6 +30,7 @@ export interface IGrid {
|
|
|
30
30
|
keyManager: IKeyManager;
|
|
31
31
|
export: any;
|
|
32
32
|
paint(): void;
|
|
33
|
+
announce(message: string): void;
|
|
33
34
|
destructor(): void;
|
|
34
35
|
setColumns(col: ICol[]): void;
|
|
35
36
|
addRowCss(rowId: Id, css: string): void;
|
|
@@ -209,6 +210,7 @@ export interface IRendererConfig extends Required<IProGridConfig> {
|
|
|
209
210
|
selection: any;
|
|
210
211
|
dropManager: any;
|
|
211
212
|
blockSelection: any;
|
|
213
|
+
range?: IRange;
|
|
212
214
|
sort: ISortingStates;
|
|
213
215
|
filterLocation?: string;
|
|
214
216
|
content?: IContentList;
|
|
@@ -219,6 +221,7 @@ export interface IRendererConfig extends Required<IProGridConfig> {
|
|
|
219
221
|
};
|
|
220
222
|
$renderFrom?: RenderFrom;
|
|
221
223
|
$isDragging?: boolean;
|
|
224
|
+
$rowIndexShift?: number;
|
|
222
225
|
_events?: IEventSystem<GridSystemEvents>;
|
|
223
226
|
}
|
|
224
227
|
export declare enum GridEvents {
|
|
@@ -364,7 +367,8 @@ export declare enum GridSystemEvents {
|
|
|
364
367
|
headerCellTouchMove = "headerCellTouchMove",
|
|
365
368
|
headerCellTouchEnd = "headerCellTouchEnd",
|
|
366
369
|
groupPanelItemTouchMove = "groupPanelItemTouchMove",
|
|
367
|
-
groupPanelItemItemTouchEnd = "groupPanelItemItemTouchEnd"
|
|
370
|
+
groupPanelItemItemTouchEnd = "groupPanelItemItemTouchEnd",
|
|
371
|
+
announce = "announce"
|
|
368
372
|
}
|
|
369
373
|
export interface ISystemEventHandlersMap {
|
|
370
374
|
[key: string]: (...args: any[]) => any;
|
|
@@ -374,6 +378,7 @@ export interface ISystemEventHandlersMap {
|
|
|
374
378
|
[GridSystemEvents.headerCellTouchEnd]: (cell: IHeader, col: ICol, event: TouchEvent) => void;
|
|
375
379
|
[GridSystemEvents.groupPanelItemTouchMove]: (id: string, event: TouchEvent) => void;
|
|
376
380
|
[GridSystemEvents.groupPanelItemItemTouchEnd]: (id: string, event: TouchEvent) => void;
|
|
381
|
+
[GridSystemEvents.announce]: (message: string) => void;
|
|
377
382
|
}
|
|
378
383
|
export interface ICol {
|
|
379
384
|
id: Id;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GridEvents, GridSystemEvents, ICoords, IGridConfig, IRendererConfig, ISpan, Split } from "../types";
|
|
2
2
|
import { IDataCollection } from "../../../ts-data";
|
|
3
|
+
import { Id } from "../../../ts-common/types";
|
|
3
4
|
type mouseEvents = GridEvents.cellClick | GridEvents.cellMouseOver | GridEvents.cellMouseDown | GridEvents.cellDblClick | GridEvents.cellRightClick;
|
|
4
5
|
type touchEvents = GridSystemEvents.cellTouchEnd | GridSystemEvents.cellTouchMove;
|
|
5
6
|
declare function handleMouse(rowStart: number, colStart: number, conf: IRendererConfig, type: mouseEvents & touchEvents, e: any): void;
|
|
@@ -20,8 +21,8 @@ export declare function normalizeSpan(span: ISpan, config: IGridConfig, data: ID
|
|
|
20
21
|
$renderFrom: any[];
|
|
21
22
|
$rowsVisibility: number[];
|
|
22
23
|
$colsVisibility: number[];
|
|
23
|
-
row:
|
|
24
|
-
column:
|
|
24
|
+
row: Id;
|
|
25
|
+
column: Id;
|
|
25
26
|
rowspan?: number;
|
|
26
27
|
colspan?: number;
|
|
27
28
|
text?: string | ((args: import("../types").ISummaryList) => string);
|
|
@@ -5,4 +5,11 @@ export declare function calcScrollBarWidth(config: IGridConfig | IRendererConfig
|
|
|
5
5
|
height: number;
|
|
6
6
|
}): IScrollBarWidth;
|
|
7
7
|
export declare function getCurrFixedCols(config: IGridConfig, split: Split.left | Split.right): import("../types").ICol[];
|
|
8
|
+
/**
|
|
9
|
+
* Number of header rows. `aria-rowindex` is a position within the whole grid,
|
|
10
|
+
* so header rows occupy the first indices and body rows are offset by this.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getHeaderRowCount(config: IGridConfig | IRendererConfig): number;
|
|
13
|
+
/** Number of footer rows; they are the last rows of the grid for `aria-rowcount`. */
|
|
14
|
+
export declare function getFooterRowCount(config: IGridConfig | IRendererConfig): number;
|
|
8
15
|
export declare function getNormalizeDateObject(item: string | Date, dateFormat: string): Date | null;
|
|
@@ -15,6 +15,9 @@ export declare class InputEditor implements IEditor {
|
|
|
15
15
|
endEdit(withoutSave?: boolean): void;
|
|
16
16
|
toHTML(value?: string | number): any;
|
|
17
17
|
protected _initHandlers(): void;
|
|
18
|
+
private _setValidity;
|
|
19
|
+
private _isValueInvalid;
|
|
20
|
+
private _getRangeMessage;
|
|
18
21
|
private _isValidWord;
|
|
19
22
|
private _isCorrectRange;
|
|
20
23
|
private _applyValuePattern;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhtmlx/grid",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.11",
|
|
4
4
|
"description": "DHTMLX Grid - JavaScript data grid library. GPL v2 edition for GPL-compatible open-source projects; commercial licenses are available for proprietary and production use.",
|
|
5
5
|
"keywords": ["dhtmlx","grid","datagrid","table","treegrid","data-table","javascript","typescript"],
|
|
6
6
|
"homepage":"https://docs.dhtmlx.com/suite/grid/",
|
package/whatsnew.txt
CHANGED
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
# Version 9.3.11 (September 14, 2026)
|
|
2
|
+
|
|
3
|
+
### Updates
|
|
4
|
+
|
|
5
|
+
- Modal focus trapping and management:
|
|
6
|
+
- Implemented focus trapping for all modal windows, message dialogs, and popups compliant with **WCAG 2.4.3**.
|
|
7
|
+
- Opening a modal dialog moves keyboard focus to the first actionable element and keeps it within the dialog boundaries until the dialog closes.
|
|
8
|
+
- Closing a dialog restores focus to the previously active cell or trigger element.
|
|
9
|
+
|
|
10
|
+
- Assistive technology support for block selection:
|
|
11
|
+
- The Grid exposes the block selection state to screen readers (**WCAG 1.3.1**, **WCAG 4.1.2**).
|
|
12
|
+
- Selected cell boundaries and multi-cell ranges reflect their `aria-selected` status in the accessibility tree, providing real-time feedback during keyboard and pointer selection.
|
|
13
|
+
|
|
14
|
+
- Localization for ARIA labels:
|
|
15
|
+
- Moved all hardcoded English accessible names and labels into the locale system.
|
|
16
|
+
- Screen reader announcements, button descriptions, and status labels that developers can translate via the standard localization configuration.
|
|
17
|
+
|
|
18
|
+
- Target size improvements for interactive controls:
|
|
19
|
+
- Enlarged hit areas for small interactive elements, including column resize handles and removal/action icons.
|
|
20
|
+
- Reduced accidental or missed clicks on touch-screen devices, accommodating users with motor precision needs.
|
|
21
|
+
|
|
22
|
+
### Fixes
|
|
23
|
+
|
|
24
|
+
- Fixed a console error that occurred when starting block selection in numeric columns or number-formatted cell ranges
|
|
25
|
+
- Fixed broken `aria-labelledby` relationships in sub-rows, eliminating orphaned ID references
|
|
26
|
+
- Corrected invalid ARIA attributes and roles, and fixed the `aria-rowindex` and `aria-rowcount` calculations so that they reflect the overall grid structure, including header rows
|
|
27
|
+
- Fixed an issue where inline cell editors lost or failed to expose their accessible names on the first paint and on subsequent data updates
|
|
28
|
+
|
|
29
|
+
# Version 9.3.10 (August 19, 2026)
|
|
30
|
+
|
|
31
|
+
### Fixes
|
|
32
|
+
|
|
33
|
+
- Fixed a script error that occurred when the `mark` property was applied to a hidden column.
|
|
34
|
+
|
|
1
35
|
# Version 9.3.9 (August 13, 2026)
|
|
2
36
|
|
|
3
37
|
### Updates
|