@osdk/react-components 0.1.0-beta.1 → 0.1.0-beta.2

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 (116) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/build/browser/object-table/CellContextMenu.js +48 -0
  3. package/build/browser/object-table/CellContextMenu.js.map +1 -0
  4. package/build/browser/object-table/ObjectTable.js +53 -9
  5. package/build/browser/object-table/ObjectTable.js.map +1 -1
  6. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  7. package/build/browser/object-table/SelectionCells.js +67 -0
  8. package/build/browser/object-table/SelectionCells.js.map +1 -0
  9. package/build/browser/object-table/Table.js +8 -4
  10. package/build/browser/object-table/Table.js.map +1 -1
  11. package/build/browser/object-table/TableBody.js +3 -1
  12. package/build/browser/object-table/TableBody.js.map +1 -1
  13. package/build/browser/object-table/TableCell.js +51 -0
  14. package/build/browser/object-table/TableCell.js.map +1 -0
  15. package/build/browser/object-table/TableHeader.js +20 -4
  16. package/build/browser/object-table/TableHeader.js.map +1 -1
  17. package/build/browser/object-table/TableRow.js +7 -9
  18. package/build/browser/object-table/TableRow.js.map +1 -1
  19. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
  20. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
  21. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
  22. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  23. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
  24. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
  25. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
  26. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
  27. package/build/browser/object-table/hooks/useCellContextMenu.js +48 -0
  28. package/build/browser/object-table/hooks/useCellContextMenu.js.map +1 -0
  29. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  30. package/build/browser/object-table/hooks/useObjectTableData.js +3 -2
  31. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  32. package/build/browser/object-table/hooks/useRowSelection.js +180 -0
  33. package/build/browser/object-table/hooks/useRowSelection.js.map +1 -0
  34. package/build/browser/object-table/hooks/useSelectionColumn.js +51 -0
  35. package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -0
  36. package/build/browser/object-table/utils/getRowId.js +21 -0
  37. package/build/browser/object-table/utils/getRowId.js.map +1 -0
  38. package/build/browser/public/experimental.js +1 -0
  39. package/build/browser/public/experimental.js.map +1 -1
  40. package/build/cjs/public/experimental.cjs +406 -30
  41. package/build/cjs/public/experimental.cjs.map +1 -1
  42. package/build/cjs/public/experimental.d.cts +6 -11
  43. package/build/esm/object-table/CellContextMenu.js +48 -0
  44. package/build/esm/object-table/CellContextMenu.js.map +1 -0
  45. package/build/esm/object-table/ObjectTable.js +53 -9
  46. package/build/esm/object-table/ObjectTable.js.map +1 -1
  47. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  48. package/build/esm/object-table/SelectionCells.js +67 -0
  49. package/build/esm/object-table/SelectionCells.js.map +1 -0
  50. package/build/esm/object-table/Table.js +8 -4
  51. package/build/esm/object-table/Table.js.map +1 -1
  52. package/build/esm/object-table/TableBody.js +3 -1
  53. package/build/esm/object-table/TableBody.js.map +1 -1
  54. package/build/esm/object-table/TableCell.js +51 -0
  55. package/build/esm/object-table/TableCell.js.map +1 -0
  56. package/build/esm/object-table/TableHeader.js +20 -4
  57. package/build/esm/object-table/TableHeader.js.map +1 -1
  58. package/build/esm/object-table/TableRow.js +7 -9
  59. package/build/esm/object-table/TableRow.js.map +1 -1
  60. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
  61. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
  62. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
  63. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  64. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
  65. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
  66. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
  67. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
  68. package/build/esm/object-table/hooks/useCellContextMenu.js +48 -0
  69. package/build/esm/object-table/hooks/useCellContextMenu.js.map +1 -0
  70. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  71. package/build/esm/object-table/hooks/useObjectTableData.js +3 -2
  72. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  73. package/build/esm/object-table/hooks/useRowSelection.js +180 -0
  74. package/build/esm/object-table/hooks/useRowSelection.js.map +1 -0
  75. package/build/esm/object-table/hooks/useSelectionColumn.js +51 -0
  76. package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -0
  77. package/build/esm/object-table/utils/getRowId.js +21 -0
  78. package/build/esm/object-table/utils/getRowId.js.map +1 -0
  79. package/build/esm/public/experimental.js +1 -0
  80. package/build/esm/public/experimental.js.map +1 -1
  81. package/build/types/object-table/CellContextMenu.d.ts +11 -0
  82. package/build/types/object-table/CellContextMenu.d.ts.map +1 -0
  83. package/build/types/object-table/ObjectTable.d.ts +1 -1
  84. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  85. package/build/types/object-table/ObjectTableApi.d.ts +5 -10
  86. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  87. package/build/types/object-table/SelectionCells.d.ts +14 -0
  88. package/build/types/object-table/SelectionCells.d.ts.map +1 -0
  89. package/build/types/object-table/Table.d.ts +4 -3
  90. package/build/types/object-table/Table.d.ts.map +1 -1
  91. package/build/types/object-table/TableBody.d.ts +3 -2
  92. package/build/types/object-table/TableBody.d.ts.map +1 -1
  93. package/build/types/object-table/TableCell.d.ts +8 -0
  94. package/build/types/object-table/TableCell.d.ts.map +1 -0
  95. package/build/types/object-table/TableHeader.d.ts +3 -3
  96. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  97. package/build/types/object-table/TableRow.d.ts +3 -2
  98. package/build/types/object-table/TableRow.d.ts.map +1 -1
  99. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +1 -0
  100. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +1 -0
  101. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +1 -0
  102. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +1 -0
  103. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +1 -0
  104. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +1 -0
  105. package/build/types/object-table/hooks/useCellContextMenu.d.ts +17 -0
  106. package/build/types/object-table/hooks/useCellContextMenu.d.ts.map +1 -0
  107. package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -2
  108. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  109. package/build/types/object-table/hooks/useRowSelection.d.ts +22 -0
  110. package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -0
  111. package/build/types/object-table/hooks/useSelectionColumn.d.ts +15 -0
  112. package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -0
  113. package/build/types/object-table/utils/getRowId.d.ts +6 -0
  114. package/build/types/object-table/utils/getRowId.d.ts.map +1 -0
  115. package/build/types/public/experimental.d.ts.map +1 -1
  116. package/package.json +6 -4
