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

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 (131) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +51 -1
  3. package/build/browser/base-components/checkbox/Checkbox.js +40 -0
  4. package/build/browser/base-components/checkbox/Checkbox.js.map +1 -0
  5. package/build/browser/base-components/checkbox/Checkbox.module.css +71 -0
  6. package/build/browser/css-modules.d.ts +20 -0
  7. package/build/browser/object-table/CellContextMenu.js +48 -0
  8. package/build/browser/object-table/CellContextMenu.js.map +1 -0
  9. package/build/browser/object-table/ObjectTable.js +53 -9
  10. package/build/browser/object-table/ObjectTable.js.map +1 -1
  11. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  12. package/build/browser/object-table/SelectionCells.js +45 -0
  13. package/build/browser/object-table/SelectionCells.js.map +1 -0
  14. package/build/browser/object-table/Table.js +8 -4
  15. package/build/browser/object-table/Table.js.map +1 -1
  16. package/build/browser/object-table/TableBody.js +3 -1
  17. package/build/browser/object-table/TableBody.js.map +1 -1
  18. package/build/browser/object-table/TableCell.js +51 -0
  19. package/build/browser/object-table/TableCell.js.map +1 -0
  20. package/build/browser/object-table/TableHeader.js +20 -4
  21. package/build/browser/object-table/TableHeader.js.map +1 -1
  22. package/build/browser/object-table/TableRow.js +7 -9
  23. package/build/browser/object-table/TableRow.js.map +1 -1
  24. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
  25. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
  26. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
  27. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  28. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
  29. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
  30. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
  31. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
  32. package/build/browser/object-table/hooks/useCellContextMenu.js +48 -0
  33. package/build/browser/object-table/hooks/useCellContextMenu.js.map +1 -0
  34. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  35. package/build/browser/object-table/hooks/useObjectTableData.js +3 -2
  36. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  37. package/build/browser/object-table/hooks/useRowSelection.js +180 -0
  38. package/build/browser/object-table/hooks/useRowSelection.js.map +1 -0
  39. package/build/browser/object-table/hooks/useSelectionColumn.js +51 -0
  40. package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -0
  41. package/build/browser/object-table/utils/getRowId.js +21 -0
  42. package/build/browser/object-table/utils/getRowId.js.map +1 -0
  43. package/build/browser/public/experimental.js +1 -0
  44. package/build/browser/public/experimental.js.map +1 -1
  45. package/build/cjs/public/experimental.cjs +424 -3611
  46. package/build/cjs/public/experimental.cjs.map +1 -1
  47. package/build/cjs/public/experimental.css +48 -0
  48. package/build/cjs/public/experimental.css.map +1 -0
  49. package/build/cjs/public/experimental.d.cts +6 -11
  50. package/build/esm/base-components/checkbox/Checkbox.js +40 -0
  51. package/build/esm/base-components/checkbox/Checkbox.js.map +1 -0
  52. package/build/esm/base-components/checkbox/Checkbox.module.css +71 -0
  53. package/build/esm/css-modules.d.ts +20 -0
  54. package/build/esm/object-table/CellContextMenu.js +48 -0
  55. package/build/esm/object-table/CellContextMenu.js.map +1 -0
  56. package/build/esm/object-table/ObjectTable.js +53 -9
  57. package/build/esm/object-table/ObjectTable.js.map +1 -1
  58. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  59. package/build/esm/object-table/SelectionCells.js +45 -0
  60. package/build/esm/object-table/SelectionCells.js.map +1 -0
  61. package/build/esm/object-table/Table.js +8 -4
  62. package/build/esm/object-table/Table.js.map +1 -1
  63. package/build/esm/object-table/TableBody.js +3 -1
  64. package/build/esm/object-table/TableBody.js.map +1 -1
  65. package/build/esm/object-table/TableCell.js +51 -0
  66. package/build/esm/object-table/TableCell.js.map +1 -0
  67. package/build/esm/object-table/TableHeader.js +20 -4
  68. package/build/esm/object-table/TableHeader.js.map +1 -1
  69. package/build/esm/object-table/TableRow.js +7 -9
  70. package/build/esm/object-table/TableRow.js.map +1 -1
  71. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
  72. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
  73. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
  74. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  75. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
  76. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
  77. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
  78. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
  79. package/build/esm/object-table/hooks/useCellContextMenu.js +48 -0
  80. package/build/esm/object-table/hooks/useCellContextMenu.js.map +1 -0
  81. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  82. package/build/esm/object-table/hooks/useObjectTableData.js +3 -2
  83. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  84. package/build/esm/object-table/hooks/useRowSelection.js +180 -0
  85. package/build/esm/object-table/hooks/useRowSelection.js.map +1 -0
  86. package/build/esm/object-table/hooks/useSelectionColumn.js +51 -0
  87. package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -0
  88. package/build/esm/object-table/utils/getRowId.js +21 -0
  89. package/build/esm/object-table/utils/getRowId.js.map +1 -0
  90. package/build/esm/public/experimental.js +1 -0
  91. package/build/esm/public/experimental.js.map +1 -1
  92. package/build/types/base-components/checkbox/Checkbox.d.ts +10 -0
  93. package/build/types/base-components/checkbox/Checkbox.d.ts.map +1 -0
  94. package/build/types/css-modules.d.d.ts +6 -0
  95. package/build/types/css-modules.d.d.ts.map +1 -0
  96. package/build/types/object-table/CellContextMenu.d.ts +11 -0
  97. package/build/types/object-table/CellContextMenu.d.ts.map +1 -0
  98. package/build/types/object-table/ObjectTable.d.ts +1 -1
  99. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  100. package/build/types/object-table/ObjectTableApi.d.ts +5 -10
  101. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  102. package/build/types/object-table/SelectionCells.d.ts +14 -0
  103. package/build/types/object-table/SelectionCells.d.ts.map +1 -0
  104. package/build/types/object-table/Table.d.ts +4 -3
  105. package/build/types/object-table/Table.d.ts.map +1 -1
  106. package/build/types/object-table/TableBody.d.ts +3 -2
  107. package/build/types/object-table/TableBody.d.ts.map +1 -1
  108. package/build/types/object-table/TableCell.d.ts +8 -0
  109. package/build/types/object-table/TableCell.d.ts.map +1 -0
  110. package/build/types/object-table/TableHeader.d.ts +3 -3
  111. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  112. package/build/types/object-table/TableRow.d.ts +3 -2
  113. package/build/types/object-table/TableRow.d.ts.map +1 -1
  114. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +1 -0
  115. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +1 -0
  116. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +1 -0
  117. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +1 -0
  118. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +1 -0
  119. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +1 -0
  120. package/build/types/object-table/hooks/useCellContextMenu.d.ts +17 -0
  121. package/build/types/object-table/hooks/useCellContextMenu.d.ts.map +1 -0
  122. package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -2
  123. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  124. package/build/types/object-table/hooks/useRowSelection.d.ts +22 -0
  125. package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -0
  126. package/build/types/object-table/hooks/useSelectionColumn.d.ts +15 -0
  127. package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -0
  128. package/build/types/object-table/utils/getRowId.d.ts +6 -0
  129. package/build/types/object-table/utils/getRowId.d.ts.map +1 -0
  130. package/build/types/public/experimental.d.ts.map +1 -1
  131. package/package.json +13 -6
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.js","names":["useVirtualizer","React","useLayoutEffect","TableRow","TableBody","rows","tableContainerRef","onRowClick","rowHeight","rowVirtualizer","count","length","estimateSize","getScrollElement","current","overscan","measure","createElement","style","display","position","height","getTotalSize","getVirtualItems","map","virtualRow","row","index","key","id"],"sources":["TableBody.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 { Row, RowData } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport React, { useLayoutEffect } from \"react\";\nimport { TableRow } from \"./TableRow.js\";\n\ninterface TableBodyProps<TData extends RowData> {\n rows: Array<Row<TData>>;\n tableContainerRef: React.RefObject<HTMLDivElement>;\n onRowClick?: (row: TData) => void;\n rowHeight?: number;\n}\n\nexport function TableBody<TData extends RowData>({\n rows,\n tableContainerRef,\n onRowClick,\n rowHeight = 40,\n}: TableBodyProps<TData>): React.ReactElement {\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => rowHeight,\n getScrollElement: () => tableContainerRef.current,\n overscan: 5,\n });\n\n // Measure the virtualizer after the DOM has been laid out to ensure proper dimensions\n useLayoutEffect(() => {\n rowVirtualizer.measure();\n }, [rowVirtualizer, rows.length]);\n\n return (\n <tbody\n style={{\n display: \"grid\",\n position: \"relative\",\n height: `${rowVirtualizer.getTotalSize()}px`,\n }}\n >\n {rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n\n return (\n <TableRow\n key={row.id}\n row={row}\n virtualRow={virtualRow}\n onRowClick={onRowClick}\n />\n );\n })}\n </tbody>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,cAAc,QAAQ,yBAAyB;AACxD,OAAOC,KAAK,IAAIC,eAAe,QAAQ,OAAO;AAC9C,SAASC,QAAQ,QAAQ,eAAe;AASxC,OAAO,SAASC,SAASA,CAAwB;EAC/CC,IAAI;EACJC,iBAAiB;EACjBC,UAAU;EACVC,SAAS,GAAG;AACS,CAAC,EAAsB;EAC5C;EACA,MAAMC,cAAc,GAAGT,cAAc,CAAsC;IACzEU,KAAK,EAAEL,IAAI,CAACM,MAAM;IAClBC,YAAY,EAAEA,CAAA,KAAMJ,SAAS;IAC7BK,gBAAgB,EAAEA,CAAA,KAAMP,iBAAiB,CAACQ,OAAO;IACjDC,QAAQ,EAAE;EACZ,CAAC,CAAC;;EAEF;EACAb,eAAe,CAAC,MAAM;IACpBO,cAAc,CAACO,OAAO,CAAC,CAAC;EAC1B,CAAC,EAAE,CAACP,cAAc,EAAEJ,IAAI,CAACM,MAAM,CAAC,CAAC;EAEjC,oBACEV,KAAA,CAAAgB,aAAA;IACEC,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,QAAQ,EAAE,UAAU;MACpBC,MAAM,EAAE,GAAGZ,cAAc,CAACa,YAAY,CAAC,CAAC;IAC1C;EAAE,GAEDb,cAAc,CAACc,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,UAAU,IAAK;IACpD,MAAMC,GAAG,GAAGrB,IAAI,CAACoB,UAAU,CAACE,KAAK,CAAC;IAElC,oBACE1B,KAAA,CAAAgB,aAAA,CAACd,QAAQ;MACPyB,GAAG,EAAEF,GAAG,CAACG,EAAG;MACZH,GAAG,EAAEA,GAAI;MACTD,UAAU,EAAEA,UAAW;MACvBlB,UAAU,EAAEA;IAAW,CACxB,CAAC;EAEN,CAAC,CACI,CAAC;AAEZ","ignoreList":[]}
1
+ {"version":3,"file":"TableBody.js","names":["useVirtualizer","React","useLayoutEffect","TableRow","TableBody","rows","tableContainerRef","onRowClick","renderCellContextMenu","rowHeight","rowVirtualizer","count","length","estimateSize","getScrollElement","current","overscan","measure","createElement","style","display","position","height","getTotalSize","getVirtualItems","map","virtualRow","row","index","key","id"],"sources":["TableBody.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 { useVirtualizer } from \"@tanstack/react-virtual\";\nimport React, { useLayoutEffect } from \"react\";\nimport { TableRow } from \"./TableRow.js\";\n\ninterface TableBodyProps<TData extends RowData> {\n rows: Array<Row<TData>>;\n tableContainerRef: React.RefObject<HTMLDivElement>;\n onRowClick?: (row: TData) => void;\n rowHeight?: number;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableBody<TData extends RowData>({\n rows,\n tableContainerRef,\n onRowClick,\n renderCellContextMenu,\n rowHeight = 40,\n}: TableBodyProps<TData>): React.ReactElement {\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => rowHeight,\n getScrollElement: () => tableContainerRef.current,\n overscan: 5,\n });\n\n // Measure the virtualizer after the DOM has been laid out to ensure proper dimensions\n useLayoutEffect(() => {\n rowVirtualizer.measure();\n }, [rowVirtualizer, rows.length]);\n\n return (\n <tbody\n style={{\n display: \"grid\",\n position: \"relative\",\n height: `${rowVirtualizer.getTotalSize()}px`,\n }}\n >\n {rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n\n return (\n <TableRow\n key={row.id}\n row={row}\n virtualRow={virtualRow}\n onRowClick={onRowClick}\n renderCellContextMenu={renderCellContextMenu}\n />\n );\n })}\n </tbody>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,cAAc,QAAQ,yBAAyB;AACxD,OAAOC,KAAK,IAAIC,eAAe,QAAQ,OAAO;AAC9C,SAASC,QAAQ,QAAQ,eAAe;AAaxC,OAAO,SAASC,SAASA,CAAwB;EAC/CC,IAAI;EACJC,iBAAiB;EACjBC,UAAU;EACVC,qBAAqB;EACrBC,SAAS,GAAG;AACS,CAAC,EAAsB;EAC5C;EACA,MAAMC,cAAc,GAAGV,cAAc,CAAsC;IACzEW,KAAK,EAAEN,IAAI,CAACO,MAAM;IAClBC,YAAY,EAAEA,CAAA,KAAMJ,SAAS;IAC7BK,gBAAgB,EAAEA,CAAA,KAAMR,iBAAiB,CAACS,OAAO;IACjDC,QAAQ,EAAE;EACZ,CAAC,CAAC;;EAEF;EACAd,eAAe,CAAC,MAAM;IACpBQ,cAAc,CAACO,OAAO,CAAC,CAAC;EAC1B,CAAC,EAAE,CAACP,cAAc,EAAEL,IAAI,CAACO,MAAM,CAAC,CAAC;EAEjC,oBACEX,KAAA,CAAAiB,aAAA;IACEC,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,QAAQ,EAAE,UAAU;MACpBC,MAAM,EAAE,GAAGZ,cAAc,CAACa,YAAY,CAAC,CAAC;IAC1C;EAAE,GAEDb,cAAc,CAACc,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,UAAU,IAAK;IACpD,MAAMC,GAAG,GAAGtB,IAAI,CAACqB,UAAU,CAACE,KAAK,CAAC;IAElC,oBACE3B,KAAA,CAAAiB,aAAA,CAACf,QAAQ;MACP0B,GAAG,EAAEF,GAAG,CAACG,EAAG;MACZH,GAAG,EAAEA,GAAI;MACTD,UAAU,EAAEA,UAAW;MACvBnB,UAAU,EAAEA,UAAW;MACvBC,qBAAqB,EAAEA;IAAsB,CAC9C,CAAC;EAEN,CAAC,CACI,CAAC;AAEZ","ignoreList":[]}
@@ -0,0 +1,51 @@
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
+ import { flexRender } from "@tanstack/react-table";
18
+ import React, { useRef } from "react";
19
+ import { CellContextMenu } from "./CellContextMenu.js";
20
+ import { useCellContextMenu } from "./hooks/useCellContextMenu.js";
21
+ import { SELECTION_COLUMN_ID } from "./hooks/useSelectionColumn.js";
22
+ export function TableCell({
23
+ cell,
24
+ renderCellContextMenu
25
+ }) {
26
+ const tdRef = useRef(null);
27
+ const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
28
+ const {
29
+ isContextMenuOpen,
30
+ handleOpenContextMenu,
31
+ handleCloseContextMenu,
32
+ popoverPosition
33
+ } = useCellContextMenu({
34
+ tdRef
35
+ });
36
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("td", {
37
+ ref: tdRef,
38
+ style: {
39
+ display: "flex",
40
+ alignItems: "center",
41
+ width: cell.column.getSize()
42
+ },
43
+ onContextMenu: handleOpenContextMenu
44
+ }, flexRender(cell.column.columnDef.cell, cell.getContext())), !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu && /*#__PURE__*/React.createElement(CellContextMenu, {
45
+ cell: cell,
46
+ position: popoverPosition,
47
+ onClose: handleCloseContextMenu,
48
+ renderContent: renderCellContextMenu
49
+ }));
50
+ }
51
+ //# sourceMappingURL=TableCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.js","names":["flexRender","React","useRef","CellContextMenu","useCellContextMenu","SELECTION_COLUMN_ID","TableCell","cell","renderCellContextMenu","tdRef","isSelectColumn","column","id","isContextMenuOpen","handleOpenContextMenu","handleCloseContextMenu","popoverPosition","createElement","Fragment","ref","style","display","alignItems","width","getSize","onContextMenu","columnDef","getContext","position","onClose","renderContent"],"sources":["TableCell.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, RowData } from \"@tanstack/react-table\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport React, { useRef } from \"react\";\nimport { CellContextMenu } from \"./CellContextMenu.js\";\nimport { useCellContextMenu } from \"./hooks/useCellContextMenu.js\";\nimport { SELECTION_COLUMN_ID } from \"./hooks/useSelectionColumn.js\";\n\ninterface TableCellProps<TData extends RowData> {\n cell: Cell<TData, unknown>;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableCell<TData extends RowData>(\n { cell, renderCellContextMenu }: TableCellProps<TData>,\n): React.ReactElement {\n const tdRef = useRef<HTMLTableCellElement>(null);\n const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;\n\n const {\n isContextMenuOpen,\n handleOpenContextMenu,\n handleCloseContextMenu,\n popoverPosition,\n } = useCellContextMenu({\n tdRef,\n });\n\n const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen\n && !!popoverPosition\n && !!renderCellContextMenu;\n\n return (\n <>\n <td\n ref={tdRef}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n width: cell.column.getSize(),\n }}\n onContextMenu={handleOpenContextMenu}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext()) as\n | ReactNode\n | React.JSX.Element}\n </td>\n {shouldRenderContextMenu\n && (\n <CellContextMenu\n cell={cell}\n position={popoverPosition}\n onClose={handleCloseContextMenu}\n renderContent={renderCellContextMenu}\n />\n )}\n </>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,UAAU,QAAQ,uBAAuB;AAElD,OAAOC,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,kBAAkB,QAAQ,+BAA+B;AAClE,SAASC,mBAAmB,QAAQ,+BAA+B;AAUnE,OAAO,SAASC,SAASA,CACvB;EAAEC,IAAI;EAAEC;AAA6C,CAAC,EAClC;EACpB,MAAMC,KAAK,GAAGP,MAAM,CAAuB,IAAI,CAAC;EAChD,MAAMQ,cAAc,GAAGH,IAAI,CAACI,MAAM,CAACC,EAAE,KAAKP,mBAAmB;EAE7D,MAAM;IACJQ,iBAAiB;IACjBC,qBAAqB;IACrBC,sBAAsB;IACtBC;EACF,CAAC,GAAGZ,kBAAkB,CAAC;IACrBK;EACF,CAAC,CAAC;EAMF,oBACER,KAAA,CAAAgB,aAAA,CAAAhB,KAAA,CAAAiB,QAAA,qBACEjB,KAAA,CAAAgB,aAAA;IACEE,GAAG,EAAEV,KAAM;IACXW,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,UAAU,EAAE,QAAQ;MACpBC,KAAK,EAAEhB,IAAI,CAACI,MAAM,CAACa,OAAO,CAAC;IAC7B,CAAE;IACFC,aAAa,EAAEX;EAAsB,GAEpCd,UAAU,CAACO,IAAI,CAACI,MAAM,CAACe,SAAS,CAACnB,IAAI,EAAEA,IAAI,CAACoB,UAAU,CAAC,CAAC,CAGvD,CAAC,EAlBuB,CAACjB,cAAc,IAAIG,iBAAiB,IAC/D,CAAC,CAACG,eAAe,IACjB,CAAC,CAACR,qBAAqB,iBAmBpBP,KAAA,CAAAgB,aAAA,CAACd,eAAe;IACdI,IAAI,EAAEA,IAAK;IACXqB,QAAQ,EAAEZ,eAAgB;IAC1Ba,OAAO,EAAEd,sBAAuB;IAChCe,aAAa,EAAEtB;EAAsB,CACtC,CAEL,CAAC;AAEP","ignoreList":[]}
@@ -17,7 +17,7 @@
17
17
  import { flexRender } from "@tanstack/react-table";
