@syncfusion/ej2-navigations 34.1.31 → 34.2.3

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.
Files changed (79) hide show
  1. package/dist/ej2-navigations.min.js +2 -2
  2. package/dist/ej2-navigations.umd.min.js +2 -2
  3. package/dist/ej2-navigations.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-navigations.es2015.js +1591 -20
  5. package/dist/es6/ej2-navigations.es2015.js.map +1 -1
  6. package/dist/es6/ej2-navigations.es5.js +1593 -20
  7. package/dist/es6/ej2-navigations.es5.js.map +1 -1
  8. package/dist/global/ej2-navigations.min.js +2 -2
  9. package/dist/global/ej2-navigations.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +8 -7
  12. package/src/common/menu-base.js +14 -6
  13. package/src/treeview/treeview-model.d.ts +27 -1
  14. package/src/treeview/treeview.d.ts +302 -0
  15. package/src/treeview/treeview.js +1579 -14
  16. package/styles/bds-lite.css +3 -0
  17. package/styles/bds.css +3 -0
  18. package/styles/bootstrap-dark-lite.css +3 -0
  19. package/styles/bootstrap-dark.css +3 -0
  20. package/styles/bootstrap-lite.css +3 -0
  21. package/styles/bootstrap.css +3 -0
  22. package/styles/bootstrap4-lite.css +3 -0
  23. package/styles/bootstrap4.css +3 -0
  24. package/styles/bootstrap5-dark-lite.css +3 -0
  25. package/styles/bootstrap5-dark.css +3 -0
  26. package/styles/bootstrap5-lite.css +3 -0
  27. package/styles/bootstrap5.3-lite.css +3 -0
  28. package/styles/bootstrap5.3.css +3 -0
  29. package/styles/bootstrap5.css +3 -0
  30. package/styles/fabric-dark-lite.css +3 -0
  31. package/styles/fabric-dark.css +3 -0
  32. package/styles/fabric-lite.css +3 -0
  33. package/styles/fabric.css +3 -0
  34. package/styles/fluent-dark-lite.css +3 -0
  35. package/styles/fluent-dark.css +3 -0
  36. package/styles/fluent-lite.css +3 -0
  37. package/styles/fluent.css +3 -0
  38. package/styles/fluent2-lite.css +3 -0
  39. package/styles/fluent2.css +3 -0
  40. package/styles/highcontrast-light-lite.css +3 -0
  41. package/styles/highcontrast-light.css +3 -0
  42. package/styles/highcontrast-lite.css +3 -0
  43. package/styles/highcontrast.css +3 -0
  44. package/styles/material-dark-lite.css +3 -0
  45. package/styles/material-dark.css +3 -0
  46. package/styles/material-lite.css +3 -0
  47. package/styles/material.css +3 -0
  48. package/styles/material3-dark-lite.css +3 -0
  49. package/styles/material3-dark.css +3 -0
  50. package/styles/material3-lite.css +3 -0
  51. package/styles/material3.css +3 -0
  52. package/styles/tailwind-dark-lite.css +3 -0
  53. package/styles/tailwind-dark.css +3 -0
  54. package/styles/tailwind-lite.css +3 -0
  55. package/styles/tailwind.css +3 -0
  56. package/styles/tailwind3-lite.css +3 -0
  57. package/styles/tailwind3.css +3 -0
  58. package/styles/toolbar/_layout.scss +4 -0
  59. package/styles/toolbar/bds.css +3 -0
  60. package/styles/toolbar/bootstrap-dark.css +3 -0
  61. package/styles/toolbar/bootstrap.css +3 -0
  62. package/styles/toolbar/bootstrap4.css +3 -0
  63. package/styles/toolbar/bootstrap5-dark.css +3 -0
  64. package/styles/toolbar/bootstrap5.3.css +3 -0
  65. package/styles/toolbar/bootstrap5.css +3 -0
  66. package/styles/toolbar/fabric-dark.css +3 -0
  67. package/styles/toolbar/fabric.css +3 -0
  68. package/styles/toolbar/fluent-dark.css +3 -0
  69. package/styles/toolbar/fluent.css +3 -0
  70. package/styles/toolbar/fluent2.css +3 -0
  71. package/styles/toolbar/highcontrast-light.css +3 -0
  72. package/styles/toolbar/highcontrast.css +3 -0
  73. package/styles/toolbar/material-dark.css +3 -0
  74. package/styles/toolbar/material.css +3 -0
  75. package/styles/toolbar/material3-dark.css +3 -0
  76. package/styles/toolbar/material3.css +3 -0
  77. package/styles/toolbar/tailwind-dark.css +3 -0
  78. package/styles/toolbar/tailwind.css +3 -0
  79. package/styles/toolbar/tailwind3.css +3 -0
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 34.1.31
3
+ * version : 34.2.3
4
4
  * Copyright Syncfusion Inc. 2001 - 2025. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncfusion/ej2-navigations",
