@progress/kendo-react-grid 16.2.0-develop.5 → 16.2.0-develop.7

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.
@@ -23,11 +23,20 @@ export interface GridScrollableSettings {
23
23
  * Controls the scrollbar rendering style.
24
24
  *
25
25
  * - `default`—Uses the native browser scrollbar (default).
26
- * - `proxied`—Renders a custom overlay scrollbar on top of the content area.
27
- * The overlay appears on hover or scroll and hides when idle,
26
+ * - `proxied`—Renders a native scrollbar-based overlay on top of the content area,
28
27
  * eliminating the white-space flash during virtual scrolling jumps.
29
28
  *
30
29
  * @default 'default'
31
30
  */
32
31
  scrollbar?: 'default' | 'proxied';
32
+ /**
33
+ * Multiplies the scrolling distance reported by mouse-wheel and trackpad input.
34
+ * Applies to the `scrollable` and `virtual` modes with both scrollbar styles.
35
+ *
36
+ * Must be a positive, finite number. Values that are zero, negative, `NaN`, or `Infinity`
37
+ * fall back to the default.
38
+ *
39
+ * @default 1
40
+ */
41
+ wheelMultiplier?: number;
33
42
  }
@@ -6,7 +6,7 @@
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
8
  import { Page } from '../paging/Page';
9
- import { SyntheticEvent } from 'react';
9
+ import { RefObject, SyntheticEvent } from 'react';
10
10
  import { RowHeightService } from '@progress/kendo-react-common';