18
18
  import React from "react";
19
19
  export function TableHeader({
20
- headerGroups
20
+ table
21
21
  }) {
22
22
  return /*#__PURE__*/React.createElement("thead", {
23
23
  style: {
@@ -26,7 +26,7 @@ export function TableHeader({
26
26
  top: 0,
27
27
  zIndex: 1
28
28
  }
29
- }, headerGroups.map(headerGroup => /*#__PURE__*/React.createElement("tr", {
29
+ }, table.getHeaderGroups().map(headerGroup => /*#__PURE__*/React.createElement("tr", {
30
30
  key: headerGroup.id,
31
31
  style: {
32
32
  display: "flex"
@@ -40,8 +40,24 @@ export function TableHeader({
40
40
  display: "flex",
41
41
  width: header.getSize(),
42
42
  justifyContent: "flex-start",
43
- alignItems: "center"
43
+ alignItems: "center",
44
+ position: "relative"
44
45
  }
45
- }, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()))))));
46
+ }, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /*#__PURE__*/React.createElement("div", {
47
+ onDoubleClick: () => header.column.resetSize(),
48
+ onMouseDown: header.getResizeHandler(),
49
+ onTouchStart: header.getResizeHandler(),
50
+ style: {
51
+ position: "absolute",
52
+ right: 0,
53
+ top: 0,
54
+ height: "100%",
55
+ width: "3px",
56
+ cursor: "col-resize",
57
+ touchAction: "none",
58
+ zIndex: 11,
59
+ transform: header.column.getIsResizing() ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)` : ""
60
+ }
61
+ }))))));
46
62
  }
47
63
  //# sourceMappingURL=TableHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeader.js","names":["flexRender","React","TableHeader","headerGroups","createElement","style","display","position","top","zIndex","map","headerGroup","key","id","headers","header","width","getSize","justifyContent","alignItems","isPlaceholder","column","columnDef","getContext"],"sources":["TableHeader.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 { HeaderGroup, RowData } from \"@tanstack/react-table\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport React from \"react\";\n\ninterface TableHeaderProps<TData extends RowData> {\n headerGroups: Array<HeaderGroup<TData>>;\n}\n\nexport function TableHeader<TData extends RowData>({\n headerGroups,\n}: TableHeaderProps<TData>): React.ReactElement {\n return (\n <thead\n style={{\n display: \"grid\",\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n }}\n >\n {headerGroups.map((headerGroup) => (\n <tr\n key={headerGroup.id}\n style={{\n display: \"flex\",\n }}\n >\n {headerGroup.headers.map((header) => (\n // TODO: Move inline styling to CSS file\n <th\n key={header.id}\n style={{\n display: \"flex\",\n width: header.getSize(),\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,UAAU,QAAQ,uBAAuB;AAClD,OAAOC,KAAK,MAAM,OAAO;AAMzB,OAAO,SAASC,WAAWA,CAAwB;EACjDC;AACuB,CAAC,EAAsB;EAC9C,oBACEF,KAAA,CAAAG,aAAA;IACEC,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,QAAQ,EAAE,QAAQ;MAClBC,GAAG,EAAE,CAAC;MACNC,MAAM,EAAE;IACV;EAAE,GAEDN,YAAY,CAACO,GAAG,CAAEC,WAAW,iBAC5BV,KAAA,CAAAG,aAAA;IACEQ,GAAG,EAAED,WAAW,CAACE,EAAG;IACpBR,KAAK,EAAE;MACLC,OAAO,EAAE;IACX;EAAE,GAEDK,WAAW,CAACG,OAAO,CAACJ,GAAG,CAAEK,MAAM;EAAA;EAC9B;EACAd,KAAA,CAAAG,aAAA;IACEQ,GAAG,EAAEG,MAAM,CAACF,EAAG;IACfR,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfU,KAAK,EAAED,MAAM,CAACE,OAAO,CAAC,CAAC;MACvBC,cAAc,EAAE,YAAY;MAC5BC,UAAU,EAAE;IACd;EAAE,GAEDJ,MAAM,CAACK,aAAa,GACjB,IAAI,GACJpB,UAAU,CACVe,MAAM,CAACM,MAAM,CAACC,SAAS,CAACP,MAAM,EAC9BA,MAAM,CAACQ,UAAU,CAAC,CACpB,CACA,CACL,CACC,CACL,CACI,CAAC;AAEZ","ignoreList":[]}
1
+ {"version":3,"file":"TableHeader.js","names":["flexRender","React","TableHeader","table","createElement","style","display","position","top","zIndex","getHeaderGroups","map","headerGroup","key","id","headers","header","width","getSize","justifyContent","alignItems","isPlaceholder","column","columnDef","getContext","getCanResize","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","right","height","cursor","touchAction","transform","getIsResizing","getState","columnSizingInfo","deltaOffset"],"sources":["TableHeader.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 { RowData, Table } from \"@tanstack/react-table\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport React from \"react\";\n\ninterface TableHeaderProps<TData extends RowData> {\n table: Table<TData>;\n}\n\nexport function TableHeader<TData extends RowData>({\n table,\n}: TableHeaderProps<TData>): React.ReactElement {\n return (\n <thead\n style={{\n display: \"grid\",\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n }}\n >\n {table.getHeaderGroups().map((headerGroup) => (\n <tr\n key={headerGroup.id}\n style={{\n display: \"flex\",\n }}\n >\n {headerGroup.headers.map((header) => (\n // TODO: Move inline styling to CSS file\n <th\n key={header.id}\n style={{\n display: \"flex\",\n width: header.getSize(),\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n position: \"relative\",\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n ) as ReactNode | React.JSX.Element}\n {header.column.getCanResize() && (\n <div\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n height: \"100%\",\n width: \"3px\",\n cursor: \"col-resize\",\n touchAction: \"none\",\n zIndex: 11,\n transform: header.column.getIsResizing()\n ? `translateX(${\n table.getState().columnSizingInfo.deltaOffset ?? 0\n }px)`\n : \"\",\n }}\n />\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,UAAU,QAAQ,uBAAuB;AAElD,OAAOC,KAAK,MAAM,OAAO;AAMzB,OAAO,SAASC,WAAWA,CAAwB;EACjDC;AACuB,CAAC,EAAsB;EAC9C,oBACEF,KAAA,CAAAG,aAAA;IACEC,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfC,QAAQ,EAAE,QAAQ;MAClBC,GAAG,EAAE,CAAC;MACNC,MAAM,EAAE;IACV;EAAE,GAEDN,KAAK,CAACO,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,WAAW,iBACvCX,KAAA,CAAAG,aAAA;IACES,GAAG,EAAED,WAAW,CAACE,EAAG;IACpBT,KAAK,EAAE;MACLC,OAAO,EAAE;IACX;EAAE,GAEDM,WAAW,CAACG,OAAO,CAACJ,GAAG,CAAEK,MAAM;EAAA;EAC9B;EACAf,KAAA,CAAAG,aAAA;IACES,GAAG,EAAEG,MAAM,CAACF,EAAG;IACfT,KAAK,EAAE;MACLC,OAAO,EAAE,MAAM;MACfW,KAAK,EAAED,MAAM,CAACE,OAAO,CAAC,CAAC;MACvBC,cAAc,EAAE,YAAY;MAC5BC,UAAU,EAAE,QAAQ;MACpBb,QAAQ,EAAE;IACZ;EAAE,GAEDS,MAAM,CAACK,aAAa,GACjB,IAAI,GACJrB,UAAU,CACVgB,MAAM,CAACM,MAAM,CAACC,SAAS,CAACP,MAAM,EAC9BA,MAAM,CAACQ,UAAU,CAAC,CACpB,CAAkC,EACnCR,MAAM,CAACM,MAAM,CAACG,YAAY,CAAC,CAAC,iBAC3BxB,KAAA,CAAAG,aAAA;IACEsB,aAAa,EAAEA,CAAA,KAAMV,MAAM,CAACM,MAAM,CAACK,SAAS,CAAC,CAAE;IAC/CC,WAAW,EAAEZ,MAAM,CAACa,gBAAgB,CAAC,CAAE;IACvCC,YAAY,EAAEd,MAAM,CAACa,gBAAgB,CAAC,CAAE;IACxCxB,KAAK,EAAE;MACLE,QAAQ,EAAE,UAAU;MACpBwB,KAAK,EAAE,CAAC;MACRvB,GAAG,EAAE,CAAC;MACNwB,MAAM,EAAE,MAAM;MACdf,KAAK,EAAE,KAAK;MACZgB,MAAM,EAAE,YAAY;MACpBC,WAAW,EAAE,MAAM;MACnBzB,MAAM,EAAE,EAAE;MACV0B,SAAS,EAAEnB,MAAM,CAACM,MAAM,CAACc,aAAa,CAAC,CAAC,GACpC,cACAjC,KAAK,CAACkC,QAAQ,CAAC,CAAC,CAACC,gBAAgB,CAACC,WAAW,IAAI,CAAC,KAC/C,GACH;IACN;EAAE,CACH,CAED,CACL,CACC,CACL,CACI,CAAC;AAEZ","ignoreList":[]}
@@ -14,12 +14,13 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { flexRender } from "@tanstack/react-table";
18
17
  import React, { useCallback } from "react";
18
+ import { TableCell } from "./TableCell.js";
19
19
  export function TableRow({
20
20
  row,
21
21
  virtualRow,
22
- onRowClick
22
+ onRowClick,
23
+ renderCellContextMenu
23
24
  }) {
24
25
  const handleClick = useCallback(() => {
25
26
  onRowClick?.(row.original);
@@ -32,13 +33,10 @@ export function TableRow({
32
33
  display: "flex"
33
34
  },
34
35
  onClick: handleClick
35
- }, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement("td", {
36
+ }, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement(TableCell, {
36
37
  key: cell.id,
37
- style: {
38
- display: "flex",
39
- alignItems: "center",
40
- width: cell.column.getSize()
41
- }
42
- }, flexRender(cell.column.columnDef.cell, cell.getContext()))));
38
+ cell: cell,
39
+ renderCellContextMenu: renderCellContextMenu
40
+ })));
43
41
  }
44
42
  //# sourceMappingURL=TableRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","names":["flexRender","React","useCallback","TableRow","row","virtualRow","onRowClick","handleClick","original","createElement","style","position","height","size","transform","start","display","onClick","getVisibleCells","map","cell","key","id","alignItems","width","column","getSize","columnDef","getContext"],"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 { Row, RowData } from \"@tanstack/react-table\";\nimport { flexRender } from \"@tanstack/react-table\";\nimport type { VirtualItem } from \"@tanstack/react-virtual\";\nimport React, { useCallback } from \"react\";\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>;\n virtualRow: VirtualItem;\n onRowClick?: (row: TData) => void;\n}\n\nexport function TableRow<TData extends RowData>({\n row,\n virtualRow,\n onRowClick,\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 <td\n key={cell.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n width: cell.column.getSize(),\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,UAAU,QAAQ,uBAAuB;AAElD,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAQ1C,OAAO,SAASC,QAAQA,CAAwB;EAC9CC,GAAG;EACHC,UAAU;EACVC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,WAAW,GAAGL,WAAW,CAAC,MAAM;IACpCI,UAAU,GAAGF,GAAG,CAACI,QAAQ,CAAC;EAC5B,CAAC,EAAE,CAACF,UAAU,EAAEF,GAAG,CAACI,QAAQ,CAAC,CAAC;EAE9B,oBACEP,KAAA,CAAAQ,aAAA;IACEC,KAAK,EAAE;MACLC,QAAQ,EAAE,UAAU;MACpBC,MAAM,EAAE,GAAGP,UAAU,CAACQ,IAAI,IAAI;MAC9BC,SAAS,EAAE,cAAcT,UAAU,CAACU,KAAK,KAAK;MAC9CC,OAAO,EAAE;IACX,CAAE;IACFC,OAAO,EAAEV;EAAY,GAEpBH,GAAG,CAACc,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,IAAI,iBAC9BnB,KAAA,CAAAQ,aAAA;IACEY,GAAG,EAAED,IAAI,CAACE,EAAG;IACbZ,KAAK,EAAE;MACLM,OAAO,EAAE,MAAM;MACfO,UAAU,EAAE,QAAQ;MACpBC,KAAK,EAAEJ,IAAI,CAACK,MAAM,CAACC,OAAO,CAAC;IAC7B;EAAE,GAED1B,UAAU,CAACoB,IAAI,CAACK,MAAM,CAACE,SAAS,CAACP,IAAI,EAAEA,IAAI,CAACQ,UAAU,CAAC,CAAC,CACvD,CACL,CACC,CAAC;AAET","ignoreList":[]}
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":[]}
@@ -0,0 +1,147 @@
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
+ import { act, renderHook } from "@testing-library/react";
18
+ import { beforeEach, describe, expect, it, vi } from "vitest";
19
+ import { useCellContextMenu } from "../useCellContextMenu.js";
20
+ describe("useCellContextMenu", () => {
21
+ let mockElement;
22
+ beforeEach(() => {
23
+ // Create a mock table cell element with getBoundingClientRect
24
+ mockElement = document.createElement("td");
25
+ vi.spyOn(mockElement, "getBoundingClientRect").mockReturnValue({
26
+ left: 100,
27
+ top: 200,
28
+ bottom: 240,
29
+ width: 150,
30
+ height: 40,
31
+ right: 250,
32
+ x: 100,
33
+ y: 200,
34
+ toJSON: () => ({})
35
+ });
36
+ });
37
+ describe("initial state", () => {
38
+ it("returns closed context menu state by default", () => {
39
+ const tdRef = {
40
+ current: mockElement
41
+ };
42
+ const {
43
+ result
44
+ } = renderHook(() => useCellContextMenu({
45
+ tdRef
46
+ }));
47
+ expect(result.current.isContextMenuOpen).toBe(false);
48
+ expect(result.current.popoverPosition).toBeNull();
49
+ });
50
+ });
51
+ describe("handleOpenContextMenu", () => {
52
+ it("opens context menu and use position from bounding client rect", () => {
53
+ const tdRef = {
54
+ current: mockElement
55
+ };
56
+ const {
57
+ result
58
+ } = renderHook(() => useCellContextMenu({
59
+ tdRef
60
+ }));
61
+ const mockEvent = {
62
+ preventDefault: vi.fn(),
63
+ stopPropagation: vi.fn()
64
+ };
65
+ act(() => {
66
+ result.current.handleOpenContextMenu(mockEvent);
67
+ });
68
+ expect(mockEvent.preventDefault).toHaveBeenCalled();
69
+ expect(mockEvent.stopPropagation).toHaveBeenCalled();
70
+ expect(result.current.isContextMenuOpen).toBe(true);
71
+ expect(result.current.popoverPosition).toEqual({
72
+ left: 100,
73
+ top: 240,
74
+ width: 150
75
+ });
76
+ });
77
+ it("does not open context menu if tdRef.current is null", () => {
78
+ const tdRef = {
79
+ current: null
80
+ };
81
+ const {
82
+ result
83
+ } = renderHook(() => useCellContextMenu({
84
+ tdRef
85
+ }));
86
+ const mockEvent = {
87
+ preventDefault: vi.fn(),
88
+ stopPropagation: vi.fn()
89
+ };
90
+ act(() => {
91
+ result.current.handleOpenContextMenu(mockEvent);
92
+ });
93
+ expect(mockEvent.preventDefault).toHaveBeenCalled();
94
+ expect(mockEvent.stopPropagation).toHaveBeenCalled();
95
+ expect(result.current.isContextMenuOpen).toBe(false);
96
+ expect(result.current.popoverPosition).toBeNull();
97
+ });
98
+ });
99
+ describe("handleCloseContextMenu", () => {
100
+ it("closes context menu and clears position", () => {
101
+ const tdRef = {
102
+ current: mockElement
103
+ };
104
+ const {
105
+ result
106
+ } = renderHook(() => useCellContextMenu({
107
+ tdRef
108
+ }));
109
+ const mockEvent = {
110
+ preventDefault: vi.fn(),
111
+ stopPropagation: vi.fn()
112
+ };
113
+
114
+ // Open first
115
+ act(() => {
116
+ result.current.handleOpenContextMenu(mockEvent);
117
+ });
118
+ expect(result.current.isContextMenuOpen).toBe(true);
119
+ expect(result.current.popoverPosition).not.toBeNull();
120
+
121
+ // Close
122
+ act(() => {
123
+ result.current.handleCloseContextMenu();
124
+ });
125
+ expect(result.current.isContextMenuOpen).toBe(false);
126
+ expect(result.current.popoverPosition).toBeNull();
127
+ });
128
+ it("is safe to call when already closed", () => {
129
+ const tdRef = {
130
+ current: mockElement
131
+ };
132
+ const {
133
+ result
134
+ } = renderHook(() => useCellContextMenu({
135
+ tdRef
136
+ }));
137
+
138
+ // Close without opening
139
+ act(() => {
140
+ result.current.handleCloseContextMenu();
141
+ });
142
+ expect(result.current.isContextMenuOpen).toBe(false);
143
+ expect(result.current.popoverPosition).toBeNull();
144
+ });
145
+ });
146
+ });
147
+ //# sourceMappingURL=useCellContextMenu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCellContextMenu.test.js","names":["act","renderHook","beforeEach","describe","expect","it","vi","useCellContextMenu","mockElement","document","createElement","spyOn","mockReturnValue","left","top","bottom","width","height","right","x","y","toJSON","tdRef","current","result","isContextMenuOpen","toBe","popoverPosition","toBeNull","mockEvent","preventDefault","fn","stopPropagation","handleOpenContextMenu","toHaveBeenCalled","toEqual","not","handleCloseContextMenu"],"sources":["useCellContextMenu.test.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 { act, renderHook } from \"@testing-library/react\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { PopoverPosition } from \"../useCellContextMenu.js\";\nimport { useCellContextMenu } from \"../useCellContextMenu.js\";\n\ndescribe(\"useCellContextMenu\", () => {\n let mockElement: HTMLTableCellElement;\n\n beforeEach(() => {\n // Create a mock table cell element with getBoundingClientRect\n mockElement = document.createElement(\"td\");\n\n vi.spyOn(mockElement, \"getBoundingClientRect\").mockReturnValue({\n left: 100,\n top: 200,\n bottom: 240,\n width: 150,\n height: 40,\n right: 250,\n x: 100,\n y: 200,\n toJSON: () => ({}),\n });\n });\n\n describe(\"initial state\", () => {\n it(\"returns closed context menu state by default\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n\n describe(\"handleOpenContextMenu\", () => {\n it(\"opens context menu and use position from bounding client rect\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(mockEvent.preventDefault).toHaveBeenCalled();\n expect(mockEvent.stopPropagation).toHaveBeenCalled();\n expect(result.current.isContextMenuOpen).toBe(true);\n expect(result.current.popoverPosition).toEqual({\n left: 100,\n top: 240,\n width: 150,\n } as PopoverPosition);\n });\n\n it(\"does not open context menu if tdRef.current is null\", () => {\n const tdRef = { current: null };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(mockEvent.preventDefault).toHaveBeenCalled();\n expect(mockEvent.stopPropagation).toHaveBeenCalled();\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n\n describe(\"handleCloseContextMenu\", () => {\n it(\"closes context menu and clears position\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n // Open first\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(result.current.isContextMenuOpen).toBe(true);\n expect(result.current.popoverPosition).not.toBeNull();\n\n // Close\n act(() => {\n result.current.handleCloseContextMenu();\n });\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n\n it(\"is safe to call when already closed\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n // Close without opening\n act(() => {\n result.current.handleCloseContextMenu();\n });\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -62,6 +62,18 @@ describe(useObjectTableData, () => {
62
62
  pageSize: 50
63
63
  });
64
64
  });
65
+ it("calls useObjectSet with filter clause provided", () => {
66
+ const filterClause = {
67
+ name: "John"
68
+ };
69
+ const {
70
+ result
71
+ } = renderHook(() => useObjectTableData(mockObjectSet, undefined, filterClause), {
72
+ wrapper
73
+ });
74
+ const mockResult = result.current;
75
+ expect(mockResult._testOptions.where).toEqual(filterClause);
76
+ });
65
77
  it("calls useObjectSet without withProperties when no columnDefinitions provided", () => {
66
78
  const {
67
79
  result
@@ -1 +1 @@
1
- {"version":3,"file":"useObjectTableData.test.js","names":["OsdkProvider","renderHook","React","describe","expect","it","vi","useObjectTableData","mock","useObjectSet","fn","objectSet","options","data","isLoading","error","undefined","fetchNextPage","hasNextPage","isFetchingNextPage","_testOptions","TestObjectType","type","apiName","mockObjectSet","objectType","wrapper","client","children","createElement","result","mockResult","current","toEqual","withProperties","pageSize","toBeUndefined","toBe","columnDefinitions","locator","id","mockRdpCreator1","mockRdpCreator2","creator","rdp1","rdp2","mockRdpCreator","rerender","colDefs","initialProps","firstMockResult","firstWithProperties","secondMockResult","toHaveProperty"],"sources":["useObjectTableData.test.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 {\n DerivedProperty,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport { renderHook } from \"@testing-library/react\";\nimport * as React from \"react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useObjectTableData } from \"../useObjectTableData.js\";\n\ninterface MockUseObjectSetReturn {\n data: [];\n isLoading: false;\n error: undefined;\n fetchNextPage: ReturnType<typeof vi.fn>;\n hasNextPage: false;\n isFetchingNextPage: false;\n _testOptions: {\n withProperties?: Record<string, unknown>;\n pageSize: number;\n };\n}\n\nvi.mock(\"@osdk/react/experimental\", () => ({\n useObjectSet: vi.fn((objectSet, options): MockUseObjectSetReturn => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchNextPage: vi.fn(),\n hasNextPage: false,\n isFetchingNextPage: false,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n };\n }),\n}));\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\nconst mockObjectSet = {\n objectType: TestObjectType,\n} as unknown as ObjectSet<TestObject>;\n\ndescribe(useObjectTableData, () => {\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return <OsdkProvider client={client}>{children}</OsdkProvider>;\n };\n };\n\n const fakeClient = {} as unknown as Client;\n const wrapper = createWrapper(fakeClient);\n\n it(\"calls useObjectSet with pageSize of 50\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions).toEqual({\n withProperties: undefined,\n pageSize: 50,\n });\n });\n\n it(\"calls useObjectSet without withProperties when no columnDefinitions provided\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, undefined),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"calls useObjectSet without withProperties when columnDefinitions have no RDP columns\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({});\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"extracts RDP creators and passes them to useObjectSet\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { rdp1: any; rdp2: any },\n { myFunction: any }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"memoizes withProperties based on columnDefinitions\", () => {\n const mockRdpCreator = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ colDefs }) => useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: columnDefinitions },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n const firstWithProperties = firstMockResult._testOptions.withProperties;\n\n // Rerender with same columnDefinitions reference\n rerender({ colDefs: columnDefinitions });\n\n // Should be the same reference (memoized)\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toBe(\n firstWithProperties,\n );\n });\n\n it(\"updates withProperties when columnDefinitions change\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp1: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n ];\n\n type ColDefs =\n | Array<\n ColumnDefinition<TestObject, Record<string, SimplePropertyDef>, {}>\n >\n | undefined;\n\n const { result, rerender } = renderHook(\n ({ colDefs }: { colDefs: ColDefs }) =>\n useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(firstMockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp2: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n ];\n\n rerender({ colDefs: updatedColumnDefinitions as ColDefs });\n\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toEqual({\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"returns useObjectSet result structure\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n expect(result.current).toHaveProperty(\"data\");\n expect(result.current).toHaveProperty(\"isLoading\");\n expect(result.current).toHaveProperty(\"error\");\n expect(result.current).toHaveProperty(\"fetchNextPage\");\n expect(result.current).toHaveProperty(\"hasNextPage\");\n expect(result.current).toHaveProperty(\"isFetchingNextPage\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useObjectTableData.test.js","names":["OsdkProvider","renderHook","React","describe","expect","it","vi","useObjectTableData","mock","useObjectSet","fn","objectSet","options","data","isLoading","error","undefined","fetchNextPage","hasNextPage","isFetchingNextPage","_testOptions","TestObjectType","type","apiName","mockObjectSet","objectType","wrapper","client","children","createElement","result","mockResult","current","toEqual","withProperties","pageSize","filterClause","name","where","toBeUndefined","toBe","columnDefinitions","locator","id","mockRdpCreator1","mockRdpCreator2","creator","rdp1","rdp2","mockRdpCreator","rerender","colDefs","initialProps","firstMockResult","firstWithProperties","secondMockResult","toHaveProperty"],"sources":["useObjectTableData.test.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 {\n DerivedProperty,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport { renderHook } from \"@testing-library/react\";\nimport * as React from \"react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useObjectTableData } from \"../useObjectTableData.js\";\n\ninterface MockUseObjectSetReturn {\n data: [];\n isLoading: false;\n error: undefined;\n fetchNextPage: ReturnType<typeof vi.fn>;\n hasNextPage: false;\n isFetchingNextPage: false;\n _testOptions: {\n withProperties?: Record<string, unknown>;\n pageSize: number;\n where?: WhereClause<any>;\n };\n}\n\nvi.mock(\"@osdk/react/experimental\", () => ({\n useObjectSet: vi.fn((objectSet, options): MockUseObjectSetReturn => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchNextPage: vi.fn(),\n hasNextPage: false,\n isFetchingNextPage: false,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n };\n }),\n}));\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\nconst mockObjectSet = {\n objectType: TestObjectType,\n} as unknown as ObjectSet<TestObject>;\n\ndescribe(useObjectTableData, () => {\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return <OsdkProvider client={client}>{children}</OsdkProvider>;\n };\n };\n\n const fakeClient = {} as unknown as Client;\n const wrapper = createWrapper(fakeClient);\n\n it(\"calls useObjectSet with pageSize of 50\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions).toEqual({\n withProperties: undefined,\n pageSize: 50,\n });\n });\n\n it(\"calls useObjectSet with filter clause provided\", () => {\n const filterClause = {\n name: \"John\",\n } as unknown as WhereClause<TestObject>;\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, undefined, filterClause),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.where).toEqual(filterClause);\n });\n\n it(\"calls useObjectSet without withProperties when no columnDefinitions provided\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, undefined),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"calls useObjectSet without withProperties when columnDefinitions have no RDP columns\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({});\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"extracts RDP creators and passes them to useObjectSet\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { rdp1: any; rdp2: any },\n { myFunction: any }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"memoizes withProperties based on columnDefinitions\", () => {\n const mockRdpCreator = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ colDefs }) => useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: columnDefinitions },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n const firstWithProperties = firstMockResult._testOptions.withProperties;\n\n // Rerender with same columnDefinitions reference\n rerender({ colDefs: columnDefinitions });\n\n // Should be the same reference (memoized)\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toBe(\n firstWithProperties,\n );\n });\n\n it(\"updates withProperties when columnDefinitions change\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp1: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n ];\n\n type ColDefs =\n | Array<\n ColumnDefinition<TestObject, Record<string, SimplePropertyDef>, {}>\n >\n | undefined;\n\n const { result, rerender } = renderHook(\n ({ colDefs }: { colDefs: ColDefs }) =>\n useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(firstMockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp2: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n ];\n\n rerender({ colDefs: updatedColumnDefinitions as ColDefs });\n\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toEqual({\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"returns useObjectSet result structure\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n expect(result.current).toHaveProperty(\"data\");\n expect(result.current).toHaveProperty(\"isLoading\");\n expect(result.current).toHaveProperty(\"error\");\n expect(result.current).toHaveProperty(\"fetchNextPage\");\n expect(result.current).toHaveProperty(\"hasNextPage\");\n expect(result.current).toHaveProperty(\"isFetchingNextPage\");\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA,SAASA,YAAY,QAAQ,aAAa;AAC1C,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,QAAQ;AAEjD,SAASC,kBAAkB,QAAQ,0BAA0B;AAgB7DD,EAAE,CAACE,IAAI,CAAC,0BAA0B,EAAE,OAAO;EACzCC,YAAY,EAAEH,EAAE,CAACI,EAAE,CAAC,CAACC,SAAS,EAAEC,OAAO,KAA6B;IAClE,OAAO;MACLC,IAAI,EAAE,EAAE;MACRC,SAAS,EAAE,KAAK;MAChBC,KAAK,EAAEC,SAAS;MAChBC,aAAa,EAAEX,EAAE,CAACI,EAAE,CAAC,CAAC;MACtBQ,WAAW,EAAE,KAAK;MAClBC,kBAAkB,EAAE,KAAK;MACzB;MACAC,YAAY,EAAER;IAChB,CAAC;EACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAMS,cAAc,GAAG;EACrBC,IAAI,EAAE,QAAQ;EACdC,OAAO,EAAE;AACX,CAAyC;AAKzC,MAAMC,aAAa,GAAG;EACpBC,UAAU,EAAEJ;AACd,CAAqC;AAErClB,QAAQ,CAACI,kBAAkB,EAAE,MAAM;EAQjC,MAAMmB,OAAO,GAAG,CAPOC,MAAc,IAAK;IACxC,OAAO,CAAC;MAAEC;IAAkC,CAAC,KAAK;MAChD,oBAAO1B,KAAA,CAAA2B,aAAA,CAAC7B,YAAY;QAAC2B,MAAM,EAAEA;MAAO,GAAEC,QAAuB,CAAC;IAChE,CAAC;EACH,CAAC,EAEkB,CAAC,CACoB,CAAC;EAEzCvB,EAAE,CAAC,wCAAwC,EAAE,MAAM;IACjD,MAAM;MAAEyB;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,CAAC,EACvC;MAAEE;IAAQ,CACZ,CAAC;IAED,MAAMK,UAAU,GAAGD,MAAM,CAACE,OAA4C;IACtE5B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAAC,CAACa,OAAO,CAAC;MACtCC,cAAc,EAAElB,SAAS;MACzBmB,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF9B,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzD,MAAM+B,YAAY,GAAG;MACnBC,IAAI,EAAE;IACR,CAAuC;IACvC,MAAM;MAAEP;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,EAAER,SAAS,EAAEoB,YAAY,CAAC,EAChE;MAAEV;IAAQ,CACZ,CAAC;IAED,MAAMK,UAAU,GAAGD,MAAM,CAACE,OAA4C;IACtE5B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACkB,KAAK,CAAC,CAACL,OAAO,CAACG,YAAY,CAAC;EAC7D,CAAC,CAAC;EAEF/B,EAAE,CAAC,8EAA8E,EAAE,MAAM;IACvF,MAAM;MAAEyB;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,EAAER,SAAS,CAAC,EAClD;MAAEU;IAAQ,CACZ,CAAC;IAED,MAAMK,UAAU,GAAGD,MAAM,CAACE,OAA4C;IACtE5B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACc,cAAc,CAAC,CAACK,aAAa,CAAC,CAAC;IAC9DnC,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACe,QAAQ,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC;EACnD,CAAC,CAAC;EAEFnC,EAAE,CAAC,sFAAsF,EAAE,MAAM;IAC/F,MAAMoC,iBAA8D,GAAG,CACrE;MACEC,OAAO,EAAE;QAAEpB,IAAI,EAAE,UAAU;QAAEqB,EAAE,EAAE;MAAyB;IAC5D,CAAC,EACD;MACED,OAAO,EAAE;QAAEpB,IAAI,EAAE,UAAU;QAAEqB,EAAE,EAAE;MAA0B;IAC7D,CAAC,CACF;IAED,MAAM;MAAEb;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,EAAEiB,iBAAiB,CAAC,EAC1D;MAAEf;IAAQ,CACZ,CAAC;IAED,MAAMK,UAAU,GAAGD,MAAM,CAACE,OAA4C;IACtE5B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACc,cAAc,CAAC,CAACD,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D7B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACe,QAAQ,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC;EACnD,CAAC,CAAC;EAEFnC,EAAE,CAAC,uDAAuD,EAAE,MAAM;IAChE,MAAMuC,eAAe,GAAGtC,EAAE,CAACI,EAAE,CAAC,CAG7B;IACD,MAAMmC,eAAe,GAAGvC,EAAE,CAACI,EAAE,CAAC,CAG7B;IAED,MAAM+B,iBAML,GAAG,CACF;MACEC,OAAO,EAAE;QAAEpB,IAAI,EAAE,UAAU;QAAEqB,EAAE,EAAE;MAAyB;IAC5D,CAAC,EACD;MACED,OAAO,EAAE;QAAEpB,IAAI,EAAE,KAAK;QAAEqB,EAAE,EAAE,MAAM;QAAEG,OAAO,EAAEF;MAAgB;IAC/D,CAAC,EACD;MACEF,OAAO,EAAE;QAAEpB,IAAI,EAAE,KAAK;QAAEqB,EAAE,EAAE,MAAM;QAAEG,OAAO,EAAED;MAAgB;IAC/D,CAAC,EACD;MACEH,OAAO,EAAE;QAAEpB,IAAI,EAAE,UAAU;QAAEqB,EAAE,EAAE;MAAa;IAChD,CAAC,CACF;IAED,MAAM;MAAEb;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,EAAEiB,iBAAiB,CAAC,EAC1D;MAAEf;IAAQ,CACZ,CAAC;IAED,MAAMK,UAAU,GAAGD,MAAM,CAACE,OAA4C;IACtE5B,MAAM,CAAC2B,UAAU,CAACX,YAAY,CAACc,cAAc,CAAC,CAACD,OAAO,CAAC;MACrDc,IAAI,EAAEH,eAAe;MACrBI,IAAI,EAAEH;IACR,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFxC,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7D,MAAM4C,cAAc,GAAG3C,EAAE,CAACI,EAAE,CAAC,CAG5B;IAED,MAAM+B,iBAEL,GAAG,CACF;MACEC,OAAO,EAAE;QAAEpB,IAAI,EAAE,KAAK;QAAEqB,EAAE,EAAE,OAAO;QAAEG,OAAO,EAAEG;MAAe;IAC/D,CAAC,CACF;IAED,MAAM;MAAEnB,MAAM;MAAEoB;IAAS,CAAC,GAAGjD,UAAU,CACrC,CAAC;MAAEkD;IAAQ,CAAC,KAAK5C,kBAAkB,CAACiB,aAAa,EAAE2B,OAAO,CAAC,EAC3D;MACEC,YAAY,EAAE;QAAED,OAAO,EAAEV;MAAkB,CAAC;MAC5Cf;IACF,CACF,CAAC;IAED,MAAM2B,eAAe,GAAGvB,MAAM,CAACE,OAA4C;IAC3E,MAAMsB,mBAAmB,GAAGD,eAAe,CAACjC,YAAY,CAACc,cAAc;;IAEvE;IACAgB,QAAQ,CAAC;MAAEC,OAAO,EAAEV;IAAkB,CAAC,CAAC;;IAExC;IACA,MAAMc,gBAAgB,GAAGzB,MAAM,CAC5BE,OAA4C;IAC/C5B,MAAM,CAACmD,gBAAgB,CAACnC,YAAY,CAACc,cAAc,CAAC,CAACM,IAAI,CACvDc,mBACF,CAAC;EACH,CAAC,CAAC;EAEFjD,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/D,MAAMuC,eAAe,GAAGtC,EAAE,CAACI,EAAE,CAAC,CAG7B;IACD,MAAMmC,eAAe,GAAGvC,EAAE,CAACI,EAAE,CAAC,CAG7B;IAgBD,MAAM;MAAEoB,MAAM;MAAEoB;IAAS,CAAC,GAAGjD,UAAU,CACrC,CAAC;MAAEkD;IAA8B,CAAC,KAChC5C,kBAAkB,CAACiB,aAAa,EAAE2B,OAAO,CAAC,EAC5C;MACEC,YAAY,EAAE;QAAED,OAAO,EAhBvB,CACF;UACET,OAAO,EAAE;YAAEpB,IAAI,EAAE,KAAK;YAAEqB,EAAE,EAAE,MAAM;YAAEG,OAAO,EAAEF;UAAgB;QAC/D,CAAC;MAa8D,CAAC;MAC9DlB;IACF,CACF,CAAC;IAED,MAAM2B,eAAe,GAAGvB,MAAM,CAACE,OAA4C;IAC3E5B,MAAM,CAACiD,eAAe,CAACjC,YAAY,CAACc,cAAc,CAAC,CAACD,OAAO,CAAC;MAC1Dc,IAAI,EAAEH;IACR,CAAC,CAAC;IAUFM,QAAQ,CAAC;MAAEC,OAAO,EANd,CACF;QACET,OAAO,EAAE;UAAEpB,IAAI,EAAE,KAAK;UAAEqB,EAAE,EAAE,MAAM;UAAEG,OAAO,EAAED;QAAgB;MAC/D,CAAC;IAGqD,CAAC,CAAC;IAE1D,MAAMU,gBAAgB,GAAGzB,MAAM,CAC5BE,OAA4C;IAC/C5B,MAAM,CAACmD,gBAAgB,CAACnC,YAAY,CAACc,cAAc,CAAC,CAACD,OAAO,CAAC;MAC3De,IAAI,EAAEH;IACR,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFxC,EAAE,CAAC,uCAAuC,EAAE,MAAM;IAChD,MAAM;MAAEyB;IAAO,CAAC,GAAG7B,UAAU,CAC3B,MAAMM,kBAAkB,CAACiB,aAAa,CAAC,EACvC;MAAEE;IAAQ,CACZ,CAAC;IAEDtB,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,MAAM,CAAC;IAC7CpD,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,WAAW,CAAC;IAClDpD,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,OAAO,CAAC;IAC9CpD,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,eAAe,CAAC;IACtDpD,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,aAAa,CAAC;IACpDpD,MAAM,CAAC0B,MAAM,CAACE,OAAO,CAAC,CAACwB,cAAc,CAAC,oBAAoB,CAAC;EAC7D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}