trotl-table 1.0.80 → 1.0.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Table.cjs.js CHANGED
@@ -9677,6 +9677,8 @@ function TableInner({
9677
9677
  enableMouseRightClick = null,
9678
9678
  customColumns = [],
9679
9679
  groupDefaultOpen = false,
9680
+ groupExpanded = null,
9681
+ onExpandedGroupsChange = () => {},
9680
9682
  showIcons = true,
9681
9683
  timeoutLoading = 5,
9682
9684
  t
@@ -9744,7 +9746,7 @@ function TableInner({
9744
9746
  });
9745
9747
  const [contextMenuModal, setContextMenuModal] = React.useState({
9746
9748
  visible: false,
9747
- title: '',
9749
+ title: "",
9748
9750
  component: null
9749
9751
  });
9750
9752
  React.useEffect(() => {
@@ -9759,7 +9761,7 @@ function TableInner({
9759
9761
  row: null
9760
9762
  });
9761
9763
  const handleEscape = event => {
9762
- if (event.key === 'Escape') {
9764
+ if (event.key === "Escape") {
9763
9765
  setContextMenu({
9764
9766
  visible: false,
9765
9767
  x: 0,
@@ -9768,13 +9770,13 @@ function TableInner({
9768
9770
  });
9769
9771
  }
9770
9772
  };
9771
- window.addEventListener('click', handleClick);
9772
- window.addEventListener('contextmenu', handleClick);
9773
- window.addEventListener('keydown', handleEscape);
9773
+ window.addEventListener("click", handleClick);
9774
+ window.addEventListener("contextmenu", handleClick);
9775
+ window.addEventListener("keydown", handleEscape);
9774
9776
  return () => {
9775
- window.removeEventListener('click', handleClick);
9776
- window.removeEventListener('contextmenu', handleClick);
9777
- window.removeEventListener('keydown', handleEscape);
9777
+ window.removeEventListener("click", handleClick);
9778
+ window.removeEventListener("contextmenu", handleClick);
9779
+ window.removeEventListener("keydown", handleEscape);
9778
9780
  };
9779
9781
  }, [contextMenu.visible]);
9780
9782
  React.useEffect(() => {
@@ -10052,7 +10054,7 @@ function TableInner({
10052
10054
  updateSearchFromUrl();
10053
10055
 
10054
10056
  // Listen for URL changes (back/forward navigation)
10055
- window.addEventListener('popstate', updateSearchFromUrl);
10057
+ window.addEventListener("popstate", updateSearchFromUrl);
10056
10058
 
10057
10059
  // Listen for programmatic URL changes if you use history.pushState/replaceState
10058
10060
  const originalPushState = window.history.pushState;
@@ -10066,7 +10068,7 @@ function TableInner({
10066
10068
  updateSearchFromUrl();
10067
10069
  };
10068
10070
  return () => {
10069
- window.removeEventListener('popstate', updateSearchFromUrl);
10071
+ window.removeEventListener("popstate", updateSearchFromUrl);
10070
10072
  // Restore original methods
10071
10073
  window.history.pushState = originalPushState;
10072
10074
  window.history.replaceState = originalReplaceState;
@@ -10109,7 +10111,7 @@ function TableInner({
10109
10111
  const closeContextMenuModal = React.useCallback(() => {
10110
10112
  setContextMenuModal({
10111
10113
  visible: false,
10112
- title: '',
10114
+ title: "",
10113
10115
  component: null
10114
10116
  });
10115
10117
  }, []);
@@ -10163,7 +10165,7 @@ function TableInner({
10163
10165
  };
10164
10166
 
10165
10167
  // Listen for popstate (back/forward navigation)
10166
- window.addEventListener('popstate', handleDateParamChange);
10168
+ window.addEventListener("popstate", handleDateParamChange);
10167
10169
 
10168
10170
  // Listen for programmatic URL changes
10169
10171
  const originalPushState = window.history.pushState;
@@ -10178,10 +10180,10 @@ function TableInner({
10178
10180
  };
10179
10181
 
10180
10182
  // Listen for hashchange (in case date params are in hash)
10181
- window.addEventListener('hashchange', handleDateParamChange);
10183
+ window.addEventListener("hashchange", handleDateParamChange);
10182
10184
  return () => {
10183
- window.removeEventListener('popstate', handleDateParamChange);
10184
- window.removeEventListener('hashchange', handleDateParamChange);
10185
+ window.removeEventListener("popstate", handleDateParamChange);
10186
+ window.removeEventListener("hashchange", handleDateParamChange);
10185
10187
  window.history.pushState = originalPushState;
10186
10188
  window.history.replaceState = originalReplaceState;
10187
10189
  };
@@ -10189,15 +10191,15 @@ function TableInner({
10189
10191
  const filterRows = React.useCallback(rows => {
10190
10192
  // Check for date-related URL params first
10191
10193
  const urlParams = new URLSearchParams(urlSearchString);
10192
- const _dateParams = ['startDate', 'endDate', 'date'];
10194
+ const _dateParams = ["startDate", "endDate", "date"];
10193
10195
  let dateFiltered = rows;
10194
10196
  for (const paramKey of _dateParams) {
10195
10197
  const paramValue = urlParams.get(paramKey);
10196
10198
  if (!paramValue) continue;
10197
10199
 
10198
10200
  // Check if it's a range (contains ~)
10199
- if (paramValue.includes('~')) {
10200
- const [startTs, endTs] = paramValue.split('~').map(Number);
10201
+ if (paramValue.includes("~")) {
10202
+ const [startTs, endTs] = paramValue.split("~").map(Number);
10201
10203
  if (isNaN(startTs) || isNaN(endTs)) continue;
10202
10204
  dateFiltered = dateFiltered.filter(row => {
10203
10205
  // Check if any date field in the row falls within the range
@@ -10311,12 +10313,24 @@ function TableInner({
10311
10313
  rows: sortRows(g.rows || [])
10312
10314
  }));
10313
10315
  }, [normalizedGroups, sorting, filterRows, getAccessorValue]);
10316
+ const emitExpandedChange = React.useCallback((nextState, toggledGroupId) => {
10317
+ if (typeof onExpandedGroupsChange === "function") {
10318
+ onExpandedGroupsChange(nextState, toggledGroupId);
10319
+ }
10320
+ if (typeof groupExpanded === "function") {
10321
+ groupExpanded(nextState, toggledGroupId);
10322
+ }
10323
+ }, [onExpandedGroupsChange, groupExpanded]);
10314
10324
  const [expandedGroups, setExpandedGroups] = React.useState({});
10315
10325
  const toggleGroup = gid => {
10316
- setExpandedGroups(prev => ({
10317
- ...prev,
10318
- [gid]: !prev[gid]
10319
- }));
10326
+ setExpandedGroups(prev => {
10327
+ const next = {
10328
+ ...prev,
10329
+ [gid]: !prev[gid]
10330
+ };
10331
+ emitExpandedChange(next, gid);
10332
+ return next;
10333
+ });
10320
10334
  };
10321
10335
  React.useEffect(() => {
10322
10336
  // Pre-populate expansion state for all groups
@@ -10331,6 +10345,11 @@ function TableInner({
10331
10345
  return next;
10332
10346
  });
10333
10347
  }, [normalizedGroups, groupKey, groupDefaultOpen]);
10348
+ React.useEffect(() => {
10349
+ if (groupExpanded && typeof groupExpanded === "object") {
10350
+ setExpandedGroups(groupExpanded);
10351
+ }
10352
+ }, [groupExpanded]);
10334
10353
  const groupRowsById = React.useMemo(() => {
10335
10354
  const map = {};
10336
10355
  for (const g of sortedGroupedData) {
@@ -10391,7 +10410,7 @@ function TableInner({
10391
10410
  if (!el) return;
10392
10411
 
10393
10412
  // Try to find the actual scrollable grid element created by react-virtualized
10394
- const grid = el.querySelector('.ReactVirtualized__Grid');
10413
+ const grid = el.querySelector(".ReactVirtualized__Grid");
10395
10414
  const check = () => {
10396
10415
  if (!grid) {
10397
10416
  setHeaderPadRight(0);
@@ -10422,10 +10441,14 @@ function TableInner({
10422
10441
  cancelAnimationFrame(raf);
10423
10442
  try {
10424
10443
  ro.disconnect();
10425
- } catch {/* noop */}
10444
+ } catch {
10445
+ /* noop */
10446
+ }
10426
10447
  try {
10427
10448
  mo.disconnect();
10428
- } catch {/* noop */}
10449
+ } catch {
10450
+ /* noop */
10451
+ }
10429
10452
  };
10430
10453
  }, [listRef, tableDataFlat.length]);
10431
10454
 
@@ -10452,7 +10475,7 @@ function TableInner({
10452
10475
  if (res && res.success === false) return;
10453
10476
  } catch (err) {
10454
10477
  // if callback throws, don't block deletion
10455
- console.error('deleteCallback threw', err);
10478
+ console.error("deleteCallback threw", err);
10456
10479
  }
10457
10480
  }
10458
10481
  setLocalData(prev => {
@@ -10522,8 +10545,18 @@ function TableInner({
10522
10545
  const isUndefinedLike = v === undefined || typeof v === "string" && v.trim().toLowerCase() === "undefined";
10523
10546
  const isNoData = isUndefinedLike;
10524
10547
 
10548
+ // Custom column type (editable in-table)
10549
+ if (col && col.type === "custom") {
10550
+ const customComp = col["modal-comp"];
10551
+ if (customComp) {
10552
+ return /*#__PURE__*/React.createElement("customComp", {
10553
+ value: v
10554
+ });
10555
+ }
10556
+ }
10557
+
10525
10558
  // Checkbox column type (editable in-table)
10526
- if (col && col.type === 'checkbox') {
10559
+ if (col && col.type === "checkbox") {
10527
10560
  const checked = isUndefinedLike ? false : !!v;
10528
10561
  return /*#__PURE__*/React.createElement("input", {
10529
10562
  type: "checkbox",
@@ -10554,14 +10587,14 @@ function TableInner({
10554
10587
  try {
10555
10588
  onCellChangeRef.current?.(row, accessor, next);
10556
10589
  } catch (err) {
10557
- console.error('onCellChange error', err);
10590
+ console.error("onCellChange error", err);
10558
10591
  }
10559
10592
  }
10560
10593
  });
10561
10594
  }
10562
10595
 
10563
10596
  // Switch column type (uses internal Switch component)
10564
- if (col && col.type === 'switch') {
10597
+ if (col && col.type === "switch") {
10565
10598
  const checked = isUndefinedLike ? false : !!v;
10566
10599
  return /*#__PURE__*/React.createElement("div", {
10567
10600
  title: isNoData ? translate("noData") : undefined,
@@ -10572,7 +10605,7 @@ function TableInner({
10572
10605
  }, /*#__PURE__*/React.createElement(Switch.default, {
10573
10606
  checked: checked,
10574
10607
  onChange: valOrEvent => {
10575
- const next = typeof valOrEvent === 'boolean' ? valOrEvent : valOrEvent && valOrEvent.target ? !!valOrEvent.target.checked : !!valOrEvent;
10608
+ const next = typeof valOrEvent === "boolean" ? valOrEvent : valOrEvent && valOrEvent.target ? !!valOrEvent.target.checked : !!valOrEvent;
10576
10609
  setLocalData(prev => {
10577
10610
  if (isGrouped) {
10578
10611
  return prev.map(g => ({
@@ -10592,30 +10625,30 @@ function TableInner({
10592
10625
  try {
10593
10626
  onCellChangeRef.current?.(row, accessor, next);
10594
10627
  } catch (err) {
10595
- console.error('onCellChange error', err);
10628
+ console.error("onCellChange error", err);
10596
10629
  }
10597
10630
  }
10598
10631
  }));
10599
10632
  }
10600
10633
 
10601
10634
  // Color column type (display color swatch background)
10602
- if (col && col.type === 'color') {
10635
+ if (col && col.type === "color") {
10603
10636
  const colorVal = isUndefinedLike ? "transparent" : v || "transparent";
10604
10637
  const text = isUndefinedLike ? "..." : String(colorVal) ;
10605
10638
  return /*#__PURE__*/React.createElement("div", {
10606
10639
  style: {
10607
- width: '100%',
10608
- height: '100%',
10609
- minHeight: '20px',
10640
+ width: "100%",
10641
+ height: "100%",
10642
+ minHeight: "20px",
10610
10643
  backgroundColor: colorVal,
10611
- color: '#000',
10612
- border: '1px solid #ccc',
10613
- boxSizing: 'border-box',
10614
- display: 'flex',
10615
- alignItems: 'center',
10616
- justifyContent: 'center',
10617
- fontSize: '12px',
10618
- overflow: 'hidden'
10644
+ color: "#000",
10645
+ border: "1px solid #ccc",
10646
+ boxSizing: "border-box",
10647
+ display: "flex",
10648
+ alignItems: "center",
10649
+ justifyContent: "center",
10650
+ fontSize: "12px",
10651
+ overflow: "hidden"
10619
10652
  },
10620
10653
  title: isNoData ? translate("noData") : text,
10621
10654
  onClick: () => triggerCellCallback(row, col, colorVal)
@@ -10623,7 +10656,7 @@ function TableInner({
10623
10656
  }
10624
10657
 
10625
10658
  // Input column type (editable text)
10626
- if (col && col.type === 'input') {
10659
+ if (col && col.type === "input") {
10627
10660
  const text = isNoData ? "" : v == null ? "" : String(v);
10628
10661
  return /*#__PURE__*/React.createElement("input", {
10629
10662
  type: "text",
@@ -10656,7 +10689,7 @@ function TableInner({
10656
10689
  try {
10657
10690
  onCellChangeRef.current?.(row, accessor, next);
10658
10691
  } catch (err) {
10659
- console.error('onCellChange error', err);
10692
+ console.error("onCellChange error", err);
10660
10693
  }
10661
10694
  },
10662
10695
  style: {
@@ -10667,7 +10700,7 @@ function TableInner({
10667
10700
  }
10668
10701
 
10669
10702
  // Number column type (format decimals) - default two decimals
10670
- if (col && col.type === 'number') {
10703
+ if (col && col.type === "number") {
10671
10704
  if (isNoData) {
10672
10705
  return /*#__PURE__*/React.createElement("span", {
10673
10706
  title: translate("noData")
@@ -10691,7 +10724,7 @@ function TableInner({
10691
10724
  title: formatted
10692
10725
  }, formatted);
10693
10726
  }
10694
- if (col && col.type === 'array') {
10727
+ if (col && col.type === "array") {
10695
10728
  const arr = Array.isArray(v) ? v : [];
10696
10729
  const list = formatArrayValue(arr, col);
10697
10730
  const count = arr.length;
@@ -10794,7 +10827,7 @@ function TableInner({
10794
10827
  const from = tableDataFlat[fromIndex];
10795
10828
  let to = null;
10796
10829
  let emptyGroupId = null;
10797
- if (typeof toIndexOrGroup === 'object' && toIndexOrGroup && toIndexOrGroup.emptyGroupId) {
10830
+ if (typeof toIndexOrGroup === "object" && toIndexOrGroup && toIndexOrGroup.emptyGroupId) {
10798
10831
  emptyGroupId = toIndexOrGroup.emptyGroupId;
10799
10832
  } else {
10800
10833
  to = tableDataFlat[toIndexOrGroup];
@@ -10889,7 +10922,7 @@ function TableInner({
10889
10922
  newRow = res.newRow;
10890
10923
  }
10891
10924
  } catch (err) {
10892
- console.error('duplicateCallback threw', err);
10925
+ console.error("duplicateCallback threw", err);
10893
10926
  }
10894
10927
  }
10895
10928
  // fallback simple clone if callback didn't provide newRow
@@ -10960,13 +10993,13 @@ function TableInner({
10960
10993
  key: key,
10961
10994
  style: {
10962
10995
  ...style,
10963
- background: '#f6f6fa',
10964
- border: '2px dashed #bbb',
10965
- textAlign: 'center',
10966
- color: '#888',
10996
+ background: "#f6f6fa",
10997
+ border: "2px dashed #bbb",
10998
+ textAlign: "center",
10999
+ color: "#888",
10967
11000
  minHeight: rowHeight,
10968
- display: 'flex',
10969
- alignItems: 'center'
11001
+ display: "flex",
11002
+ alignItems: "center"
10970
11003
  },
10971
11004
  className: "table-row group-row empty-group-drop",
10972
11005
  onClick: () => toggleGroup(gid)
@@ -10995,7 +11028,7 @@ function TableInner({
10995
11028
  }), /*#__PURE__*/React.createElement("div", {
10996
11029
  className: "table-cell group-header",
10997
11030
  title: `${translate(item.groupName)} (0)`
10998
- }, item.expanded ? "▾" : "▸", " ", translate(item.groupName), " (0) \u2014 ", translate("DropHereToMoveIntoThisGroup")), showActions && /*#__PURE__*/React.createElement("div", {
11031
+ }, item.expanded ? "▾" : "▸", " ", translate(item.groupName), " (0) \u2014", " ", translate("DropHereToMoveIntoThisGroup")), showActions && /*#__PURE__*/React.createElement("div", {
10999
11032
  className: "table-cell action-cell",
11000
11033
  style: actionColumnStyle
11001
11034
  }));
@@ -11047,7 +11080,7 @@ function TableInner({
11047
11080
  // Insert custom columns at specified places
11048
11081
  if (Array.isArray(customColumns)) {
11049
11082
  customColumns.forEach(col => {
11050
- if (typeof col.place === 'number') {
11083
+ if (typeof col.place === "number") {
11051
11084
  allColumns.splice(col.place, 0, {
11052
11085
  ...col,
11053
11086
  isCustom: true
@@ -11059,7 +11092,7 @@ function TableInner({
11059
11092
  const handleRowDoubleClick = e => {
11060
11093
  if (!doubleClickEnable) return;
11061
11094
  // ignore if the event originated on an interactive element
11062
- if (e.target.closest('.checkbox-cell') || e.target.closest('button') || e.target.closest('input') || e.target.closest('a')) {
11095
+ if (e.target.closest(".checkbox-cell") || e.target.closest("button") || e.target.closest("input") || e.target.closest("a")) {
11063
11096
  return;
11064
11097
  }
11065
11098
  editCallbackRef.current(row);
@@ -11086,7 +11119,7 @@ function TableInner({
11086
11119
  className: "row-main",
11087
11120
  onDoubleClick: doubleClickEnable ? handleRowDoubleClick : undefined,
11088
11121
  style: {
11089
- display: 'flex',
11122
+ display: "flex",
11090
11123
  flex: 1
11091
11124
  }
11092
11125
  }, enableMultiSelect && /*#__PURE__*/React.createElement("div", {
@@ -11113,7 +11146,7 @@ function TableInner({
11113
11146
  className: "table-cell",
11114
11147
  style: cellStyle,
11115
11148
  onClick: () => triggerCellCallback(row, col)
11116
- }, col.isCustom ? typeof col.render === 'function' ? col.render(row, i) : col.render : renderCell(cellValue, resolvedAccessor, row, col));
11149
+ }, col.isCustom ? typeof col.render === "function" ? col.render(row, i) : col.render : renderCell(cellValue, resolvedAccessor, row, col));
11117
11150
  })), showActions && /*#__PURE__*/React.createElement("div", {
11118
11151
  className: "table-cell action-cell",
11119
11152
  style: actionColumnStyle
@@ -11219,7 +11252,7 @@ function TableInner({
11219
11252
  const allColumns = [...columns];
11220
11253
  if (Array.isArray(customColumns)) {
11221
11254
  customColumns.forEach(col => {
11222
- if (typeof col.place === 'number') {
11255
+ if (typeof col.place === "number") {
11223
11256
  allColumns.splice(col.place, 0, {
11224
11257
  ...col,
11225
11258
  isCustom: true
@@ -11231,9 +11264,9 @@ function TableInner({
11231
11264
  className: "table-container",
11232
11265
  ref: setTableRef,
11233
11266
  style: useExternalDndContext && enableExternalRowDrop ? {
11234
- transition: 'background 0.15s',
11235
- background: isExternalOver && canExternalDrop ? 'rgba(100,108,255,0.15)' : undefined,
11236
- outline: isExternalOver && canExternalDrop ? '2px dashed #646cff' : undefined
11267
+ transition: "background 0.15s",
11268
+ background: isExternalOver && canExternalDrop ? "rgba(100,108,255,0.15)" : undefined,
11269
+ outline: isExternalOver && canExternalDrop ? "2px dashed #646cff" : undefined
11237
11270
  } : undefined
11238
11271
  }, /*#__PURE__*/React.createElement("div", {
11239
11272
  className: "table-header",
@@ -11295,8 +11328,8 @@ function TableInner({
11295
11328
  className: "table-empty",
11296
11329
  style: {
11297
11330
  padding: 24,
11298
- textAlign: 'center',
11299
- color: '#666'
11331
+ textAlign: "center",
11332
+ color: "#666"
11300
11333
  }
11301
11334
  }, translate("noData")) : /*#__PURE__*/React.createElement(AutoSizer, null, ({
11302
11335
  height,
@@ -11317,15 +11350,15 @@ function TableInner({
11317
11350
  cancelLabel: translate("cancel"),
11318
11351
  showCancel: true,
11319
11352
  showConfirm: true
11320
- }, /*#__PURE__*/React.createElement("p", null, translate("areYouSureYouWantToDelete"), " ", /*#__PURE__*/React.createElement("strong", null, pendingDelete ? pendingDelete[deleteLabelKey] ?? pendingDelete.name ?? pendingDelete.id : ''), "?")));
11353
+ }, /*#__PURE__*/React.createElement("p", null, translate("areYouSureYouWantToDelete"), " ", /*#__PURE__*/React.createElement("strong", null, pendingDelete ? pendingDelete[deleteLabelKey] ?? pendingDelete.name ?? pendingDelete.id : ""), "?")));
11321
11354
  const contextMenuMarkup = contextMenu.visible && rightClickActions.length > 0 ? /*#__PURE__*/React.createElement("div", {
11322
11355
  style: {
11323
- position: 'fixed',
11356
+ position: "fixed",
11324
11357
  top: contextMenu.y,
11325
11358
  left: contextMenu.x,
11326
- backgroundColor: '#fff',
11327
- border: '1px solid #ccc',
11328
- boxShadow: '0 2px 8px rgba(0,0,0,.15)',
11359
+ backgroundColor: "#fff",
11360
+ border: "1px solid #ccc",
11361
+ boxShadow: "0 2px 8px rgba(0,0,0,.15)",
11329
11362
  zIndex: 9999,
11330
11363
  minWidth: 160,
11331
11364
  padding: 0,
@@ -11335,11 +11368,11 @@ function TableInner({
11335
11368
  }, rightClickActions.map((action, i) => /*#__PURE__*/React.createElement("div", {
11336
11369
  key: i,
11337
11370
  style: {
11338
- padding: '8px 12px',
11339
- cursor: 'pointer',
11340
- borderBottom: i < rightClickActions.length - 1 ? '1px solid #eee' : 'none',
11341
- backgroundColor: hoveredActionIndex === i ? '#f5f5f5' : '#fff',
11342
- color: hoveredActionIndex === i ? '#000' : '#333'
11371
+ padding: "8px 12px",
11372
+ cursor: "pointer",
11373
+ borderBottom: i < rightClickActions.length - 1 ? "1px solid #eee" : "none",
11374
+ backgroundColor: hoveredActionIndex === i ? "#f5f5f5" : "#fff",
11375
+ color: hoveredActionIndex === i ? "#000" : "#333"
11343
11376
  },
11344
11377
  onMouseEnter: () => setHoveredActionIndex(i),
11345
11378
  onMouseLeave: () => setHoveredActionIndex(null),
@@ -11347,17 +11380,17 @@ function TableInner({
11347
11380
  }, action.label || action.text || `Action ${i + 1}`))) : null;
11348
11381
  const contextMenuModalMarkup = contextMenuModal.visible && contextMenuModal.component ? /*#__PURE__*/React.createElement(Modal.default, {
11349
11382
  isOpen: true,
11350
- title: contextMenuModal.title || '',
11383
+ title: contextMenuModal.title || "",
11351
11384
  onConfirm: () => setContextMenuModal({
11352
11385
  visible: false,
11353
- title: '',
11386
+ title: "",
11354
11387
  component: null
11355
11388
  }),
11356
11389
  onCancel: () => closeContextMenuModal(),
11357
11390
  showConfirm: false,
11358
11391
  showCancel: true,
11359
- cancelLabel: translate('cancel')
11360
- }, typeof contextMenuModal.component === 'function' ? /*#__PURE__*/React.createElement(contextMenuModal.component, {
11392
+ cancelLabel: translate("cancel")
11393
+ }, typeof contextMenuModal.component === "function" ? /*#__PURE__*/React.createElement(contextMenuModal.component, {
11361
11394
  row: contextMenu.row
11362
11395
  }) : contextMenuModal.component) : null;
11363
11396
  return /*#__PURE__*/React.createElement(React.Fragment, null, tableMarkup, contextMenuMarkup, contextMenuModalMarkup);