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.esm.js CHANGED
@@ -9655,6 +9655,8 @@ function TableInner({
9655
9655
  enableMouseRightClick = null,
9656
9656
  customColumns = [],
9657
9657
  groupDefaultOpen = false,
9658
+ groupExpanded = null,
9659
+ onExpandedGroupsChange = () => {},
9658
9660
  showIcons = true,
9659
9661
  timeoutLoading = 5,
9660
9662
  t
@@ -9722,7 +9724,7 @@ function TableInner({
9722
9724
  });
9723
9725
  const [contextMenuModal, setContextMenuModal] = useState({
9724
9726
  visible: false,
9725
- title: '',
9727
+ title: "",
9726
9728
  component: null
9727
9729
  });
9728
9730
  useEffect(() => {
@@ -9737,7 +9739,7 @@ function TableInner({
9737
9739
  row: null
9738
9740
  });
9739
9741
  const handleEscape = event => {
9740
- if (event.key === 'Escape') {
9742
+ if (event.key === "Escape") {
9741
9743
  setContextMenu({
9742
9744
  visible: false,
9743
9745
  x: 0,
@@ -9746,13 +9748,13 @@ function TableInner({
9746
9748
  });
9747
9749
  }
9748
9750
  };
9749
- window.addEventListener('click', handleClick);
9750
- window.addEventListener('contextmenu', handleClick);
9751
- window.addEventListener('keydown', handleEscape);
9751
+ window.addEventListener("click", handleClick);
9752
+ window.addEventListener("contextmenu", handleClick);
9753
+ window.addEventListener("keydown", handleEscape);
9752
9754
  return () => {
9753
- window.removeEventListener('click', handleClick);
9754
- window.removeEventListener('contextmenu', handleClick);
9755
- window.removeEventListener('keydown', handleEscape);
9755
+ window.removeEventListener("click", handleClick);
9756
+ window.removeEventListener("contextmenu", handleClick);
9757
+ window.removeEventListener("keydown", handleEscape);
9756
9758
  };
9757
9759
  }, [contextMenu.visible]);
9758
9760
  useEffect(() => {
@@ -10030,7 +10032,7 @@ function TableInner({
10030
10032
  updateSearchFromUrl();
10031
10033
 
10032
10034
  // Listen for URL changes (back/forward navigation)
10033
- window.addEventListener('popstate', updateSearchFromUrl);
10035
+ window.addEventListener("popstate", updateSearchFromUrl);
10034
10036
 
10035
10037
  // Listen for programmatic URL changes if you use history.pushState/replaceState
10036
10038
  const originalPushState = window.history.pushState;
@@ -10044,7 +10046,7 @@ function TableInner({
10044
10046
  updateSearchFromUrl();
10045
10047
  };
10046
10048
  return () => {
10047
- window.removeEventListener('popstate', updateSearchFromUrl);
10049
+ window.removeEventListener("popstate", updateSearchFromUrl);
10048
10050
  // Restore original methods
10049
10051
  window.history.pushState = originalPushState;
10050
10052
  window.history.replaceState = originalReplaceState;
@@ -10087,7 +10089,7 @@ function TableInner({
10087
10089
  const closeContextMenuModal = useCallback(() => {
10088
10090
  setContextMenuModal({
10089
10091
  visible: false,
10090
- title: '',
10092
+ title: "",
10091
10093
  component: null
10092
10094
  });
10093
10095
  }, []);
@@ -10141,7 +10143,7 @@ function TableInner({
10141
10143
  };
10142
10144
 
10143
10145
  // Listen for popstate (back/forward navigation)
10144
- window.addEventListener('popstate', handleDateParamChange);
10146
+ window.addEventListener("popstate", handleDateParamChange);
10145
10147
 
10146
10148
  // Listen for programmatic URL changes
10147
10149
  const originalPushState = window.history.pushState;
@@ -10156,10 +10158,10 @@ function TableInner({
10156
10158
  };
10157
10159
 
10158
10160
  // Listen for hashchange (in case date params are in hash)
10159
- window.addEventListener('hashchange', handleDateParamChange);
10161
+ window.addEventListener("hashchange", handleDateParamChange);
10160
10162
  return () => {
10161
- window.removeEventListener('popstate', handleDateParamChange);
10162
- window.removeEventListener('hashchange', handleDateParamChange);
10163
+ window.removeEventListener("popstate", handleDateParamChange);
10164
+ window.removeEventListener("hashchange", handleDateParamChange);
10163
10165
  window.history.pushState = originalPushState;
10164
10166
  window.history.replaceState = originalReplaceState;
10165
10167
  };
@@ -10167,15 +10169,15 @@ function TableInner({
10167
10169
  const filterRows = useCallback(rows => {
10168
10170
  // Check for date-related URL params first
10169
10171
  const urlParams = new URLSearchParams(urlSearchString);
10170
- const _dateParams = ['startDate', 'endDate', 'date'];
10172
+ const _dateParams = ["startDate", "endDate", "date"];
10171
10173
  let dateFiltered = rows;
10172
10174
  for (const paramKey of _dateParams) {
10173
10175
  const paramValue = urlParams.get(paramKey);
10174
10176
  if (!paramValue) continue;
10175
10177
 
10176
10178
  // Check if it's a range (contains ~)
10177
- if (paramValue.includes('~')) {
10178
- const [startTs, endTs] = paramValue.split('~').map(Number);
10179
+ if (paramValue.includes("~")) {
10180
+ const [startTs, endTs] = paramValue.split("~").map(Number);
10179
10181
  if (isNaN(startTs) || isNaN(endTs)) continue;
10180
10182
  dateFiltered = dateFiltered.filter(row => {
10181
10183
  // Check if any date field in the row falls within the range
@@ -10289,12 +10291,24 @@ function TableInner({
10289
10291
  rows: sortRows(g.rows || [])
10290
10292
  }));
10291
10293
  }, [normalizedGroups, sorting, filterRows, getAccessorValue]);
10294
+ const emitExpandedChange = useCallback((nextState, toggledGroupId) => {
10295
+ if (typeof onExpandedGroupsChange === "function") {
10296
+ onExpandedGroupsChange(nextState, toggledGroupId);
10297
+ }
10298
+ if (typeof groupExpanded === "function") {
10299
+ groupExpanded(nextState, toggledGroupId);
10300
+ }
10301
+ }, [onExpandedGroupsChange, groupExpanded]);
10292
10302
  const [expandedGroups, setExpandedGroups] = useState({});
10293
10303
  const toggleGroup = gid => {
10294
- setExpandedGroups(prev => ({
10295
- ...prev,
10296
- [gid]: !prev[gid]
10297
- }));
10304
+ setExpandedGroups(prev => {
10305
+ const next = {
10306
+ ...prev,
10307
+ [gid]: !prev[gid]
10308
+ };
10309
+ emitExpandedChange(next, gid);
10310
+ return next;
10311
+ });
10298
10312
  };
10299
10313
  useEffect(() => {
10300
10314
  // Pre-populate expansion state for all groups
@@ -10309,6 +10323,11 @@ function TableInner({
10309
10323
  return next;
10310
10324
  });
10311
10325
  }, [normalizedGroups, groupKey, groupDefaultOpen]);
10326
+ useEffect(() => {
10327
+ if (groupExpanded && typeof groupExpanded === "object") {
10328
+ setExpandedGroups(groupExpanded);
10329
+ }
10330
+ }, [groupExpanded]);
10312
10331
  const groupRowsById = useMemo(() => {
10313
10332
  const map = {};
10314
10333
  for (const g of sortedGroupedData) {
@@ -10369,7 +10388,7 @@ function TableInner({
10369
10388
  if (!el) return;
10370
10389
 
10371
10390
  // Try to find the actual scrollable grid element created by react-virtualized
10372
- const grid = el.querySelector('.ReactVirtualized__Grid');
10391
+ const grid = el.querySelector(".ReactVirtualized__Grid");
10373
10392
  const check = () => {
10374
10393
  if (!grid) {
10375
10394
  setHeaderPadRight(0);
@@ -10400,10 +10419,14 @@ function TableInner({
10400
10419
  cancelAnimationFrame(raf);
10401
10420
  try {
10402
10421
  ro.disconnect();
10403
- } catch {/* noop */}
10422
+ } catch {
10423
+ /* noop */
10424
+ }
10404
10425
  try {
10405
10426
  mo.disconnect();
10406
- } catch {/* noop */}
10427
+ } catch {
10428
+ /* noop */
10429
+ }
10407
10430
  };
10408
10431
  }, [listRef, tableDataFlat.length]);
10409
10432
 
@@ -10430,7 +10453,7 @@ function TableInner({
10430
10453
  if (res && res.success === false) return;
10431
10454
  } catch (err) {
10432
10455
  // if callback throws, don't block deletion
10433
- console.error('deleteCallback threw', err);
10456
+ console.error("deleteCallback threw", err);
10434
10457
  }
10435
10458
  }
10436
10459
  setLocalData(prev => {
@@ -10500,8 +10523,18 @@ function TableInner({
10500
10523
  const isUndefinedLike = v === undefined || typeof v === "string" && v.trim().toLowerCase() === "undefined";
10501
10524
  const isNoData = isUndefinedLike;
10502
10525
 
10526
+ // Custom column type (editable in-table)
10527
+ if (col && col.type === "custom") {
10528
+ const customComp = col["modal-comp"];
10529
+ if (customComp) {
10530
+ return /*#__PURE__*/React__default.createElement("customComp", {
10531
+ value: v
10532
+ });
10533
+ }
10534
+ }
10535
+
10503
10536
  // Checkbox column type (editable in-table)
10504
- if (col && col.type === 'checkbox') {
10537
+ if (col && col.type === "checkbox") {
10505
10538
  const checked = isUndefinedLike ? false : !!v;
10506
10539
  return /*#__PURE__*/React__default.createElement("input", {
10507
10540
  type: "checkbox",
@@ -10532,14 +10565,14 @@ function TableInner({
10532
10565
  try {
10533
10566
  onCellChangeRef.current?.(row, accessor, next);
10534
10567
  } catch (err) {
10535
- console.error('onCellChange error', err);
10568
+ console.error("onCellChange error", err);
10536
10569
  }
10537
10570
  }
10538
10571
  });
10539
10572
  }
10540
10573
 
10541
10574
  // Switch column type (uses internal Switch component)
10542
- if (col && col.type === 'switch') {
10575
+ if (col && col.type === "switch") {
10543
10576
  const checked = isUndefinedLike ? false : !!v;
10544
10577
  return /*#__PURE__*/React__default.createElement("div", {
10545
10578
  title: isNoData ? translate("noData") : undefined,
@@ -10550,7 +10583,7 @@ function TableInner({
10550
10583
  }, /*#__PURE__*/React__default.createElement(Switch, {
10551
10584
  checked: checked,
10552
10585
  onChange: valOrEvent => {
10553
- const next = typeof valOrEvent === 'boolean' ? valOrEvent : valOrEvent && valOrEvent.target ? !!valOrEvent.target.checked : !!valOrEvent;
10586
+ const next = typeof valOrEvent === "boolean" ? valOrEvent : valOrEvent && valOrEvent.target ? !!valOrEvent.target.checked : !!valOrEvent;
10554
10587
  setLocalData(prev => {
10555
10588
  if (isGrouped) {
10556
10589
  return prev.map(g => ({
@@ -10570,30 +10603,30 @@ function TableInner({
10570
10603
  try {
10571
10604
  onCellChangeRef.current?.(row, accessor, next);
10572
10605
  } catch (err) {
10573
- console.error('onCellChange error', err);
10606
+ console.error("onCellChange error", err);
10574
10607
  }
10575
10608
  }
10576
10609
  }));
10577
10610
  }
10578
10611
 
10579
10612
  // Color column type (display color swatch background)
10580
- if (col && col.type === 'color') {
10613
+ if (col && col.type === "color") {
10581
10614
  const colorVal = isUndefinedLike ? "transparent" : v || "transparent";
10582
10615
  const text = isUndefinedLike ? "..." : String(colorVal) ;
10583
10616
  return /*#__PURE__*/React__default.createElement("div", {
10584
10617
  style: {
10585
- width: '100%',
10586
- height: '100%',
10587
- minHeight: '20px',
10618
+ width: "100%",
10619
+ height: "100%",
10620
+ minHeight: "20px",
10588
10621
  backgroundColor: colorVal,
10589
- color: '#000',
10590
- border: '1px solid #ccc',
10591
- boxSizing: 'border-box',
10592
- display: 'flex',
10593
- alignItems: 'center',
10594
- justifyContent: 'center',
10595
- fontSize: '12px',
10596
- overflow: 'hidden'
10622
+ color: "#000",
10623
+ border: "1px solid #ccc",
10624
+ boxSizing: "border-box",
10625
+ display: "flex",
10626
+ alignItems: "center",
10627
+ justifyContent: "center",
10628
+ fontSize: "12px",
10629
+ overflow: "hidden"
10597
10630
  },
10598
10631
  title: isNoData ? translate("noData") : text,
10599
10632
  onClick: () => triggerCellCallback(row, col, colorVal)
@@ -10601,7 +10634,7 @@ function TableInner({
10601
10634
  }
10602
10635
 
10603
10636
  // Input column type (editable text)
10604
- if (col && col.type === 'input') {
10637
+ if (col && col.type === "input") {
10605
10638
  const text = isNoData ? "" : v == null ? "" : String(v);
10606
10639
  return /*#__PURE__*/React__default.createElement("input", {
10607
10640
  type: "text",
@@ -10634,7 +10667,7 @@ function TableInner({
10634
10667
  try {
10635
10668
  onCellChangeRef.current?.(row, accessor, next);
10636
10669
  } catch (err) {
10637
- console.error('onCellChange error', err);
10670
+ console.error("onCellChange error", err);
10638
10671
  }
10639
10672
  },
10640
10673
  style: {
@@ -10645,7 +10678,7 @@ function TableInner({
10645
10678
  }
10646
10679
 
10647
10680
  // Number column type (format decimals) - default two decimals
10648
- if (col && col.type === 'number') {
10681
+ if (col && col.type === "number") {
10649
10682
  if (isNoData) {
10650
10683
  return /*#__PURE__*/React__default.createElement("span", {
10651
10684
  title: translate("noData")
@@ -10669,7 +10702,7 @@ function TableInner({
10669
10702
  title: formatted
10670
10703
  }, formatted);
10671
10704
  }
10672
- if (col && col.type === 'array') {
10705
+ if (col && col.type === "array") {
10673
10706
  const arr = Array.isArray(v) ? v : [];
10674
10707
  const list = formatArrayValue(arr, col);
10675
10708
  const count = arr.length;
@@ -10772,7 +10805,7 @@ function TableInner({
10772
10805
  const from = tableDataFlat[fromIndex];
10773
10806
  let to = null;
10774
10807
  let emptyGroupId = null;
10775
- if (typeof toIndexOrGroup === 'object' && toIndexOrGroup && toIndexOrGroup.emptyGroupId) {
10808
+ if (typeof toIndexOrGroup === "object" && toIndexOrGroup && toIndexOrGroup.emptyGroupId) {
10776
10809
  emptyGroupId = toIndexOrGroup.emptyGroupId;
10777
10810
  } else {
10778
10811
  to = tableDataFlat[toIndexOrGroup];
@@ -10867,7 +10900,7 @@ function TableInner({
10867
10900
  newRow = res.newRow;
10868
10901
  }
10869
10902
  } catch (err) {
10870
- console.error('duplicateCallback threw', err);
10903
+ console.error("duplicateCallback threw", err);
10871
10904
  }
10872
10905
  }
10873
10906
  // fallback simple clone if callback didn't provide newRow
@@ -10938,13 +10971,13 @@ function TableInner({
10938
10971
  key: key,
10939
10972
  style: {
10940
10973
  ...style,
10941
- background: '#f6f6fa',
10942
- border: '2px dashed #bbb',
10943
- textAlign: 'center',
10944
- color: '#888',
10974
+ background: "#f6f6fa",
10975
+ border: "2px dashed #bbb",
10976
+ textAlign: "center",
10977
+ color: "#888",
10945
10978
  minHeight: rowHeight,
10946
- display: 'flex',
10947
- alignItems: 'center'
10979
+ display: "flex",
10980
+ alignItems: "center"
10948
10981
  },
10949
10982
  className: "table-row group-row empty-group-drop",
10950
10983
  onClick: () => toggleGroup(gid)
@@ -10973,7 +11006,7 @@ function TableInner({
10973
11006
  }), /*#__PURE__*/React__default.createElement("div", {
10974
11007
  className: "table-cell group-header",
10975
11008
  title: `${translate(item.groupName)} (0)`
10976
- }, item.expanded ? "▾" : "▸", " ", translate(item.groupName), " (0) \u2014 ", translate("DropHereToMoveIntoThisGroup")), showActions && /*#__PURE__*/React__default.createElement("div", {
11009
+ }, item.expanded ? "▾" : "▸", " ", translate(item.groupName), " (0) \u2014", " ", translate("DropHereToMoveIntoThisGroup")), showActions && /*#__PURE__*/React__default.createElement("div", {
10977
11010
  className: "table-cell action-cell",
10978
11011
  style: actionColumnStyle
10979
11012
  }));
@@ -11025,7 +11058,7 @@ function TableInner({
11025
11058
  // Insert custom columns at specified places
11026
11059
  if (Array.isArray(customColumns)) {
11027
11060
  customColumns.forEach(col => {
11028
- if (typeof col.place === 'number') {
11061
+ if (typeof col.place === "number") {
11029
11062
  allColumns.splice(col.place, 0, {
11030
11063
  ...col,
11031
11064
  isCustom: true
@@ -11037,7 +11070,7 @@ function TableInner({
11037
11070
  const handleRowDoubleClick = e => {
11038
11071
  if (!doubleClickEnable) return;
11039
11072
  // ignore if the event originated on an interactive element
11040
- if (e.target.closest('.checkbox-cell') || e.target.closest('button') || e.target.closest('input') || e.target.closest('a')) {
11073
+ if (e.target.closest(".checkbox-cell") || e.target.closest("button") || e.target.closest("input") || e.target.closest("a")) {
11041
11074
  return;
11042
11075
  }
11043
11076
  editCallbackRef.current(row);
@@ -11064,7 +11097,7 @@ function TableInner({
11064
11097
  className: "row-main",
11065
11098
  onDoubleClick: doubleClickEnable ? handleRowDoubleClick : undefined,
11066
11099
  style: {
11067
- display: 'flex',
11100
+ display: "flex",
11068
11101
  flex: 1
11069
11102
  }
11070
11103
  }, enableMultiSelect && /*#__PURE__*/React__default.createElement("div", {
@@ -11091,7 +11124,7 @@ function TableInner({
11091
11124
  className: "table-cell",
11092
11125
  style: cellStyle,
11093
11126
  onClick: () => triggerCellCallback(row, col)
11094
- }, col.isCustom ? typeof col.render === 'function' ? col.render(row, i) : col.render : renderCell(cellValue, resolvedAccessor, row, col));
11127
+ }, col.isCustom ? typeof col.render === "function" ? col.render(row, i) : col.render : renderCell(cellValue, resolvedAccessor, row, col));
11095
11128
  })), showActions && /*#__PURE__*/React__default.createElement("div", {
11096
11129
  className: "table-cell action-cell",
11097
11130
  style: actionColumnStyle
@@ -11197,7 +11230,7 @@ function TableInner({
11197
11230
  const allColumns = [...columns];
11198
11231
  if (Array.isArray(customColumns)) {
11199
11232
  customColumns.forEach(col => {
11200
- if (typeof col.place === 'number') {
11233
+ if (typeof col.place === "number") {
11201
11234
  allColumns.splice(col.place, 0, {
11202
11235
  ...col,
11203
11236
  isCustom: true
@@ -11209,9 +11242,9 @@ function TableInner({
11209
11242
  className: "table-container",
11210
11243
  ref: setTableRef,
11211
11244
  style: useExternalDndContext && enableExternalRowDrop ? {
11212
- transition: 'background 0.15s',
11213
- background: isExternalOver && canExternalDrop ? 'rgba(100,108,255,0.15)' : undefined,
11214
- outline: isExternalOver && canExternalDrop ? '2px dashed #646cff' : undefined
11245
+ transition: "background 0.15s",
11246
+ background: isExternalOver && canExternalDrop ? "rgba(100,108,255,0.15)" : undefined,
11247
+ outline: isExternalOver && canExternalDrop ? "2px dashed #646cff" : undefined
11215
11248
  } : undefined
11216
11249
  }, /*#__PURE__*/React__default.createElement("div", {
11217
11250
  className: "table-header",
@@ -11273,8 +11306,8 @@ function TableInner({
11273
11306
  className: "table-empty",
11274
11307
  style: {
11275
11308
  padding: 24,
11276
- textAlign: 'center',
11277
- color: '#666'
11309
+ textAlign: "center",
11310
+ color: "#666"
11278
11311
  }
11279
11312
  }, translate("noData")) : /*#__PURE__*/React__default.createElement(AutoSizer, null, ({
11280
11313
  height,
@@ -11295,15 +11328,15 @@ function TableInner({
11295
11328
  cancelLabel: translate("cancel"),
11296
11329
  showCancel: true,
11297
11330
  showConfirm: true
11298
- }, /*#__PURE__*/React__default.createElement("p", null, translate("areYouSureYouWantToDelete"), " ", /*#__PURE__*/React__default.createElement("strong", null, pendingDelete ? pendingDelete[deleteLabelKey] ?? pendingDelete.name ?? pendingDelete.id : ''), "?")));
11331
+ }, /*#__PURE__*/React__default.createElement("p", null, translate("areYouSureYouWantToDelete"), " ", /*#__PURE__*/React__default.createElement("strong", null, pendingDelete ? pendingDelete[deleteLabelKey] ?? pendingDelete.name ?? pendingDelete.id : ""), "?")));
11299
11332
  const contextMenuMarkup = contextMenu.visible && rightClickActions.length > 0 ? /*#__PURE__*/React__default.createElement("div", {
11300
11333
  style: {
11301
- position: 'fixed',
11334
+ position: "fixed",
11302
11335
  top: contextMenu.y,
11303
11336
  left: contextMenu.x,
11304
- backgroundColor: '#fff',
11305
- border: '1px solid #ccc',
11306
- boxShadow: '0 2px 8px rgba(0,0,0,.15)',
11337
+ backgroundColor: "#fff",
11338
+ border: "1px solid #ccc",
11339
+ boxShadow: "0 2px 8px rgba(0,0,0,.15)",
11307
11340
  zIndex: 9999,
11308
11341
  minWidth: 160,
11309
11342
  padding: 0,
@@ -11313,11 +11346,11 @@ function TableInner({
11313
11346
  }, rightClickActions.map((action, i) => /*#__PURE__*/React__default.createElement("div", {
11314
11347
  key: i,
11315
11348
  style: {
11316
- padding: '8px 12px',
11317
- cursor: 'pointer',
11318
- borderBottom: i < rightClickActions.length - 1 ? '1px solid #eee' : 'none',
11319
- backgroundColor: hoveredActionIndex === i ? '#f5f5f5' : '#fff',
11320
- color: hoveredActionIndex === i ? '#000' : '#333'
11349
+ padding: "8px 12px",
11350
+ cursor: "pointer",
11351
+ borderBottom: i < rightClickActions.length - 1 ? "1px solid #eee" : "none",
11352
+ backgroundColor: hoveredActionIndex === i ? "#f5f5f5" : "#fff",
11353
+ color: hoveredActionIndex === i ? "#000" : "#333"
11321
11354
  },
11322
11355
  onMouseEnter: () => setHoveredActionIndex(i),
11323
11356
  onMouseLeave: () => setHoveredActionIndex(null),
@@ -11325,17 +11358,17 @@ function TableInner({
11325
11358
  }, action.label || action.text || `Action ${i + 1}`))) : null;
11326
11359
  const contextMenuModalMarkup = contextMenuModal.visible && contextMenuModal.component ? /*#__PURE__*/React__default.createElement(Modal, {
11327
11360
  isOpen: true,
11328
- title: contextMenuModal.title || '',
11361
+ title: contextMenuModal.title || "",
11329
11362
  onConfirm: () => setContextMenuModal({
11330
11363
  visible: false,
11331
- title: '',
11364
+ title: "",
11332
11365
  component: null
11333
11366
  }),
11334
11367
  onCancel: () => closeContextMenuModal(),
11335
11368
  showConfirm: false,
11336
11369
  showCancel: true,
11337
- cancelLabel: translate('cancel')
11338
- }, typeof contextMenuModal.component === 'function' ? /*#__PURE__*/React__default.createElement(contextMenuModal.component, {
11370
+ cancelLabel: translate("cancel")
11371
+ }, typeof contextMenuModal.component === "function" ? /*#__PURE__*/React__default.createElement(contextMenuModal.component, {
11339
11372
  row: contextMenu.row
11340
11373
  }) : contextMenuModal.component) : null;
11341
11374
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, tableMarkup, contextMenuMarkup, contextMenuModalMarkup);