11
11
  /**
12
12
  * @hidden
@@ -24,6 +24,7 @@ export interface VirtualScrollInterface {
24
24
  tableTransform: string;
25
25
  rowHeightService?: RowHeightService;
26
26
  scrollbarOverlaySpacerElement: HTMLDivElement | null;
27
+ overlaySyncingRef: RefObject<boolean> | null;
27
28
  reset: () => void;
28
29
  scrollHandler(e: SyntheticEvent<HTMLDivElement>): void;
29
30
  scrollToPosition(scrollTop: number, e: SyntheticEvent<HTMLDivElement>, deferTranslate?: boolean): void;
@@ -5,4 +5,4 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-grid",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate: 1789464309,version:"16.2.0-develop.5",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"});exports.packageMetadata=e;
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({name:"@progress/kendo-react-grid",productName:"KendoReact",productCode:"KENDOUIREACT",productCodes:["KENDOUIREACT"],publishDate: 1789552554,version:"16.2.0-develop.7",licensingDocsUrl:"https://www.telerik.com/kendo-react-ui/components/my-license/"});exports.packageMetadata=e;
@@ -7,7 +7,7 @@ export const packageMetadata = Object.freeze({
7
7
  productName: 'KendoReact',
8
8
  productCode: 'KENDOUIREACT',
9
9
  productCodes: ['KENDOUIREACT'],
10
- publishDate: 1789464309,
11
- version: '16.2.0-develop.5',
10
+ publishDate: 1789552554,
11
+ version: '16.2.0-develop.7',
12
12
  licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/components/my-license/'
13
13
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-react-grid",
3
- "version": "16.2.0-develop.5",
3
+ "version": "16.2.0-develop.7",
4
4
  "description": "React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package",
5
5
  "author": "Progress",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -30,21 +30,21 @@
30
30
  "@progress/kendo-drawing": "^1.25.5",
31
31
  "@progress/kendo-file-saver": "^1.1.1",
32
32
  "@progress/kendo-licensing": "^1.7.2",
33
- "@progress/kendo-react-animation": "16.2.0-develop.5",
34
- "@progress/kendo-react-buttons": "16.2.0-develop.5",
35
- "@progress/kendo-react-common": "16.2.0-develop.5",
36
- "@progress/kendo-react-data-tools": "16.2.0-develop.5",
37
- "@progress/kendo-react-dateinputs": "16.2.0-develop.5",
38
- "@progress/kendo-react-indicators": "16.2.0-develop.5",
39
- "@progress/kendo-react-form": "16.2.0-develop.5",
40
- "@progress/kendo-react-labels": "16.2.0-develop.5",
41
- "@progress/kendo-react-dialogs": "16.2.0-develop.5",
42
- "@progress/kendo-react-dropdowns": "16.2.0-develop.5",
43
- "@progress/kendo-react-inputs": "16.2.0-develop.5",
44
- "@progress/kendo-react-intl": "16.2.0-develop.5",
45
- "@progress/kendo-react-popup": "16.2.0-develop.5",
46
- "@progress/kendo-react-layout": "16.2.0-develop.5",
47
- "@progress/kendo-react-conversational-ui": "16.2.0-develop.5",
33
+ "@progress/kendo-react-animation": "16.2.0-develop.7",
34
+ "@progress/kendo-react-buttons": "16.2.0-develop.7",
35
+ "@progress/kendo-react-common": "16.2.0-develop.7",
36
+ "@progress/kendo-react-data-tools": "16.2.0-develop.7",
37
+ "@progress/kendo-react-dateinputs": "16.2.0-develop.7",
38
+ "@progress/kendo-react-indicators": "16.2.0-develop.7",
39
+ "@progress/kendo-react-form": "16.2.0-develop.7",
40
+ "@progress/kendo-react-labels": "16.2.0-develop.7",
41
+ "@progress/kendo-react-dialogs": "16.2.0-develop.7",
42
+ "@progress/kendo-react-dropdowns": "16.2.0-develop.7",
43
+ "@progress/kendo-react-inputs": "16.2.0-develop.7",
44
+ "@progress/kendo-react-intl": "16.2.0-develop.7",
45
+ "@progress/kendo-react-popup": "16.2.0-develop.7",
46
+ "@progress/kendo-react-layout": "16.2.0-develop.7",
47
+ "@progress/kendo-react-conversational-ui": "16.2.0-develop.7",
48
48
  "@progress/kendo-svg-icons": "^4.9.0 || ^5.0.0",
49
49
  "react": "^18.0.0 || ^19.0.0",
50
50
  "react-dom": "^18.0.0 || ^19.0.0"
@@ -155,7 +155,7 @@
155
155
  "package": {
156
156
  "productName": "KendoReact",
157
157
  "productCode": "KENDOUIREACT",
158
- "publishDate": 1789464309,
158
+ "publishDate": 1789552554,
159
159
  "licensingDocsUrl": "https://www.telerik.com/kendo-react-ui/components/my-license/"
160
160
  }
161
161
  },
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ import { GridScrollableSettings } from '../interfaces/GridScrollableSettings';
9
+ import { ScrollMode } from '../ScrollMode';
10
+ /**
11
+ * @hidden
12
+ */
13
+ export interface ScrollableOverlaySettings {
14
+ overlayScrollbar: boolean;
15
+ wheelMultiplier: number;
16
+ }
17
+ /**
18
+ * @hidden
19
+ */
20
+ export declare function getScrollableOverlaySettings(scrollable: ScrollMode | GridScrollableSettings | undefined): ScrollableOverlaySettings;
21
+ /**
22
+ * @hidden
23
+ * Reports whether the proxied scrollbar overlay is currently scrolled to its bottom edge.
24
+ * Must be called BEFORE the overlay's spacer height is updated for a new page — its
25
+ * `scrollHeight` reflects the size from the PREVIOUS render, which is what "was it at the
26
+ * bottom" needs to check against. Only reports true when the page being applied is genuinely
27
+ * the last page — the overlay's own scrollTop can still read "at bottom" from a stale prior
28
+ * position (e.g. right after scrolling back up), which would otherwise incorrectly snap the
29
+ * content back down.
30
+ */
31
+ export declare function isOverlayAtBottom(scrollbarOverlaySpacerElement: HTMLDivElement | null, isLastPageLoad: boolean): boolean;
32
+ /**
33
+ * @hidden
34
+ */
35
+ export interface OverlayBottomPin {
36
+ scrollbarOverlay: HTMLDivElement;
37
+ overlayScrollTop: number;
38
+ contentScrollTop: number;
39
+ }
40
+ /**
41
+ * @hidden
42
+ * Computes the scrollTop values needed to keep the proxied scrollbar overlay pinned to the
43
+ * bottom, or `null` when there's no overlay/container to pin. Must be called AFTER the
44
+ * overlay's spacer height has been updated for the new page, so `scrollHeight` reflects the
45
+ * new size — pair with `isOverlayAtBottom()` (called before the resize) to decide whether to
46
+ * apply the result.
47
+ */
48
+ export declare function getOverlayBottomPin(scrollbarOverlaySpacerElement: HTMLDivElement | null, container: HTMLDivElement | null): OverlayBottomPin | null;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function e(i){const o=typeof i=="object"?i:void 0,t=o==null?void 0:o.wheelMultiplier;return{overlayScrollbar:(o==null?void 0:o.scrollbar)==="proxied",wheelMultiplier:typeof t=="number"&&Number.isFinite(t)&&t>0?t:1}}function l(i,o){const t=i==null?void 0:i.parentElement;return o&&!!t&&t.scrollHeight-t.clientHeight-t.scrollTop<=1}function n(i,o){const t=i==null?void 0:i.parentElement;return!t||!o?null:{scrollbarOverlay:t,overlayScrollTop:t.scrollHeight-t.clientHeight,contentScrollTop:o.scrollHeight-o.clientHeight}}exports.getOverlayBottomPin=n;exports.getScrollableOverlaySettings=e;exports.isOverlayAtBottom=l;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ function n(i) {
9
+ const o = typeof i == "object" ? i : void 0, t = o == null ? void 0 : o.wheelMultiplier;
10
+ return {
11
+ overlayScrollbar: (o == null ? void 0 : o.scrollbar) === "proxied",
12
+ wheelMultiplier: typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 1
13
+ };
14
+ }
15
+ function u(i, o) {
16
+ const t = i == null ? void 0 : i.parentElement;
17
+ return o && !!t && t.scrollHeight - t.clientHeight - t.scrollTop <= 1;
18
+ }
19
+ function l(i, o) {
20
+ const t = i == null ? void 0 : i.parentElement;
21
+ return !t || !o ? null : {
22
+ scrollbarOverlay: t,
23
+ overlayScrollTop: t.scrollHeight - t.clientHeight,
24
+ contentScrollTop: o.scrollHeight - o.clientHeight
25
+ };
26
+ }
27
+ export {
28
+ l as getOverlayBottomPin,
29
+ n as getScrollableOverlaySettings,
30
+ u as isOverlayAtBottom
31
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ /**
9
+ * @hidden
10
+ */
11
+ export interface WheelTouchScrollOptions {
12
+ wheelMultiplier: number;
13
+ overlayRequiresCustomWheel: boolean;
14
+ }
15
+ /**
16
+ * @hidden
17
+ * Attaches native (non-React) wheel and touch listeners to `container` so the grid can apply a
18
+ * `wheelMultiplier` and/or restore scrolling when the proxied overlay hides native overflow.
19
+ * Returns a cleanup function that removes the listeners.
20
+ */
21
+ export declare function attachWheelTouchScroll(container: HTMLDivElement, options: WheelTouchScrollOptions): () => void;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=16,X=1,W=2,I=.95,d=.1;function b(e,S){const{wheelMultiplier:m,overlayRequiresCustomWheel:M}=S;let f;const _=()=>{var t;if(f===void 0){const i=(t=e.ownerDocument.defaultView)==null?void 0:t.getComputedStyle(e).lineHeight;f=Number.parseFloat(i||"")||A}return f},L=t=>{if(t.ctrlKey||t.metaKey||!t.deltaY&&!t.deltaX)return;const i=e.scrollTop,h=e.scrollLeft;let l=t.deltaX,s=t.deltaY;if(t.shiftKey&&!l&&(l=s,s=0),t.deltaMode===X){const c=_();l*=c,s*=c}else t.deltaMode===W&&(l*=e.clientWidth,s*=e.clientHeight);e.scrollTop+=s*m,e.scrollLeft+=l*m,(e.scrollTop!==i||e.scrollLeft!==h)&&t.preventDefault()};e.addEventListener("wheel",L,{passive:!1});let r;if(M){let t=0,i=0,h=0,l=0,s=0,c;const T=()=>{c!==void 0&&(cancelAnimationFrame(c),c=void 0)},p=()=>{e.scrollTop+=s,e.scrollLeft+=l,s*=I,l*=I,Math.abs(s)>d||Math.abs(l)>d?c=requestAnimationFrame(p):c=void 0},E=o=>{o.touches.length===1&&(T(),l=0,s=0,t=o.touches[0].clientX,i=o.touches[0].clientY,h=o.timeStamp)},n=o=>{if(o.touches.length!==1)return;const a=o.touches[0],v=t-a.clientX,g=i-a.clientY,H=Math.min(Math.max(o.timeStamp-h,1),100),Y=e.scrollTop,y=e.scrollLeft;e.scrollTop+=g,e.scrollLeft+=v,s=g/H*(1e3/60),l=v/H*(1e3/60),t=a.clientX,i=a.clientY,h=o.timeStamp,(e.scrollTop!==Y||e.scrollLeft!==y)&&o.preventDefault()},u=o=>{o.touches.length>0||(Math.abs(s)>d||Math.abs(l)>d)&&(c=requestAnimationFrame(p))};e.addEventListener("touchstart",E,{passive:!0}),e.addEventListener("touchmove",n,{passive:!1}),e.addEventListener("touchend",u,{passive:!0}),e.addEventListener("touchcancel",u,{passive:!0}),r=()=>{T(),e.removeEventListener("touchstart",E),e.removeEventListener("touchmove",n),e.removeEventListener("touchend",u),e.removeEventListener("touchcancel",u)}}return()=>{e.removeEventListener("wheel",L),r==null||r()}}exports.attachWheelTouchScroll=b;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ function O(e, n) {
9
+ const { wheelMultiplier: L, overlayRequiresCustomWheel: N } = n;
10
+ let u;
11
+ const v = () => {
12
+ var t;
13
+ if (u === void 0) {
14
+ const i = (t = e.ownerDocument.defaultView) == null ? void 0 : t.getComputedStyle(e).lineHeight;
15
+ u = Number.parseFloat(i || "") || 16;
16
+ }
17
+ return u;
18
+ }, a = (t) => {
19
+ if (t.ctrlKey || t.metaKey || !t.deltaY && !t.deltaX)
20
+ return;
21
+ const i = e.scrollTop, h = e.scrollLeft;
22
+ let l = t.deltaX, s = t.deltaY;
23
+ if (t.shiftKey && !l && (l = s, s = 0), t.deltaMode === 1) {
24
+ const c = v();
25
+ l *= c, s *= c;
26
+ } else t.deltaMode === 2 && (l *= e.clientWidth, s *= e.clientHeight);
27
+ e.scrollTop += s * L, e.scrollLeft += l * L, (e.scrollTop !== i || e.scrollLeft !== h) && t.preventDefault();
28
+ };
29
+ e.addEventListener("wheel", a, { passive: !1 });
30
+ let E;
31
+ if (N) {
32
+ let t = 0, i = 0, h = 0, l = 0, s = 0, c;
33
+ const I = () => {
34
+ c !== void 0 && (cancelAnimationFrame(c), c = void 0);
35
+ }, d = () => {
36
+ e.scrollTop += s, e.scrollLeft += l, s *= 0.95, l *= 0.95, Math.abs(s) > 0.1 || Math.abs(l) > 0.1 ? c = requestAnimationFrame(d) : c = void 0;
37
+ }, _ = (o) => {
38
+ o.touches.length === 1 && (I(), l = 0, s = 0, t = o.touches[0].clientX, i = o.touches[0].clientY, h = o.timeStamp);
39
+ }, f = (o) => {
40
+ if (o.touches.length !== 1)
41
+ return;
42
+ const r = o.touches[0], m = t - r.clientX, p = i - r.clientY, H = Math.min(Math.max(o.timeStamp - h, 1), 100), A = e.scrollTop, C = e.scrollLeft;
43
+ e.scrollTop += p, e.scrollLeft += m, s = p / H * (1e3 / 60), l = m / H * (1e3 / 60), t = r.clientX, i = r.clientY, h = o.timeStamp, (e.scrollTop !== A || e.scrollLeft !== C) && o.preventDefault();
44
+ }, T = (o) => {
45
+ o.touches.length > 0 || (Math.abs(s) > 0.1 || Math.abs(l) > 0.1) && (c = requestAnimationFrame(d));
46
+ };
47
+ e.addEventListener("touchstart", _, { passive: !0 }), e.addEventListener("touchmove", f, { passive: !1 }), e.addEventListener("touchend", T, { passive: !0 }), e.addEventListener("touchcancel", T, { passive: !0 }), E = () => {
48
+ I(), e.removeEventListener("touchstart", _), e.removeEventListener("touchmove", f), e.removeEventListener("touchend", T), e.removeEventListener("touchcancel", T);
49
+ };
50
+ }
51
+ return () => {
52
+ e.removeEventListener("wheel", a), E == null || E();
53
+ };
54
+ }
55
+ export {
56
+ O as attachWheelTouchScroll
57
+ };