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

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 (60) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/build/browser/base-components/checkbox/Checkbox.module.css +10 -8
  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 +2 -1
  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 +6 -15
  10. package/build/browser/object-table/Table.js.map +1 -1
  11. package/build/browser/object-table/Table.module.css +21 -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 +5 -3
  16. package/build/browser/object-table/TableCell.js.map +1 -1
  17. package/build/browser/object-table/TableCell.module.css +46 -0
  18. package/build/browser/object-table/TableHeader.js +12 -30
  19. package/build/browser/object-table/TableHeader.js.map +1 -1
  20. package/build/browser/object-table/TableHeader.module.css +78 -0
  21. package/build/browser/object-table/TableRow.js +4 -3
  22. package/build/browser/object-table/TableRow.js.map +1 -1
  23. package/build/browser/object-table/TableRow.module.css +60 -0
  24. package/build/cjs/public/experimental.cjs +98 -108
  25. package/build/cjs/public/experimental.cjs.map +1 -1
  26. package/build/cjs/public/experimental.css +136 -4
  27. package/build/cjs/public/experimental.css.map +1 -1
  28. package/build/cjs/public/experimental.d.cts +1 -0
  29. package/build/esm/base-components/checkbox/Checkbox.module.css +10 -8
  30. package/build/esm/object-table/CellContextMenu.js +2 -2
  31. package/build/esm/object-table/CellContextMenu.js.map +1 -1
  32. package/build/esm/object-table/CellContextMenu.module.css +20 -0
  33. package/build/esm/object-table/ObjectTable.js +2 -1
  34. package/build/esm/object-table/ObjectTable.js.map +1 -1
  35. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  36. package/build/esm/object-table/Table.js +6 -15
  37. package/build/esm/object-table/Table.js.map +1 -1
  38. package/build/esm/object-table/Table.module.css +21 -0
  39. package/build/esm/object-table/TableBody.js +2 -2
  40. package/build/esm/object-table/TableBody.js.map +1 -1
  41. package/build/esm/object-table/TableBody.module.css +20 -0
  42. package/build/esm/object-table/TableCell.js +5 -3
  43. package/build/esm/object-table/TableCell.js.map +1 -1
  44. package/build/esm/object-table/TableCell.module.css +46 -0
  45. package/build/esm/object-table/TableHeader.js +12 -30
  46. package/build/esm/object-table/TableHeader.js.map +1 -1
  47. package/build/esm/object-table/TableHeader.module.css +78 -0
  48. package/build/esm/object-table/TableRow.js +4 -3
  49. package/build/esm/object-table/TableRow.js.map +1 -1
  50. package/build/esm/object-table/TableRow.module.css +60 -0
  51. package/build/types/object-table/CellContextMenu.d.ts.map +1 -1
  52. package/build/types/object-table/ObjectTableApi.d.ts +1 -0
  53. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  54. package/build/types/object-table/Table.d.ts +2 -1
  55. package/build/types/object-table/Table.d.ts.map +1 -1
  56. package/build/types/object-table/TableBody.d.ts.map +1 -1
  57. package/build/types/object-table/TableCell.d.ts.map +1 -1
  58. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  59. package/build/types/object-table/TableRow.d.ts.map +1 -1
  60. package/package.json +8 -8