@@ -1315,10 +1315,10 @@ function passiveEventSupported() {
1315
1315
  return false;
1316
1316
  }
1317
1317
  };
1318
- const noop = () => {
1318
+ const noop2 = () => {
1319
1319
  };
1320
- window.addEventListener("test", noop, options);
1321
- window.removeEventListener("test", noop);
1320
+ window.addEventListener("test", noop2, options);
1321
+ window.removeEventListener("test", noop2);
1322
1322
  } catch (err) {
1323
1323
  supported = false;
1324
1324
  }
@@ -2782,7 +2782,7 @@ var useDefaultTableStates = ({
2782
2782
  };
2783
2783
  };
2784
2784
  var PAGE_SIZE = 50;
2785
- function useObjectTableData(objectSet, columnDefinitions) {
2785
+ function useObjectTableData(objectSet, columnDefinitions, filter) {
2786
2786
  const withProperties = React2.useMemo(() => {
2787
2787
  if (!columnDefinitions) {
2788
2788
  return;
@@ -2799,10 +2799,232 @@ function useObjectTableData(objectSet, columnDefinitions) {
2799
2799
  }, [columnDefinitions]);
2800
2800
  return experimental.useObjectSet(objectSet, {
2801
2801
  withProperties,
2802
- pageSize: PAGE_SIZE
2802
+ pageSize: PAGE_SIZE,
2803
+ where: filter
2803
2804
  });
2804
2805
  }
2805
2806
 
2807
+ // src/object-table/utils/getRowId.ts
2808
+ var getRowId = (row) => {
2809
+ return getRowIdFromPrimaryKey(row.$primaryKey);
2810
+ };
2811
+ var getRowIdFromPrimaryKey = (primaryKey) => primaryKey.toString();
2812
+
2813
+ // src/object-table/hooks/useRowSelection.ts
2814
+ function useRowSelection({
2815
+ selectionMode = "none",
2816
+ selectedRows,
2817
+ onRowSelection,
2818
+ data
2819
+ }) {
2820
+ const [internalRowSelection, setInternalRowSelection] = React2.useState({});
2821
+ const [lastSelectedRowIndex, setLastSelectedRowIndex] = React2.useState(null);
2822
+ const isControlled = selectedRows !== void 0;
2823
+ const isSelectionEnabled = selectionMode !== "none";
2824
+ const rowSelectionState = React2.useMemo(() => {
2825
+ if (!isSelectionEnabled) return {};
2826
+ if (isControlled && selectedRows) {
2827
+ return getRowSelectionState(selectedRows);
2828
+ }
2829
+ return internalRowSelection;
2830
+ }, [isSelectionEnabled, isControlled, selectedRows, internalRowSelection]);
2831
+ const selectedCount = Object.values(rowSelectionState).filter(Boolean).length;
2832
+ const totalCount = data?.length ?? 0;
2833
+ const isAllSelected = totalCount > 0 && selectedCount === totalCount;
2834
+ const hasSelection = selectedCount > 0;
2835
+ const onToggleAll = React2.useCallback(() => {
2836
+ if (!isSelectionEnabled || !data) return;
2837
+ const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
2838
+ if (!isControlled) {
2839
+ setInternalRowSelection(getRowSelectionState(newSelectedRows));
2840
+ }
2841
+ onRowSelection?.(newSelectedRows);
2842
+ }, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
2843
+ const onToggleRow = React2.useCallback((rowId, rowIndex, isShiftClick = false) => {
2844
+ if (!isSelectionEnabled || !data) return;
2845
+ let newSelectedRows = [];
2846
+ if (selectionMode === "single") {
2847
+ newSelectedRows = getSingleSelectionRows({
2848
+ rowId,
2849
+ rowIndex,
2850
+ data,
2851
+ rowSelectionState
2852
+ });
2853
+ setLastSelectedRowIndex(rowIndex);
2854
+ } else {
2855
+ if (isShiftClick && lastSelectedRowIndex != null) {
2856
+ newSelectedRows = getRangeSelectionRows({
2857
+ rowIndex,
2858
+ data,
2859
+ lastSelectedRowIndex,
2860
+ rowSelectionState
2861
+ });
2862
+ } else {
2863
+ newSelectedRows = getMultipleSelectionRows({
2864
+ rowIndex,
2865
+ data,
2866
+ rowSelectionState
2867
+ });
2868
+ }
2869
+ setLastSelectedRowIndex(rowIndex);
2870
+ }
2871
+ if (!isControlled) {
2872
+ setInternalRowSelection(getRowSelectionState(newSelectedRows));
2873
+ }
2874
+ onRowSelection?.(newSelectedRows);
2875
+ }, [isSelectionEnabled, data, selectionMode, lastSelectedRowIndex, isControlled, rowSelectionState, onRowSelection]);
2876
+ return {
2877
+ rowSelection: rowSelectionState,
2878
+ isAllSelected,
2879
+ hasSelection,
2880
+ onToggleAll,
2881
+ onToggleRow
2882
+ };
2883
+ }
2884
+ function getSingleSelectionRows({
2885
+ rowId,
2886
+ rowIndex,
2887
+ data,
2888
+ rowSelectionState
2889
+ }) {
2890
+ const primaryKey = data[rowIndex].$primaryKey;
2891
+ const newSelectedRows = rowSelectionState[rowId] ? [] : [primaryKey];
2892
+ return newSelectedRows;
2893
+ }
2894
+ function getRangeSelectionRows({
2895
+ lastSelectedRowIndex,
2896
+ rowIndex,
2897
+ data,
2898
+ rowSelectionState
2899
+ }) {
2900
+ if (lastSelectedRowIndex != null) {
2901
+ const rowsInRange = getRowsInRange(data, lastSelectedRowIndex, rowIndex);
2902
+ const primaryKeysInRange = rowsInRange.map((item) => item.$primaryKey);
2903
+ const currentlySelected = getSelectedPrimaryKeys(rowSelectionState, data);
2904
+ const newSelectedRows = [...currentlySelected];
2905
+ primaryKeysInRange.forEach((item) => {
2906
+ if (!newSelectedRows.includes(item)) {
2907
+ newSelectedRows.push(item);
2908
+ }
2909
+ });
2910
+ return newSelectedRows;
2911
+ }
2912
+ return [];
2913
+ }
2914
+ function getMultipleSelectionRows({
2915
+ rowIndex,
2916
+ data,
2917
+ rowSelectionState
2918
+ }) {
2919
+ const primaryKey = data[rowIndex].$primaryKey;
2920
+ const currentlySelected = getSelectedPrimaryKeys(rowSelectionState, data);
2921
+ const newSelectedRows = currentlySelected.includes(primaryKey) ? currentlySelected.filter((i) => i !== primaryKey) : [...currentlySelected, primaryKey];
2922
+ return newSelectedRows;
2923
+ }
2924
+ function getRowsInRange(data, startIndex, endIndex) {
2925
+ const start = Math.min(startIndex, endIndex);
2926
+ const end = Math.max(startIndex, endIndex);
2927
+ const rows = [];
2928
+ for (let i = start; i <= end; i++) {
2929
+ const item = data[i];
2930
+ if (item) {
2931
+ rows.push(item);
2932
+ }
2933
+ }
2934
+ return rows;
2935
+ }
2936
+ function getRowSelectionState(primaryKeys) {
2937
+ return primaryKeys.reduce((acc, primaryKey) => {
2938
+ acc[getRowIdFromPrimaryKey(primaryKey)] = true;
2939
+ return acc;
2940
+ }, {});
2941
+ }
2942
+ function getSelectedPrimaryKeys(selectionState, data) {
2943
+ return data.filter((item) => selectionState[getRowId(item)]).map((item) => item.$primaryKey);
2944
+ }
2945
+ function SelectionHeaderCell({
2946
+ isAllSelected,
2947
+ hasSelection,
2948
+ onToggleAll
2949
+ }) {
2950
+ return /* @__PURE__ */ React2__namespace.default.createElement("div", {
2951
+ style: {
2952
+ display: "flex",
2953
+ alignItems: "center",
2954
+ justifyContent: "center",
2955
+ width: "100%"
2956
+ }
2957
+ }, /* @__PURE__ */ React2__namespace.default.createElement("input", {
2958
+ type: "checkbox",
2959
+ checked: isAllSelected,
2960
+ ref: (input) => {
2961
+ if (input) input.indeterminate = hasSelection && !isAllSelected;
2962
+ },
2963
+ onChange: onToggleAll,
2964
+ "aria-label": "Select all rows"
2965
+ }));
2966
+ }
2967
+ var noop = () => {
2968
+ };
2969
+ function SelectionCell({
2970
+ row,
2971
+ onToggleRow
2972
+ }) {
2973
+ const isSelected = row.getIsSelected();
2974
+ const handleClick = React2.useCallback((e) => {
2975
+ e.stopPropagation();
2976
+ onToggleRow(row.id, row.index, e.shiftKey);
2977
+ }, [row, onToggleRow]);
2978
+ return /* @__PURE__ */ React2__namespace.default.createElement("div", {
2979
+ style: {
2980
+ display: "flex",
2981
+ alignItems: "center",
2982
+ justifyContent: "center",
2983
+ width: "100%"
2984
+ }
2985
+ }, /* @__PURE__ */ React2__namespace.default.createElement("input", {
2986
+ type: "checkbox",
2987
+ checked: isSelected,
2988
+ onClick: handleClick,
2989
+ onChange: noop,
2990
+ "aria-label": `Select row ${row.index + 1}`
2991
+ }));
2992
+ }
2993
+
2994
+ // src/object-table/hooks/useSelectionColumn.tsx
2995
+ var SELECTION_COLUMN_ID = "__selection__";
2996
+ var useSelectionColumn = ({
2997
+ selectionMode,
2998
+ isAllSelected,
2999
+ hasSelection,
3000
+ onToggleAll,
3001
+ onToggleRow
3002
+ }) => {
3003
+ const selectionColumn = React2.useMemo(() => {
3004
+ if (selectionMode === "none") return null;
3005
+ return {
3006
+ id: SELECTION_COLUMN_ID,
3007
+ header: () => selectionMode === "multiple" ? /* @__PURE__ */ React2__namespace.default.createElement(SelectionHeaderCell, {
3008
+ isAllSelected,
3009
+ hasSelection,
3010
+ onToggleAll
3011
+ }) : null,
3012
+ cell: ({
3013
+ row
3014
+ }) => /* @__PURE__ */ React2__namespace.default.createElement(SelectionCell, {
3015
+ row,
3016
+ onToggleRow
3017
+ }),
3018
+ size: 50,
3019
+ minSize: 50,
3020
+ maxSize: 50,
3021
+ enableSorting: false,
3022
+ enableResizing: false
3023
+ };
3024
+ }, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
3025
+ return selectionColumn;
3026
+ };
3027
+
2806
3028
  // ../../node_modules/.pnpm/@tanstack+virtual-core@3.13.17/node_modules/@tanstack/virtual-core/dist/esm/utils.js
2807
3029
  function memo2(getDeps, fn, opts) {
2808
3030
  let deps = opts.initialDeps ?? [];
@@ -3672,10 +3894,104 @@ function useVirtualizer(options) {
3672
3894
  ...options
3673
3895
  });
3674
3896
  }
3897
+ function CellContextMenu({
3898
+ cell,
3899
+ position,
3900
+ onClose,
3901
+ renderContent
3902
+ }) {
3903
+ const ref = React2.useRef(null);
3904
+ React2.useEffect(() => {
3905
+ const handleClickOutside = (event) => {
3906
+ if (ref.current && !ref.current.contains(event.target)) {
3907
+ onClose();
3908
+ }
3909
+ };
3910
+ document.addEventListener("mousedown", handleClickOutside);
3911
+ return () => {
3912
+ document.removeEventListener("mousedown", handleClickOutside);
3913
+ };
3914
+ }, [onClose]);
3915
+ return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React2__namespace.default.createElement("div", {
3916
+ ref,
3917
+ style: {
3918
+ position: "fixed",
3919
+ zIndex: 9999,
3920
+ left: position.left,
3921
+ top: position.top,
3922
+ minWidth: position.width
3923
+ }
3924
+ }, renderContent(cell.row.original, cell)), document.body);
3925
+ }
3926
+ var useCellContextMenu = ({
3927
+ tdRef
3928
+ }) => {
3929
+ const [popoverPosition, setPopoverPosition] = React2.useState(null);
3930
+ const [isContextMenuOpen, setIsContextMenuOpen] = React2.useState(false);
3931
+ const handleOpenContextMenu = React2.useCallback((event) => {
3932
+ event.preventDefault();
3933
+ event.stopPropagation();
3934
+ if (tdRef.current) {
3935
+ const rect = tdRef.current.getBoundingClientRect();
3936
+ const position = {
3937
+ left: rect.left,
3938
+ top: rect.bottom,
3939
+ width: rect.width
3940
+ };
3941
+ setPopoverPosition(position);
3942
+ setIsContextMenuOpen(true);
3943
+ }
3944
+ }, [tdRef]);
3945
+ const handleCloseContextMenu = React2.useCallback(() => {
3946
+ setIsContextMenuOpen(false);
3947
+ setPopoverPosition(null);
3948
+ }, []);
3949
+ return {
3950
+ isContextMenuOpen,
3951
+ handleOpenContextMenu,
3952
+ handleCloseContextMenu,
3953
+ popoverPosition
3954
+ };
3955
+ };
3956
+
3957
+ // src/object-table/TableCell.tsx
3958
+ function TableCell({
3959
+ cell,
3960
+ renderCellContextMenu
3961
+ }) {
3962
+ const tdRef = React2.useRef(null);
3963
+ const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
3964
+ const {
3965
+ isContextMenuOpen,
3966
+ handleOpenContextMenu,
3967
+ handleCloseContextMenu,
3968
+ popoverPosition
3969
+ } = useCellContextMenu({
3970
+ tdRef
3971
+ });
3972
+ const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
3973
+ return /* @__PURE__ */ React2__namespace.default.createElement(React2__namespace.default.Fragment, null, /* @__PURE__ */ React2__namespace.default.createElement("td", {
3974
+ ref: tdRef,
3975
+ style: {
3976
+ display: "flex",
3977
+ alignItems: "center",
3978
+ width: cell.column.getSize()
3979
+ },
3980
+ onContextMenu: handleOpenContextMenu
3981
+ }, flexRender(cell.column.columnDef.cell, cell.getContext())), shouldRenderContextMenu && /* @__PURE__ */ React2__namespace.default.createElement(CellContextMenu, {
3982
+ cell,
3983
+ position: popoverPosition,
3984
+ onClose: handleCloseContextMenu,
3985
+ renderContent: renderCellContextMenu
3986
+ }));
3987
+ }
3988
+
3989
+ // src/object-table/TableRow.tsx
3675
3990
  function TableRow({
3676
3991
  row,
3677
3992
  virtualRow,
3678
- onRowClick
3993
+ onRowClick,
3994
+ renderCellContextMenu
3679
3995
  }) {
3680
3996
  const handleClick = React2.useCallback(() => {
3681
3997
  onRowClick?.(row.original);
@@ -3688,14 +4004,11 @@ function TableRow({
3688
4004
  display: "flex"
3689
4005
  },
3690
4006
  onClick: handleClick
3691
- }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React2__namespace.default.createElement("td", {
4007
+ }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React2__namespace.default.createElement(TableCell, {
3692
4008
  key: cell.id,
3693
- style: {
3694
- display: "flex",
3695
- alignItems: "center",
3696
- width: cell.column.getSize()
3697
- }
3698
- }, flexRender(cell.column.columnDef.cell, cell.getContext()))));
4009
+ cell,
4010
+ renderCellContextMenu
4011
+ })));
3699
4012
  }
