@osdk/react-components 0.1.0-beta.3 → 0.1.0-beta.5

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 (154) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/build/browser/base-components/checkbox/Checkbox.module.css +11 -10
  3. package/build/browser/object-table/CellContextMenu.js +2 -2
  4. package/build/browser/object-table/CellContextMenu.js.map +1 -1
  5. package/build/browser/object-table/CellContextMenu.module.css +20 -0
  6. package/build/browser/object-table/ObjectTable.js +37 -10
  7. package/build/browser/object-table/ObjectTable.js.map +1 -1
  8. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  9. package/build/browser/object-table/Table.js +7 -16
  10. package/build/browser/object-table/Table.js.map +1 -1
  11. package/build/browser/object-table/Table.module.css +22 -0
  12. package/build/browser/object-table/TableBody.js +2 -2
  13. package/build/browser/object-table/TableBody.js.map +1 -1
  14. package/build/browser/object-table/TableBody.module.css +20 -0
  15. package/build/browser/object-table/TableCell.js +12 -7
  16. package/build/browser/object-table/TableCell.js.map +1 -1
  17. package/build/browser/object-table/TableCell.module.css +63 -0
  18. package/build/browser/object-table/TableHeader.js +35 -38
  19. package/build/browser/object-table/TableHeader.js.map +1 -1
  20. package/build/browser/object-table/TableHeader.module.css +95 -0
  21. package/build/browser/object-table/TableHeaderContent.js +27 -0
  22. package/build/browser/object-table/TableHeaderContent.js.map +1 -0
  23. package/build/browser/object-table/TableHeaderContent.module.css +30 -0
  24. package/build/browser/object-table/TableHeaderWithPopover.js +155 -0
  25. package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -0
  26. package/build/browser/object-table/TableHeaderWithPopover.module.css +105 -0
  27. package/build/browser/object-table/TableRow.js +4 -3
  28. package/build/browser/object-table/TableRow.js.map +1 -1
  29. package/build/browser/object-table/TableRow.module.css +60 -0
  30. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
  31. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
  32. package/build/browser/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
  33. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
  34. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
  35. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
  36. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
  37. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
  38. package/build/browser/object-table/hooks/useColumnPinning.js +95 -0
  39. package/build/browser/object-table/hooks/useColumnPinning.js.map +1 -0
  40. package/build/{esm/object-table/hooks/useDefaultTableStates.js → browser/object-table/hooks/useColumnVisibility.js} +3 -5
  41. package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -0
  42. package/build/browser/object-table/hooks/useObjectTableData.js +15 -3
  43. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  44. package/build/browser/object-table/hooks/useSelectionColumn.js +3 -2
  45. package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
  46. package/build/browser/object-table/hooks/useTableSorting.js +66 -0
  47. package/build/browser/object-table/hooks/useTableSorting.js.map +1 -0
  48. package/build/browser/object-table/utils/constants.js +18 -0
  49. package/build/browser/object-table/utils/constants.js.map +1 -0
  50. package/build/browser/object-table/utils/getColumnPinningStyles.js +27 -0
  51. package/build/browser/object-table/utils/getColumnPinningStyles.js.map +1 -0
  52. package/build/browser/public/experimental.js +4 -0
  53. package/build/browser/public/experimental.js.map +1 -1
  54. package/build/cjs/public/experimental.cjs +446 -129
  55. package/build/cjs/public/experimental.cjs.map +1 -1
  56. package/build/cjs/public/experimental.css +248 -4
  57. package/build/cjs/public/experimental.css.map +1 -1
  58. package/build/cjs/public/experimental.d.cts +26 -3
  59. package/build/esm/base-components/checkbox/Checkbox.module.css +11 -10
  60. package/build/esm/object-table/CellContextMenu.js +2 -2
  61. package/build/esm/object-table/CellContextMenu.js.map +1 -1
  62. package/build/esm/object-table/CellContextMenu.module.css +20 -0
  63. package/build/esm/object-table/ObjectTable.js +37 -10
  64. package/build/esm/object-table/ObjectTable.js.map +1 -1
  65. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  66. package/build/esm/object-table/Table.js +7 -16
  67. package/build/esm/object-table/Table.js.map +1 -1
  68. package/build/esm/object-table/Table.module.css +22 -0
  69. package/build/esm/object-table/TableBody.js +2 -2
  70. package/build/esm/object-table/TableBody.js.map +1 -1
  71. package/build/esm/object-table/TableBody.module.css +20 -0
  72. package/build/esm/object-table/TableCell.js +12 -7
  73. package/build/esm/object-table/TableCell.js.map +1 -1
  74. package/build/esm/object-table/TableCell.module.css +63 -0
  75. package/build/esm/object-table/TableHeader.js +35 -38
  76. package/build/esm/object-table/TableHeader.js.map +1 -1
  77. package/build/esm/object-table/TableHeader.module.css +95 -0
  78. package/build/esm/object-table/TableHeaderContent.js +27 -0
  79. package/build/esm/object-table/TableHeaderContent.js.map +1 -0
  80. package/build/esm/object-table/TableHeaderContent.module.css +30 -0
  81. package/build/esm/object-table/TableHeaderWithPopover.js +155 -0
  82. package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -0
  83. package/build/esm/object-table/TableHeaderWithPopover.module.css +105 -0
  84. package/build/esm/object-table/TableRow.js +4 -3
  85. package/build/esm/object-table/TableRow.js.map +1 -1
  86. package/build/esm/object-table/TableRow.module.css +60 -0
  87. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
  88. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
  89. package/build/esm/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
  90. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
  91. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
  92. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
  93. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
  94. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
  95. package/build/esm/object-table/hooks/useColumnPinning.js +95 -0
  96. package/build/esm/object-table/hooks/useColumnPinning.js.map +1 -0
  97. package/build/{browser/object-table/hooks/useDefaultTableStates.js → esm/object-table/hooks/useColumnVisibility.js} +3 -5
  98. package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -0
  99. package/build/esm/object-table/hooks/useObjectTableData.js +15 -3
  100. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  101. package/build/esm/object-table/hooks/useSelectionColumn.js +3 -2
  102. package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
  103. package/build/esm/object-table/hooks/useTableSorting.js +66 -0
  104. package/build/esm/object-table/hooks/useTableSorting.js.map +1 -0
  105. package/build/esm/object-table/utils/constants.js +18 -0
  106. package/build/esm/object-table/utils/constants.js.map +1 -0
  107. package/build/esm/object-table/utils/getColumnPinningStyles.js +27 -0
  108. package/build/esm/object-table/utils/getColumnPinningStyles.js.map +1 -0
  109. package/build/esm/public/experimental.js +4 -0
  110. package/build/esm/public/experimental.js.map +1 -1
  111. package/build/types/object-table/CellContextMenu.d.ts.map +1 -1
  112. package/build/types/object-table/ObjectTable.d.ts +1 -1
  113. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  114. package/build/types/object-table/ObjectTableApi.d.ts +11 -0
  115. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  116. package/build/types/object-table/Table.d.ts +3 -3
  117. package/build/types/object-table/Table.d.ts.map +1 -1
  118. package/build/types/object-table/TableBody.d.ts.map +1 -1
  119. package/build/types/object-table/TableCell.d.ts.map +1 -1
  120. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  121. package/build/types/object-table/TableHeaderContent.d.ts +7 -0
  122. package/build/types/object-table/TableHeaderContent.d.ts.map +1 -0
  123. package/build/types/object-table/TableHeaderWithPopover.d.ts +13 -0
  124. package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -0
  125. package/build/types/object-table/TableRow.d.ts.map +1 -1
  126. package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +1 -0
  127. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +1 -0
  128. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +1 -0
  129. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +1 -0
  130. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +1 -0
  131. package/build/types/object-table/hooks/useColumnPinning.d.ts +22 -0
  132. package/build/types/object-table/hooks/useColumnPinning.d.ts.map +1 -0
  133. package/build/types/object-table/hooks/{useDefaultTableStates.d.ts → useColumnVisibility.d.ts} +3 -6
  134. package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -0
  135. package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -1
  136. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  137. package/build/types/object-table/hooks/useSelectionColumn.d.ts +0 -1
  138. package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -1
  139. package/build/types/object-table/hooks/useTableSorting.d.ts +22 -0
  140. package/build/types/object-table/hooks/useTableSorting.d.ts.map +1 -0
  141. package/build/types/object-table/utils/constants.d.ts +1 -0
  142. package/build/types/object-table/utils/constants.d.ts.map +1 -0
  143. package/build/types/object-table/utils/getColumnPinningStyles.d.ts +7 -0
  144. package/build/types/object-table/utils/getColumnPinningStyles.d.ts.map +1 -0
  145. package/build/types/public/experimental.d.ts +2 -0
  146. package/build/types/public/experimental.d.ts.map +1 -1
  147. package/package.json +8 -8
  148. package/build/browser/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
  149. package/build/browser/object-table/hooks/useDefaultTableStates.js.map +0 -1
  150. package/build/esm/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
  151. package/build/esm/object-table/hooks/useDefaultTableStates.js.map +0 -1
  152. package/build/types/object-table/hooks/__tests__/useDefaultTableStates.test.d.ts.map +0 -1
  153. package/build/types/object-table/hooks/useDefaultTableStates.d.ts.map +0 -1
  154. /package/build/types/object-table/hooks/__tests__/{useDefaultTableStates.test.d.ts → useColumnPinning.test.d.ts} +0 -0