@@ -0,0 +1,78 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ .osdkTableHeader {
18
+ display: grid;
19
+ position: sticky;
20
+ top: 0;
21
+ z-index: var(--bp-surface-zIndex-1);
22
+ background-color: var(--osdk-table-header-bg);
23
+ }
24
+
25
+ .osdkTableHeader[data-resizing="true"] {
26
+ cursor: col-resize;
27
+ user-select: none;
28
+ }
29
+
30
+ .osdkTableHeaderRow {
31
+ display: flex;
32
+ }
33
+
34
+ .osdkTableHeaderCell {
35
+ display: flex;
36
+ align-items: center;
37
+ text-align: left;
38
+ position: relative;
39
+ padding: var(--osdk-table-cell-padding);
40
+ font-weight: var(--osdk-table-header-fontWeight);
41
+ font-size: var(--osdk-table-header-fontSize);
42
+ color: var(--osdk-table-header-color);
43
+ border-top: var(--osdk-table-border);
44
+ border-right: var(--osdk-table-header-divider);
45
+ background-color: inherit;
46
+
47
+ &:first-child {
48
+ border-left: var(--osdk-table-border);
49
+ }
50
+
51
+ &:last-child {
52
+ border-right: var(--osdk-table-border);
53
+ }
54
+ }
55
+
56
+ .osdkTableHeaderCell:has([role="checkbox"]) {
57
+ justify-content: center;
58
+ }
59
+
60
+ .osdkTableHeaderResizer {
61
+ background: none;
62
+ cursor: col-resize;
63
+ height: 100%;
64
+ position: absolute;
65
+ right: calc(-1 * var(--osdk-table-border-width));
66
+ top: 0;
67
+ touch-action: none;
68
+ width: 3px;
69
+ z-index: var(--bp-surface-zIndex-2);
70
+
71
+ &:hover {
72
+ background: var(--bp-intent-primary-hover);
73
+ }
74
+
75
+ &:active {
76
+ background: var(--bp-intent-primary-active);
77
+ }
78
+ }
@@ -16,6 +16,7 @@
16
16
 
17
17
  import React, { useCallback } from "react";
18
18
  import { TableCell } from "./TableCell.js";