3
- "version": "34.1.31",
3
+ "version": "34.2.3",
4
4
  "description": "A package of Essential JS 2 navigation components such as Tree-view, Tab, Toolbar, Context-menu, and Accordion which is used to navigate from one page to another",
5
5
  "author": "Syncfusion Inc.",
6
6
  "license": "SEE LICENSE IN license",
@@ -8,12 +8,13 @@
8
8
  "module": "./index.js",
9
9
  "es2015": "./dist/es6/ej2-navigations.es5.js",
10
10
  "dependencies": {
11
- "@syncfusion/ej2-base": "~34.1.30",
12
- "@syncfusion/ej2-buttons": "~34.1.30",
13
- "@syncfusion/ej2-data": "~34.1.29",
14
- "@syncfusion/ej2-inputs": "~34.1.30",
15
- "@syncfusion/ej2-lists": "~34.1.30",
16
- "@syncfusion/ej2-popups": "~34.1.29"
11
+ "@syncfusion/ej2-base": "~34.2.2",
12
+ "@syncfusion/ej2-buttons": "~34.2.2",
13
+ "@syncfusion/ej2-data": "~34.2.2",
14
+ "@syncfusion/ej2-inputs": "~34.2.2",
15
+ "@syncfusion/ej2-lists": "~34.2.2",
16
+ "@syncfusion/ej2-notifications": "~34.2.2",
17
+ "@syncfusion/ej2-popups": "~34.2.3"
17
18
  },
18
19
  "devDependencies": {},