@@ -1,19 +1,20 @@
1
1
  'use strict';
2
2
 
3
3
  var reactTable = require('@tanstack/react-table');
4
- var React = require('react');
4
+ var React9 = require('react');
5
5
  var react = require('@osdk/react');
6
6
  var experimental = require('@osdk/react/experimental');
7
7
  var checkbox = require('@base-ui/react/checkbox');
8
8
  var icons = require('@blueprintjs/icons');
9
- var classnames = require('classnames');
9
+ var classNames = require('classnames');
10
10
  var reactVirtual = require('@tanstack/react-virtual');
11
11
  var reactDom = require('react-dom');
12
+ var menu = require('@base-ui/react/menu');
12
13
 
13
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
15
 
15
- var React__default = /*#__PURE__*/_interopDefault(React);
16
- var classnames__default = /*#__PURE__*/_interopDefault(classnames);
16
+ var React9__default = /*#__PURE__*/_interopDefault(React9);
17
+ var classNames__default = /*#__PURE__*/_interopDefault(classNames);
17
18
 
18
19
  // src/object-table/ObjectTable.tsx
19
20
  function useColumnDefs(objectType, columnDefinitions) {
@@ -22,7 +23,7 @@ function useColumnDefs(objectType, columnDefinitions) {
22
23
  loading,
23
24
  error
24
25
  } = react.useOsdkMetadata(objectType);
25
- const columns = React.useMemo(() => {
26
+ const columns = React9.useMemo(() => {
26
27
  const objectProperties = metadata?.properties;
27
28
  if (columnDefinitions) {
28
29
  return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
@@ -78,10 +79,86 @@ function getDefaultColumns(objectProperties) {
78
79
  return colDef;
79
80
  });
80
81
  }
81
- var useDefaultTableStates = ({
82
+
83
+ // src/object-table/utils/constants.ts
84
+ var SELECTION_COLUMN_ID = "__selection__";
85
+
86
+ // src/object-table/hooks/useColumnPinning.ts
87
+ var useColumnPinning = ({
88
+ columnDefinitions,
89
+ hasSelectionColumn,
90
+ onColumnsPinnedChanged
91
+ }) => {
92
+ const [columnPinning, setColumnPinning] = React9.useState({
93
+ left: [],
94
+ right: []
95
+ });
96
+ React9.useEffect(() => {
97
+ const defaultState = getColumnPinningStateFromColumnDefs(columnDefinitions);
98
+ const selectionCol = hasSelectionColumn ? [SELECTION_COLUMN_ID] : [];
99
+ setColumnPinning({
100
+ left: [...selectionCol, ...defaultState.left ?? []],
101
+ right: [...defaultState.right ?? []]
102
+ });
103
+ }, [columnDefinitions, hasSelectionColumn]);
104
+ const onColumnPinningChange = React9.useCallback((updater) => {
105
+ setColumnPinning((prev) => {
106
+ const newPinning = typeof updater === "function" ? updater(prev) : updater;
107
+ if (onColumnsPinnedChanged) {
108
+ const newStates = convertColumnPinningStateToArray(newPinning);
109
+ const stateWithoutSelectionCol = newStates.filter((state) => state.columnId !== SELECTION_COLUMN_ID);
110
+ onColumnsPinnedChanged(stateWithoutSelectionCol);
111
+ }
112
+ return newPinning;
113
+ });
114
+ }, [onColumnsPinnedChanged]);
115
+ return {
116
+ columnPinning,
117
+ onColumnPinningChange
118
+ };
119
+ };
120
+ var getColumnPinningStateFromColumnDefs = (columnDefinitions) => {
121
+ if (!columnDefinitions) {
122
+ return {};
123
+ }
124
+ const columnPinningState = columnDefinitions.reduce((acc, {
125
+ locator,
126
+ pinned
127
+ }) => {
128
+ const colKey = locator.id.toString();
129
+ const isPinned = pinned != null && pinned !== "none";
130
+ if (!isPinned) {
131
+ return acc;
132
+ }
133
+ if (pinned === "left") {
134
+ return {
135
+ ...acc,
136
+ left: [...acc.left ?? [], colKey]
137
+ };
138
+ }
139
+ return {
140
+ ...acc,
141
+ right: [...acc.right ?? [], colKey]
142
+ };
143
+ }, {
144
+ left: [],
145
+ right: []
146
+ });
147
+ return columnPinningState;
148
+ };
149
+ function convertColumnPinningStateToArray(pinningState) {
150
+ return [...(pinningState.left ?? []).map((columnId) => ({
151
+ columnId,
152
+ pinned: "left"
153
+ })), ...(pinningState.right ?? []).map((columnId) => ({
154
+ columnId,
155
+ pinned: "right"
156
+ }))];
157
+ }
158
+ var useColumnVisibility = ({
82
159
  columnDefinitions
83
160
  }) => {
84
- const columnVisibility = React.useMemo(() => {
161
+ const columnVisibility = React9.useMemo(() => {
85
162
  if (columnDefinitions) {
86
163
  const colVisibility = columnDefinitions.reduce((acc, colDef) => {
87
164
  if (colDef.isVisible !== void 0) {
@@ -99,13 +176,20 @@ var useDefaultTableStates = ({
99
176
  return colVisibility;
100
177
  }
101
178
  }, [columnDefinitions]);
102
- return {
103
- columnVisibility
104
- };
179
+ return columnVisibility;
105
180
  };
106
181
  var PAGE_SIZE = 50;
107
- function useObjectTableData(objectSet, columnDefinitions, filter) {
108
- const withProperties = React.useMemo(() => {
182
+ function useObjectTableData(objectSet, columnDefinitions, filter, sorting) {
183
+ const orderBy = React9.useMemo(() => {
184
+ if (!sorting || sorting.length === 0) {
185
+ return void 0;
186
+ }
187
+ return sorting.reduce((acc, sort) => {
188
+ acc[sort.id] = sort.desc ? "desc" : "asc";
189
+ return acc;
190
+ }, {});
191
+ }, [sorting]);
192
+ const withProperties = React9.useMemo(() => {
109
193
  if (!columnDefinitions) {
110
194
  return;
111
195
  }
@@ -122,7 +206,8 @@ function useObjectTableData(objectSet, columnDefinitions, filter) {
122
206
  return experimental.useObjectSet(objectSet, {
123
207
  withProperties,
124
208
  pageSize: PAGE_SIZE,
125
- where: filter
209
+ where: filter,
210
+ orderBy
126
211
  });
127
212
  }
128
213
 
@@ -139,11 +224,11 @@ function useRowSelection({
139
224
  onRowSelection,
140
225
  data
141
226
  }) {
142
- const [internalRowSelection, setInternalRowSelection] = React.useState({});
143
- const [lastSelectedRowIndex, setLastSelectedRowIndex] = React.useState(null);
227
+ const [internalRowSelection, setInternalRowSelection] = React9.useState({});
228
+ const [lastSelectedRowIndex, setLastSelectedRowIndex] = React9.useState(null);
144
229
  const isControlled = selectedRows !== void 0;
145
230
  const isSelectionEnabled = selectionMode !== "none";
146
- const rowSelectionState = React.useMemo(() => {
231
+ const rowSelectionState = React9.useMemo(() => {
147
232
  if (!isSelectionEnabled) return {};
148
233
  if (isControlled && selectedRows) {
149
234
  return getRowSelectionState(selectedRows);
@@ -154,7 +239,7 @@ function useRowSelection({
154
239
  const totalCount = data?.length ?? 0;
155
240
  const isAllSelected = totalCount > 0 && selectedCount === totalCount;
156
241
  const hasSelection = selectedCount > 0;
157
- const onToggleAll = React.useCallback(() => {
242
+ const onToggleAll = React9.useCallback(() => {
158
243
  if (!isSelectionEnabled || !data) return;
159
244
  const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
160
245
  if (!isControlled) {
@@ -162,7 +247,7 @@ function useRowSelection({
162
247
  }
163
248
  onRowSelection?.(newSelectedRows);
164
249
  }, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
165
- const onToggleRow = React.useCallback((rowId, rowIndex, isShiftClick = false) => {
250
+ const onToggleRow = React9.useCallback((rowId, rowIndex, isShiftClick = false) => {
166
251
  if (!isSelectionEnabled || !data) return;
167
252
  let newSelectedRows = [];
168
253
  if (selectionMode === "single") {
@@ -284,14 +369,14 @@ function Checkbox({
284
369
  indicatorProps,
285
370
  ...rest
286
371
  }) {
287
- return /* @__PURE__ */ React__default.default.createElement(checkbox.Checkbox.Root, _extends({
288
- className: classnames__default.default(Checkbox_default.osdkCheckboxRoot, className),
372
+ return /* @__PURE__ */ React9__default.default.createElement(checkbox.Checkbox.Root, _extends({
373
+ className: classNames__default.default(Checkbox_default.osdkCheckboxRoot, className),
289
374
  indeterminate
290
- }, rest), /* @__PURE__ */ React__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
291
- className: classnames__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
292
- }), indeterminate ? /* @__PURE__ */ React__default.default.createElement(icons.Minus, {
375
+ }, rest), /* @__PURE__ */ React9__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
376
+ className: classNames__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
377
+ }), indeterminate ? /* @__PURE__ */ React9__default.default.createElement(icons.Minus, {
293
378
  color: "currentColor"
294
- }) : /* @__PURE__ */ React__default.default.createElement(icons.Tick, {
379
+ }) : /* @__PURE__ */ React9__default.default.createElement(icons.Tick, {
295
380
  color: "currentColor"
296
381
  })));
297
382
  }
@@ -302,7 +387,7 @@ function SelectionHeaderCell({
302
387
  hasSelection,
303
388
  onToggleAll
304
389
  }) {
305
- return /* @__PURE__ */ React__default.default.createElement(Checkbox, {
390
+ return /* @__PURE__ */ React9__default.default.createElement(Checkbox, {
306
391
  indeterminate: hasSelection && !isAllSelected,
307
392
  checked: isAllSelected,
308
393
  onCheckedChange: onToggleAll,
@@ -313,11 +398,11 @@ function SelectionCell({
313
398
  row,
314
399
  onToggleRow
315
400
  }) {
316
- const handleClick = React.useCallback((event) => {
401
+ const handleClick = React9.useCallback((event) => {
317
402
  const isShiftClick = event.shiftKey;
318
403
  onToggleRow(row.id, row.index, isShiftClick);
319
404
  }, [row, onToggleRow]);
320
- return /* @__PURE__ */ React__default.default.createElement(Checkbox, {
405
+ return /* @__PURE__ */ React9__default.default.createElement(Checkbox, {
321
406
  checked: row.getIsSelected(),
322
407
  onClick: handleClick,
323
408
  "aria-label": `Select row ${row.index + 1}`
@@ -325,7 +410,6 @@ function SelectionCell({
325
410
  }
326
411
 
327
412
  // src/object-table/hooks/useSelectionColumn.tsx
328
- var SELECTION_COLUMN_ID = "__selection__";
329
413
  var useSelectionColumn = ({
330
414
  selectionMode,
331
415
  isAllSelected,
@@ -333,18 +417,18 @@ var useSelectionColumn = ({
333
417
  onToggleAll,
334
418
  onToggleRow
335
419
  }) => {
336
- const selectionColumn = React.useMemo(() => {
420
+ const selectionColumn = React9.useMemo(() => {
337
421
  if (selectionMode === "none") return null;
338
- return {
422
+ const colDef = {
339
423
  id: SELECTION_COLUMN_ID,
340
- header: () => selectionMode === "multiple" ? /* @__PURE__ */ React__default.default.createElement(SelectionHeaderCell, {
424
+ header: () => selectionMode === "multiple" ? /* @__PURE__ */ React9__default.default.createElement(SelectionHeaderCell, {
341
425
  isAllSelected,
342
426
  hasSelection,
343
427
  onToggleAll
344
428
  }) : null,
345
429
  cell: ({
346
430
  row
347
- }) => /* @__PURE__ */ React__default.default.createElement(SelectionCell, {
431
+ }) => /* @__PURE__ */ React9__default.default.createElement(SelectionCell, {
348
432
  row,
349
433
  onToggleRow
350
434
  }),
@@ -352,19 +436,73 @@ var useSelectionColumn = ({
352
436
  minSize: 50,
353
437
  maxSize: 50,
354
438
  enableSorting: false,
355
- enableResizing: false
439
+ enableResizing: false,
440
+ enablePinning: false
356
441
  };
442
+ return colDef;
357
443
  }, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
358
444
  return selectionColumn;
359
445
  };
446
+ var useTableSorting = ({
447
+ orderBy,
448
+ defaultOrderBy,
449
+ onOrderByChanged
450
+ }) => {
451
+ const [internalSorting, setInternalSorting] = React9.useState(() => defaultOrderBy ? convertOrderByToSortingState(defaultOrderBy) : []);
452
+ const isControlled = orderBy !== void 0;
453
+ const sortingState = React9.useMemo(() => orderBy ? convertOrderByToSortingState(orderBy) : internalSorting, [orderBy, internalSorting]);
454
+ const onSortingChange = React9.useCallback((updater) => {
455
+ const newSorting = typeof updater === "function" ? updater(sortingState) : updater;
456
+ if (!isControlled) {
457
+ setInternalSorting(newSorting);
458
+ }
459
+ if (onOrderByChanged) {
460
+ const newOrderBy = convertSortingStateToOrderBy(newSorting);
461
+ onOrderByChanged(newOrderBy);
462
+ }
463
+ }, [isControlled, sortingState, onOrderByChanged]);
464
+ return {
465
+ sorting: sortingState,
466
+ onSortingChange
467
+ };
468
+ };
469
+ function convertOrderByToSortingState(orderBy) {
470
+ return orderBy.map(({
471
+ property,
472
+ direction
473
+ }) => ({
474
+ id: property,
475
+ desc: direction === "desc"
476
+ }));
477
+ }
478
+ function convertSortingStateToOrderBy(sorting) {
479
+ return sorting.map(({
480
+ id,
481
+ desc
482
+ }) => ({
483
+ property: id,
484
+ direction: desc ? "desc" : "asc"
485
+ }));
486
+ }
487
+
488
+ // src/object-table/Table.module.css
489
+ var Table_default = {};
490
+
491
+ // src/object-table/TableBody.module.css
492
+ var TableBody_default = {};
493
+
494
+ // src/object-table/CellContextMenu.module.css
495
+ var CellContextMenu_default = {};
496
+
497
+ // src/object-table/CellContextMenu.tsx
360
498
  function CellContextMenu({
361
499
  cell,
362
500
  position,
363
501
  onClose,
364
502
  renderContent
365
503
  }) {
366
- const ref = React.useRef(null);
367
- React.useEffect(() => {
504
+ const ref = React9.useRef(null);
505
+ React9.useEffect(() => {
368
506
  const handleClickOutside = (event) => {
369
507
  if (ref.current && !ref.current.contains(event.target)) {
370
508
  onClose();
@@ -375,11 +513,10 @@ function CellContextMenu({
375
513
  document.removeEventListener("mousedown", handleClickOutside);
376
514
  };
377
515
  }, [onClose]);
378
- return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React__default.default.createElement("div", {
516
+ return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React9__default.default.createElement("div", {
379
517
  ref,
518
+ className: CellContextMenu_default.osdkCellContextMenu,
380
519
  style: {
381
- position: "fixed",
382
- zIndex: 9999,
383
520
  left: position.left,
384
521
  top: position.top,
385
522
  minWidth: position.width
@@ -389,9 +526,9 @@ function CellContextMenu({
389
526
  var useCellContextMenu = ({
390
527
  tdRef
391
528
  }) => {
392
- const [popoverPosition, setPopoverPosition] = React.useState(null);
393
- const [isContextMenuOpen, setIsContextMenuOpen] = React.useState(false);
394
- const handleOpenContextMenu = React.useCallback((event) => {
529
+ const [popoverPosition, setPopoverPosition] = React9.useState(null);
530
+ const [isContextMenuOpen, setIsContextMenuOpen] = React9.useState(false);
531
+ const handleOpenContextMenu = React9.useCallback((event) => {
395
532
  event.preventDefault();
396
533
  event.stopPropagation();
397
534
  if (tdRef.current) {
@@ -405,7 +542,7 @@ var useCellContextMenu = ({
405
542
  setIsContextMenuOpen(true);
406
543
  }
407
544
  }, [tdRef]);
408
- const handleCloseContextMenu = React.useCallback(() => {
545
+ const handleCloseContextMenu = React9.useCallback(() => {
409
546
  setIsContextMenuOpen(false);
410
547
  setPopoverPosition(null);
411
548
  }, []);
@@ -417,12 +554,27 @@ var useCellContextMenu = ({
417
554
  };
418
555
  };
419
556
 
557
+ // src/object-table/TableCell.module.css
558
+ var TableCell_default = {};
559
+
560
+ // src/object-table/utils/getColumnPinningStyles.ts
561
+ function getColumnPinningStyles(column) {
562
+ const isPinned = column.getIsPinned();
563
+ return {
564
+ columnStyles: {
565
+ left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
566
+ right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
567
+ width: column.getSize()
568
+ }
569
+ };
570
+ }
571
+
420
572
  // src/object-table/TableCell.tsx
421
573
  function TableCell({
422
574
  cell,
423
575
  renderCellContextMenu
424
576
  }) {
425
- const tdRef = React.useRef(null);
577
+ const tdRef = React9.useRef(null);
426
578
  const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
427
579
  const {
428
580
  isContextMenuOpen,
@@ -433,15 +585,18 @@ function TableCell({
433
585
  tdRef
434
586
  });
435
587
  const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
436
- return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement("td", {
588
+ const {
589
+ columnStyles
590
+ } = getColumnPinningStyles(cell.column);
591
+ return /* @__PURE__ */ React9__default.default.createElement(React9__default.default.Fragment, null, /* @__PURE__ */ React9__default.default.createElement("td", {
437
592
  ref: tdRef,
438
- style: {
439
- display: "flex",
440
- alignItems: "center",
441
- width: cell.column.getSize()
442
- },
593
+ "data-pinned": cell.column.getIsPinned(),
594
+ className: TableCell_default.osdkTableCell,
595
+ style: columnStyles,
443
596
  onContextMenu: handleOpenContextMenu
444
- }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())), shouldRenderContextMenu && /* @__PURE__ */ React__default.default.createElement(CellContextMenu, {
597
+ }, /* @__PURE__ */ React9__default.default.createElement("div", {
598
+ className: TableCell_default.osdkTableCellContent
599
+ }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React9__default.default.createElement(CellContextMenu, {
445
600
  cell,
446
601
  position: popoverPosition,
447
602
  onClose: handleCloseContextMenu,
@@ -449,6 +604,9 @@ function TableCell({
449
604
  }));
450
605
  }
451
606
 
607
+ // src/object-table/TableRow.module.css
608
+ var TableRow_default = {};
609
+
452
610
  // src/object-table/TableRow.tsx
453
611
  function TableRow({
454
612
  row,
@@ -456,18 +614,18 @@ function TableRow({
456
614
  onRowClick,
457
615
  renderCellContextMenu
458
616
  }) {
459
- const handleClick = React.useCallback(() => {
617
+ const handleClick = React9.useCallback(() => {
460
618
  onRowClick?.(row.original);
461
619
  }, [onRowClick, row.original]);
462
- return /* @__PURE__ */ React__default.default.createElement("tr", {
620
+ return /* @__PURE__ */ React9__default.default.createElement("tr", {
621
+ "data-selected": row.getIsSelected(),
622
+ className: TableRow_default.osdkTableRow,
463
623
  style: {
464
- position: "absolute",
465
624
  height: `${virtualRow.size}px`,
466
- transform: `translateY(${virtualRow.start}px)`,
467
- display: "flex"
625
+ transform: `translateY(${virtualRow.start}px)`
468
626
  },
469
627
  onClick: handleClick
470
- }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React__default.default.createElement(TableCell, {
628
+ }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React9__default.default.createElement(TableCell, {
471
629
  key: cell.id,
472
630
  cell,
473
631
  renderCellContextMenu
@@ -488,18 +646,17 @@ function TableBody({
488
646
  getScrollElement: () => tableContainerRef.current,
489
647
  overscan: 5
490
648
  });
491
- React.useLayoutEffect(() => {
649
+ React9.useLayoutEffect(() => {
492
650
  rowVirtualizer.measure();
493
651
  }, [rowVirtualizer, rows.length]);
494
- return /* @__PURE__ */ React__default.default.createElement("tbody", {
652
+ return /* @__PURE__ */ React9__default.default.createElement("tbody", {
653
+ className: TableBody_default.osdkTableBody,
495
654
  style: {
496
- display: "grid",
497
- position: "relative",
498
655
  height: `${rowVirtualizer.getTotalSize()}px`
499
656
  }
500
657
  }, rowVirtualizer.getVirtualItems().map((virtualRow) => {
501
658
  const row = rows[virtualRow.index];
502
- return /* @__PURE__ */ React__default.default.createElement(TableRow, {
659
+ return /* @__PURE__ */ React9__default.default.createElement(TableRow, {
503
660
  key: row.id,
504
661
  row,
505
662
  virtualRow,
@@ -508,63 +665,209 @@ function TableBody({
508
665
  });
509
666
  }));
510
667
  }
668
+
669
+ // src/object-table/TableHeader.module.css
670
+ var TableHeader_default = {};
671
+
672
+ // src/object-table/TableHeaderContent.module.css
673
+ var TableHeaderContent_default = {};
674
+
675
+ // src/object-table/TableHeaderContent.tsx
676
+ function TableHeaderContent({
677
+ header
678
+ }) {
679
+ return /* @__PURE__ */ React9__default.default.createElement("div", {
680
+ className: TableHeaderContent_default.osdkHeaderContent
681
+ }, reactTable.flexRender(header.column.columnDef.header, header.getContext()));
682
+ }
683
+
684
+ // src/object-table/TableHeaderWithPopover.module.css
685
+ var TableHeaderWithPopover_default = {};
686
+
687
+ // src/object-table/TableHeaderWithPopover.tsx
688
+ function HeaderMenuItem({
689
+ onClick,
690
+ icon: Icon,
691
+ label,
692
+ active = false
693
+ }) {
694
+ return /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Item, {
695
+ closeOnClick: true,
696
+ className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
697
+ onClick
698
+ }, /* @__PURE__ */ React9__default.default.createElement(Icon, {
699
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
700
+ color: "currentColor"
701
+ }), /* @__PURE__ */ React9__default.default.createElement("span", null, label));
702
+ }
703
+ function TableHeaderWithPopover({
704
+ header,
705
+ isColumnPinned,
706
+ setColumnPinning,
707
+ onSortChange,
708
+ onResetSize
709
+ }) {
710
+ const [isOpen, setIsOpen] = React9.useState(false);
711
+ const handlePinLeft = React9.useCallback(() => {
712
+ setColumnPinning((prev) => {
713
+ return {
714
+ left: [...prev.left || [], header.column.id],
715
+ right: prev.right?.filter((id) => id !== header.column.id) || []
716
+ };
717
+ });
718
+ }, [header.column.id, setColumnPinning]);
719
+ const handleUnpin = React9.useCallback(() => {
720
+ setColumnPinning((prev) => {
721
+ return {
722
+ left: prev.left?.filter((id) => id !== header.column.id) || [],
723
+ right: prev.right?.filter((id) => id !== header.column.id) || []
724
+ };
725
+ });
726
+ }, [header.column.id, setColumnPinning]);
727
+ const handleSortAscending = React9.useCallback(() => {
728
+ header.column.toggleSorting(false);
729
+ onSortChange?.([{
730
+ id: header.column.id,
731
+ desc: false
732
+ }]);
733
+ }, [header.column, onSortChange]);
734
+ const handleSortDescending = React9.useCallback(() => {
735
+ header.column.toggleSorting(true);
736
+ onSortChange?.([{
737
+ id: header.column.id,
738
+ desc: true
739
+ }]);
740
+ }, [header.column, onSortChange]);
741
+ const handleClearAllSorts = React9.useCallback(() => {
742
+ header.column.clearSorting();
743
+ onSortChange?.([]);
744
+ }, [header.column, onSortChange]);
745
+ const handleResetSize = React9.useCallback(() => {
746
+ header.column.resetSize();
747
+ if (onResetSize) {
748
+ onResetSize();
749
+ }
750
+ }, [header.column, onResetSize]);
751
+ const handleInteraction = React9.useCallback((e) => {
752
+ e.preventDefault();
753
+ setIsOpen((prev) => !prev);
754
+ }, []);
755
+ const isSorted = header.column.getIsSorted();
756
+ const isSortable = header.column.getCanSort();
757
+ return /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Root, {
758
+ open: isOpen,
759
+ onOpenChange: setIsOpen
760
+ }, /* @__PURE__ */ React9__default.default.createElement("div", {
761
+ className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
762
+ onContextMenu: handleInteraction
763
+ }, /* @__PURE__ */ React9__default.default.createElement("div", {
764
+ className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
765
+ }, isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(icons.Pin, {
766
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
767
+ color: "currentColor"
768
+ }), /* @__PURE__ */ React9__default.default.createElement(TableHeaderContent, {
769
+ header
770
+ })), /* @__PURE__ */ React9__default.default.createElement("div", {
771
+ className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
772
+ }, isSorted && /* @__PURE__ */ React9__default.default.createElement("div", {
773
+ className: TableHeaderWithPopover_default.osdkCenterContainer
774
+ }, isSorted === "asc" ? /* @__PURE__ */ React9__default.default.createElement(icons.SortAlphabetical, {
775
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
776
+ color: "currentColor"
777
+ }) : /* @__PURE__ */ React9__default.default.createElement(icons.SortAlphabeticalDesc, {
778
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
779
+ color: "currentColor"
780
+ })), /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Trigger, {
781
+ "aria-label": `Open header menu for column with id=${header.column.id}`,
782
+ className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
783
+ }, /* @__PURE__ */ React9__default.default.createElement(icons.ChevronDown, {
784
+ className: TableHeaderWithPopover_default.osdkHeaderIcon
785
+ }))), /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Portal, {
786
+ container: document.body
787
+ }, /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Positioner, {
788
+ sideOffset: 4
789
+ }, /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Popup, {
790
+ className: TableHeaderWithPopover_default.osdkHeaderPopup
791
+ }, !isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
792
+ onClick: handlePinLeft,
793
+ icon: icons.Pin,
794
+ label: "Pin column"
795
+ }), isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
796
+ onClick: handleUnpin,
797
+ icon: icons.Unpin,
798
+ label: "Unpin Column",
799
+ active: true
800
+ }), isSortable && /* @__PURE__ */ React9__default.default.createElement(React9__default.default.Fragment, null, /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
801
+ onClick: handleSortAscending,
802
+ icon: icons.SortAlphabetical,
803
+ label: "Sort ascending",
804
+ active: isSorted === "asc"
805
+ }), /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
806
+ onClick: handleSortDescending,
807
+ icon: icons.SortAlphabeticalDesc,
808
+ label: "Sort descending",
809
+ active: isSorted === "desc"
810
+ })), !!isSorted && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
811
+ onClick: handleClearAllSorts,
812
+ icon: icons.Remove,
813
+ label: "Clear all sorts"
814
+ }), /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
815
+ onClick: handleResetSize,
816
+ icon: icons.VerticalDistribution,
817
+ label: "Reset Column Size"
818
+ }))))));
819
+ }
820
+
821
+ // src/object-table/TableHeader.tsx
511
822
  function TableHeader({
512
823
  table
513
824
  }) {
514
- return /* @__PURE__ */ React__default.default.createElement("thead", {
515
- style: {
516
- display: "grid",
517
- position: "sticky",
518
- top: 0,
519
- zIndex: 1
520
- }
521
- }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React__default.default.createElement("tr", {
825
+ const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
826
+ return /* @__PURE__ */ React9__default.default.createElement("thead", {
827
+ className: TableHeader_default.osdkTableHeader,
828
+ "data-resizing": isResizing
829
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React9__default.default.createElement("tr", {
522
830
  key: headerGroup.id,
523
- style: {
524
- display: "flex"
525
- }
526
- }, headerGroup.headers.map((header) => (
527
- // TODO: Move inline styling to CSS file
528
- /* @__PURE__ */ React__default.default.createElement("th", {
831
+ className: TableHeader_default.osdkTableHeaderRow
832
+ }, headerGroup.headers.map((header) => {
833
+ const {
834
+ columnStyles
835
+ } = getColumnPinningStyles(header.column);
836
+ const isColumnPinned = header.column.getIsPinned();
837
+ const isSelectColumn = header.id === SELECTION_COLUMN_ID;
838
+ return /* @__PURE__ */ React9__default.default.createElement("th", {
529
839
  key: header.id,
530
- style: {
531
- display: "flex",
532
- width: header.getSize(),
533
- justifyContent: "flex-start",
534
- alignItems: "center",
535
- position: "relative"
536
- }
537
- }, header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React__default.default.createElement("div", {
840
+ "data-pinned": header.column.getIsPinned(),
841
+ className: TableHeader_default.osdkTableHeaderCell,
842
+ style: columnStyles
843
+ }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React9__default.default.createElement(TableHeaderContent, {
844
+ header
845
+ }) : /* @__PURE__ */ React9__default.default.createElement(TableHeaderWithPopover, {
846
+ header,
847
+ isColumnPinned,
848
+ setColumnPinning: table.setColumnPinning
849
+ }), header.column.getCanResize() && /* @__PURE__ */ React9__default.default.createElement("div", {
850
+ className: TableHeader_default.osdkTableHeaderResizer,
538
851
  onDoubleClick: () => header.column.resetSize(),
539
852
  onMouseDown: header.getResizeHandler(),
540
- onTouchStart: header.getResizeHandler(),
541
- style: {
542
- position: "absolute",
543
- right: 0,
544
- top: 0,
545
- height: "100%",
546
- width: "3px",
547
- cursor: "col-resize",
548
- touchAction: "none",
549
- zIndex: 11,
550
- transform: header.column.getIsResizing() ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)` : ""
551
- }
552
- }))
553
- )))));
853
+ onTouchStart: header.getResizeHandler()
854
+ }));
855
+ }))));
554
856
  }
555
857
 
556
858
  // src/object-table/Table.tsx
557
- function Table({
859
+ function BaseTable({
558
860
  table,
559
861
  isLoading,
560
862
  fetchNextPage,
561
863
  onRowClick,
562
864
  rowHeight,
563
- renderCellContextMenu
865
+ renderCellContextMenu,
866
+ className
564
867
  }) {
565
- const tableContainerRef = React.useRef(null);
566
- const fetchingRef = React.useRef(false);
567
- const fetchMoreOnEndReached = React.useCallback(async (containerRefElement) => {
868
+ const tableContainerRef = React9.useRef(null);
869
+ const fetchingRef = React9.useRef(false);
870
+ const fetchMoreOnEndReached = React9.useCallback(async (containerRefElement) => {
568
871
  if (containerRefElement && !fetchingRef.current) {
569
872
  const {
570
873
  scrollHeight,
@@ -581,28 +884,16 @@ function Table({
581
884
  }
582
885
  }
583
886
  }, [fetchNextPage, isLoading]);
584
- const handleScroll = React.useCallback(async (e) => {
887
+ const handleScroll = React9.useCallback(async (e) => {
585
888
  await fetchMoreOnEndReached(e.currentTarget);
586
889
  }, [fetchMoreOnEndReached]);
587
- return /* @__PURE__ */ React__default.default.createElement("div", {
890
+ return /* @__PURE__ */ React9__default.default.createElement("div", {
588
891
  ref: tableContainerRef,
589
- style: {
590
- position: "relative",
591
- // needed for sticky header
592
- height: "100%",
593
- // needed for scrolling
594
- overflow: "auto",
595
- cursor: table.getState().columnSizingInfo?.isResizingColumn ? "col-resize" : "default",
596
- userSelect: table.getState().columnSizingInfo?.isResizingColumn ? "none" : "auto"
597
- },
892
+ className: classNames__default.default(Table_default.osdkTableContainer, className),
598
893
  onScroll: handleScroll
599
- }, /* @__PURE__ */ React__default.default.createElement("table", {
600
- style: {
601
- display: "grid"
602
- }
603
- }, /* @__PURE__ */ React__default.default.createElement(TableHeader, {
894
+ }, /* @__PURE__ */ React9__default.default.createElement("table", null, /* @__PURE__ */ React9__default.default.createElement(TableHeader, {
604
895
  table
605
- }), /* @__PURE__ */ React__default.default.createElement(TableBody, {
896
+ }), /* @__PURE__ */ React9__default.default.createElement(TableBody, {
606
897
  rows: table.getRowModel().rows,
607
898
  tableContainerRef,
608
899
  onRowClick,
@@ -617,27 +908,37 @@ function ObjectTable({
617
908
  objectType,
618
909
  columnDefinitions,
619
910
  filter,
911
+ orderBy,
912
+ defaultOrderBy,
913
+ onOrderByChanged,
914
+ onColumnsPinnedChanged,
620
915
  onRowSelection,
621
916
  renderCellContextMenu,
622
917
  selectionMode = "none",
623
918
  selectedRows,
624
919
  ...props
625
920
  }) {
921
+ const [columnSizing, setColumnSizing] = React9.useState({});
922
+ const {
923
+ sorting,
924
+ onSortingChange
925
+ } = useTableSorting({
926
+ orderBy,
927
+ defaultOrderBy,
928
+ onOrderByChanged
929
+ });
626
930
  const {
627
931
  data,
628
932
  fetchMore,
629
933
  isLoading
630
- } = useObjectTableData(objectSet, columnDefinitions, filter);
934
+ } = useObjectTableData(objectSet, columnDefinitions, filter, sorting);
631
935
  const {
632
936
  columns,
633
937
  loading: isColumnsLoading
634
938
  } = useColumnDefs(objectType, columnDefinitions);
635
- const {
636
- columnVisibility
637
- } = useDefaultTableStates({
939
+ const columnVisibility = useColumnVisibility({
638
940
  columnDefinitions
639
941
  });
640
- const [columnSizing, setColumnSizing] = React.useState({});
641
942
  const {
642
943
  rowSelection,
643
944
  isAllSelected,
@@ -657,9 +958,17 @@ function ObjectTable({
657
958
  onToggleAll,
658
959
  onToggleRow
659
960
  });
660
- const allColumns = React.useMemo(() => {
961
+ const allColumns = React9.useMemo(() => {
661
962
  return selectionColumn ? [selectionColumn, ...columns] : columns;
662
963
  }, [selectionColumn, columns]);
964
+ const {
965
+ columnPinning,
966
+ onColumnPinningChange
967
+ } = useColumnPinning({
968
+ columnDefinitions,
969
+ hasSelectionColumn: selectionColumn != null,
970
+ onColumnsPinnedChanged
971
+ });
663
972
  const table = reactTable.useReactTable({
664
973
  data: data ?? [],
665
974
  columns: allColumns,
@@ -667,31 +976,39 @@ function ObjectTable({
667
976
  state: {
668
977
  columnVisibility,
669
978
  rowSelection,
670
- columnSizing
979
+ sorting,
980
+ columnSizing,
981
+ columnPinning
671
982
  },
983
+ onSortingChange,
672
984
  onColumnSizingChange: setColumnSizing,
985
+ onColumnPinningChange,
673
986
  enableRowSelection: selectionMode !== "none",
674
987
  columnResizeMode: "onChange",
675
988
  columnResizeDirection: "ltr",
989
+ manualSorting: true,
990
+ // Enable manual sorting to indicate server-side sorting
676
991
  defaultColumn: {
677
992
  minSize: 80
678
993
  },
679
994
  getRowId
680
995
  });
681
- const onRenderCellContextMenu = React.useCallback((row, cell) => {
996
+ const onRenderCellContextMenu = React9.useCallback((row, cell) => {
682
997
  return renderCellContextMenu?.(row, cell.getValue());
683
998
  }, [renderCellContextMenu]);
684
999
  const isTableLoading = isLoading || isColumnsLoading;
685
- return /* @__PURE__ */ React__default.default.createElement(Table, {
1000
+ return /* @__PURE__ */ React9__default.default.createElement(BaseTable, {
686
1001
  table,
687
1002
  isLoading: isTableLoading,
688
1003
  fetchNextPage: fetchMore,
689
1004
  onRowClick: props.onRowClick,
690
1005
  rowHeight: props.rowHeight,
691
- renderCellContextMenu: onRenderCellContextMenu
1006
+ renderCellContextMenu: onRenderCellContextMenu,
1007
+ className: props.className
692
1008
  });
693
1009
  }
694
1010
 
1011
+ exports.BaseTable = BaseTable;
695
1012
  exports.ObjectTable = ObjectTable;
696
1013
  //# sourceMappingURL=experimental.cjs.map
697
1014
  //# sourceMappingURL=experimental.cjs.map