@guiexpert/solid-table 1.1.74 → 1.1.76

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 (3) hide show
  1. package/index.cjs +6 -6
  2. package/index.js +646 -143
  3. package/package.json +2 -2
package/index.js CHANGED
@@ -1,36 +1,36 @@
1
- const Fe = (l, e) => l === e, oe = Symbol("solid-proxy"), Ie = typeof Proxy == "function", fe = {
2
- equals: Fe
1
+ const ke = (l, e) => l === e, oe = Symbol("solid-proxy"), Ie = typeof Proxy == "function", fe = {
2
+ equals: ke
3
3
  };
4
- let we = ve;
5
- const L = 1, z = 2, xe = {
4
+ let we = Ce;
5
+ const B = 1, z = 2, xe = {
6
6
  owned: null,
7
7
  cleanups: null,
8
8
  context: null,
9
9
  owner: null
10
10
  };
11
- var R = null;
12
- let te = null, Oe = null, x = null, M = null, O = null, Z = 0;
11
+ var M = null;
12
+ let te = null, Oe = null, x = null, R = null, O = null, Z = 0;
13
13
  function Le(l, e) {
14
- const t = x, s = R, o = l.length === 0, i = e === void 0 ? s : e, r = o ? xe : {
14
+ const t = x, s = M, o = l.length === 0, i = e === void 0 ? s : e, r = o ? xe : {
15
15
  owned: null,
16
16
  cleanups: null,
17
17
  context: i ? i.context : null,
18
18
  owner: i
19
19
  }, a = o ? l : () => l(() => Q(() => $(r)));
20
- R = r, x = null;
20
+ M = r, x = null;
21
21
  try {
22
22
  return _(a, !0);
23
23
  } finally {
24
- x = t, R = s;
24
+ x = t, M = s;
25
25
  }
26
26
  }
27
27
  function ie(l, e, t) {
28
- const s = ae(l, e, !1, L);
28
+ const s = ae(l, e, !1, B);
29
29
  V(s);
30
30
  }
31
31
  function Be(l, e, t) {
32
32
  we = Ne;
33
- const s = ae(l, e, !1, L);
33
+ const s = ae(l, e, !1, B);
34
34
  s.user = !0, O ? O.push(s) : V(s);
35
35
  }
36
36
  function Pe(l, e, t) {
@@ -53,10 +53,10 @@ function We(l) {
53
53
  }
54
54
  function He() {
55
55
  if (this.sources && this.state)
56
- if (this.state === L) V(this);
56
+ if (this.state === B) V(this);
57
57
  else {
58
- const l = M;
59
- M = null, _(() => j(this), !1), M = l;
58
+ const l = R;
59
+ R = null, _(() => j(this), !1), R = l;
60
60
  }
61
61
  if (x) {
62
62
  const l = this.observers ? this.observers.length : 0;
@@ -69,10 +69,10 @@ function $e(l, e, t) {
69
69
  return (!l.comparator || !l.comparator(s, e)) && (l.value = e, l.observers && l.observers.length && _(() => {
70
70
  for (let o = 0; o < l.observers.length; o += 1) {
71
71
  const i = l.observers[o], r = te && te.running;
72
- r && te.disposed.has(i), (r ? !i.tState : !i.state) && (i.pure ? M.push(i) : O.push(i), i.observers && Ce(i)), r || (i.state = L);
72
+ r && te.disposed.has(i), (r ? !i.tState : !i.state) && (i.pure ? R.push(i) : O.push(i), i.observers && ve(i)), r || (i.state = B);
73
73
  }
74
- if (M.length > 1e6)
75
- throw M = [], new Error();
74
+ if (R.length > 1e6)
75
+ throw R = [], new Error();
76
76
  }, !1)), e;
77
77
  }
78
78
  function V(l) {
@@ -87,18 +87,18 @@ function V(l) {
87
87
  }
88
88
  function Ve(l, e, t) {
89
89
  let s;
90
- const o = R, i = x;
91
- x = R = l;
90
+ const o = M, i = x;
91
+ x = M = l;
92
92
  try {
93
93
  s = l.fn(e);
94
94
  } catch (r) {
95
- return l.pure && (l.state = L, l.owned && l.owned.forEach($), l.owned = null), l.updatedAt = t + 1, Ee(r);
95
+ return l.pure && (l.state = B, l.owned && l.owned.forEach($), l.owned = null), l.updatedAt = t + 1, Ae(r);
96
96
  } finally {
97
- x = i, R = o;
97
+ x = i, M = o;
98
98
  }
99
99
  (!l.updatedAt || l.updatedAt <= t) && (l.updatedAt != null && "observers" in l ? $e(l, s) : l.value = s, l.updatedAt = t);
100
100
  }
101
- function ae(l, e, t, s = L, o) {
101
+ function ae(l, e, t, s = B, o) {
102
102
  const i = {
103
103
  fn: l,
104
104
  state: s,
@@ -108,11 +108,11 @@ function ae(l, e, t, s = L, o) {
108
108
  sourceSlots: null,
109
109
  cleanups: null,
110
110
  value: e,
111
- owner: R,
112
- context: R ? R.context : null,
111
+ owner: M,
112
+ context: M ? M.context : null,
113
113
  pure: t
114
114
  };
115
- return R === null || R !== xe && (R.owned ? R.owned.push(i) : R.owned = [i]), i;
115
+ return M === null || M !== xe && (M.owned ? M.owned.push(i) : M.owned = [i]), i;
116
116
  }
117
117
  function U(l) {
118
118
  if (l.state === 0) return;
@@ -122,30 +122,30 @@ function U(l) {
122
122
  for (; (l = l.owner) && (!l.updatedAt || l.updatedAt < Z); )
123
123
  l.state && e.push(l);
124
124
  for (let t = e.length - 1; t >= 0; t--)
125
- if (l = e[t], l.state === L)
125
+ if (l = e[t], l.state === B)
126
126
  V(l);
127
127
  else if (l.state === z) {
128
- const s = M;
129
- M = null, _(() => j(l, e[0]), !1), M = s;
128
+ const s = R;
129
+ R = null, _(() => j(l, e[0]), !1), R = s;
130
130
  }
131
131
  }
132
132
  function _(l, e) {
133
- if (M) return l();
133
+ if (R) return l();
134
134
  let t = !1;
135
- e || (M = []), O ? t = !0 : O = [], Z++;
135
+ e || (R = []), O ? t = !0 : O = [], Z++;
136
136
  try {
137
137
  const s = l();
138
138
  return _e(t), s;
139
139
  } catch (s) {
140
- t || (O = null), M = null, Ee(s);
140
+ t || (O = null), R = null, Ae(s);
141
141
  }
142
142
  }
143
143
  function _e(l) {
144
- if (M && (ve(M), M = null), l) return;
144
+ if (R && (Ce(R), R = null), l) return;
145
145
  const e = O;
146
146
  O = null, e.length && _(() => we(e), !1);
147
147
  }
148
- function ve(l) {
148
+ function Ce(l) {
149
149
  for (let e = 0; e < l.length; e++) U(l[e]);
150
150
  }
151
151
  function Ne(l) {
@@ -162,14 +162,14 @@ function j(l, e) {
162
162
  const s = l.sources[t];
163
163
  if (s.sources) {
164
164
  const o = s.state;
165
- o === L ? s !== e && (!s.updatedAt || s.updatedAt < Z) && U(s) : o === z && j(s, e);
165
+ o === B ? s !== e && (!s.updatedAt || s.updatedAt < Z) && U(s) : o === z && j(s, e);
166
166
  }
167
167
  }
168
168
  }
169
- function Ce(l) {
169
+ function ve(l) {
170
170
  for (let e = 0; e < l.observers.length; e += 1) {
171
171
  const t = l.observers[e];
172
- t.state || (t.state = z, t.pure ? M.push(t) : O.push(t), t.observers && Ce(t));
172
+ t.state || (t.state = z, t.pure ? R.push(t) : O.push(t), t.observers && ve(t));
173
173
  }
174
174
  }
175
175
  function $(l) {
@@ -201,7 +201,7 @@ function Ge(l) {
201
201
  cause: l
202
202
  });
203
203
  }
204
- function Ee(l, e = R) {
204
+ function Ae(l, e = M) {
205
205
  throw Ge(l);
206
206
  }
207
207
  function G() {
@@ -240,7 +240,7 @@ function Ue() {
240
240
  if (t !== void 0) return t;
241
241
  }
242
242
  }
243
- function Ae(...l) {
243
+ function Ee(...l) {
244
244
  let e = !1;
245
245
  for (let r = 0; r < l.length; r++) {
246
246
  const a = l[r];
@@ -368,11 +368,11 @@ function X(l, e, t, s, o) {
368
368
  return t;
369
369
  if (r) {
370
370
  let a = t[0];
371
- a && a.nodeType === 3 ? a.data !== e && (a.data = e) : a = document.createTextNode(e), t = P(l, t, s, a);
371
+ a && a.nodeType === 3 ? a.data !== e && (a.data = e) : a = document.createTextNode(e), t = W(l, t, s, a);
372
372
  } else
373
373
  t !== "" && typeof t == "string" ? t = l.firstChild.data = e : t = l.textContent = e;
374
374
  } else if (e == null || i === "boolean")
375
- t = P(l, t, s);
375
+ t = W(l, t, s);
376
376
  else {
377
377
  if (i === "function")
378
378
  return ie(() => {
@@ -385,13 +385,13 @@ function X(l, e, t, s, o) {
385
385
  if (re(a, e, t, o))
386
386
  return ie(() => t = X(l, a, t, s, !0)), () => t;
387
387
  if (a.length === 0) {
388
- if (t = P(l, t, s), r) return t;
389
- } else n ? t.length === 0 ? ue(l, a, s) : je(l, t, a) : (t && P(l), ue(l, a));
388
+ if (t = W(l, t, s), r) return t;
389
+ } else n ? t.length === 0 ? ue(l, a, s) : je(l, t, a) : (t && W(l), ue(l, a));
390
390
  t = a;
391
391
  } else if (e.nodeType) {
392
392
  if (Array.isArray(t)) {
393
- if (r) return t = P(l, t, s, e);
394
- P(l, t, null, e);
393
+ if (r) return t = W(l, t, s, e);
394
+ W(l, t, null, e);
395
395
  } else t == null || t === "" || !l.firstChild ? l.appendChild(e) : l.replaceChild(e, l.firstChild);
396
396
  t = e;
397
397
  }
@@ -426,7 +426,7 @@ function re(l, e, t, s) {
426
426
  function ue(l, e, t = null) {
427
427
  for (let s = 0, o = e.length; s < o; s++) l.insertBefore(e[s], t);
428
428
  }
429
- function P(l, e, t, s) {
429
+ function W(l, e, t, s) {
430
430
  if (t === void 0) return l.textContent = "";
431
431
  const o = s || document.createTextNode("");
432
432
  if (e.length) {
@@ -446,7 +446,7 @@ class Tt {
446
446
  this.code = e;
447
447
  }
448
448
  render(e, t, s, o, i, r, a) {
449
- const n = Ae({
449
+ const n = Ee({
450
450
  rowIndex: t,
451
451
  columnIndex: s,
452
452
  areaIdent: o,
@@ -470,14 +470,14 @@ function qe(l, e = 500) {
470
470
  }, e);
471
471
  };
472
472
  }
473
- class B {
473
+ class P {
474
474
  // The constructor is private to prevent direct construction calls
475
475
  // with the `new` operator
476
476
  constructor() {
477
477
  this.alreadySet = !1;
478
478
  }
479
479
  static getInstance() {
480
- return B.instance || (B.instance = new B()), B.instance;
480
+ return P.instance || (P.instance = new P()), P.instance;
481
481
  }
482
482
  /**
483
483
  * Method to set the license key for the application.
@@ -526,7 +526,7 @@ class I {
526
526
  this.content = e, this.style = t, this.classes = s;
527
527
  }
528
528
  }
529
- class Me {
529
+ class Re {
530
530
  constructor(e = new I(
531
531
  ">",
532
532
  "transform: rotate(90deg) translate(66%, -66%); transform-origin: 0 0;",
@@ -547,7 +547,7 @@ class Me {
547
547
  this.arrowExpanded = e, this.arrowCollapsed = t, this.arrowPlaceholder = s, this.arrowExpandCollapseAll = o;
548
548
  }
549
549
  }
550
- class Re {
550
+ class Me {
551
551
  constructor(e = new I("↑", "", ["ge-header-sorted-asc"]), t = new I("↓", "", ["ge-header-sorted-desc"]), s = new I("↑", "color:transparent;", [])) {
552
552
  this.iconAsc = e, this.iconDesc = t, this.iconPlaceholder = s;
553
553
  }
@@ -672,7 +672,7 @@ class Ze {
672
672
  }
673
673
  return this.domService.appendChild(e, a), a;
674
674
  }
675
- addSortedIcon(e, t = "", s = new Re(), o = -1) {
675
+ addSortedIcon(e, t = "", s = new Me(), o = -1) {
676
676
  const i = this.domService.createElement("div");
677
677
  this.domService.addClass(i, "ge-table-sorted-icon-div"), this.domService.setStyle(i, "position", "absolute"), this.domService.setStyle(i, "top", "0"), this.domService.setStyle(i, "right", "0"), this.domService.setStyle(i, "width", "20px"), this.domService.setStyle(i, "background", "transparent"), this.domService.setStyle(i, "cursor", "pointer"), this.domService.setAttribute(i, "data-col-index", `${o}`), this.domService.setAttribute(i, "data-area", "header");
678
678
  let r;
@@ -683,7 +683,7 @@ class Ze {
683
683
  this.domService.addClass(i, d);
684
684
  return this.domService.appendChild(e, i), i;
685
685
  }
686
- addArrowDiv(e, t = "none", s = new Me(), o = -1, i = -1, r = "body") {
686
+ addArrowDiv(e, t = "none", s = new Re(), o = -1, i = -1, r = "body") {
687
687
  const a = this.domService.createElement("div");
688
688
  this.domService.addClass(a, "ge-table-tree-arrow-div"), this.domService.setStyle(a, "display", "inline-block"), this.domService.setStyle(a, "position", ""), this.domService.setStyle(a, "width", "20px"), this.domService.setStyle(a, "background", "transparent"), this.domService.setStyle(a, "cursor", "pointer"), this.domService.setAttribute(a, "data-row-index", `${o}`), this.domService.setAttribute(a, "data-col-index", `${i}`), this.domService.setAttribute(a, "data-area", `${r}`);
689
689
  let n;
@@ -940,6 +940,8 @@ class tt {
940
940
  doSort(e) {
941
941
  return !1;
942
942
  }
943
+ sort(e) {
944
+ }
943
945
  isEditable(e, t) {
944
946
  var o, i;
945
947
  const s = (o = this.columnDefs) == null ? void 0 : o[t];
@@ -995,9 +997,15 @@ class st {
995
997
  return s * ("" + e).localeCompare("" + t);
996
998
  }
997
999
  }
998
- class W extends tt {
1000
+ class L extends tt {
999
1001
  constructor(e, t, s, o = [], i = "ge-selected-row", r = "ge-focused-row") {
1000
- super(e, o, s), this.areaIdent = e, this.rows = t, this.defaultRowHeight = s, this.columnDefs = o, this.selectedRowClass = i, this.focusedRowClass = r, this.focusedRowIndex = 0, this.sorterService = new st(), this.filteredRows = [...t], this.properties = o.map((a) => a.property);
1002
+ super(e, o, s), this.areaIdent = e, this.rows = t, this.defaultRowHeight = s, this.columnDefs = o, this.selectedRowClass = i, this.focusedRowClass = r, this.sorterService = new st(), this._focusedRowIndex = 0, this.filteredRows = [...t], this.properties = o.map((a) => a.property);
1003
+ }
1004
+ getFocusedRowIndex() {
1005
+ return this._focusedRowIndex;
1006
+ }
1007
+ setFocusedRowIndex(e) {
1008
+ this._focusedRowIndex = e;
1001
1009
  }
1002
1010
  setRows(e) {
1003
1011
  this.rows = e, this.filteredRows = [...e];
@@ -1029,6 +1037,28 @@ class W extends tt {
1029
1037
  getAllRows() {
1030
1038
  return this.rows;
1031
1039
  }
1040
+ /**
1041
+ * Returns the first row from the filtered rows that matches the given criteria based on the provided predicate function.
1042
+ *
1043
+ * @param {Partial<T>} criteria - A partial object containing the search criteria
1044
+ * @param {(criteria: Partial<T>, row: T) => boolean} predicate - A function that takes the search criteria and a row,
1045
+ * and returns true if the row matches the criteria
1046
+ * @returns {T | undefined} The first matching row, or undefined if no match is found
1047
+ */
1048
+ findRowFromFilteredRowsByAllCriteria(e, t) {
1049
+ return this.getFilteredRows().find((s) => t(e, s));
1050
+ }
1051
+ /**
1052
+ * Searches through all rows to find a row that matches the given criteria based on the predicate function.
1053
+ *
1054
+ * @param {Partial<T>} criteria - A partial object containing the search criteria
1055
+ * @param {(criteria: Partial<T>, row: T) => boolean} predicate - A function that takes the search criteria and a row,
1056
+ * and returns true if the row matches the criteria
1057
+ * @returns {T | undefined} The first matching row from all rows, or undefined if no match is found
1058
+ */
1059
+ findRowFromAllRowsByAllCriteria(e, t) {
1060
+ return this.getAllRows().find((s) => t(e, s));
1061
+ }
1032
1062
  getRowHeight(e) {
1033
1063
  return this.defaultRowHeight;
1034
1064
  }
@@ -1045,6 +1075,9 @@ class W extends tt {
1045
1075
  }
1046
1076
  return !0;
1047
1077
  }
1078
+ sort(e) {
1079
+ this.filteredRows = this.filteredRows.sort(e);
1080
+ }
1048
1081
  getValueByT(e, t) {
1049
1082
  if (e && t)
1050
1083
  return t.includes(".") ? this.getPropertyValue(e, t.split(".")) : e[t];
@@ -1054,7 +1087,7 @@ class W extends tt {
1054
1087
  }
1055
1088
  getCustomClassesAt(e, t) {
1056
1089
  const s = super.getCustomClassesAt(e, t);
1057
- return this.getRowByIndex(e).selected && s.push(this.selectedRowClass), this.focusedRowIndex === e && s.push(this.focusedRowClass), s;
1090
+ return this.getRowByIndex(e).selected && s.push(this.selectedRowClass), this._focusedRowIndex === e && s.push(this.focusedRowClass), s;
1058
1091
  }
1059
1092
  genericFlatTableSortComparator(e, t) {
1060
1093
  const s = this.columnDefs.find((o) => o.property === e);
@@ -1282,58 +1315,314 @@ class ot {
1282
1315
  getSelectionModel() {
1283
1316
  return this.tableScope.selectionModel();
1284
1317
  }
1318
+ /**
1319
+ * Automatically resizes all columns to fit their content.
1320
+ *
1321
+ * @param {boolean} recalcWrappers - Determines whether to recalculate wrapper dimensions after resizing columns.
1322
+ * Default value is true.
1323
+ *
1324
+ * @return {void} - This method doesn't return anything.
1325
+ */
1285
1326
  autoResizeColumns(e = !0) {
1286
1327
  this.tableScope.autoResizeColumns(e);
1287
1328
  }
1329
+ /**
1330
+ * Recalculates the dimensions of all wrapper elements in the table.
1331
+ *
1332
+ * This method is typically called after changes to the table structure or content
1333
+ * that might affect the layout, such as resizing columns or changing row heights.
1334
+ * It ensures that all wrapper elements are properly sized to match their content.
1335
+ *
1336
+ * @return {void} - This method doesn't return anything.
1337
+ */
1288
1338
  recalcWrappers() {
1289
1339
  this.tableScope.recalcWrappers();
1290
1340
  }
1341
+ /**
1342
+ * Sets the width of a specific column in the table.
1343
+ *
1344
+ * @param {number} columnIndex - The index of the column to resize.
1345
+ * @param {number} width - The new width to set for the column, in pixels.
1346
+ *
1347
+ * @return {void} - This method doesn't return anything.
1348
+ */
1291
1349
  setColumnWidth(e, t) {
1292
1350
  this.tableScope.setColumnWidth(e, t);
1293
1351
  }
1352
+ /**
1353
+ * Retrieves the table model that contains all data and structure information for the table.
1354
+ *
1355
+ * @return {TableModelIf} The table model interface that provides access to the table's data structure,
1356
+ * including header, body, and footer area models.
1357
+ */
1294
1358
  getTableModel() {
1295
1359
  return this.tableScope.tableModel;
1296
1360
  }
1361
+ /**
1362
+ * Retrieves the area model for the body section of the table.
1363
+ *
1364
+ * @return {AreaModelIf} The area model interface that provides access to the table's body data,
1365
+ * including rows, cells, and their values.
1366
+ */
1297
1367
  getBodyModel() {
1298
1368
  return this.tableScope.tableModel.getBodyModel();
1299
1369
  }
1370
+ /**
1371
+ * Sets the rows data for the table body, replacing any existing rows.
1372
+ *
1373
+ * @template T - The type of elements in the rows array
1374
+ * @param {T[]} rows - An array of data objects to set as the table's rows
1375
+ *
1376
+ * @description
1377
+ * This method replaces all existing rows in the table body with the provided array of data objects.
1378
+ * It only works with tables that use AreaModelObjectArray as their body model.
1379
+ *
1380
+ * @return {void} - This method doesn't return anything.
1381
+ *
1382
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1383
+ */
1300
1384
  setRows(e) {
1301
1385
  const t = this.getBodyModel();
1302
- t instanceof W ? t.setRows(e) : console.warn("setRows<T>(rows: T[]) only works with AreaModelObjectArray<T>, but this body area model is ", typeof t, t);
1386
+ t instanceof L ? t.setRows(e) : console.warn("setRows<T>(rows: T[]) only works with AreaModelObjectArray<T>, but this body area model is ", typeof t, t);
1303
1387
  }
1388
+ /**
1389
+ * Adds new rows to the end of the table body.
1390
+ *
1391
+ * @template T - The type of elements in the rows array
1392
+ * @param {T[]} rows - An array of data objects to append to the table's existing rows
1393
+ *
1394
+ * @description
1395
+ * This method appends the provided array of data objects to the end of the existing rows in the table body.
1396
+ * It only works with tables that use AreaModelObjectArray as their body model.
1397
+ *
1398
+ * @return {void} - This method doesn't return anything.
1399
+ *
1400
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1401
+ */
1304
1402
  addRows(e) {
1305
1403
  const t = this.getBodyModel();
1306
- if (t instanceof W) {
1404
+ if (t instanceof L) {
1307
1405
  const s = t;
1308
1406
  let o = s.getAllRows();
1309
1407
  s.setRows([...o, ...e]);
1310
1408
  } else
1311
1409
  console.warn("addRows<T>(rows: T[]) only works with AreaModelObjectArray<T>, but this body area model is ", typeof t, t);
1312
1410
  }
1411
+ /**
1412
+ * Inserts new rows at a specific position in the table body.
1413
+ *
1414
+ * @template T - The type of elements in the rows array
1415
+ * @param {T[]} rows - An array of data objects to insert into the table
1416
+ * @param {number} rowIndex - The index position where the new rows should be inserted
1417
+ *
1418
+ * @description
1419
+ * This method inserts the provided array of data objects at the specified index position in the table body.
1420
+ * Existing rows at or after the specified index will be shifted down.
1421
+ * It only works with tables that use AreaModelObjectArray as their body model.
1422
+ *
1423
+ * @return {void} - This method doesn't return anything.
1424
+ *
1425
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1426
+ */
1313
1427
  addRowsAt(e, t) {
1314
1428
  const s = this.getBodyModel();
1315
- if (s instanceof W) {
1429
+ if (s instanceof L) {
1316
1430
  const o = s;
1317
1431
  let i = o.getAllRows();
1318
1432
  o.setRows([...i.slice(0, t), ...e, ...i.slice(t)]);
1319
1433
  } else
1320
1434
  console.warn("addRowsAt<T>(rows: T[]) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s);
1321
1435
  }
1436
+ /**
1437
+ * Removes specified rows from the table body.
1438
+ *
1439
+ * @template T - The type of elements in the rows array
1440
+ * @param {T[]} rows - An array of data objects to remove from the table
1441
+ * @param {(a: T, b: T) => boolean} predicate - A comparison function that determines if two rows match
1442
+ * - Default predicate uses strict equality (===)
1443
+ * - The function should return true if the rows are considered a match
1444
+ *
1445
+ * @description
1446
+ * This method removes rows from the table body that match any of the provided rows based on the predicate function.
1447
+ * It only works with tables that use AreaModelObjectArray as their body model.
1448
+ *
1449
+ * @return {void} - This method doesn't return anything.
1450
+ *
1451
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1452
+ */
1322
1453
  removeRows(e, t = (s, o) => s === o) {
1323
1454
  const s = this.getBodyModel();
1324
- if (s instanceof W) {
1455
+ if (s instanceof L) {
1325
1456
  const o = s, i = o.getAllRows().filter((r) => !e.some((a) => t(r, a)));
1326
1457
  o.setRows(i);
1327
1458
  } else
1328
1459
  console.warn("removeRows<T>(rows: T[]) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s);
1329
1460
  }
1461
+ /**
1462
+ * Searches for and returns rows from the table body that match the given criteria.
1463
+ *
1464
+ * @template T - The type of elements in the rows array
1465
+ *
1466
+ * @description
1467
+ * This method searches through the table body model for rows that match the provided criteria.
1468
+ * It only works with tables that use AreaModelObjectArray as their body model.
1469
+ * The method uses a predicate function to determine matches between rows.
1470
+ *
1471
+ * @param {T[]} rows - An array of rows to search for in the table body
1472
+ * @param {(a: T, b: T) => boolean} predicate - A comparison function that determines if two rows match
1473
+ * - Default predicate uses strict equality (===)
1474
+ * - The function should return true if the rows are considered a match
1475
+ * - Parameters:
1476
+ * - a: The row from the table body being checked
1477
+ * - b: The row from the input array being searched for
1478
+ *
1479
+ * @returns {T[]} An array containing all matching rows found in the table body
1480
+ * - Returns an empty array if:
1481
+ * - The body model is not an instance of AreaModelObjectArray
1482
+ * - No matches are found
1483
+ *
1484
+ * @example
1485
+ * // Find rows with simple equality comparison
1486
+ * const matchingRows = table.findRows([row1, row2]);
1487
+ *
1488
+ * @example
1489
+ * // Find rows with custom comparison logic
1490
+ * const matchingRows = table.findRows([row1, row2], (a, b) => a.id === b.id);
1491
+ *
1492
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1493
+ */
1330
1494
  findRows(e, t = (s, o) => s === o) {
1331
1495
  const s = this.getBodyModel();
1332
- return s instanceof W ? s.getAllRows().filter((i) => e.some((r) => t(i, r))) : (console.warn("findRows<T>(rows: T[], predicate: (a: T, b: T) => boolean) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s), []);
1496
+ return s instanceof L ? s.getAllRows().filter((i) => e.some((r) => t(i, r))) : (console.warn("findRows<T>(rows: T[], predicate: (a: T, b: T) => boolean) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s), []);
1497
+ }
1498
+ /**
1499
+ * Searches through the filtered rows of the table to find a row that matches specific criteria.
1500
+ * This method only works with tables that use AreaModelObjectArray as their body model.
1501
+ *
1502
+ * @template T - The type of the row objects in the table
1503
+ *
1504
+ * @param {Partial<T>} criteria - A partial object containing the search criteria.
1505
+ * Only needs to include the properties you want to match against.
1506
+ *
1507
+ * @param {(criteria: Partial<T>, row: T) => boolean} predicate - A function that defines how to match rows against the criteria.
1508
+ * Returns true if the row matches the criteria, false otherwise.
1509
+ *
1510
+ * @returns {T | undefined} The first matching row from the filtered rows, or undefined if no match is found
1511
+ * or if the body model is not an instance of AreaModelObjectArray.
1512
+ *
1513
+ * @example
1514
+ * ```typescript
1515
+ * interface Person {
1516
+ * id: number;
1517
+ * name: string;
1518
+ * age: number;
1519
+ * }
1520
+ *
1521
+ * // Find a person by exact match
1522
+ * const criteria = { name: "John", age: 30 };
1523
+ * const person = tableApi.findRowFromFilteredRowsByAllCriteria<Person>(
1524
+ * criteria,
1525
+ * (criteria, row) => row.name === criteria.name && row.age === criteria.age
1526
+ * );
1527
+ *
1528
+ * // Find a person by partial name match
1529
+ * const searchCriteria = { name: "Jo" };
1530
+ * const person2 = tableApi.findRowFromFilteredRowsByAllCriteria<Person>(
1531
+ * searchCriteria,
1532
+ * (criteria, row) => row.name.toLowerCase().includes(criteria.name!.toLowerCase())
1533
+ * );
1534
+ *
1535
+ * // Find a person within age range
1536
+ * const ageCriteria = { minAge: 25, maxAge: 35 };
1537
+ * const person3 = tableApi.findRowFromFilteredRowsByAllCriteria<Person>(
1538
+ * ageCriteria,
1539
+ * (criteria, row) => row.age >= criteria.minAge! && row.age <= criteria.maxAge!
1540
+ * );
1541
+ * ```
1542
+ *
1543
+ * @throws {Warning} Logs a warning to console if the body model is not an instance of AreaModelObjectArray
1544
+ *
1545
+ * @remarks
1546
+ * - This method only searches through filtered rows (rows that are currently visible in the table)
1547
+ * - If you need to search through all rows (including filtered out ones), use findRowFromAllRowsByAllCriteria instead
1548
+ * - The predicate function gives you full control over how to match rows against your criteria
1549
+ * - Returns undefined if either no match is found or if the table's body model is not compatible
1550
+ */
1551
+ findRowFromFilteredRowsByAllCriteria(e, t) {
1552
+ const s = this.getBodyModel();
1553
+ if (s instanceof L)
1554
+ return s.getFilteredRows().find((i) => t(e, i));
1555
+ console.warn("findRowFromFilteredRowsByAllCriteria(...) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s);
1556
+ }
1557
+ /**
1558
+ * Searches through all rows in the table's body model to find a row that matches specified criteria.
1559
+ * This method works only with AreaModelObjectArray<T> body models.
1560
+ *
1561
+ * @template T - The type of objects/rows in the table
1562
+ *
1563
+ * @param {Partial<T>} criteria - A partial object containing the search criteria.
1564
+ * Only needs to include the properties you want to match against.
1565
+ *
1566
+ * @param {(criteria: Partial<T>, row: T) => boolean} predicate - A function that defines how to match rows against the criteria.
1567
+ * Returns true if the row matches the criteria, false otherwise.
1568
+ *
1569
+ * @returns {T | undefined} The first matching row, or undefined if no match is found or if the body model is not AreaModelObjectArray.
1570
+ *
1571
+ * @example
1572
+ * // Find a user row by id and name
1573
+ * const criteria = { id: 1, name: "John" };
1574
+ * const user = tableApi.findRowFromAllRowsByAllCriteria(criteria,
1575
+ * (criteria, row) => row.id === criteria.id && row.name === criteria.name
1576
+ * );
1577
+ *
1578
+ * @example
1579
+ * // Find a product row with partial match on name
1580
+ * const criteria = { name: "Phone" };
1581
+ * const product = tableApi.findRowFromAllRowsByAllCriteria(criteria,
1582
+ * (criteria, row) => row.name.includes(criteria.name)
1583
+ * );
1584
+ *
1585
+ * @example
1586
+ * // Find an order with complex matching logic
1587
+ * const criteria = { total: 100, status: "pending" };
1588
+ * const order = tableApi.findRowFromAllRowsByAllCriteria(criteria,
1589
+ * (criteria, row) => {
1590
+ * return row.total > criteria.total &&
1591
+ * row.status === criteria.status &&
1592
+ * row.items.length > 0;
1593
+ * }
1594
+ * );
1595
+ *
1596
+ * @throws {Warning} Logs a warning to console if the body model is not an instance of AreaModelObjectArray
1597
+ */
1598
+ findRowFromAllRowsByAllCriteria(e, t) {
1599
+ const s = this.getBodyModel();
1600
+ if (s instanceof L)
1601
+ return s.getAllRows().find((i) => t(e, i));
1602
+ console.warn("findRowFromAllRowsByAllCriteria(...) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s);
1333
1603
  }
1604
+ /**
1605
+ * Updates existing rows in the table body with new data.
1606
+ *
1607
+ * @template T - The type of elements in the rows array
1608
+ * @param {T[]} rows - An array of data objects containing the updated values
1609
+ * @param {(a: T, b: T) => boolean} predicate - A comparison function that determines which rows to update
1610
+ * - Default predicate uses strict equality (===)
1611
+ * - The function should return true if the row should be updated
1612
+ *
1613
+ * @description
1614
+ * This method updates existing rows in the table body with new values from the provided rows array.
1615
+ * For each row in the table, if the predicate returns true when compared with any row in the provided array,
1616
+ * all properties from the provided row will be copied to the existing row.
1617
+ * It only works with tables that use AreaModelObjectArray as their body model.
1618
+ *
1619
+ * @return {void} - This method doesn't return anything.
1620
+ *
1621
+ * @throws {Warning} Logs a console warning if the table's body model is not an AreaModelObjectArray
1622
+ */
1334
1623
  updateRows(e, t = (s, o) => s === o) {
1335
1624
  const s = this.getBodyModel();
1336
- if (s instanceof W) {
1625
+ if (s instanceof L) {
1337
1626
  let i = s.getAllRows();
1338
1627
  for (const r of i)
1339
1628
  for (const a of e)
@@ -1343,12 +1632,165 @@ class ot {
1343
1632
  } else
1344
1633
  console.warn("updateRows<T>(rows: T[], predicate: (a: T, b: T) => boolean) only works with AreaModelObjectArray<T>, but this body area model is ", typeof s, s);
1345
1634
  }
1635
+ /**
1636
+ * Re-applies the current sorting configuration to the table data.
1637
+ *
1638
+ * @description
1639
+ * This method triggers a re-sort of the table data using the current sorting configuration.
1640
+ * It's useful when the underlying data has changed and needs to be re-sorted without changing
1641
+ * the sort columns or direction.
1642
+ *
1643
+ * @return {void} - This method doesn't return anything.
1644
+ */
1346
1645
  reSort() {
1347
1646
  this.tableScope.reSort();
1348
1647
  }
1648
+ /**
1649
+ * Sorts the table data using a custom comparison function.
1650
+ *
1651
+ * This method allows sorting of table rows by providing a custom comparison function. The comparison function
1652
+ * should follow the standard JavaScript array sort comparator pattern, returning:
1653
+ * - A negative number if the first element should be sorted before the second
1654
+ * - A positive number if the first element should be sorted after the second
1655
+ * - Zero if the elements are equal
1656
+ *
1657
+ * @param compareFn - A function that defines the sort order. The function should accept two arguments
1658
+ * and return a number indicating their relative order:
1659
+ * - Negative number: first argument should come before second
1660
+ * - Positive number: second argument should come before first
1661
+ * - Zero: elements are equal
1662
+ *
1663
+ * @example
1664
+ * // Sort table rows by a specific property in ascending order
1665
+ * table.api.sort((a, b) => {
1666
+ * if (a.name < b.name) return -1;
1667
+ * if (a.name > b.name) return 1;
1668
+ * return 0;
1669
+ * });
1670
+ *
1671
+ * @example
1672
+ * // Sort numbers in descending order
1673
+ * table.api.sort((a, b) => b.value - a.value);
1674
+ *
1675
+ * @example
1676
+ * // Sort with multiple criteria
1677
+ * table.api.sort((a, b) => {
1678
+ * // First sort by status
1679
+ * const statusCompare = a.status.localeCompare(b.status);
1680
+ * if (statusCompare !== 0) return statusCompare;
1681
+ *
1682
+ * // Then sort by name if status is equal
1683
+ * return a.name.localeCompare(b.name);
1684
+ * });
1685
+ *
1686
+ * @example
1687
+ * // Case-insensitive string sorting
1688
+ * table.api.sort((a, b) =>
1689
+ * a.name.toLowerCase().localeCompare(b.name.toLowerCase())
1690
+ * );
1691
+ */
1692
+ sort(e) {
1693
+ this.tableScope.sort(e);
1694
+ }
1695
+ /**
1696
+ * Ensures that a specific row is visible in the viewport by scrolling if necessary.
1697
+ * This method checks if the target row is within the currently visible range and
1698
+ * adjusts the scroll position if it's not visible.
1699
+ *
1700
+ * The method performs the following:
1701
+ * 1. Checks if the row is above the current viewport (before first visible row)
1702
+ * 2. Checks if the row is below the current viewport (after last visible row)
1703
+ * 3. Scrolls to make the row visible if needed
1704
+ *
1705
+ * @param {number} rowIndex - The index of the row to make visible
1706
+ * @returns {boolean} Returns true if scrolling was needed and performed, false if the row was already visible
1707
+ *
1708
+ * @example
1709
+ * // Ensure row 5 is visible in the viewport
1710
+ * tableApi.ensureRowIsVisible(5);
1711
+ *
1712
+ * @example
1713
+ * // Example usage in a component
1714
+ * class MyTableComponent {
1715
+ * private tableApi: TableApi;
1716
+ *
1717
+ * scrollToSpecificRow(rowIndex: number) {
1718
+ * // This will scroll the row into view if it's not visible
1719
+ * const didScroll = this.tableApi.ensureRowIsVisible(rowIndex);
1720
+ *
1721
+ * if (didScroll) {
1722
+ * console.log(`Table scrolled to show row ${rowIndex}`);
1723
+ * } else {
1724
+ * console.log(`Row ${rowIndex} was already visible`);
1725
+ * }
1726
+ * }
1727
+ * }
1728
+ *
1729
+ * @example
1730
+ * // Example with row selection
1731
+ * class TableHandler {
1732
+ * selectAndShowRow(rowIndex: number) {
1733
+ * // First ensure the row is visible
1734
+ * this.tableApi.ensureRowIsVisible(rowIndex);
1735
+ *
1736
+ * // Then perform selection
1737
+ * this.selectionModel.selectRow(rowIndex);
1738
+ * }
1739
+ * }
1740
+ *
1741
+ * @throws {Error} Implicitly may throw if rowIndex is not a number or if required properties are undefined
1742
+ *
1743
+ * @see {@link scrollToIndex} - The underlying method used for scrolling
1744
+ * @see {@link getDisplayedRowCount} - Related method for getting visible row count
1745
+ */
1746
+ ensureRowIsVisible(e) {
1747
+ return this.tableScope.ensureRowIsVisible(e);
1748
+ }
1749
+ /**
1750
+ * Retrieves the number of rows currently displayed in the table.
1751
+ *
1752
+ * @description
1753
+ * This method returns the count of rows that are currently visible in the table after
1754
+ * applying any filtering, pagination, or other visibility constraints.
1755
+ *
1756
+ * @return {number} The number of rows currently displayed in the table.
1757
+ */
1349
1758
  getDisplayedRowCount() {
1350
1759
  return this.tableScope.getDisplayedRowCount();
1351
1760
  }
1761
+ /**
1762
+ * Returns the index of the first visible row in the table's viewport.
1763
+ *
1764
+ * This method retrieves the first visible row index from the table's scope, which is useful
1765
+ * for virtual scrolling and viewport-related calculations. The index represents the topmost
1766
+ * visible row in the current scroll position of the table.
1767
+ *
1768
+ * This value is maintained internally by the table and updated during scrolling operations.
1769
+ * It's particularly important for:
1770
+ * - Virtual scrolling optimization
1771
+ * - Calculating visible range of rows
1772
+ * - Viewport-related operations
1773
+ * - Scroll position restoration
1774
+ *
1775
+ * @returns {number} The index of the first visible row in the table's viewport.
1776
+ * Returns -1 if no rows are visible or if the table is not yet rendered.
1777
+ *
1778
+ * @example
1779
+ * ```typescript
1780
+ * // Get the first visible row index
1781
+ * const tableApi = new TableApi(tableScope);
1782
+ * const firstVisibleIndex = tableApi.getFirstVisibleRowIndex();
1783
+ *
1784
+ * // Use the index for scroll position calculations
1785
+ * if (firstVisibleIndex >= 0) {
1786
+ * // Perform operations with the first visible row
1787
+ * console.log(`First visible row index: ${firstVisibleIndex}`);
1788
+ * }
1789
+ * ```
1790
+ */
1791
+ getFirstVisibleRowIndex() {
1792
+ return this.tableScope.getFirstVisibleRowIndex();
1793
+ }
1352
1794
  }
1353
1795
  class de {
1354
1796
  constructor(e) {
@@ -1499,14 +1941,14 @@ class at extends de {
1499
1941
  }
1500
1942
  }
1501
1943
  }
1502
- class F {
1944
+ class k {
1503
1945
  constructor(e = 0, t = 0, s = 0, o = 0, i) {
1504
1946
  this.left = e, this.width = t, this.height = s, this.top = o, this.index = i;
1505
1947
  }
1506
1948
  }
1507
1949
  class nt {
1508
1950
  constructor(e, t, s, o) {
1509
- this.hostElement = e, this.tableModel = t, this.dom = s, this.tableOptions = o, this.scrollTop = 0, this.areaBodyWestGeo = new F(), this.areaBodyCenterGeo = new F(), this.areaBodyEastGeo = new F();
1951
+ this.hostElement = e, this.tableModel = t, this.dom = s, this.tableOptions = o, this.scrollTop = 0, this.areaBodyWestGeo = new k(), this.areaBodyCenterGeo = new k(), this.areaBodyEastGeo = new k();
1510
1952
  const i = this.hostElement;
1511
1953
  i.innerText = "", this.dom.setAttribute(i, "tabindex", "0"), this.dom.setStyle(
1512
1954
  this.dom.addClass("ge-table", i),
@@ -1675,7 +2117,7 @@ class nt {
1675
2117
  this.dom.setStyle(this.contentWrapperDiv, "width", e), this.dom.setStyle(this.contentWrapperDiv, "height", t);
1676
2118
  }
1677
2119
  }
1678
- class A {
2120
+ class E {
1679
2121
  /**
1680
2122
  * Represents a constructor for a class.
1681
2123
  * @constructor
@@ -1689,7 +2131,7 @@ class A {
1689
2131
  this.r1 = e, this.c1 = t, this.r2 = s, this.c2 = o, this.gammaRange = i;
1690
2132
  }
1691
2133
  static create(e) {
1692
- return e.gammaRange === void 0 && (e.gammaRange = !1), new A(
2134
+ return e.gammaRange === void 0 && (e.gammaRange = !1), new E(
1693
2135
  e.rowIndex1,
1694
2136
  e.columnIndex1,
1695
2137
  e.rowIndex2,
@@ -1698,13 +2140,13 @@ class A {
1698
2140
  );
1699
2141
  }
1700
2142
  static singleCell(e, t) {
1701
- return new A(e, t, e, t);
2143
+ return new E(e, t, e, t);
1702
2144
  }
1703
2145
  static singleRow(e) {
1704
- return new A(e, 0, e, Number.MAX_SAFE_INTEGER);
2146
+ return new E(e, 0, e, Number.MAX_SAFE_INTEGER);
1705
2147
  }
1706
2148
  static singleColumn(e) {
1707
- return new A(0, e, Number.MAX_SAFE_INTEGER, e);
2149
+ return new E(0, e, Number.MAX_SAFE_INTEGER, e);
1708
2150
  }
1709
2151
  isInRange(e, t) {
1710
2152
  return e >= this.r1 && e <= this.r2 && t >= this.c1 && t <= this.c2;
@@ -1726,7 +2168,7 @@ class ct {
1726
2168
  i === 0 && (i = 1), r === 0 && (r = 1);
1727
2169
  const a = "gammaCells" in this.areaModel;
1728
2170
  this.colAndRowspanRanges.push(
1729
- new A(s, o, s + r - 1, o + i - 1, a)
2171
+ new E(s, o, s + r - 1, o + i - 1, a)
1730
2172
  );
1731
2173
  }
1732
2174
  }
@@ -1844,19 +2286,19 @@ class ht extends nt {
1844
2286
  for (const t of this.removables)
1845
2287
  t.remove();
1846
2288
  this.hideHoverRow(), this.hideHoverColumn(), this.scrollTop = this.scrollViewport.scrollTop, this.scrollLeft = this.scrollViewport.scrollLeft, this.debounce(this.checkForScrollPosSaving.bind(this)), this.scrollFactorY = this.scrollTop / (this.scrollViewport.scrollHeight - this.scrollViewport.clientHeight), this.scrollFactorX = this.scrollLeft / (this.scrollViewport.scrollWidth - this.scrollViewport.clientWidth), isNaN(this.scrollFactorY) && (this.scrollFactorY = 0), isNaN(this.scrollFactorX) && (this.scrollFactorX = 0), this.adjustBody(), this.adjustArea("footer"), this.adjustArea("header"), this.tableOptions.tableTopBorderVisible && this.removables.push(this.dom.addHorizontalBorder(
1847
- new F(0, this.hostElement.clientWidth, 1, 0),
2289
+ new k(0, this.hostElement.clientWidth, 1, 0),
1848
2290
  this.hostElement,
1849
2291
  "ge-table-border"
1850
2292
  )), this.tableOptions.tableBottomBorderVisible && this.removables.push(this.dom.addHorizontalBorder(
1851
- new F(0, this.hostElement.clientWidth, 1, this.hostElement.clientHeight - 1),
2293
+ new k(0, this.hostElement.clientWidth, 1, this.hostElement.clientHeight - 1),
1852
2294
  this.hostElement,
1853
2295
  "ge-table-border"
1854
2296
  )), this.tableModel.getFixedLeftColumnCount() > 0 && this.removables.push(this.dom.addVerticalBorder(
1855
- new F(this.areaBodyWest.child.clientWidth, 1, this.hostElement.clientHeight, 0),
2297
+ new k(this.areaBodyWest.child.clientWidth, 1, this.hostElement.clientHeight, 0),
1856
2298
  this.hostElement,
1857
2299
  "ge-table-body-west-vertical-border"
1858
2300
  )), ((e = this.tableModel.getAreaModel("header")) == null ? void 0 : e.getRowCount()) > 0 && this.removables.push(this.dom.addHorizontalBorder(
1859
- new F(0, this.hostElement.clientWidth, 1, this.areaHeaderCenter.child.clientHeight),
2301
+ new k(0, this.hostElement.clientWidth, 1, this.areaHeaderCenter.child.clientHeight),
1860
2302
  this.hostElement,
1861
2303
  "ge-table-body-west-vertical-border"
1862
2304
  ));
@@ -2020,11 +2462,11 @@ class ht extends nt {
2020
2462
  let p = t;
2021
2463
  const u = this.tableModel.getColumnCount(), g = this.tableModel.getFixedRightColumnCount(), b = this.tableModel.getFixedLeftColumnCount();
2022
2464
  for (let m = 0; m < h; m++) {
2023
- const w = p, v = m === h - 1, E = this.tableModel.getRowHeight(e, m);
2024
- if (w + E > 0) {
2465
+ const w = p, C = m === h - 1, A = this.tableModel.getRowHeight(e, m);
2466
+ if (w + A > 0) {
2025
2467
  this.firstVisibleRowIndex = m;
2026
- let y = { left: a, width: n, height: E, top: w, index: m }, S = this.dom.addRowDiv(o, y, m, e, "center");
2027
- const k = b;
2468
+ let y = { left: a, width: n, height: A, top: w, index: m }, S = this.dom.addRowDiv(o, y, m, e, "center");
2469
+ const F = b;
2028
2470
  if (this.adjustColumnsToRowParent({
2029
2471
  areaIdent: e,
2030
2472
  sideIdent: "center",
@@ -2032,11 +2474,11 @@ class ht extends nt {
2032
2474
  geo: y,
2033
2475
  parent: S,
2034
2476
  rowIndex: m,
2035
- columnIndexStart: k,
2477
+ columnIndexStart: F,
2036
2478
  columnIndexEnd: u - g - 1,
2037
2479
  verticalFixed: !1,
2038
- lastRowOfModel: v
2039
- }), d.left > 0 && (y = { left: a, width: this.areaBodyWestGeo.width, height: E, top: w, index: m }, S = this.dom.addRowDiv(s, y, m, e, "west"), this.adjustColumnsToRowParent({
2480
+ lastRowOfModel: C
2481
+ }), d.left > 0 && (y = { left: a, width: this.areaBodyWestGeo.width, height: A, top: w, index: m }, S = this.dom.addRowDiv(s, y, m, e, "west"), this.adjustColumnsToRowParent({
2040
2482
  areaIdent: e,
2041
2483
  sideIdent: "west",
2042
2484
  areaModel: c,
@@ -2044,10 +2486,10 @@ class ht extends nt {
2044
2486
  parent: S,
2045
2487
  rowIndex: m,
2046
2488
  columnIndexStart: 0,
2047
- columnIndexEnd: k - 1,
2489
+ columnIndexEnd: F - 1,
2048
2490
  verticalFixed: !0,
2049
- lastRowOfModel: v
2050
- })), d.right > 0 && (y = { left: a, width: this.areaBodyEastGeo.width, height: E, top: w, index: m }, S = this.dom.addRowDiv(i, y, m, e, "east"), this.adjustColumnsToRowParent({
2491
+ lastRowOfModel: C
2492
+ })), d.right > 0 && (y = { left: a, width: this.areaBodyEastGeo.width, height: A, top: w, index: m }, S = this.dom.addRowDiv(i, y, m, e, "east"), this.adjustColumnsToRowParent({
2051
2493
  areaIdent: e,
2052
2494
  sideIdent: "east",
2053
2495
  areaModel: c,
@@ -2057,11 +2499,11 @@ class ht extends nt {
2057
2499
  columnIndexStart: u - g,
2058
2500
  columnIndexEnd: u - 1,
2059
2501
  verticalFixed: !0,
2060
- lastRowOfModel: v
2502
+ lastRowOfModel: C
2061
2503
  })), e === "header" && this.tree && m === h - 1) {
2062
2504
  const T = this.dom.applyStyle(
2063
2505
  this.dom.setAttribute(
2064
- this.dom.addDiv(S, new F(16, 20, 20, 8)),
2506
+ this.dom.addDiv(S, new k(16, 20, 20, 8)),
2065
2507
  "data-ge-action",
2066
2508
  "toggleExpandCollapseAll"
2067
2509
  ),
@@ -2073,7 +2515,7 @@ class ht extends nt {
2073
2515
  }
2074
2516
  }
2075
2517
  }
2076
- if (p = p + E, p > r) {
2518
+ if (p = p + A, p > r) {
2077
2519
  e === "body" && (this.displayedRowCount = this.firstVisibleRowIndex - m);
2078
2520
  break;
2079
2521
  }
@@ -2082,16 +2524,16 @@ class ht extends nt {
2082
2524
  const m = ((f = this.colAndRowspanModels[e]) == null ? void 0 : f.getRanges()) ?? [];
2083
2525
  if (m.length)
2084
2526
  for (const w of m) {
2085
- let v = 0, E = o.child, y = "center";
2527
+ let C = 0, A = o.child, y = "center";
2086
2528
  if (w.c1 < b)
2087
- E = s.child, y = "west";
2529
+ A = s.child, y = "west";
2088
2530
  else if (g > 0 && w.c1 >= u - g)
2089
- E = i.child, y = "east";
2531
+ A = i.child, y = "east";
2090
2532
  else {
2091
2533
  const S = this.areaBodyCenterGeo.width - this.tableModel.getContentWidthInPixel();
2092
- v = this.scrollFactorX * S - this.areaBodyWestGeo.width, y = "center";
2534
+ C = this.scrollFactorX * S - this.areaBodyWestGeo.width, y = "center";
2093
2535
  }
2094
- this.drawBigCell(w, v, t, c, E, y);
2536
+ this.drawBigCell(w, C, t, c, A, y);
2095
2537
  }
2096
2538
  }
2097
2539
  }
@@ -2201,19 +2643,19 @@ class ht extends nt {
2201
2643
  for (let f = a; f <= n; f++) {
2202
2644
  const m = g, w = this.tableModel.getColumnWidth(f);
2203
2645
  if (w > 0 && m + w > 0) {
2204
- let v = o.height;
2205
- const E = s.getRowspanAt(r, f), y = s.getColspanAt(r, f);
2206
- E > 1 && (v = this.getRowHeights(r, r + E - 1, s).reduce((T, D) => T + D, 0));
2646
+ let C = o.height;
2647
+ const A = s.getRowspanAt(r, f), y = s.getColspanAt(r, f);
2648
+ A > 1 && (C = this.getRowHeights(r, r + A - 1, s).reduce((T, D) => T + D, 0));
2207
2649
  let S = w;
2208
2650
  y > 1 && (S = this.getColumnWidths(f, f + y - 1).reduce((T, D) => T + D, 0));
2209
- let k = !1;
2210
- if (this.colAndRowspanModels && this.colAndRowspanModels[e] && (b = this.colAndRowspanModels[e]) != null && b.isInRange(r, f) && (k = !0), this.draggingTargetColumnIndex === f && e !== "header") {
2211
- this.renderDragTargetDiv(i, m, p, S, v);
2212
- const T = { left: m, top: p, width: S, height: v };
2651
+ let F = !1;
2652
+ if (this.colAndRowspanModels && this.colAndRowspanModels[e] && (b = this.colAndRowspanModels[e]) != null && b.isInRange(r, f) && (F = !0), this.draggingTargetColumnIndex === f && e !== "header") {
2653
+ this.renderDragTargetDiv(i, m, p, S, C);
2654
+ const T = { left: m, top: p, width: S, height: C };
2213
2655
  this.dom.addColumnBorderDivs(this.tableOptions, i, T, e, t);
2214
2656
  } else {
2215
- const T = this.renderSelectedBackgroundDiv(k, u, t, s, r, f, i, m, p, S, v);
2216
- "gammaCells" in s && s.getValueAt(r, f) && (k = !1), k || this.renderCell({
2657
+ const T = this.renderSelectedBackgroundDiv(F, u, t, s, r, f, i, m, p, S, C);
2658
+ "gammaCells" in s && s.getValueAt(r, f) && (F = !1), F || this.renderCell({
2217
2659
  areaModel: s,
2218
2660
  areaIdent: e,
2219
2661
  sideIdent: t,
@@ -2222,7 +2664,7 @@ class ht extends nt {
2222
2664
  left: m,
2223
2665
  top: p,
2224
2666
  width: S,
2225
- height: v,
2667
+ height: C,
2226
2668
  parent: i,
2227
2669
  cellSelected: T,
2228
2670
  lastRowOfModel: c,
@@ -2233,7 +2675,7 @@ class ht extends nt {
2233
2675
  cellLeft: m,
2234
2676
  cellTop: p,
2235
2677
  cellWidth: S,
2236
- cellHeight: v,
2678
+ cellHeight: C,
2237
2679
  parent: i
2238
2680
  });
2239
2681
  }
@@ -2241,7 +2683,7 @@ class ht extends nt {
2241
2683
  if (g = g + w, g > this.areaBodyCenterGeo.width)
2242
2684
  break;
2243
2685
  }
2244
- this.tableOptions.verticalBorderVisible && this.dom.addVerticalBorder(new F(g - 1, 1, o.height, 0), i);
2686
+ this.tableOptions.verticalBorderVisible && this.dom.addVerticalBorder(new k(g - 1, 1, o.height, 0), i);
2245
2687
  }
2246
2688
  /**
2247
2689
  * Retrieves the column index of the tree arrow column in the table.
@@ -2272,15 +2714,15 @@ class ht extends nt {
2272
2714
  const u = this.editorRenderer && this.editorRendererRow === o && this.editorRendererColumn === i ? this.editorRenderer : e.getCellRenderer(o, i), g = { left: r, width: a, height: n, top: d, index: i }, b = e.getRowByIndex(o);
2273
2715
  let f = "none";
2274
2716
  if (i === this.getTreeArrowColumnIndex() && K(b)) {
2275
- const C = b;
2276
- (ge = C.children) != null && ge.length ? C.expanded ? f = "expanded" : f = "collapsed" : f = "hidden";
2717
+ const v = b;
2718
+ (ge = v.children) != null && ge.length ? v.expanded ? f = "expanded" : f = "collapsed" : f = "hidden";
2277
2719
  }
2278
2720
  let w;
2279
2721
  if (t === "header") {
2280
- const C = this.tableModel.getColumnDef(i);
2281
- (!(C != null && C.sortIconVisible) || C != null && C.sortIconVisible()) && (w = C == null ? void 0 : C.sortState);
2722
+ const v = this.tableModel.getColumnDef(i);
2723
+ (!(v != null && v.sortIconVisible) || v != null && v.sortIconVisible()) && (w = v == null ? void 0 : v.sortState);
2282
2724
  }
2283
- const v = e.getValueAt(o, i), E = u ? "" : `${v}`, y = e.isRowChecked(o), S = this.dom.addColumnDiv(
2725
+ const C = e.getValueAt(o, i), A = u ? "" : `${C}`, y = e.isRowChecked(o), S = this.dom.addColumnDiv(
2284
2726
  {
2285
2727
  parent: c,
2286
2728
  geo: g,
@@ -2288,28 +2730,28 @@ class ht extends nt {
2288
2730
  columnIndex: i,
2289
2731
  areaIdent: t,
2290
2732
  sideIdent: s,
2291
- text: E,
2733
+ text: A,
2292
2734
  treeArrow: f,
2293
2735
  tableOptions: this.tableOptions,
2294
2736
  checkedType: y,
2295
2737
  sortState: w
2296
2738
  }
2297
- ), k = e.getTooltipAt(o, i);
2298
- k && this.dom.setAttribute(S, "title", k);
2739
+ ), F = e.getTooltipAt(o, i);
2740
+ F && this.dom.setAttribute(S, "title", F);
2299
2741
  const T = this.tableModel.getColumnDef(i);
2300
2742
  T && T.classes[t] && this.dom.addClasses(T.classes[t], S);
2301
2743
  let D;
2302
- u && (D = u.render(S, o, i, t, e, v, this.dom.domService));
2744
+ u && (D = u.render(S, o, i, t, e, C, this.dom.domService));
2303
2745
  const N = e.getCustomClassesAt(o, i);
2304
2746
  if (N.length && this.dom.addClasses(N, S), this.dom.addColumnBorderDivs(this.tableOptions, c, g, t, s), h && this.dom.addHorizontalBorder({ left: r, width: a, height: n, top: d + n }, c), this.getFocusModel && t === "body") {
2305
- const C = this.getFocusModel();
2306
- C != null && C.hasFocus(o, i) && this.dom.addFocusBorderDivs(c, g, {});
2747
+ const v = this.getFocusModel();
2748
+ v != null && v.hasFocus(o, i) && this.dom.addFocusBorderDivs(c, g, {});
2307
2749
  }
2308
2750
  t === "header" && this.dom.setAttribute(S, "data-ge-action", "drag-column");
2309
2751
  const ee = e.getCustomStyleAt(o, i);
2310
2752
  if (ee)
2311
- for (const C in ee)
2312
- this.dom.setStyle(S, C, ee[C]);
2753
+ for (const v in ee)
2754
+ this.dom.setStyle(S, v, ee[v]);
2313
2755
  return [S, D];
2314
2756
  }
2315
2757
  /**
@@ -2487,10 +2929,10 @@ class ht extends nt {
2487
2929
  }, m = this.dom.addColumnDiv(f);
2488
2930
  let w;
2489
2931
  g && (w = g.render(m, d, a, t, i, u, this.dom.domService), w && this.cleanupFunctions[t].push(w));
2490
- const v = i.getCustomClassesAt(d, a);
2491
- v.length && this.dom.addClasses(v, m);
2492
- const E = this.tableModel.getColumnDef(a);
2493
- E && E.classes[t] && this.dom.addClasses(E.classes[t], m), this.dom.addColumnBorderDivs(this.tableOptions, n, p, t, o);
2932
+ const C = i.getCustomClassesAt(d, a);
2933
+ C.length && this.dom.addClasses(C, m);
2934
+ const A = this.tableModel.getColumnDef(a);
2935
+ A && A.classes[t] && this.dom.addClasses(A.classes[t], m), this.dom.addColumnBorderDivs(this.tableOptions, n, p, t, o);
2494
2936
  const y = i.getCustomStyleAt(d, a);
2495
2937
  if (y)
2496
2938
  for (const S in y)
@@ -2679,7 +3121,7 @@ class ut {
2679
3121
  let s = !1, o = !1;
2680
3122
  if (this.getSelectionModel && this.getFocusModel) {
2681
3123
  const p = this.getSelectionModel(), u = this.getFocusModel();
2682
- p && u && (u.hasFocus(e.rowIndex, e.columnIndex) || (u.setFocus(e.rowIndex, e.columnIndex), this.tableScope.onFocusChanged(u), s = !0), (i = e.originalEvent) != null && i.shiftKey || p.hasSelection() && (p.clear(), s = !0), (r = e.originalEvent) != null && r.shiftKey && this.previousEvt ? (p.addSelection(this.createRangeByEvents(e, this.previousEvt)), o = !0, s = !0) : (a = e.originalEvent) != null && a.altKey && ((n = e.originalEvent) != null && n.ctrlKey || (d = e.originalEvent) != null && d.metaKey) ? (p.removeSelection(A.singleCell(e.rowIndex, e.columnIndex)), o = !0, s = !0) : (c = e.originalEvent) != null && c.ctrlKey || (h = e.originalEvent) != null && h.metaKey ? (p.addSelection(A.singleCell(e.rowIndex, e.columnIndex)), o = !0, s = !0) : (p.firstClick(e.rowIndex, e.columnIndex), s = !0), this.tableScope.onSelectionChanged(p));
3124
+ p && u && (u.hasFocus(e.rowIndex, e.columnIndex) || (u.setFocus(e.rowIndex, e.columnIndex), this.tableScope.onFocusChanged(u), s = !0), (i = e.originalEvent) != null && i.shiftKey || p.hasSelection() && (p.clear(), s = !0), (r = e.originalEvent) != null && r.shiftKey && this.previousEvt ? (p.addSelection(this.createRangeByEvents(e, this.previousEvt)), o = !0, s = !0) : (a = e.originalEvent) != null && a.altKey && ((n = e.originalEvent) != null && n.ctrlKey || (d = e.originalEvent) != null && d.metaKey) ? (p.removeSelection(E.singleCell(e.rowIndex, e.columnIndex)), o = !0, s = !0) : (c = e.originalEvent) != null && c.ctrlKey || (h = e.originalEvent) != null && h.metaKey ? (p.addSelection(E.singleCell(e.rowIndex, e.columnIndex)), o = !0, s = !0) : (p.firstClick(e.rowIndex, e.columnIndex), s = !0), this.tableScope.onSelectionChanged(p));
2683
3125
  }
2684
3126
  return o ? this.previousEvt = void 0 : this.previousEvt = e == null ? void 0 : e.clone(), s;
2685
3127
  }
@@ -2702,7 +3144,7 @@ class ut {
2702
3144
  createRangeByEvents(e, t) {
2703
3145
  t || (t = e);
2704
3146
  const s = Math.min(e.rowIndex, t == null ? void 0 : t.rowIndex), o = Math.max(e.rowIndex, t == null ? void 0 : t.rowIndex), i = Math.min(e.columnIndex, t == null ? void 0 : t.columnIndex), r = Math.max(e.columnIndex, t == null ? void 0 : t.columnIndex);
2705
- return A.create({
3147
+ return E.create({
2706
3148
  rowIndex1: s,
2707
3149
  columnIndex1: i,
2708
3150
  rowIndex2: o,
@@ -2950,7 +3392,7 @@ class xt {
2950
3392
  this.silent || this.listenerArr.forEach((e) => e.onSelectionChanged(this));
2951
3393
  }
2952
3394
  firstClick(e, t) {
2953
- this.selectionType === "row" ? this.addRange(A.singleRow(e)) : this.selectionType === "column" && this.addRange(A.singleColumn(t));
3395
+ this.selectionType === "row" ? this.addRange(E.singleRow(e)) : this.selectionType === "column" && this.addRange(E.singleColumn(t));
2954
3396
  }
2955
3397
  getSelectionCount(e, t) {
2956
3398
  let s = 0;
@@ -3001,10 +3443,10 @@ class xt {
3001
3443
  if (this.selectionType === "none")
3002
3444
  return;
3003
3445
  let t = e;
3004
- this.selectionType === "row" ? t = A.singleRow(e.r1) : this.selectionType === "column" && (t = A.singleColumn(e.c1)), this.negativeRanges.push(t), this.fireChangeEvent();
3446
+ this.selectionType === "row" ? t = E.singleRow(e.r1) : this.selectionType === "column" && (t = E.singleColumn(e.c1)), this.negativeRanges.push(t), this.fireChangeEvent();
3005
3447
  }
3006
3448
  togglePoint(e, t) {
3007
- this.getSelectionCount(e, t) > 0 ? this.removeSelection(A.singleCell(e, t)) : this.addSelection(A.singleCell(e, t));
3449
+ this.getSelectionCount(e, t) > 0 ? this.removeSelection(E.singleCell(e, t)) : this.addSelection(E.singleCell(e, t));
3008
3450
  }
3009
3451
  isSelected(e, t) {
3010
3452
  return this.getSelectionCount(e, t) > 0;
@@ -3013,7 +3455,7 @@ class xt {
3013
3455
  this.selectionType !== "none" && (this.allSelected = !1, this.selectionMode === "single" && (this.ranges = []), this.selectionType === "row" ? (e.c1 = 0, e.c2 = Number.MAX_SAFE_INTEGER) : this.selectionType === "column" ? (e.r1 = 0, e.r2 = Number.MAX_SAFE_INTEGER) : this.selectionType === "cell" ? (e.r2 = e.r1, e.c2 = e.c1) : this.selectionType, this.ranges.push(e), this.fireChangeEvent());
3014
3456
  }
3015
3457
  }
3016
- class vt {
3458
+ class Ct {
3017
3459
  constructor(e = "none") {
3018
3460
  this.selectionType = e, this.rowIndex = -1, this.columnIndex = -1, this.changed = !1, this.listenerArr = [];
3019
3461
  }
@@ -3064,14 +3506,14 @@ class De {
3064
3506
  }
3065
3507
  // `⊖ `, `⊕ `;
3066
3508
  }
3067
- const Ct = new xt(), Et = new vt("cell");
3068
- class ke {
3509
+ const vt = new xt(), At = new Ct("cell");
3510
+ class Fe {
3069
3511
  constructor() {
3070
3512
  this.overflowX = "auto", this.overflowY = "auto", this.horizontalBorderVisible = !0, this.verticalBorderVisible = !0, this.footerSeparatorBorderVisible = !0, this.headerSeparatorBorderVisible = !0, this.fixedEastSeparatorBorderVisible = !0, this.fixedWestSeparatorBorderVisible = !0, this.tableTopBorderVisible = !0, this.tableBottomBorderVisible = !0, this.hoverRowVisible = !0, this.hoverColumnVisible = !0, this.columnsResizable = !0, this.columnsDraggable = !0, this.columnResizeHandleWidthInPx = 4, this.defaultRowHeights = {
3071
3513
  header: 34,
3072
3514
  body: 34,
3073
3515
  footer: 34
3074
- }, this.footerVerticalSeparator = !1, this.headerToggleExpandCollapseIcons = !1, this.headerVerticalSeparator = !1, this.treeOptions = new Me(), this.headerGroupOptions = new De(), this.showCheckboxWihoutExtraColumn = !1, this.externalFilterFunction = void 0, this.sortedOptions = new Re(), this.sortOrder = ["asc", "desc"], this.shortcutActionsDisabled = !1, this.resizeEventDebounceDelay = 500, this.getEditRenderer = (e, t) => new wt(), this.getSelectionModel = () => Ct, this.getFocusModel = () => Et;
3516
+ }, this.footerVerticalSeparator = !1, this.headerToggleExpandCollapseIcons = !1, this.headerVerticalSeparator = !1, this.treeOptions = new Re(), this.headerGroupOptions = new De(), this.showCheckboxWihoutExtraColumn = !1, this.externalFilterFunction = void 0, this.sortedOptions = new Me(), this.sortOrder = ["asc", "desc"], this.shortcutActionsDisabled = !1, this.resizeEventDebounceDelay = 500, this.getEditRenderer = (e, t) => new wt(), this.getSelectionModel = () => vt, this.getFocusModel = () => At;
3075
3517
  }
3076
3518
  }
3077
3519
  const H = class H {
@@ -3152,14 +3594,14 @@ const H = class H {
3152
3594
  mergeRanges(e) {
3153
3595
  let t;
3154
3596
  for (const s of e)
3155
- t ? (t.r1 = Math.min(t.r1, s.r1), t.c1 = Math.min(t.c1, s.c1), t.r2 = Math.max(t.r2, s.r2), t.c2 = Math.max(t.c2, s.c2)) : t = new A(s.r1, s.c1, s.r2, s.c2);
3597
+ t ? (t.r1 = Math.min(t.r1, s.r1), t.c1 = Math.min(t.c1, s.c1), t.r2 = Math.max(t.r2, s.r2), t.c2 = Math.max(t.c2, s.c2)) : t = new E(s.r1, s.c1, s.r2, s.c2);
3156
3598
  return t;
3157
3599
  }
3158
3600
  };
3159
3601
  H.columnSeparatorChar = " ", H.rowSeparatorChar = `
3160
3602
  `;
3161
3603
  let Y = H;
3162
- class At {
3604
+ class Et {
3163
3605
  constructor(e, t = 500) {
3164
3606
  this.tableScope = e, this.debounceDelay = t, new ResizeObserver(qe(this.handleResize.bind(this), t)).observe(this.tableScope.hostElement);
3165
3607
  }
@@ -3168,7 +3610,7 @@ class At {
3168
3610
  this.tableScope.recalcColumnWidths(s);
3169
3611
  }
3170
3612
  }
3171
- class Mt {
3613
+ class Rt {
3172
3614
  /**
3173
3615
  * Downloads a matrix data as an Excel file.
3174
3616
  *
@@ -3275,13 +3717,13 @@ class Mt {
3275
3717
  }
3276
3718
  }
3277
3719
  class pe extends ht {
3278
- constructor(e, t, s, o, i, r = new Y(), a = new Mt()) {
3720
+ constructor(e, t, s, o, i, r = new Y(), a = new Rt()) {
3279
3721
  var c;
3280
- if (super(e, t, new Ze(s), o), this.eventListener = i, this.copyService = r, this.excelService = a, this.licenseManager = B.getInstance(), this.selectionService = new ut(this), this.api = new ot(this), this.mouseStartAction = "", this.mouseStartWidth = -1, this.mouseStartColumnIndex = -1, this.dragFrom = -1, this.dragTo = -1, this.lastDragFrom = -1, this.lastDragTo = -1, this.firstDraggingRendering = !0, this.lastContextmenu = Date.now(), t.setTableScope(this), i || (this.eventListener = new be()), (c = this.tableOptions) != null && c.autoRestoreOptions) {
3722
+ if (super(e, t, new Ze(s), o), this.eventListener = i, this.copyService = r, this.excelService = a, this.licenseManager = P.getInstance(), this.selectionService = new ut(this), this.api = new ot(this), this.mouseStartAction = "", this.mouseStartWidth = -1, this.mouseStartColumnIndex = -1, this.dragFrom = -1, this.dragTo = -1, this.lastDragFrom = -1, this.lastDragTo = -1, this.firstDraggingRendering = !0, this.lastContextmenu = Date.now(), t.setTableScope(this), i || (this.eventListener = new be()), (c = this.tableOptions) != null && c.autoRestoreOptions) {
3281
3723
  const h = this.tableOptions.autoRestoreOptions, p = h.getStorageKeyFn;
3282
3724
  p && (h.autoRestoreScrollPosition && (this.storeScrollPosStateService = new it(p)), h.autoRestoreCollapsedExpandedState && (this.storeStateCollapsedExpandService = new lt(p)), h.autoRestoreSortingState && (this.storeSortingService = new at(p)));
3283
3725
  }
3284
- this.mouseHandler = new et(this), this.inputHandler = new gt(this), this.resizeHandler = new At(this, o.resizeEventDebounceDelay), this.shortcutService = new yt(this), this.shortcutService.addListener(this.selectionService);
3726
+ this.mouseHandler = new et(this), this.inputHandler = new gt(this), this.resizeHandler = new Et(this, o.resizeEventDebounceDelay), this.shortcutService = new yt(this), this.shortcutService.addListener(this.selectionService);
3285
3727
  const n = this.getSelectionModel ? this.getSelectionModel() : void 0;
3286
3728
  n && n.addEventSelectionChangedListener(this);
3287
3729
  const d = this.getFocusModel ? this.getFocusModel() : void 0;
@@ -3299,7 +3741,7 @@ class pe extends ht {
3299
3741
  *
3300
3742
  * @return {TableScope} - The newly created TableScope instance.
3301
3743
  */
3302
- static create(e, t, s = new ke(), o = new be(), i = new Te(), r = new Y()) {
3744
+ static create(e, t, s = new Fe(), o = new be(), i = new Te(), r = new Y()) {
3303
3745
  return new pe(e, t, i, s, o, r);
3304
3746
  }
3305
3747
  /**
@@ -3699,9 +4141,70 @@ class pe extends ht {
3699
4141
  let e = ((t = this.storeSortingService) == null ? void 0 : t.getSortItems()) ?? [];
3700
4142
  this.tableModel.doSort(e);
3701
4143
  }
4144
+ sort(e) {
4145
+ this.tableModel.sort(e);
4146
+ }
3702
4147
  getDisplayedRowCount() {
3703
4148
  return this.displayedRowCount;
3704
4149
  }
4150
+ /**
4151
+ * Ensures that a specific row is visible in the viewport by scrolling if necessary.
4152
+ * This method checks if the target row is within the currently visible range and
4153
+ * adjusts the scroll position if it's not visible.
4154
+ *
4155
+ * The method performs the following:
4156
+ * 1. Checks if the row is above the current viewport (before first visible row)
4157
+ * 2. Checks if the row is below the current viewport (after last visible row)
4158
+ * 3. Scrolls to make the row visible if needed
4159
+ *
4160
+ * @param {number} rowIndex - The index of the row to make visible
4161
+ * @returns {boolean} Returns true if scrolling was needed and performed, false if the row was already visible
4162
+ *
4163
+ * @example
4164
+ * // Ensure row 5 is visible in the viewport
4165
+ * tableScope.ensureRowIsVisible(5);
4166
+ *
4167
+ * @example
4168
+ * // Example usage in a component
4169
+ * class MyTableComponent {
4170
+ * private tableScope: TableScope;
4171
+ *
4172
+ * scrollToSpecificRow(rowIndex: number) {
4173
+ * // This will scroll the row into view if it's not visible
4174
+ * const didScroll = this.tableScope.ensureRowIsVisible(rowIndex);
4175
+ *
4176
+ * if (didScroll) {
4177
+ * console.log(`Table scrolled to show row ${rowIndex}`);
4178
+ * } else {
4179
+ * console.log(`Row ${rowIndex} was already visible`);
4180
+ * }
4181
+ * }
4182
+ * }
4183
+ *
4184
+ * @example
4185
+ * // Example with row selection
4186
+ * class TableHandler {
4187
+ * selectAndShowRow(rowIndex: number) {
4188
+ * // First ensure the row is visible
4189
+ * this.tableScope.ensureRowIsVisible(rowIndex);
4190
+ *
4191
+ * // Then perform selection
4192
+ * this.selectionModel.selectRow(rowIndex);
4193
+ * }
4194
+ * }
4195
+ *
4196
+ * @throws {Error} Implicitly may throw if rowIndex is not a number or if required properties are undefined
4197
+ *
4198
+ * @see {@link scrollToIndex} - The underlying method used for scrolling
4199
+ * @see {@link getDisplayedRowCount} - Related method for getting visible row count
4200
+ */
4201
+ ensureRowIsVisible(e) {
4202
+ const t = this.firstVisibleRowIndex, s = this.firstVisibleRowIndex + this.displayedRowCount - 1;
4203
+ return e < t ? (this.scrollToIndex(0, e), !0) : e > s ? (this.scrollToIndex(0, e - this.displayedRowCount + 1), !0) : !1;
4204
+ }
4205
+ getFirstVisibleRowIndex() {
4206
+ return this.firstVisibleRowIndex;
4207
+ }
3705
4208
  }
3706
4209
  const J = class J {
3707
4210
  };
@@ -3981,12 +4484,12 @@ const q = class q {
3981
4484
  };
3982
4485
  q.toggleHeaderGroup = "toggleHeaderGroup";
3983
4486
  let ye = q;
3984
- var Rt = /* @__PURE__ */ Ke("<div>");
3985
- const kt = (l) => {
4487
+ var Mt = /* @__PURE__ */ Ke("<div>");
4488
+ const Ft = (l) => {
3986
4489
  let e;
3987
- const t = Ae({
4490
+ const t = Ee({
3988
4491
  tableModel: null,
3989
- tableOptions: new ke()
4492
+ tableOptions: new Fe()
3990
4493
  }, l);
3991
4494
  return We(() => {
3992
4495
  const s = {
@@ -4059,14 +4562,14 @@ const kt = (l) => {
4059
4562
  detail: o.getApi(),
4060
4563
  bubbles: !0
4061
4564
  });
4062
- e && e.dispatchEvent(i), t.licenseKey && B.getInstance().setLicenseKey(t.licenseKey);
4565
+ e && e.dispatchEvent(i), t.licenseKey && P.getInstance().setLicenseKey(t.licenseKey);
4063
4566
  }), (() => {
4064
- var s = Rt(), o = e;
4567
+ var s = Mt(), o = e;
4065
4568
  return typeof o == "function" ? Ye(o, s) : e = s, s;
4066
4569
  })();
4067
4570
  };
4068
4571
  export {
4069
4572
  Tt as ComponentRendererWrapper,
4070
- kt as GuiexpertTable,
4573
+ Ft as GuiexpertTable,
4071
4574
  Dt as GuiexpertTableProps
4072
4575
  };