19
20
  "keywords": [
@@ -437,8 +437,10 @@ var MenuBase = /** @class */ (function (_super) {
437
437
  if (!active) {
438
438
  return;
439
439
  }
440
+ var isInputElement = active.tagName === 'INPUT' || active.tagName === 'TEXTAREA' ||
441
+ active.contentEditable === 'true';
440
442
  var expanded = active.getAttribute('aria-expanded') === 'true';
441
- if (!expanded) {
443
+ if (!expanded || isInputElement) {
442
444
  return;
443
445
  }
444
446
  var ul = this.element;
@@ -552,13 +554,19 @@ var MenuBase = /** @class */ (function (_super) {
552
554
  var cli = cul.children[fliIdx];
553
555
  fliIdx = this.isValidLI(cli, fliIdx, e.action);
554
556
  cul.children[fliIdx].classList.add(FOCUSED);
555
- cul.children[fliIdx].focus();
557
+ var liToFocus = cul.children[fliIdx];
556
558
  if (closest(this.element, '.e-popup')) {
557
- var focusedLiItem = cul.children[fliIdx];
558
- var focusableChild = focusedLiItem.querySelector('[tabindex], span[tabindex], a, button, [tabindex]:not([tabindex="-1"])');
559
- if (!focusableChild) {
560
- cul.focus();
559
+ var focusableChild = liToFocus.querySelector('[tabindex], span[tabindex], a, button, [tabindex]:not([tabindex="-1"])');
560
+ var isSpreadsheet = this.element.id.includes('_cf_menu') && this.element.parentElement.classList.contains('e-cf-menu');
561
+ if (focusableChild && !isSpreadsheet) {
562
+ focusableChild.focus();
561
563
  }
564
+ else {
565
+ liToFocus.focus();
566
+ }
567
+ }
568
+ else {
569
+ liToFocus.focus();
562
570
  }
563
571
  };
564
572
  MenuBase.prototype.isValidLI = function (cli, index, action) {
@@ -1,4 +1,4 @@
1
- import { Component, EmitType, isUndefined, Browser, compile, isNullOrUndefined, SanitizeHtmlHelper, animationMode } from '@syncfusion/ej2-base';import { Property, INotifyPropertyChanged, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';import { Event, EventHandler, KeyboardEvents, KeyboardEventArgs } from '@syncfusion/ej2-base';import { rippleEffect, Effect, Animation, AnimationOptions, RippleOptions, remove } from '@syncfusion/ej2-base';import { Draggable, DragEventArgs, Droppable, DropEventArgs } from '@syncfusion/ej2-base';import { getElement } from '@syncfusion/ej2-base';import { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';import { DataManager, Query } from '@syncfusion/ej2-data';import { isNullOrUndefined as isNOU, Touch, TapEventArgs, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';import { ListBase, ListBaseOptions, AriaAttributesMapping, FieldsMapping } from '@syncfusion/ej2-lists';import { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';import { Input, InputObject } from '@syncfusion/ej2-inputs';import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';
1
+ import { Component, EmitType, isUndefined, Browser, compile, isNullOrUndefined, SanitizeHtmlHelper, animationMode } from '@syncfusion/ej2-base';import { Property, INotifyPropertyChanged, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';import { Event, EventHandler, KeyboardEvents, KeyboardEventArgs } from '@syncfusion/ej2-base';import { rippleEffect, Effect, Animation, AnimationOptions, RippleOptions, remove } from '@syncfusion/ej2-base';import { Draggable, DragEventArgs, Droppable, DropEventArgs } from '@syncfusion/ej2-base';import { getElement } from '@syncfusion/ej2-base';import { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';import { DataManager, Query } from '@syncfusion/ej2-data';import { isNullOrUndefined as isNOU, Touch, TapEventArgs, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';import { ListBase, ListBaseOptions, AriaAttributesMapping, FieldsMapping } from '@syncfusion/ej2-lists';import { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';import { Input, InputObject } from '@syncfusion/ej2-inputs';import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';import { Skeleton } from '@syncfusion/ej2-notifications';
2
2
  import {ExpandOnSettings,SortOrder,FailureEventArgs,DataBoundEventArgs,DataSourceChangedEventArgs,DrawNodeEventArgs,NodeKeyPressEventArgs,NodeCheckEventArgs,NodeClickEventArgs,NodeExpandEventArgs,DragAndDropEventArgs,NodeEditEventArgs,NodeSelectEventArgs} from "./treeview";
3
3
  import {ComponentModel} from '@syncfusion/ej2-base';
4
4
 
@@ -200,6 +200,32 @@ export interface TreeViewModel extends ComponentModel{
200
200
  */
201
201
  allowTextWrap?: boolean;
202
202
 
203
+ /**
204
+ * Enables virtual rendering mode for the TreeView, where only the nodes visible in the viewport are rendered in the DOM.
205
+ * This significantly improves rendering performance when working with large datasets (thousands of nodes).
206
+ *
207
+ * When set to `true`, you must also set the `height` property to a fixed pixel value so the component can calculate
208
+ * the visible window and the total scrollable height.
209
+ *
210
+ * @default false
211
+ * @remarks
212
+ * - Requires `height` to be set to a positive pixel value (e.g. `'400px'` or `400`).
213
+ * - Animations on expand/collapse are suppressed in virtual mode to avoid layout artifacts.
214
+ * - Drag-and-drop and editing work normally; the DOM is refreshed after each interaction.
215
+ * - `ensureVisible()` is augmented to first scroll the virtualized container before attempting DOM access.
216
+ */
217
+ enableVirtualization?: boolean;
218
+
219
+ /**
220
+ * Specifies the fixed height of the TreeView container when `enableVirtualization` is `true`.
221
+ * Accepts a pixel string (e.g. `'400px'`) or a numeric pixel value (e.g. `400`).
222
+ * This value is used to calculate the virtual viewport and the total scrollable height.
223
+ *
224
+ * @default undefined
225
+ * @aspType string
226
+ */
227
+ height?: string | number;
228
+
203
229
  /**
204
230
  * Specifies the type of animation applied on expanding and collapsing the nodes along with duration.
205
231
  *
@@ -553,6 +553,54 @@ export declare class TreeView extends Component<HTMLElement> implements INotifyP
553
553
  private OldCheckedData;
554
554
  private isHiddenItem;
555
555
  private nodeIndex;
556
+ /** Flat ordered list of all currently-visible (non-collapsed) tree nodes. */
557
+ private virtualFlatNodes;
558
+ /** Maps node id → index in virtualFlatNodes for O(1) lookups. */
559
+ private virtualNodeMap;
560
+ /** Set of expanded node IDs for O(1) lookup performance during flattening (avoids array indexOf). */
561
+ private virtualExpandedNodesSet;
562
+ /** Set of checked node IDs for O(1) lookup performance during flattening. */
563
+ private virtualCheckedNodesSet;
564
+ /** Set of indeterminate node IDs — persists across flattenVisibleNodes() rebuilds. */
565
+ private virtualIndeterminateNodesSet;
566
+ /** Set of selected node IDs for O(1) lookup performance during flattening. */
567
+ private virtualSelectedNodesSet;
568
+ /** Row height in pixels, measured from the first rendered item or set to 40 as a default. */
569
+ private virtualItemHeight;
570
+ /** Height of the scrollable container in pixels. */
571
+ private virtualViewportHeight;
572
+ /** scrollTop captured during the previous scroll handler invocation. */
573
+ private virtualPrevScrollTop;
574
+ /** Index of the first rendered row in the current window. */
575
+ private virtualStartIndex;
576
+ /** Index one past the last rendered row in the current window. */
577
+ private virtualEndIndex;
578
+ /** Extra rows rendered above and below the visible window to smooth scrolling. */
579
+ private virtualOverscanCount;
580
+ /** RequestAnimationFrame handle used for throttling scroll events. */
581
+ private virtualScrollRAF;
582
+ /** The `.e-mask-parent` overlay element shown during fast scroll. */
583
+ private virtualMaskElement;
584
+ /** Bound scroll handler stored for later removeEventListener. */
585
+ private virtualScrollBound;
586
+ /** Skeleton component instances inside the mask overlay. */
587
+ private skeletonInstances;
588
+ /** Set to true whenever the flat node list must be rebuilt on next render. */
589
+ private virtualTreeDirty;
590
+ /** The data-uid of the currently keyboard-focused node in virtual mode (persists across re-renders). */
591
+ private virtualFocusedId;
592
+ /**
593
+ * Set to true by the document-level `keydown` handler when the user presses
594
+ * the Tab key. The browser will auto-scroll the focused element into view
595
+ * immediately after focus, which fires a `scroll` event on the TreeView
596
+ * container. We want to skip the re-render that the virtual scroll handler
597
+ * would otherwise trigger, because the element being focused is already
598
+ * rendered (it is the single `<li tabindex="0">` of the current window) and
599
+ * re-rendering would tear down the DOM element that is currently holding
600
+ * focus. The flag is consumed (reset to `false`) inside `onVirtualScroll`
601
+ * after the auto-scroll has been handled.
602
+ */
603
+ private virtualSkipNextScrollRender;
556
604
  /**
557
605
  * Indicates whether the TreeView allows drag and drop of nodes. To drag and drop a node in
558
606
  * desktop, hold the mouse on the node, drag it to the target node and drop the node by releasing
@@ -593,6 +641,30 @@ export declare class TreeView extends Component<HTMLElement> implements INotifyP
593
641
  * @default false
594
642
  */
595
643
  allowTextWrap: boolean;
644
+ /**
645
+ * Enables virtual rendering mode for the TreeView, where only the nodes visible in the viewport are rendered in the DOM.
646
+ * This significantly improves rendering performance when working with large datasets (thousands of nodes).
647
+ *
648
+ * When set to `true`, you must also set the `height` property to a fixed pixel value so the component can calculate
649
+ * the visible window and the total scrollable height.
650
+ *
651
+ * @default false
652
+ * @remarks
653
+ * - Requires `height` to be set to a positive pixel value (e.g. `'400px'` or `400`).
654
+ * - Animations on expand/collapse are suppressed in virtual mode to avoid layout artifacts.
655
+ * - Drag-and-drop and editing work normally; the DOM is refreshed after each interaction.
656
+ * - `ensureVisible()` is augmented to first scroll the virtualized container before attempting DOM access.
657
+ */
658
+ enableVirtualization: boolean;
659
+ /**
660
+ * Specifies the fixed height of the TreeView container when `enableVirtualization` is `true`.
661
+ * Accepts a pixel string (e.g. `'400px'`) or a numeric pixel value (e.g. `400`).
662
+ * This value is used to calculate the virtual viewport and the total scrollable height.
663
+ *
664
+ * @default undefined
665
+ * @aspType string
666
+ */
667
+ height: string | number;
596
668
  /**
597
669
  * Specifies the type of animation applied on expanding and collapsing the nodes along with duration.
598
670
  *
@@ -1127,6 +1199,18 @@ export declare class TreeView extends Component<HTMLElement> implements INotifyP
1127
1199
  private nodeCheckAction;
1128
1200
  private addCheck;
1129
1201
  private removeCheck;
1202
+ /**
1203
+ * Recursively sets the `isChecked` state of all descendants of the node with
1204
+ * `parentId` in `virtualFlatNodes`, keeping `checkedNodes` and
1205
+ * `virtualCheckedNodesSet` in sync. Used in virtual mode to honor the
1206
+ * `autoCheck` cascade when a parent checkbox is toggled.
1207
+ *
1208
+ * @param {string} parentId - The `data-uid` of the parent whose descendants should be updated.
1209
+ * @param {boolean} isChecked - The new state to apply to every descendant.
1210
+ * @returns {void}
1211
+ * @private
1212
+ */
1213
+ private setVirtualChildCheckState;
1130
1214
  private getCheckEvent;
1131
1215
  private finalize;
1132
1216
  private setTextWrap;
@@ -1353,6 +1437,224 @@ export declare class TreeView extends Component<HTMLElement> implements INotifyP
1353
1437
  private dmFailure;
1354
1438
  private updatePreviousText;
1355
1439
  private getHierarchicalParentId;
1440
+ /**
1441
+ * Parses the `height` property (string like '400px' or number) to a pixel value.
1442
+ * Returns 0 if the value cannot be determined.
1443
+ *
1444
+ * @returns {number} Pixel height.
1445
+ * @private
1446
+ */
1447
+ private parseHeightToPixels;
1448
+ /**
1449
+ * Measures the height of the first rendered list item so subsequent calculations
1450
+ * use real layout values. Falls back to the stored `virtualItemHeight` default (40).
1451
+ *
1452
+ * @returns {number} Row height in pixels.
1453
+ * @private
1454
+ */
1455
+ private measureVirtualItemHeight;
1456
+ /**
1457
+ * Rebuilds the cached Sets for checked/selected nodes to enable O(1) lookup
1458
+ * during the flatten operation instead of O(n) array indexOf calls.
1459
+ *
1460
+ * @returns {void}
1461
+ * @private
1462
+ */
1463
+ private rebuildVirtualCheckCache;
1464
+ /**
1465
+ * Recursively walks the treeData (or groupedData for flat lists) and builds
1466
+ * `virtualFlatNodes` — an ordered list of every node that is currently visible
1467
+ * (i.e. its ancestors are all expanded). Uses cached Sets for O(1) state lookups.
1468
+ *
1469
+ * @returns {VirtualNodeData[]} Ordered flat list of visible nodes.
1470
+ * @private
1471
+ */
1472
+ private flattenVisibleNodes;
1473
+ /**
1474
+ * Recursive helper for `flattenVisibleNodes`.
1475
+ *
1476
+ * @param {Object[]} nodes - Array of raw data objects at this level.
1477
+ * @param {number} level - 1-based depth level.
1478
+ * @param {string | null} parentId - The parent node id, or null for root.
1479
+ * @param {VirtualNodeData[]} result - Accumulator array.
1480
+ * @returns {void}
1481
+ * @private
1482
+ */
1483
+ private flattenNodeRecursive;
1484
+ /**
1485
+ * Checks whether a raw datasource node has child records.
1486
+ *
1487
+ * @param {Object} raw - Raw datasource object.
1488
+ * @returns {boolean} True if children exist.
1489
+ * @private
1490
+ */
1491
+ private hasChildRecords;
1492
+ /**
1493
+ * Rebuilds `virtualNodeMap` (id → index) from the current `virtualFlatNodes`.
1494
+ *
1495
+ * @returns {void}
1496
+ * @private
1497
+ */
1498
+ private rebuildVirtualNodeMap;
1499
+ private getVirtualWindow;
1500
+ private getVirtualWindowAt;
1501
+ private getVirtualPadding;
1502
+ /**
1503
+ * Renders the virtual window into a **nested** `<ul>/<li>` hierarchy identical to
1504
+ * the non-virtualized DOM structure.
1505
+ *
1506
+ * ## Scroll math
1507
+ * The flat-index ↔ pixel mapping stays unchanged: every entry in
1508
+ * `virtualFlatNodes` represents exactly one `itemHeight` row.
1509
+ * `paddingTop = startIndex * itemHeight` and
1510
+ * `paddingBottom = (total - endIndex) * itemHeight` keep the scrollbar
1511
+ * thumb in the correct position.
1512
+ *
1513
+ * ## Ancestor injection
1514
+ * When `startIndex` points at a child node whose ancestor(s) have already
1515
+ * scrolled above the viewport (their flat indices are < startIndex), the
1516
+ * ancestors would normally be missing from the DOM, forcing the children to
1517
+ * fall back to the root `<ul>` as flat siblings — producing wrong HTML.
1518
+ *
1519
+ * To fix this, before rendering the window we walk the ancestor chain of the
1520
+ * first visible node and collect every ancestor that lies **outside** the
1521
+ * window. Those ancestors are injected as real `<li>` containers at the
1522
+ * very top of the root `<ul>`. To compensate for their presence, `paddingTop`
1523
+ * is reduced by `injectedCount * itemHeight` so the total scroll height
1524
+ * remains the same.
1525
+ *
1526
+ * Once the ancestors are in the DOM they are registered in `renderedParentMap`
1527
+ * so the normal window-rendering loop can nest children inside them exactly
1528
+ * as it does when both parent and child are in the same window.
1529
+ *
1530
+ * @returns {void}
1531
+ * @private
1532
+ */
1533
+ private renderVirtualItems;
1534
+ /**
1535
+ * Creates a single `<li>` element for the virtual window representing `node`.
1536
+ *
1537
+ * @param {VirtualNodeData} node - The node data.
1538
+ * @param {boolean} _isFirst - True if this is the first rendered item (unused here but kept for potential override).
1539
+ * @returns {HTMLElement} The constructed `<li>` element.
1540
+ * @private
1541
+ */
1542
+ private createVirtualListItem;
1543
+ /**
1544
+ * Initialises the virtual-scrolling layout:
1545
+ * 1. Adds the `e-virtualization` CSS class and applies a fixed `height` + `overflow-y`.
1546
+ * 2. Flattens all visible nodes into `virtualFlatNodes`.
1547
+ * 3. Measures item height and viewport height.
1548
+ * 4. Computes the initial window and renders it.
1549
+ * 5. Wires the scroll event handler.
1550
+ *
1551
+ * @returns {void}
1552
+ * @private
1553
+ */
1554
+ private initVirtualization;
1555
+ /**
1556
+ * Wires the scroll event listener on the TreeView element.
1557
+ *
1558
+ * @returns {void}
1559
+ * @private
1560
+ */
1561
+ private wireVirtualScrollEvents;
1562
+ /**
1563
+ * Removes the scroll event listener previously wired by `wireVirtualScrollEvents`.
1564
+ *
1565
+ * @returns {void}
1566
+ * @private
1567
+ */
1568
+ private unwireVirtualScrollEvents;
1569
+ /**
1570
+ * Scroll handler for the virtual TreeView. Throttled via `requestAnimationFrame`.
1571
+ * Shows the loading mask during fast scrolls, re-renders the window, then hides the mask.
1572
+ *
1573
+ * @returns {void}
1574
+ * @private
1575
+ */
1576
+ private onVirtualScroll;
1577
+ /**
1578
+ * Creates the skeleton mask overlay used to indicate loading during fast scrolls.
1579
+ * Skeleton instances are stored in `skeletonInstances` for later disposal.
1580
+ *
1581
+ * @returns {void}
1582
+ * @private
1583
+ */
1584
+ private createVirtualMask;
1585
+ /**
1586
+ * Refreshes the mask position so it always overlays the TreeView's viewport.
1587
+ * Called on every show / scroll, since `position:fixed` is relative to the
1588
+ * page viewport, not to the TreeView scroll container.
1589
+ *
1590
+ * @returns {void}
1591
+ * @private
1592
+ */
1593
+ private updateMaskPosition;
1594
+ /**
1595
+ * Destroys all skeleton instances and removes the mask overlay from the DOM.
1596
+ *
1597
+ * @returns {void}
1598
+ * @private
1599
+ */
1600
+ private destroyVirtualMask;
1601
+ /**
1602
+ * Positions and shows the skeleton mask at the current `scrollTop` position.
1603
+ *
1604
+ * @param {number} _scrollTop - Current scrollTop of the container.
1605
+ * @returns {void}
1606
+ * @private
1607
+ */
1608
+ private showVirtualMask;
1609
+ /**
1610
+ * Hides the skeleton mask overlay after the virtual window has been rendered.
1611
+ *
1612
+ * @returns {void}
1613
+ * @private
1614
+ */
1615
+ private hideVirtualMask;
1616
+ /**
1617
+ * Ensures the node identified by `id` is scrolled into view inside the virtual container.
1618
+ * If the node falls outside the rendered window, the container's `scrollTop` is adjusted so
1619
+ * that the node becomes visible, the window is re-computed and `renderVirtualItems` is called.
1620
+ *
1621
+ * @param {string} id - The `data-uid` of the target node.
1622
+ * @returns {void}
1623
+ * @private
1624
+ */
1625
+ private ensureVirtualNodeVisible;
1626
+ /**
1627
+ * Recursively walks the treeData (and any nested `childFieldName` arrays) to
1628
+ * find the node whose `idFieldName` matches the given `id` (compared as
1629
+ * strings). Used by the virtual-mode expand/collapse handlers so they can
1630
+ * locate nodes at any depth — not just the root level — before writing the
1631
+ * `expanded` flag back to the datasource.
1632
+ *
1633
+ * @param {string} id - The id (as a string) of the node to locate.
1634
+ * @returns {Object | null} The matching raw datasource node, or null if not found.
1635
+ * @private
1636
+ */
1637
+ private findNodeInTreeData;
1638
+ private handleVirtualExpand;
1639
+ private handleVirtualCollapse;
1640
+ /**
1641
+ * Updates the selected state of a node in `virtualFlatNodes` and re-renders the window.
1642
+ *
1643
+ * @param {string} id - The `data-uid` of the target node.
1644
+ * @param {boolean} selected - Whether the node is now selected.
1645
+ * @returns {void}
1646
+ * @private
1647
+ */
1648
+ private updateVirtualNodeSelection;
1649
+ /**
1650
+ * Updates the checkbox state of a node in `virtualFlatNodes` and re-renders the window.
1651
+ *
1652
+ * @param {string} id - The `data-uid` of the target node.
1653
+ * @param {'check' | 'uncheck' | 'indeterminate'} state - The new check state.
1654
+ * @returns {void}
1655
+ * @private
1656
+ */
1657
+ private updateVirtualNodeCheckState;
1356
1658
  /**
1357
1659
  * Called internally if any of the property value changed.
1358
1660
  *