19
+ import styles from "./TableRow.module.css";
19
20
  export function TableRow({
20
21
  row,
21
22
  virtualRow,
@@ -26,11 +27,11 @@ export function TableRow({
26
27
  onRowClick?.(row.original);
27
28
  }, [onRowClick, row.original]);
28
29
  return /*#__PURE__*/React.createElement("tr", {
30
+ "data-selected": row.getIsSelected(),
31
+ className: styles.osdkTableRow,
29
32
  style: {
30
- position: "absolute",
31
33
  height: `${virtualRow.size}px`,
32
- transform: `translateY(${virtualRow.start}px)`,
33
- display: "flex"
34
+ transform: `translateY(${virtualRow.start}px)`
34
35
  },
35
36
  onClick: handleClick
36
37
  }, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement(TableCell, {
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","style","position","height","size","transform","start","display","onClick","getVisibleCells","map","cell","key","id"],"sources":["TableRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Cell, Row, RowData } from \"@tanstack/react-table\";\nimport type { VirtualItem } from \"@tanstack/react-virtual\";\nimport React, { useCallback } from \"react\";\nimport { TableCell } from \"./TableCell.js\";\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>;\n virtualRow: VirtualItem;\n onRowClick?: (row: TData) => void;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableRow<TData extends RowData>({\n row,\n virtualRow,\n onRowClick,\n renderCellContextMenu,\n}: TableRowProps<TData>): React.ReactElement {\n const handleClick = useCallback(() => {\n onRowClick?.(row.original);\n }, [onRowClick, row.original]);\n\n return (\n <tr\n style={{\n position: \"absolute\",\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n display: \"flex\",\n }}\n onClick={handleClick}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n cell={cell}\n renderCellContextMenu={renderCellContextMenu}\n />\n ))}\n </tr>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,SAAS,QAAQ,gBAAgB;AAY1C,OAAO,SAASC,QAAQA,CAAwB;EAC9CC,GAAG;EACHC,UAAU;EACVC,UAAU;EACVC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,WAAW,GAAGP,WAAW,CAAC,MAAM;IACpCK,UAAU,GAAGF,GAAG,CAACK,QAAQ,CAAC;EAC5B,CAAC,EAAE,CAACH,UAAU,EAAEF,GAAG,CAACK,QAAQ,CAAC,CAAC;EAE9B,oBACET,KAAA,CAAAU,aAAA;IACEC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,MAAM,EAAE,GAAGR,UAAU,CAACS,IAAI,IAAI;MAC9BC,SAAS,EAAE,cAAcV,UAAU,CAACW,KAAK,KAAK;MAC9CC,OAAO,EAAE;IACX,CAAE;IACFC,OAAO,EAAEV;EAAY,GAEpBJ,GAAG,CAACe,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,IAAI,iBAC9BrB,KAAA,CAAAU,aAAA,CAACR,SAAS;IACRoB,GAAG,EAAED,IAAI,CAACE,EAAG;IACbF,IAAI,EAAEA,IAAK;IACXd,qBAAqB,EAAEA;EAAsB,CAC9C,CACF,CACC,CAAC;AAET","ignoreList":[]}
1
+ {"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","styles","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","getIsSelected","className","osdkTableRow","style","height","size","transform","start","onClick","getVisibleCells","map","cell","key","id"],"sources":["TableRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Cell, Row, RowData } from \"@tanstack/react-table\";\nimport type { VirtualItem } from \"@tanstack/react-virtual\";\nimport React, { useCallback } from \"react\";\nimport { TableCell } from \"./TableCell.js\";\nimport styles from \"./TableRow.module.css\";\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>;\n virtualRow: VirtualItem;\n onRowClick?: (row: TData) => void;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableRow<TData extends RowData>({\n row,\n virtualRow,\n onRowClick,\n renderCellContextMenu,\n}: TableRowProps<TData>): React.ReactElement {\n const handleClick = useCallback(() => {\n onRowClick?.(row.original);\n }, [onRowClick, row.original]);\n\n return (\n <tr\n data-selected={row.getIsSelected()}\n className={styles.osdkTableRow}\n style={{\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }}\n onClick={handleClick}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n cell={cell}\n renderCellContextMenu={renderCellContextMenu}\n />\n ))}\n </tr>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,MAAM,MAAM,uBAAuB;AAY1C,OAAO,SAASC,QAAQA,CAAwB;EAC9CC,GAAG;EACHC,UAAU;EACVC,UAAU;EACVC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,WAAW,GAAGR,WAAW,CAAC,MAAM;IACpCM,UAAU,GAAGF,GAAG,CAACK,QAAQ,CAAC;EAC5B,CAAC,EAAE,CAACH,UAAU,EAAEF,GAAG,CAACK,QAAQ,CAAC,CAAC;EAE9B,oBACEV,KAAA,CAAAW,aAAA;IACE,iBAAeN,GAAG,CAACO,aAAa,CAAC,CAAE;IACnCC,SAAS,EAAEV,MAAM,CAACW,YAAa;IAC/BC,KAAK,EAAE;MACLC,MAAM,EAAE,GAAGV,UAAU,CAACW,IAAI,IAAI;MAC9BC,SAAS,EAAE,cAAcZ,UAAU,CAACa,KAAK;IAC3C,CAAE;IACFC,OAAO,EAAEX;EAAY,GAEpBJ,GAAG,CAACgB,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,IAAI,iBAC9BvB,KAAA,CAAAW,aAAA,CAACT,SAAS;IACRsB,GAAG,EAAED,IAAI,CAACE,EAAG;IACbF,IAAI,EAAEA,IAAK;IACXf,qBAAqB,EAAEA;EAAsB,CAC9C,CACF,CACC,CAAC;AAET","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ .osdkTableRow {
18
+ position: absolute;
19
+ display: flex;
20
+ background-color: var(--osdk-table-row-bg-default);
21
+ border-top: var(--osdk-table-row-divider);
22
+ border-bottom: var(--osdk-table-border-width) solid transparent;
23
+
24
+ &:last-child {
25
+ border-bottom: var(--osdk-table-border);
26
+ }
27
+
28
+ /* Zebra rows */
29
+ &:nth-child(even) {
30
+ background-color: var(
31
+ --osdk-table-row-bg-alternate,
32
+ var(--osdk-table-row-bg-default)
33
+ );
34
+ }
35
+
36
+ &:hover {
37
+ z-index: 1;
38
+ background-color: var(
39
+ --osdk-table-row-bg-hover,
40
+ var(--bp-surface-colorHover-default)
41
+ );
42
+ border-top-color: var(--osdk-table-row-border-color-hover);
43
+ border-bottom-color: var(--osdk-table-row-border-color-hover);
44
+ }
45
+
46
+ &[data-selected="true"] {
47
+ z-index: 2;
48
+ background-color: var(--osdk-table-row-bg-active);
49
+ border-top-color: var(--osdk-table-row-border-color-active);
50
+ border-bottom-color: var(--osdk-table-row-border-color-active);
51
+ }
52
+
53
+ &[data-selected="true"] + &[data-selected="true"] {
54
+ border-top-color: transparent;
55
+ }
56
+
57
+ &[data-selected="true"]:has(+ &[data-selected="true"]) {
58
+ border-bottom-color: transparent;
59
+ }
60
+ }
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var reactTable = require('@tanstack/react-table');
4
- var React = require('react');
4
+ var React5 = 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');
@@ -12,7 +12,7 @@ var reactDom = require('react-dom');
12
12
 
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
14
 
15
- var React__default = /*#__PURE__*/_interopDefault(React);
15
+ var React5__default = /*#__PURE__*/_interopDefault(React5);
16
16
  var classnames__default = /*#__PURE__*/_interopDefault(classnames);
17
17
 
18
18
  // src/object-table/ObjectTable.tsx
@@ -22,7 +22,7 @@ function useColumnDefs(objectType, columnDefinitions) {
22
22
  loading,
23
23
  error
24
24
  } = react.useOsdkMetadata(objectType);
25
- const columns = React.useMemo(() => {
25
+ const columns = React5.useMemo(() => {
26
26
  const objectProperties = metadata?.properties;
27
27
  if (columnDefinitions) {
28
28
  return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
@@ -81,7 +81,7 @@ function getDefaultColumns(objectProperties) {
81
81
  var useDefaultTableStates = ({
82
82
  columnDefinitions
83
83
  }) => {
84
- const columnVisibility = React.useMemo(() => {
84
+ const columnVisibility = React5.useMemo(() => {
85
85
  if (columnDefinitions) {
86
86
  const colVisibility = columnDefinitions.reduce((acc, colDef) => {
87
87
  if (colDef.isVisible !== void 0) {
@@ -105,7 +105,7 @@ var useDefaultTableStates = ({
105
105
  };
106
106
  var PAGE_SIZE = 50;
107
107
  function useObjectTableData(objectSet, columnDefinitions, filter) {
108
- const withProperties = React.useMemo(() => {
108
+ const withProperties = React5.useMemo(() => {
109
109
  if (!columnDefinitions) {
110
110
  return;
111
111
  }
@@ -139,11 +139,11 @@ function useRowSelection({
139
139
  onRowSelection,
140
140
  data
141
141
  }) {
142
- const [internalRowSelection, setInternalRowSelection] = React.useState({});
143
- const [lastSelectedRowIndex, setLastSelectedRowIndex] = React.useState(null);
142
+ const [internalRowSelection, setInternalRowSelection] = React5.useState({});
143
+ const [lastSelectedRowIndex, setLastSelectedRowIndex] = React5.useState(null);
144
144
  const isControlled = selectedRows !== void 0;
145
145
  const isSelectionEnabled = selectionMode !== "none";
146
- const rowSelectionState = React.useMemo(() => {
146
+ const rowSelectionState = React5.useMemo(() => {
147
147
  if (!isSelectionEnabled) return {};
148
148
  if (isControlled && selectedRows) {
149
149
  return getRowSelectionState(selectedRows);
@@ -154,7 +154,7 @@ function useRowSelection({
154
154
  const totalCount = data?.length ?? 0;
155
155
  const isAllSelected = totalCount > 0 && selectedCount === totalCount;
156
156
  const hasSelection = selectedCount > 0;
157
- const onToggleAll = React.useCallback(() => {
157
+ const onToggleAll = React5.useCallback(() => {
158
158
  if (!isSelectionEnabled || !data) return;
159
159
  const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
160
160
  if (!isControlled) {
@@ -162,7 +162,7 @@ function useRowSelection({
162
162
  }
163
163
  onRowSelection?.(newSelectedRows);
164
164
  }, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
165
- const onToggleRow = React.useCallback((rowId, rowIndex, isShiftClick = false) => {
165
+ const onToggleRow = React5.useCallback((rowId, rowIndex, isShiftClick = false) => {
166
166
  if (!isSelectionEnabled || !data) return;
167
167
  let newSelectedRows = [];
168
168
  if (selectionMode === "single") {
@@ -284,14 +284,14 @@ function Checkbox({
284
284
  indicatorProps,
285
285
  ...rest
286
286
  }) {
287
- return /* @__PURE__ */ React__default.default.createElement(checkbox.Checkbox.Root, _extends({
287
+ return /* @__PURE__ */ React5__default.default.createElement(checkbox.Checkbox.Root, _extends({
288
288
  className: classnames__default.default(Checkbox_default.osdkCheckboxRoot, className),
289
289
  indeterminate
290
- }, rest), /* @__PURE__ */ React__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
290
+ }, rest), /* @__PURE__ */ React5__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
291
291
  className: classnames__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
292
- }), indeterminate ? /* @__PURE__ */ React__default.default.createElement(icons.Minus, {
292
+ }), indeterminate ? /* @__PURE__ */ React5__default.default.createElement(icons.Minus, {
293
293
  color: "currentColor"
294
- }) : /* @__PURE__ */ React__default.default.createElement(icons.Tick, {
294
+ }) : /* @__PURE__ */ React5__default.default.createElement(icons.Tick, {
295
295
  color: "currentColor"
296
296
  })));
297
297
  }
@@ -302,7 +302,7 @@ function SelectionHeaderCell({
302
302
  hasSelection,
303
303
  onToggleAll
304
304
  }) {
305
- return /* @__PURE__ */ React__default.default.createElement(Checkbox, {
305
+ return /* @__PURE__ */ React5__default.default.createElement(Checkbox, {
306
306
  indeterminate: hasSelection && !isAllSelected,
307
307
  checked: isAllSelected,
308
308
  onCheckedChange: onToggleAll,
@@ -313,11 +313,11 @@ function SelectionCell({
313
313
  row,
314
314
  onToggleRow
315
315
  }) {
316
- const handleClick = React.useCallback((event) => {
316
+ const handleClick = React5.useCallback((event) => {
317
317
  const isShiftClick = event.shiftKey;
318
318
  onToggleRow(row.id, row.index, isShiftClick);
319
319
  }, [row, onToggleRow]);
320
- return /* @__PURE__ */ React__default.default.createElement(Checkbox, {
320
+ return /* @__PURE__ */ React5__default.default.createElement(Checkbox, {
321
321
  checked: row.getIsSelected(),
322
322
  onClick: handleClick,
323
323
  "aria-label": `Select row ${row.index + 1}`
@@ -333,18 +333,18 @@ var useSelectionColumn = ({
333
333
  onToggleAll,
334
334
  onToggleRow
335
335
  }) => {
336
- const selectionColumn = React.useMemo(() => {
336
+ const selectionColumn = React5.useMemo(() => {
337
337
  if (selectionMode === "none") return null;
338
338
  return {
339
339
  id: SELECTION_COLUMN_ID,
340
- header: () => selectionMode === "multiple" ? /* @__PURE__ */ React__default.default.createElement(SelectionHeaderCell, {
340
+ header: () => selectionMode === "multiple" ? /* @__PURE__ */ React5__default.default.createElement(SelectionHeaderCell, {
341
341
  isAllSelected,
342
342
  hasSelection,
343
343
  onToggleAll
344
344
  }) : null,
345
345
  cell: ({
346
346
  row
347
- }) => /* @__PURE__ */ React__default.default.createElement(SelectionCell, {
347
+ }) => /* @__PURE__ */ React5__default.default.createElement(SelectionCell, {
348
348
  row,
349
349
  onToggleRow
350
350
  }),
@@ -357,14 +357,25 @@ var useSelectionColumn = ({
357
357
  }, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
358
358
  return selectionColumn;
359
359
  };
360
+
361
+ // src/object-table/Table.module.css
362
+ var Table_default = {};
363
+
364
+ // src/object-table/TableBody.module.css
365
+ var TableBody_default = {};
366
+
367
+ // src/object-table/CellContextMenu.module.css
368
+ var CellContextMenu_default = {};
369
+
370
+ // src/object-table/CellContextMenu.tsx
360
371
  function CellContextMenu({
361
372
  cell,
362
373
  position,
363
374
  onClose,
364
375
  renderContent
365
376
  }) {
366
- const ref = React.useRef(null);
367
- React.useEffect(() => {
377
+ const ref = React5.useRef(null);
378
+ React5.useEffect(() => {
368
379
  const handleClickOutside = (event) => {
369
380
  if (ref.current && !ref.current.contains(event.target)) {
370
381
  onClose();
@@ -375,11 +386,10 @@ function CellContextMenu({
375
386
  document.removeEventListener("mousedown", handleClickOutside);
376
387
  };
377
388
  }, [onClose]);
378
- return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React__default.default.createElement("div", {
389
+ return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React5__default.default.createElement("div", {
379
390
  ref,
391
+ className: CellContextMenu_default.osdkCellContextMenu,
380
392
  style: {
381
- position: "fixed",
382
- zIndex: 9999,
383
393
  left: position.left,
384
394
  top: position.top,
385
395
  minWidth: position.width
@@ -389,9 +399,9 @@ function CellContextMenu({
389
399
  var useCellContextMenu = ({
390
400
  tdRef
391
401
  }) => {
392
- const [popoverPosition, setPopoverPosition] = React.useState(null);
393
- const [isContextMenuOpen, setIsContextMenuOpen] = React.useState(false);
394
- const handleOpenContextMenu = React.useCallback((event) => {
402
+ const [popoverPosition, setPopoverPosition] = React5.useState(null);
403
+ const [isContextMenuOpen, setIsContextMenuOpen] = React5.useState(false);
404
+ const handleOpenContextMenu = React5.useCallback((event) => {
395
405
  event.preventDefault();
396
406
  event.stopPropagation();
397
407
  if (tdRef.current) {
@@ -405,7 +415,7 @@ var useCellContextMenu = ({
405
415
  setIsContextMenuOpen(true);
406
416
  }
407
417
  }, [tdRef]);
408
- const handleCloseContextMenu = React.useCallback(() => {
418
+ const handleCloseContextMenu = React5.useCallback(() => {
409
419
  setIsContextMenuOpen(false);
410
420
  setPopoverPosition(null);
411
421
  }, []);
@@ -417,12 +427,15 @@ var useCellContextMenu = ({
417
427
  };
418
428
  };
419
429
 
430
+ // src/object-table/TableCell.module.css
431
+ var TableCell_default = {};
432
+
420
433
  // src/object-table/TableCell.tsx
421
434
  function TableCell({
422
435
  cell,
423
436
  renderCellContextMenu
424
437
  }) {
425
- const tdRef = React.useRef(null);
438
+ const tdRef = React5.useRef(null);
426
439
  const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
427
440
  const {
428
441
  isContextMenuOpen,
@@ -433,15 +446,16 @@ function TableCell({
433
446
  tdRef
434
447
  });
435
448
  const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
436
- return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement("td", {
449
+ return /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement("td", {
437
450
  ref: tdRef,
451
+ className: TableCell_default.osdkTableCell,
438
452
  style: {
439
- display: "flex",
440
- alignItems: "center",
441
453
  width: cell.column.getSize()
442
454
  },
443
455
  onContextMenu: handleOpenContextMenu
444
- }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())), shouldRenderContextMenu && /* @__PURE__ */ React__default.default.createElement(CellContextMenu, {
456
+ }, /* @__PURE__ */ React5__default.default.createElement("div", {
457
+ className: TableCell_default.osdkTableCellContent
458
+ }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React5__default.default.createElement(CellContextMenu, {
445
459
  cell,
446
460
  position: popoverPosition,
447
461
  onClose: handleCloseContextMenu,
@@ -449,6 +463,9 @@ function TableCell({
449
463
  }));
450
464
  }
451
465
 
466
+ // src/object-table/TableRow.module.css
467
+ var TableRow_default = {};
468
+
452
469
  // src/object-table/TableRow.tsx
453
470
  function TableRow({
454
471
  row,
@@ -456,18 +473,18 @@ function TableRow({
456
473
  onRowClick,
457
474
  renderCellContextMenu
458
475
  }) {
459
- const handleClick = React.useCallback(() => {
476
+ const handleClick = React5.useCallback(() => {
460
477
  onRowClick?.(row.original);
461
478
  }, [onRowClick, row.original]);
462
- return /* @__PURE__ */ React__default.default.createElement("tr", {
479
+ return /* @__PURE__ */ React5__default.default.createElement("tr", {
480
+ "data-selected": row.getIsSelected(),
481
+ className: TableRow_default.osdkTableRow,
463
482
  style: {
464
- position: "absolute",
465
483
  height: `${virtualRow.size}px`,
466
- transform: `translateY(${virtualRow.start}px)`,
467
- display: "flex"
484
+ transform: `translateY(${virtualRow.start}px)`
468
485
  },
469
486
  onClick: handleClick
470
- }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React__default.default.createElement(TableCell, {
487
+ }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React5__default.default.createElement(TableCell, {
471
488
  key: cell.id,
472
489
  cell,
473
490
  renderCellContextMenu
@@ -488,18 +505,17 @@ function TableBody({
488
505
  getScrollElement: () => tableContainerRef.current,
489
506
  overscan: 5
490
507
  });
491
- React.useLayoutEffect(() => {
508
+ React5.useLayoutEffect(() => {
492
509
  rowVirtualizer.measure();
493
510
  }, [rowVirtualizer, rows.length]);
494
- return /* @__PURE__ */ React__default.default.createElement("tbody", {
511
+ return /* @__PURE__ */ React5__default.default.createElement("tbody", {
512
+ className: TableBody_default.osdkTableBody,
495
513
  style: {
496
- display: "grid",
497
- position: "relative",
498
514
  height: `${rowVirtualizer.getTotalSize()}px`
499
515
  }
500
516
  }, rowVirtualizer.getVirtualItems().map((virtualRow) => {
501
517
  const row = rows[virtualRow.index];
502
- return /* @__PURE__ */ React__default.default.createElement(TableRow, {
518
+ return /* @__PURE__ */ React5__default.default.createElement(TableRow, {
503
519
  key: row.id,
504
520
  row,
505
521
  virtualRow,
@@ -508,49 +524,33 @@ function TableBody({
508
524
  });
509
525
  }));
510
526
  }
527
+
528
+ // src/object-table/TableHeader.module.css
529
+ var TableHeader_default = {};
530
+
531
+ // src/object-table/TableHeader.tsx
511
532
  function TableHeader({
512
533
  table
513
534
  }) {
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", {
535
+ const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
536
+ return /* @__PURE__ */ React5__default.default.createElement("thead", {
537
+ className: TableHeader_default.osdkTableHeader,
538
+ "data-resizing": isResizing
539
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React5__default.default.createElement("tr", {
522
540
  key: headerGroup.id,
541
+ className: TableHeader_default.osdkTableHeaderRow
542
+ }, headerGroup.headers.map((header) => /* @__PURE__ */ React5__default.default.createElement("th", {
543
+ key: header.id,
544
+ className: TableHeader_default.osdkTableHeaderCell,
523
545
  style: {
524
- display: "flex"
546
+ width: header.getSize()
525
547
  }
526
- }, headerGroup.headers.map((header) => (
527
- // TODO: Move inline styling to CSS file
528
- /* @__PURE__ */ React__default.default.createElement("th", {
529
- 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", {
538
- onDoubleClick: () => header.column.resetSize(),
539
- 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
- )))));
548
+ }, header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React5__default.default.createElement("div", {
549
+ className: TableHeader_default.osdkTableHeaderResizer,
550
+ onDoubleClick: () => header.column.resetSize(),
551
+ onMouseDown: header.getResizeHandler(),
552
+ onTouchStart: header.getResizeHandler()
553
+ }))))));
554
554
  }
555
555
 
556
556
  // src/object-table/Table.tsx
@@ -560,11 +560,12 @@ function Table({
560
560
  fetchNextPage,
561
561
  onRowClick,
562
562
  rowHeight,
563
- renderCellContextMenu
563
+ renderCellContextMenu,
564
+ className
564
565
  }) {
565
- const tableContainerRef = React.useRef(null);
566
- const fetchingRef = React.useRef(false);
567
- const fetchMoreOnEndReached = React.useCallback(async (containerRefElement) => {
566
+ const tableContainerRef = React5.useRef(null);
567
+ const fetchingRef = React5.useRef(false);
568
+ const fetchMoreOnEndReached = React5.useCallback(async (containerRefElement) => {
568
569
  if (containerRefElement && !fetchingRef.current) {
569
570
  const {
570
571
  scrollHeight,
@@ -581,28 +582,16 @@ function Table({
581
582
  }
582
583
  }
583
584
  }, [fetchNextPage, isLoading]);
584
- const handleScroll = React.useCallback(async (e) => {
585
+ const handleScroll = React5.useCallback(async (e) => {
585
586
  await fetchMoreOnEndReached(e.currentTarget);
586
587
  }, [fetchMoreOnEndReached]);
587
- return /* @__PURE__ */ React__default.default.createElement("div", {
588
+ return /* @__PURE__ */ React5__default.default.createElement("div", {
588
589
  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
- },
590
+ className: classnames__default.default(Table_default.osdkTableContainer, className),
598
591
  onScroll: handleScroll
599
- }, /* @__PURE__ */ React__default.default.createElement("table", {
600
- style: {
601
- display: "grid"
602
- }
603
- }, /* @__PURE__ */ React__default.default.createElement(TableHeader, {
592
+ }, /* @__PURE__ */ React5__default.default.createElement("table", null, /* @__PURE__ */ React5__default.default.createElement(TableHeader, {
604
593
  table
605
- }), /* @__PURE__ */ React__default.default.createElement(TableBody, {
594
+ }), /* @__PURE__ */ React5__default.default.createElement(TableBody, {
606
595
  rows: table.getRowModel().rows,
607
596
  tableContainerRef,
608
597
  onRowClick,
@@ -637,7 +626,7 @@ function ObjectTable({
637
626
  } = useDefaultTableStates({
638
627
  columnDefinitions
639
628
  });
640
- const [columnSizing, setColumnSizing] = React.useState({});
629
+ const [columnSizing, setColumnSizing] = React5.useState({});
641
630
  const {
642
631
  rowSelection,
643
632
  isAllSelected,
@@ -657,7 +646,7 @@ function ObjectTable({
657
646
  onToggleAll,
658
647
  onToggleRow
659
648
  });
660
- const allColumns = React.useMemo(() => {
649
+ const allColumns = React5.useMemo(() => {
661
650
  return selectionColumn ? [selectionColumn, ...columns] : columns;
662
651
  }, [selectionColumn, columns]);
663
652
  const table = reactTable.useReactTable({
@@ -678,17 +667,18 @@ function ObjectTable({
678
667
  },
679
668
  getRowId
680
669
  });
681
- const onRenderCellContextMenu = React.useCallback((row, cell) => {
670
+ const onRenderCellContextMenu = React5.useCallback((row, cell) => {
682
671
  return renderCellContextMenu?.(row, cell.getValue());
683
672
  }, [renderCellContextMenu]);
684
673
  const isTableLoading = isLoading || isColumnsLoading;
685
- return /* @__PURE__ */ React__default.default.createElement(Table, {
674
+ return /* @__PURE__ */ React5__default.default.createElement(Table, {
686
675
  table,
687
676
  isLoading: isTableLoading,
688
677
  fetchNextPage: fetchMore,
689
678
  onRowClick: props.onRowClick,
690
679
  rowHeight: props.rowHeight,
691
- renderCellContextMenu: onRenderCellContextMenu
680
+ renderCellContextMenu: onRenderCellContextMenu,
681
+ className: props.className
692
682
  });
693
683
  }
694
684