3700
4013
 
3701
4014
  // src/object-table/TableBody.tsx
@@ -3703,6 +4016,7 @@ function TableBody({
3703
4016
  rows,
3704
4017
  tableContainerRef,
3705
4018
  onRowClick,
4019
+ renderCellContextMenu,
3706
4020
  rowHeight = 40
3707
4021
  }) {
3708
4022
  const rowVirtualizer = useVirtualizer({
@@ -3726,12 +4040,13 @@ function TableBody({
3726
4040
  key: row.id,
3727
4041
  row,
3728
4042
  virtualRow,
3729
- onRowClick
4043
+ onRowClick,
4044
+ renderCellContextMenu
3730
4045
  });
3731
4046
  }));
3732
4047
  }
3733
4048
  function TableHeader({
3734
- headerGroups
4049
+ table
3735
4050
  }) {
3736
4051
  return /* @__PURE__ */ React2__namespace.default.createElement("thead", {
3737
4052
  style: {
@@ -3740,7 +4055,7 @@ function TableHeader({
3740
4055
  top: 0,
3741
4056
  zIndex: 1
3742
4057
  }
3743
- }, headerGroups.map((headerGroup) => /* @__PURE__ */ React2__namespace.default.createElement("tr", {
4058
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React2__namespace.default.createElement("tr", {
3744
4059
  key: headerGroup.id,
3745
4060
  style: {
3746
4061
  display: "flex"
@@ -3753,9 +4068,25 @@ function TableHeader({
3753
4068
  display: "flex",
3754
4069
  width: header.getSize(),
3755
4070
  justifyContent: "flex-start",
3756
- alignItems: "center"
4071
+ alignItems: "center",
4072
+ position: "relative"
3757
4073
  }
3758
- }, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()))
4074
+ }, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React2__namespace.default.createElement("div", {
4075
+ onDoubleClick: () => header.column.resetSize(),
4076
+ onMouseDown: header.getResizeHandler(),
4077
+ onTouchStart: header.getResizeHandler(),
4078
+ style: {
4079
+ position: "absolute",
4080
+ right: 0,
4081
+ top: 0,
4082
+ height: "100%",
4083
+ width: "3px",
4084
+ cursor: "col-resize",
4085
+ touchAction: "none",
4086
+ zIndex: 11,
4087
+ transform: header.column.getIsResizing() ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)` : ""
4088
+ }
4089
+ }))
3759
4090
  )))));
3760
4091
  }
3761
4092
 
@@ -3765,7 +4096,8 @@ function Table({
3765
4096
  isLoading,
3766
4097
  fetchNextPage,
3767
4098
  onRowClick,
3768
- rowHeight
4099
+ rowHeight,
4100
+ renderCellContextMenu
3769
4101
  }) {
3770
4102
  const tableContainerRef = React2.useRef(null);
3771
4103
  const fetchingRef = React2.useRef(false);
@@ -3796,7 +4128,9 @@ function Table({
3796
4128
  // needed for sticky header
3797
4129
  height: "100%",
3798
4130
  // needed for scrolling
3799
- overflow: "auto"
4131
+ overflow: "auto",
4132
+ cursor: table.getState().columnSizingInfo?.isResizingColumn ? "col-resize" : "default",
4133
+ userSelect: table.getState().columnSizingInfo?.isResizingColumn ? "none" : "auto"
3800
4134
  },
3801
4135
  onScroll: handleScroll
3802
4136
  }, /* @__PURE__ */ React2__namespace.default.createElement("table", {
@@ -3804,12 +4138,13 @@ function Table({
3804
4138
  display: "grid"
3805
4139
  }
3806
4140
  }, /* @__PURE__ */ React2__namespace.default.createElement(TableHeader, {
3807
- headerGroups: table.getHeaderGroups()
4141
+ table
3808
4142
  }), /* @__PURE__ */ React2__namespace.default.createElement(TableBody, {
3809
4143
  rows: table.getRowModel().rows,
3810
4144
  tableContainerRef,
3811
4145
  onRowClick,
3812
- rowHeight
4146
+ rowHeight,
4147
+ renderCellContextMenu
3813
4148
  })));
3814
4149
  }
3815
4150
 
@@ -3818,14 +4153,18 @@ function ObjectTable({
3818
4153
  objectSet,
3819
4154
  objectType,
3820
4155
  columnDefinitions,
3821
- onRowClick,
3822
- rowHeight
4156
+ filter,
4157
+ onRowSelection,
4158
+ renderCellContextMenu,
4159
+ selectionMode = "none",
4160
+ selectedRows,
4161
+ ...props
3823
4162
  }) {
3824
4163
  const {
3825
4164
  data,
3826
4165
  fetchMore,
3827
4166
  isLoading
3828
- } = useObjectTableData(objectSet, columnDefinitions);
4167
+ } = useObjectTableData(objectSet, columnDefinitions, filter);
3829
4168
  const {
3830
4169
  columns,
3831
4170
  loading: isColumnsLoading
@@ -3835,21 +4174,58 @@ function ObjectTable({
3835
4174
  } = useDefaultTableStates({
3836
4175
  columnDefinitions
3837
4176
  });
4177
+ const [columnSizing, setColumnSizing] = React2.useState({});
4178
+ const {
4179
+ rowSelection,
4180
+ isAllSelected,
4181
+ hasSelection,
4182
+ onToggleAll,
4183
+ onToggleRow
4184
+ } = useRowSelection({
4185
+ selectionMode,
4186
+ selectedRows,
4187
+ onRowSelection,
4188
+ data
4189
+ });
4190
+ const selectionColumn = useSelectionColumn({
4191
+ selectionMode,
4192
+ isAllSelected,
4193
+ hasSelection,
4194
+ onToggleAll,
4195
+ onToggleRow
4196
+ });
4197
+ const allColumns = React2.useMemo(() => {
4198
+ return selectionColumn ? [selectionColumn, ...columns] : columns;
4199
+ }, [selectionColumn, columns]);
3838
4200
  const table = useReactTable({
3839
4201
  data: data ?? [],
3840
- columns,
4202
+ columns: allColumns,
3841
4203
  getCoreRowModel: getCoreRowModel(),
3842
4204
  state: {
3843
- columnVisibility
3844
- }
4205
+ columnVisibility,
4206
+ rowSelection,
4207
+ columnSizing
4208
+ },
4209
+ onColumnSizingChange: setColumnSizing,
4210
+ enableRowSelection: selectionMode !== "none",
4211
+ columnResizeMode: "onChange",
4212
+ columnResizeDirection: "ltr",
4213
+ defaultColumn: {
4214
+ minSize: 80
4215
+ },
4216
+ getRowId
3845
4217
  });
4218
+ const onRenderCellContextMenu = React2.useCallback((row, cell) => {
4219
+ return renderCellContextMenu?.(row, cell.getValue());
4220
+ }, [renderCellContextMenu]);
3846
4221
  const isTableLoading = isLoading || isColumnsLoading;
3847
4222
  return /* @__PURE__ */ React2__namespace.default.createElement(Table, {
3848
4223
  table,
3849
4224
  isLoading: isTableLoading,
3850
4225
  fetchNextPage: fetchMore,
3851
- onRowClick,
3852
- rowHeight
4226
+ onRowClick: props.onRowClick,
4227
+ rowHeight: props.rowHeight,
4228
+ renderCellContextMenu: onRenderCellContextMenu
3853
4229
  });
3854
4230
  }
3855
4231
  /*! Bundled license information: