@osdk/react-components 0.1.0-beta.6 → 0.1.0

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 (121) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +2 -5
  3. package/build/browser/base-components/checkbox/Checkbox.js +32 -27
  4. package/build/browser/object-table/CellContextMenu.js +20 -23
  5. package/build/browser/object-table/LoadingCell.js +38 -0
  6. package/build/browser/object-table/LoadingCell.js.map +1 -0
  7. package/build/browser/object-table/LoadingRow.js +69 -0
  8. package/build/browser/object-table/LoadingRow.js.map +1 -0
  9. package/build/browser/object-table/LoadingStateTable.js +395 -0
  10. package/build/browser/object-table/LoadingStateTable.js.map +1 -0
  11. package/build/browser/object-table/NonIdealState.js +25 -0
  12. package/build/browser/object-table/NonIdealState.js.map +1 -0
  13. package/build/browser/object-table/ObjectTable.js +6 -5
  14. package/build/browser/object-table/ObjectTable.js.map +1 -1
  15. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  16. package/build/browser/object-table/Table.js +948 -45
  17. package/build/browser/object-table/Table.js.map +1 -1
  18. package/build/browser/object-table/TableBody.js +269 -34
  19. package/build/browser/object-table/TableBody.js.map +1 -1
  20. package/build/browser/object-table/TableCell.js +111 -31
  21. package/build/browser/object-table/TableCell.js.map +1 -1
  22. package/build/browser/object-table/TableHeader.js +215 -38
  23. package/build/browser/object-table/TableHeaderContent.js +18 -21
  24. package/build/browser/object-table/TableHeaderContent.js.map +1 -1
  25. package/build/browser/object-table/TableHeaderWithPopover.js +80 -66
  26. package/build/browser/object-table/TableRow.js +144 -26
  27. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +18 -20
  28. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  29. package/build/browser/object-table/hooks/useColumnDefs.js +6 -2
  30. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  31. package/build/browser/object-table/hooks/useColumnPinning.js.map +1 -1
  32. package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -1
  33. package/build/browser/object-table/hooks/useObjectTableData.js +7 -6
  34. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  35. package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
  36. package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
  37. package/build/browser/object-table/hooks/useTableSorting.js.map +1 -1
  38. package/build/browser/object-table/utils/getRowId.js.map +1 -1
  39. package/build/cjs/public/experimental.cjs +435 -264
  40. package/build/cjs/public/experimental.cjs.map +1 -1
  41. package/build/cjs/public/experimental.css +114 -56
  42. package/build/cjs/public/experimental.css.map +1 -1
  43. package/build/cjs/public/experimental.d.cts +8 -11
  44. package/build/esm/base-components/checkbox/Checkbox.module.css +10 -3
  45. package/build/esm/object-table/CellContextMenu.module.css +1 -1
  46. package/build/{browser/object-table/CellContextMenu.module.css → esm/object-table/LoadingCell.js} +16 -3
  47. package/build/esm/object-table/LoadingCell.js.map +1 -0
  48. package/build/esm/object-table/LoadingCell.module.css +48 -0
  49. package/build/esm/object-table/LoadingRow.js +43 -0
  50. package/build/esm/object-table/LoadingRow.js.map +1 -0
  51. package/build/esm/object-table/LoadingStateTable.js +101 -0
  52. package/build/esm/object-table/LoadingStateTable.js.map +1 -0
  53. package/build/{browser/object-table/TableHeaderContent.module.css → esm/object-table/NonIdealState.js} +11 -13
  54. package/build/esm/object-table/NonIdealState.js.map +1 -0
  55. package/build/{browser/object-table/Table.module.css → esm/object-table/NonIdealState.module.css} +10 -4
  56. package/build/esm/object-table/ObjectTable.js +6 -5
  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/Table.js +34 -13
  60. package/build/esm/object-table/Table.js.map +1 -1
  61. package/build/esm/object-table/Table.module.css +2 -2
  62. package/build/esm/object-table/TableBody.js +13 -2
  63. package/build/esm/object-table/TableBody.js.map +1 -1
  64. package/build/esm/object-table/TableCell.js.map +1 -1
  65. package/build/esm/object-table/TableCell.module.css +7 -8
  66. package/build/esm/object-table/TableHeader.module.css +15 -9
  67. package/build/esm/object-table/TableHeaderContent.js.map +1 -1
  68. package/build/esm/object-table/TableHeaderWithPopover.module.css +31 -26
  69. package/build/esm/object-table/TableRow.module.css +1 -1
  70. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +18 -20
  71. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
  72. package/build/esm/object-table/hooks/useColumnDefs.js +6 -2
  73. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  74. package/build/esm/object-table/hooks/useColumnPinning.js.map +1 -1
  75. package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -1
  76. package/build/esm/object-table/hooks/useObjectTableData.js +7 -6
  77. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  78. package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
  79. package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
  80. package/build/esm/object-table/hooks/useTableSorting.js.map +1 -1
  81. package/build/esm/object-table/utils/getRowId.js.map +1 -1
  82. package/build/types/object-table/LoadingCell.d.ts +4 -0
  83. package/build/types/object-table/LoadingCell.d.ts.map +1 -0
  84. package/build/types/object-table/LoadingRow.d.ts +11 -0
  85. package/build/types/object-table/LoadingRow.d.ts.map +1 -0
  86. package/build/types/object-table/LoadingStateTable.d.ts +11 -0
  87. package/build/types/object-table/LoadingStateTable.d.ts.map +1 -0
  88. package/build/types/object-table/NonIdealState.d.ts +6 -0
  89. package/build/types/object-table/NonIdealState.d.ts.map +1 -0
  90. package/build/types/object-table/ObjectTable.d.ts +4 -4
  91. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  92. package/build/types/object-table/ObjectTableApi.d.ts +4 -8
  93. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  94. package/build/types/object-table/Table.d.ts +2 -1
  95. package/build/types/object-table/Table.d.ts.map +1 -1
  96. package/build/types/object-table/TableBody.d.ts +4 -2
  97. package/build/types/object-table/TableBody.d.ts.map +1 -1
  98. package/build/types/object-table/TableHeaderContent.d.ts.map +1 -1
  99. package/build/types/object-table/hooks/useColumnDefs.d.ts +3 -3
  100. package/build/types/object-table/hooks/useColumnDefs.d.ts.map +1 -1
  101. package/build/types/object-table/hooks/useColumnPinning.d.ts +3 -3
  102. package/build/types/object-table/hooks/useColumnPinning.d.ts.map +1 -1
  103. package/build/types/object-table/hooks/useColumnVisibility.d.ts +3 -3
  104. package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -1
  105. package/build/types/object-table/hooks/useObjectTableData.d.ts +6 -6
  106. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  107. package/build/types/object-table/hooks/useRowSelection.d.ts +3 -3
  108. package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
  109. package/build/types/object-table/hooks/useSelectionColumn.d.ts +2 -2
  110. package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -1
  111. package/build/types/object-table/hooks/useTableSorting.d.ts +3 -3
  112. package/build/types/object-table/hooks/useTableSorting.d.ts.map +1 -1
  113. package/build/types/object-table/utils/getRowId.d.ts +3 -3
  114. package/build/types/object-table/utils/getRowId.d.ts.map +1 -1
  115. package/package.json +6 -6
  116. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -72
  117. package/build/browser/object-table/TableBody.module.css +0 -20
  118. package/build/browser/object-table/TableCell.module.css +0 -63
  119. package/build/browser/object-table/TableHeader.module.css +0 -95
  120. package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -105
  121. package/build/browser/object-table/TableRow.module.css +0 -60
@@ -1,72 +1,975 @@
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
- */
1
+ // build/browser/object-table/Table.js
2
+ import classNames6 from "classnames";
3
+ import React16, { useCallback as useCallback5, useEffect as useEffect3, useRef as useRef4, useState as useState5 } from "react";
16
4
 
5
+ // build/browser/object-table/LoadingStateTable.js
6
+ import classNames3 from "classnames";
7
+ import React6, { useEffect, useRef, useState as useState2 } from "react";
8
+ import React2 from "react";
17
9
  import classNames from "classnames";
18
- import React, { useCallback, useRef } from "react";
19
- import styles from "./Table.module.css";
20
- import { TableBody } from "./TableBody.js";
21
- import { TableHeader } from "./TableHeader.js";
22
- export function BaseTable({
10
+ import React from "react";
11
+ import React5 from "react";
12
+ import { flexRender } from "@tanstack/react-table";
13
+ import React3 from "react";
14
+ import { Menu } from "@base-ui/react/menu";
15
+ import { ChevronDown, Pin, Remove, SortAlphabetical, SortAlphabeticalDesc, Unpin, VerticalDistribution } from "@blueprintjs/icons";
16
+ import classNames2 from "classnames";
17
+ import React4, { useCallback, useState } from "react";
18
+ var css = '/*\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\n.osdkLoadingCell {\n height: var(--osdk-table-cell-fontSize);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n flex: 1;\n}\n\n/* Blueprint skeleton animation keyframes */\n@keyframes skeleton-glow {\n from {\n background: var(--osdk-table-skeleton-color-from);\n border-color: var(--osdk-table-skeleton-color-from);\n }\n\n to {\n background: var(--osdk-table-skeleton-color-to);\n border-color: var(--osdk-table-skeleton-color-to);\n }\n}\n\n.osdkCellSkeleton {\n animation: 1000ms linear infinite alternate skeleton-glow;\n background: var(--osdk-table-skeleton-color-from);\n background-clip: padding-box;\n border-color: var(--osdk-table-skeleton-color-from);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n border: 1px solid var(--osdk-table-skeleton-border-color);\n box-shadow: none;\n color: transparent;\n cursor: default;\n pointer-events: none;\n user-select: none;\n}\n';
19
+ if (typeof document !== "undefined") {
20
+ const style = document.createElement("style");
21
+ style.textContent = css;
22
+ document.head.appendChild(style);
23
+ }
24
+ var LoadingCell_default = { "osdkLoadingCell": "osdkLoadingCell", "osdkCellSkeleton": "osdkCellSkeleton" };
25
+ var css2 = '/*\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\n.osdkLoadingCell {\n height: var(--osdk-table-cell-fontSize);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n flex: 1;\n}\n\n/* Blueprint skeleton animation keyframes */\n@keyframes skeleton-glow {\n from {\n background: var(--osdk-table-skeleton-color-from);\n border-color: var(--osdk-table-skeleton-color-from);\n }\n\n to {\n background: var(--osdk-table-skeleton-color-to);\n border-color: var(--osdk-table-skeleton-color-to);\n }\n}\n\n.osdkCellSkeleton {\n animation: 1000ms linear infinite alternate skeleton-glow;\n background: var(--osdk-table-skeleton-color-from);\n background-clip: padding-box;\n border-color: var(--osdk-table-skeleton-color-from);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n border: 1px solid var(--osdk-table-skeleton-border-color);\n box-shadow: none;\n color: transparent;\n cursor: default;\n pointer-events: none;\n user-select: none;\n}\n';
26
+ if (typeof document !== "undefined") {
27
+ const style = document.createElement("style");
28
+ style.textContent = css2;
29
+ document.head.appendChild(style);
30
+ }
31
+ var LoadingCell_default2 = { "osdkLoadingCell": "osdkLoadingCell", "osdkCellSkeleton": "osdkCellSkeleton" };
32
+ var css22 = '/*\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\n.osdkTableCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-size: var(--osdk-table-cell-fontSize);\n color: var(--osdk-table-cell-color);\n background-color: inherit;\n border-right: var(--osdk-table-cell-divider);\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableCell[data-pinned="left"],\n.osdkTableCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-1);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableCell[data-pinned="right"]:not(:has(~ [data-pinned="right"]):nth-child(n+2)) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableCellContent:not(:has([role="checkbox"])) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n}\n';
33
+ if (typeof document !== "undefined") {
34
+ const style = document.createElement("style");
35
+ style.textContent = css22;
36
+ document.head.appendChild(style);
37
+ }
38
+ var TableCell_default = { "osdkTableCell": "osdkTableCell", "osdkTableCellContent": "osdkTableCellContent" };
39
+ function LoadingCell({
40
+ width
41
+ }) {
42
+ return /* @__PURE__ */ React.createElement("td", {
43
+ className: TableCell_default.osdkTableCell,
44
+ style: {
45
+ width
46
+ }
47
+ }, /* @__PURE__ */ React.createElement("div", {
48
+ className: classNames(LoadingCell_default2.osdkLoadingCell, LoadingCell_default2.osdkCellSkeleton)
49
+ }));
50
+ }
51
+ var css3 = '/*\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\n.osdkTableRow {\n position: absolute;\n display: flex;\n background-color: var(--osdk-table-row-bg-default);\n border-top: var(--osdk-table-row-divider);\n border-bottom: var(--osdk-table-border-width) solid transparent;\n\n &:last-child {\n border-bottom: var(--osdk-table-border);\n }\n\n /* Zebra rows */\n &:nth-child(even) {\n background-color: var(\n --osdk-table-row-bg-alternate,\n var(--osdk-table-row-bg-default)\n );\n }\n\n &:hover {\n z-index: 1;\n background-color: var(\n --osdk-table-row-bg-hover,\n var(--osdk-surface-background-color-default-hover)\n );\n border-top-color: var(--osdk-table-row-border-color-hover);\n border-bottom-color: var(--osdk-table-row-border-color-hover);\n }\n\n &[data-selected="true"] {\n z-index: 2;\n background-color: var(--osdk-table-row-bg-active);\n border-top-color: var(--osdk-table-row-border-color-active);\n border-bottom-color: var(--osdk-table-row-border-color-active);\n }\n\n &[data-selected="true"] + &[data-selected="true"] {\n border-top-color: transparent;\n }\n\n &[data-selected="true"]:has(+ &[data-selected="true"]) {\n border-bottom-color: transparent;\n }\n}\n';
52
+ if (typeof document !== "undefined") {
53
+ const style = document.createElement("style");
54
+ style.textContent = css3;
55
+ document.head.appendChild(style);
56
+ }
57
+ var TableRow_default = { "osdkTableRow": "osdkTableRow" };
58
+ function LoadingRow({
59
+ headers,
60
+ columnCount,
61
+ translateY,
62
+ rowHeight = 40,
63
+ columnWidth = 80
64
+ }) {
65
+ return /* @__PURE__ */ React2.createElement("tr", {
66
+ className: TableRow_default.osdkTableRow,
67
+ style: {
68
+ height: `${rowHeight}px`,
69
+ transform: `translateY(${translateY}px)`
70
+ }
71
+ }, /* @__PURE__ */ React2.createElement(React2.Fragment, null, Array.from({
72
+ length: columnCount
73
+ }).map((_, index) => {
74
+ const width = headers.length > index ? headers[index].getSize() : columnWidth;
75
+ return /* @__PURE__ */ React2.createElement(LoadingCell, {
76
+ key: `loading-cell-${index}`,
77
+ width
78
+ });
79
+ })));
80
+ }
81
+ var css4 = '/*\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\n.osdkTableBody {\n display: grid;\n position: relative;\n}\n';
82
+ if (typeof document !== "undefined") {
83
+ const style = document.createElement("style");
84
+ style.textContent = css4;
85
+ document.head.appendChild(style);
86
+ }
87
+ var TableBody_default = { "osdkTableBody": "osdkTableBody" };
88
+ var css5 = '/*\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\n.osdkTableHeader {\n display: grid;\n position: sticky;\n top: 0;\n z-index: var(--osdk-surface-z-index-1);\n background-color: var(--osdk-table-header-bg);\n}\n\n.osdkTableHeader[data-resizing="true"] {\n cursor: col-resize;\n user-select: none;\n}\n\n.osdkTableHeaderRow {\n display: flex;\n}\n\n.osdkTableHeaderCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-weight: var(--osdk-table-header-fontWeight);\n font-size: var(--osdk-table-header-fontSize);\n color: var(--osdk-table-header-color);\n border-top: var(--osdk-table-border);\n border-right: var(--osdk-table-header-divider);\n background-color: inherit;\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableHeaderCell[data-pinned="left"],\n.osdkTableHeaderCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-2);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableHeaderCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableHeaderCell[data-pinned="right"]:not(\n :has(~ [data-pinned="right"]):nth-child(n + 2)\n ) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableHeaderCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableHeaderResizer {\n background: none;\n cursor: col-resize;\n height: 100%;\n position: absolute;\n right: calc(-1 * var(--osdk-table-border-width));\n top: 0;\n touch-action: none;\n width: 3px;\n z-index: var(--osdk-surface-z-index-2);\n\n &:hover {\n background: var(--osdk-intent-primary-hover);\n }\n\n &:active {\n background: var(--osdk-intent-primary-active);\n }\n}\n\n.osdkLoadingHeaderCell {\n height: var(--osdk-table-header-fontSize);\n flex: 1;\n}\n';
89
+ if (typeof document !== "undefined") {
90
+ const style = document.createElement("style");
91
+ style.textContent = css5;
92
+ document.head.appendChild(style);
93
+ }
94
+ var TableHeader_default = { "osdkTableHeader": "osdkTableHeader", "osdkTableHeaderRow": "osdkTableHeaderRow", "osdkTableHeaderCell": "osdkTableHeaderCell", "osdkTableHeaderResizer": "osdkTableHeaderResizer", "osdkLoadingHeaderCell": "osdkLoadingHeaderCell" };
95
+ var css6 = '/*\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\n.osdkHeaderContent {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.osdkHeaderContent:has([role="checkbox"]) {\n display: flex;\n justify-content: center;\n}\n';
96
+ if (typeof document !== "undefined") {
97
+ const style = document.createElement("style");
98
+ style.textContent = css6;
99
+ document.head.appendChild(style);
100
+ }
101
+ var TableHeaderContent_default = { "osdkHeaderContent": "osdkHeaderContent" };
102
+ function TableHeaderContent({
103
+ header
104
+ }) {
105
+ return /* @__PURE__ */ React3.createElement("div", {
106
+ className: TableHeaderContent_default.osdkHeaderContent
107
+ }, flexRender(header.column.columnDef.header, header.getContext()));
108
+ }
109
+ var css7 = '/*\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\n.osdkCenterContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.osdkContentGap {\n display: flex;\n gap: var(--osdk-surface-spacing);\n}\n\n.osdkHeaderContainer {\n justify-content: space-between;\n flex: 1;\n min-width: 0;\n align-self: stretch;\n}\n\n.osdkHeaderContentLeft {\n min-width: 0;\n flex-shrink: 1;\n}\n\n.osdkHeaderContentRight {\n flex-shrink: 0;\n}\n\n.osdkHeaderPopoverTrigger {\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n border: var(--osdk-surface-border-width) solid\n var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-surface-border-radius);\n color: var(--osdk-intent-default-foreground);\n user-select: none;\n outline: none;\n\n &:hover {\n background-color: var(--osdk-intent-default-hover);\n }\n\n &[data-popup-open] {\n background-color: var(--osdk-intent-primary-rest);\n }\n\n &:focus-visible {\n outline: var(--osdk-focus-visible-outline);\n outline-offset: var(--osdk-focus-visible-outline-offset);\n }\n}\n\n.osdkHeaderIcon {\n width: var(--osdk-iconography-size-small);\n height: var(--osdk-iconography-size-small);\n}\n\n.osdkHeaderPopup {\n box-sizing: border-box;\n padding: var(--osdk-surface-spacing);\n border-radius: var(--osdk-surface-border-radius);\n border: var(--osdk-surface-border-width) solid\n var(--osdk-surface-border-color-default);\n background-color: var(--osdk-surface-background-color-default);\n color: var(--osdk-typography-color-default-rest);\n box-shadow: var(--osdk-surface-shadow-2);\n font-size: var(--osdk-typography-size-body-medium);\n outline: none;\n}\n\n.osdkHeaderMenuItem {\n justify-content: flex-start;\n padding: var(--osdk-surface-spacing);\n cursor: pointer;\n}\n\n.osdkHeaderMenuItem:hover {\n outline: none;\n background-color: var(--osdk-surface-background-color-default-hover);\n border-radius: var(--osdk-surface-border-radius);\n}\n\n.osdkHeaderActiveMenuItem {\n background-color: var(--osdk-intent-primary-rest);\n color: var(--osdk-intent-primary-foreground);\n}\n\n.osdkHeaderActiveMenuItem:hover {\n background-color: var(--osdk-intent-primary-hover);\n}\n\n.osdkHeaderActiveMenuItem:active {\n background-color: var(--osdk-intent-primary-active);\n}\n';
110
+ if (typeof document !== "undefined") {
111
+ const style = document.createElement("style");
112
+ style.textContent = css7;
113
+ document.head.appendChild(style);
114
+ }
115
+ var TableHeaderWithPopover_default = { "osdkCenterContainer": "osdkCenterContainer", "osdkContentGap": "osdkContentGap", "osdkHeaderContainer": "osdkHeaderContainer", "osdkHeaderContentLeft": "osdkHeaderContentLeft", "osdkHeaderContentRight": "osdkHeaderContentRight", "osdkHeaderPopoverTrigger": "osdkHeaderPopoverTrigger", "osdkHeaderIcon": "osdkHeaderIcon", "osdkHeaderPopup": "osdkHeaderPopup", "osdkHeaderMenuItem": "osdkHeaderMenuItem", "osdkHeaderActiveMenuItem": "osdkHeaderActiveMenuItem" };
116
+ function HeaderMenuItem({
117
+ onClick,
118
+ icon: Icon,
119
+ label,
120
+ active = false
121
+ }) {
122
+ return /* @__PURE__ */ React4.createElement(Menu.Item, {
123
+ closeOnClick: true,
124
+ className: classNames2(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
125
+ onClick
126
+ }, /* @__PURE__ */ React4.createElement(Icon, {
127
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
128
+ color: "currentColor"
129
+ }), /* @__PURE__ */ React4.createElement("span", null, label));
130
+ }
131
+ function TableHeaderWithPopover({
132
+ header,
133
+ isColumnPinned,
134
+ setColumnPinning,
135
+ onSortChange,
136
+ onResetSize
137
+ }) {
138
+ const [isOpen, setIsOpen] = useState(false);
139
+ const handlePinLeft = useCallback(() => {
140
+ setColumnPinning((prev) => {
141
+ return {
142
+ left: [...prev.left || [], header.column.id],
143
+ right: prev.right?.filter((id) => id !== header.column.id) || []
144
+ };
145
+ });
146
+ }, [header.column.id, setColumnPinning]);
147
+ const handleUnpin = useCallback(() => {
148
+ setColumnPinning((prev) => {
149
+ return {
150
+ left: prev.left?.filter((id) => id !== header.column.id) || [],
151
+ right: prev.right?.filter((id) => id !== header.column.id) || []
152
+ };
153
+ });
154
+ }, [header.column.id, setColumnPinning]);
155
+ const handleSortAscending = useCallback(() => {
156
+ header.column.toggleSorting(false);
157
+ onSortChange?.([{
158
+ id: header.column.id,
159
+ desc: false
160
+ }]);
161
+ }, [header.column, onSortChange]);
162
+ const handleSortDescending = useCallback(() => {
163
+ header.column.toggleSorting(true);
164
+ onSortChange?.([{
165
+ id: header.column.id,
166
+ desc: true
167
+ }]);
168
+ }, [header.column, onSortChange]);
169
+ const handleClearAllSorts = useCallback(() => {
170
+ header.column.clearSorting();
171
+ onSortChange?.([]);
172
+ }, [header.column, onSortChange]);
173
+ const handleResetSize = useCallback(() => {
174
+ header.column.resetSize();
175
+ if (onResetSize) {
176
+ onResetSize();
177
+ }
178
+ }, [header.column, onResetSize]);
179
+ const handleInteraction = useCallback((e) => {
180
+ e.preventDefault();
181
+ setIsOpen((prev) => !prev);
182
+ }, []);
183
+ const isSorted = header.column.getIsSorted();
184
+ const isSortable = header.column.getCanSort();
185
+ return /* @__PURE__ */ React4.createElement(Menu.Root, {
186
+ open: isOpen,
187
+ onOpenChange: setIsOpen
188
+ }, /* @__PURE__ */ React4.createElement("div", {
189
+ className: classNames2(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
190
+ onContextMenu: handleInteraction
191
+ }, /* @__PURE__ */ React4.createElement("div", {
192
+ className: classNames2(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
193
+ }, isColumnPinned && /* @__PURE__ */ React4.createElement(Pin, {
194
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
195
+ color: "currentColor"
196
+ }), /* @__PURE__ */ React4.createElement(TableHeaderContent, {
197
+ header
198
+ })), /* @__PURE__ */ React4.createElement("div", {
199
+ className: classNames2(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
200
+ }, isSorted && /* @__PURE__ */ React4.createElement("div", {
201
+ className: TableHeaderWithPopover_default.osdkCenterContainer
202
+ }, isSorted === "asc" ? /* @__PURE__ */ React4.createElement(SortAlphabetical, {
203
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
204
+ color: "currentColor"
205
+ }) : /* @__PURE__ */ React4.createElement(SortAlphabeticalDesc, {
206
+ className: TableHeaderWithPopover_default.osdkHeaderIcon,
207
+ color: "currentColor"
208
+ })), /* @__PURE__ */ React4.createElement(Menu.Trigger, {
209
+ "aria-label": `Open header menu for column with id=${header.column.id}`,
210
+ className: classNames2(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
211
+ }, /* @__PURE__ */ React4.createElement(ChevronDown, {
212
+ className: TableHeaderWithPopover_default.osdkHeaderIcon
213
+ }))), /* @__PURE__ */ React4.createElement(Menu.Portal, {
214
+ container: document.body
215
+ }, /* @__PURE__ */ React4.createElement(Menu.Positioner, {
216
+ sideOffset: 4
217
+ }, /* @__PURE__ */ React4.createElement(Menu.Popup, {
218
+ className: TableHeaderWithPopover_default.osdkHeaderPopup
219
+ }, !isColumnPinned && /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
220
+ onClick: handlePinLeft,
221
+ icon: Pin,
222
+ label: "Pin column"
223
+ }), isColumnPinned && /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
224
+ onClick: handleUnpin,
225
+ icon: Unpin,
226
+ label: "Unpin Column",
227
+ active: true
228
+ }), isSortable && /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
229
+ onClick: handleSortAscending,
230
+ icon: SortAlphabetical,
231
+ label: "Sort ascending",
232
+ active: isSorted === "asc"
233
+ }), /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
234
+ onClick: handleSortDescending,
235
+ icon: SortAlphabeticalDesc,
236
+ label: "Sort descending",
237
+ active: isSorted === "desc"
238
+ })), !!isSorted && /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
239
+ onClick: handleClearAllSorts,
240
+ icon: Remove,
241
+ label: "Clear all sorts"
242
+ }), /* @__PURE__ */ React4.createElement(HeaderMenuItem, {
243
+ onClick: handleResetSize,
244
+ icon: VerticalDistribution,
245
+ label: "Reset Column Size"
246
+ }))))));
247
+ }
248
+ var SELECTION_COLUMN_ID = "__selection__";
249
+ function getColumnPinningStyles(column) {
250
+ const isPinned = column.getIsPinned();
251
+ return {
252
+ columnStyles: {
253
+ left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
254
+ right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
255
+ width: column.getSize()
256
+ }
257
+ };
258
+ }
259
+ function TableHeader({
260
+ table
261
+ }) {
262
+ const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
263
+ return /* @__PURE__ */ React5.createElement("thead", {
264
+ className: TableHeader_default.osdkTableHeader,
265
+ "data-resizing": isResizing
266
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React5.createElement("tr", {
267
+ key: headerGroup.id,
268
+ className: TableHeader_default.osdkTableHeaderRow
269
+ }, headerGroup.headers.map((header) => {
270
+ const {
271
+ columnStyles
272
+ } = getColumnPinningStyles(header.column);
273
+ const isColumnPinned = header.column.getIsPinned();
274
+ const isSelectColumn = header.id === SELECTION_COLUMN_ID;
275
+ return /* @__PURE__ */ React5.createElement("th", {
276
+ key: header.id,
277
+ "data-pinned": header.column.getIsPinned(),
278
+ className: TableHeader_default.osdkTableHeaderCell,
279
+ style: columnStyles
280
+ }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React5.createElement(TableHeaderContent, {
281
+ header
282
+ }) : /* @__PURE__ */ React5.createElement(TableHeaderWithPopover, {
283
+ header,
284
+ isColumnPinned,
285
+ setColumnPinning: table.setColumnPinning
286
+ }), header.column.getCanResize() && /* @__PURE__ */ React5.createElement("div", {
287
+ className: TableHeader_default.osdkTableHeaderResizer,
288
+ onDoubleClick: () => header.column.resetSize(),
289
+ onMouseDown: header.getResizeHandler(),
290
+ onTouchStart: header.getResizeHandler()
291
+ }));
292
+ }))));
293
+ }
294
+ var MIN_ROWS = 5;
295
+ function LoadingStateTable({
296
+ table,
297
+ tableContainerRef,
298
+ headerGroups,
299
+ rowHeight = 40,
300
+ columnWidth = 120
301
+ }) {
302
+ const isSelectionEnabled = table.options.enableRowSelection;
303
+ const minHeaderCount = isSelectionEnabled ? 1 : 0;
304
+ const headers = headerGroups[0]?.headers ?? [];
305
+ const hasHeadersLoaded = headers.length > minHeaderCount;
306
+ const headerRef = useRef(null);
307
+ const bodyRef = useRef(null);
308
+ const [loadingRowCount, setLoadingRowCount] = useState2(MIN_ROWS);
309
+ const [loadingColumnCount, setLoadingColumnCount] = useState2(headers.length);
310
+ useEffect(() => {
311
+ if (hasHeadersLoaded) {
312
+ setLoadingColumnCount(headers.length);
313
+ } else {
314
+ if (tableContainerRef.current) {
315
+ const tableWidth = tableContainerRef.current.clientWidth;
316
+ if (tableWidth > 0) {
317
+ const columnsNeeded = Math.ceil(tableWidth / columnWidth);
318
+ setLoadingColumnCount(columnsNeeded);
319
+ }
320
+ }
321
+ }
322
+ }, [columnWidth, hasHeadersLoaded, headers, tableContainerRef]);
323
+ useEffect(() => {
324
+ if (tableContainerRef.current) {
325
+ const containerHeight = tableContainerRef.current.clientHeight;
326
+ const availableHeight = containerHeight - rowHeight;
327
+ if (availableHeight > 0) {
328
+ const rowsNeeded = Math.ceil(availableHeight / rowHeight);
329
+ setLoadingRowCount(Math.max(rowsNeeded, MIN_ROWS));
330
+ }
331
+ }
332
+ }, [tableContainerRef, rowHeight]);
333
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, hasHeadersLoaded ? /* @__PURE__ */ React6.createElement(TableHeader, {
334
+ table
335
+ }) : /* @__PURE__ */ React6.createElement("thead", {
336
+ className: TableHeader_default.osdkTableHeader,
337
+ ref: headerRef
338
+ }, /* @__PURE__ */ React6.createElement("tr", {
339
+ className: TableHeader_default.osdkTableHeaderRow
340
+ }, Array.from({
341
+ length: loadingColumnCount
342
+ }).map((_, index) => {
343
+ const width = headers.length > index ? headers[index].getSize() : columnWidth;
344
+ return /* @__PURE__ */ React6.createElement("th", {
345
+ key: `loading-header-${index}`,
346
+ className: TableHeader_default.osdkTableHeaderCell,
347
+ style: {
348
+ width
349
+ }
350
+ }, /* @__PURE__ */ React6.createElement("div", {
351
+ className: classNames3(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
352
+ }));
353
+ }))), /* @__PURE__ */ React6.createElement("tbody", {
354
+ className: TableBody_default.osdkTableBody,
355
+ ref: bodyRef
356
+ }, Array.from({
357
+ length: loadingRowCount
358
+ }).map((_, index) => /* @__PURE__ */ React6.createElement(LoadingRow, {
359
+ key: `skeleton-${index}`,
360
+ columnCount: loadingColumnCount,
361
+ headers,
362
+ translateY: rowHeight * index,
363
+ rowHeight,
364
+ columnWidth
365
+ }))));
366
+ }
367
+
368
+ // build/browser/object-table/NonIdealState.js
369
+ import React7 from "react";
370
+ var css8 = '/*\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\n.container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 80px;\n}\n\n.message {\n color: var(--osdk-typography-color-muted);\n}\n';
371
+ if (typeof document !== "undefined") {
372
+ const style = document.createElement("style");
373
+ style.textContent = css8;
374
+ document.head.appendChild(style);
375
+ }
376
+ var NonIdealState_default = { "container": "container", "message": "message" };
377
+ function NonIdealState({
378
+ message
379
+ }) {
380
+ return /* @__PURE__ */ React7.createElement("div", {
381
+ className: NonIdealState_default.container
382
+ }, /* @__PURE__ */ React7.createElement("div", {
383
+ className: NonIdealState_default.message
384
+ }, message));
385
+ }
386
+
387
+ // build/browser/object-table/Table.module.css
388
+ var css9 = '/*\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\n.osdkTableContainer {\n position: relative; /* needed for sticky header */\n height: 100%;\n width: 100%;\n overflow: auto;\n}\n';
389
+ if (typeof document !== "undefined") {
390
+ const style = document.createElement("style");
391
+ style.textContent = css9;
392
+ document.head.appendChild(style);
393
+ }
394
+ var Table_default = { "osdkTableContainer": "osdkTableContainer" };
395
+
396
+ // build/browser/object-table/TableBody.js
397
+ import { useVirtualizer } from "@tanstack/react-virtual";
398
+ import React12, { useLayoutEffect } from "react";
399
+
400
+ // build/browser/object-table/LoadingRow.js
401
+ import React22 from "react";
402
+ import classNames4 from "classnames";
403
+ import React8 from "react";
404
+ var css10 = '/*\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\n.osdkLoadingCell {\n height: var(--osdk-table-cell-fontSize);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n flex: 1;\n}\n\n/* Blueprint skeleton animation keyframes */\n@keyframes skeleton-glow {\n from {\n background: var(--osdk-table-skeleton-color-from);\n border-color: var(--osdk-table-skeleton-color-from);\n }\n\n to {\n background: var(--osdk-table-skeleton-color-to);\n border-color: var(--osdk-table-skeleton-color-to);\n }\n}\n\n.osdkCellSkeleton {\n animation: 1000ms linear infinite alternate skeleton-glow;\n background: var(--osdk-table-skeleton-color-from);\n background-clip: padding-box;\n border-color: var(--osdk-table-skeleton-color-from);\n border-radius: calc(var(--osdk-surface-border-radius) * 0.5);\n border: 1px solid var(--osdk-table-skeleton-border-color);\n box-shadow: none;\n color: transparent;\n cursor: default;\n pointer-events: none;\n user-select: none;\n}\n';
405
+ if (typeof document !== "undefined") {
406
+ const style = document.createElement("style");
407
+ style.textContent = css10;
408
+ document.head.appendChild(style);
409
+ }
410
+ var LoadingCell_default3 = { "osdkLoadingCell": "osdkLoadingCell", "osdkCellSkeleton": "osdkCellSkeleton" };
411
+ var css23 = '/*\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\n.osdkTableCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-size: var(--osdk-table-cell-fontSize);\n color: var(--osdk-table-cell-color);\n background-color: inherit;\n border-right: var(--osdk-table-cell-divider);\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableCell[data-pinned="left"],\n.osdkTableCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-1);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableCell[data-pinned="right"]:not(:has(~ [data-pinned="right"]):nth-child(n+2)) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableCellContent:not(:has([role="checkbox"])) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n}\n';
412
+ if (typeof document !== "undefined") {
413
+ const style = document.createElement("style");
414
+ style.textContent = css23;
415
+ document.head.appendChild(style);
416
+ }
417
+ var TableCell_default2 = { "osdkTableCell": "osdkTableCell", "osdkTableCellContent": "osdkTableCellContent" };
418
+ function LoadingCell2({
419
+ width
420
+ }) {
421
+ return /* @__PURE__ */ React8.createElement("td", {
422
+ className: TableCell_default2.osdkTableCell,
423
+ style: {
424
+ width
425
+ }
426
+ }, /* @__PURE__ */ React8.createElement("div", {
427
+ className: classNames4(LoadingCell_default3.osdkLoadingCell, LoadingCell_default3.osdkCellSkeleton)
428
+ }));
429
+ }
430
+ var css32 = '/*\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\n.osdkTableRow {\n position: absolute;\n display: flex;\n background-color: var(--osdk-table-row-bg-default);\n border-top: var(--osdk-table-row-divider);\n border-bottom: var(--osdk-table-border-width) solid transparent;\n\n &:last-child {\n border-bottom: var(--osdk-table-border);\n }\n\n /* Zebra rows */\n &:nth-child(even) {\n background-color: var(\n --osdk-table-row-bg-alternate,\n var(--osdk-table-row-bg-default)\n );\n }\n\n &:hover {\n z-index: 1;\n background-color: var(\n --osdk-table-row-bg-hover,\n var(--osdk-surface-background-color-default-hover)\n );\n border-top-color: var(--osdk-table-row-border-color-hover);\n border-bottom-color: var(--osdk-table-row-border-color-hover);\n }\n\n &[data-selected="true"] {\n z-index: 2;\n background-color: var(--osdk-table-row-bg-active);\n border-top-color: var(--osdk-table-row-border-color-active);\n border-bottom-color: var(--osdk-table-row-border-color-active);\n }\n\n &[data-selected="true"] + &[data-selected="true"] {\n border-top-color: transparent;\n }\n\n &[data-selected="true"]:has(+ &[data-selected="true"]) {\n border-bottom-color: transparent;\n }\n}\n';
431
+ if (typeof document !== "undefined") {
432
+ const style = document.createElement("style");
433
+ style.textContent = css32;
434
+ document.head.appendChild(style);
435
+ }
436
+ var TableRow_default2 = { "osdkTableRow": "osdkTableRow" };
437
+ function LoadingRow2({
438
+ headers,
439
+ columnCount,
440
+ translateY,
441
+ rowHeight = 40,
442
+ columnWidth = 80
443
+ }) {
444
+ return /* @__PURE__ */ React22.createElement("tr", {
445
+ className: TableRow_default2.osdkTableRow,
446
+ style: {
447
+ height: `${rowHeight}px`,
448
+ transform: `translateY(${translateY}px)`
449
+ }
450
+ }, /* @__PURE__ */ React22.createElement(React22.Fragment, null, Array.from({
451
+ length: columnCount
452
+ }).map((_, index) => {
453
+ const width = headers.length > index ? headers[index].getSize() : columnWidth;
454
+ return /* @__PURE__ */ React22.createElement(LoadingCell2, {
455
+ key: `loading-cell-${index}`,
456
+ width
457
+ });
458
+ })));
459
+ }
460
+
461
+ // build/browser/object-table/TableBody.module.css
462
+ var css11 = '/*\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\n.osdkTableBody {\n display: grid;\n position: relative;\n}\n';
463
+ if (typeof document !== "undefined") {
464
+ const style = document.createElement("style");
465
+ style.textContent = css11;
466
+ document.head.appendChild(style);
467
+ }
468
+ var TableBody_default2 = { "osdkTableBody": "osdkTableBody" };
469
+
470
+ // build/browser/object-table/TableRow.js
471
+ import React11, { useCallback as useCallback3 } from "react";
472
+
473
+ // build/browser/object-table/TableCell.js
474
+ import { flexRender as flexRender2 } from "@tanstack/react-table";
475
+ import React10, { useRef as useRef3 } from "react";
476
+
477
+ // build/browser/object-table/CellContextMenu.js
478
+ import React9, { useEffect as useEffect2, useRef as useRef2 } from "react";
479
+ import { createPortal } from "react-dom";
480
+ var css12 = '/*\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\n.osdkCellContextMenu {\n position: fixed;\n z-index: var(--osdk-surface-z-index-2);\n}\n';
481
+ if (typeof document !== "undefined") {
482
+ const style = document.createElement("style");
483
+ style.textContent = css12;
484
+ document.head.appendChild(style);
485
+ }
486
+ var CellContextMenu_default = { "osdkCellContextMenu": "osdkCellContextMenu" };
487
+ function CellContextMenu({
488
+ cell,
489
+ position,
490
+ onClose,
491
+ renderContent
492
+ }) {
493
+ const ref = useRef2(null);
494
+ useEffect2(() => {
495
+ const handleClickOutside = (event) => {
496
+ if (ref.current && !ref.current.contains(event.target)) {
497
+ onClose();
498
+ }
499
+ };
500
+ document.addEventListener("mousedown", handleClickOutside);
501
+ return () => {
502
+ document.removeEventListener("mousedown", handleClickOutside);
503
+ };
504
+ }, [onClose]);
505
+ return /* @__PURE__ */ createPortal(/* @__PURE__ */ React9.createElement("div", {
506
+ ref,
507
+ className: CellContextMenu_default.osdkCellContextMenu,
508
+ style: {
509
+ left: position.left,
510
+ top: position.top,
511
+ minWidth: position.width
512
+ }
513
+ }, renderContent(cell.row.original, cell)), document.body);
514
+ }
515
+
516
+ // build/browser/object-table/hooks/useCellContextMenu.js
517
+ import { useCallback as useCallback2, useState as useState3 } from "react";
518
+ var useCellContextMenu = ({
519
+ tdRef
520
+ }) => {
521
+ const [popoverPosition, setPopoverPosition] = useState3(null);
522
+ const [isContextMenuOpen, setIsContextMenuOpen] = useState3(false);
523
+ const handleOpenContextMenu = useCallback2((event) => {
524
+ event.preventDefault();
525
+ event.stopPropagation();
526
+ if (tdRef.current) {
527
+ const rect = tdRef.current.getBoundingClientRect();
528
+ const position = {
529
+ left: rect.left,
530
+ top: rect.bottom,
531
+ width: rect.width
532
+ };
533
+ setPopoverPosition(position);
534
+ setIsContextMenuOpen(true);
535
+ }
536
+ }, [tdRef]);
537
+ const handleCloseContextMenu = useCallback2(() => {
538
+ setIsContextMenuOpen(false);
539
+ setPopoverPosition(null);
540
+ }, []);
541
+ return {
542
+ isContextMenuOpen,
543
+ handleOpenContextMenu,
544
+ handleCloseContextMenu,
545
+ popoverPosition
546
+ };
547
+ };
548
+
549
+ // build/browser/object-table/TableCell.module.css
550
+ var css13 = '/*\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\n.osdkTableCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-size: var(--osdk-table-cell-fontSize);\n color: var(--osdk-table-cell-color);\n background-color: inherit;\n border-right: var(--osdk-table-cell-divider);\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableCell[data-pinned="left"],\n.osdkTableCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-1);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableCell[data-pinned="right"]:not(:has(~ [data-pinned="right"]):nth-child(n+2)) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableCellContent:not(:has([role="checkbox"])) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n}\n';
551
+ if (typeof document !== "undefined") {
552
+ const style = document.createElement("style");
553
+ style.textContent = css13;
554
+ document.head.appendChild(style);
555
+ }
556
+ var TableCell_default3 = { "osdkTableCell": "osdkTableCell", "osdkTableCellContent": "osdkTableCellContent" };
557
+
558
+ // build/browser/object-table/utils/constants.js
559
+ var SELECTION_COLUMN_ID2 = "__selection__";
560
+
561
+ // build/browser/object-table/utils/getColumnPinningStyles.js
562
+ function getColumnPinningStyles2(column) {
563
+ const isPinned = column.getIsPinned();
564
+ return {
565
+ columnStyles: {
566
+ left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
567
+ right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
568
+ width: column.getSize()
569
+ }
570
+ };
571
+ }
572
+
573
+ // build/browser/object-table/TableCell.js
574
+ function TableCell({
575
+ cell,
576
+ renderCellContextMenu
577
+ }) {
578
+ const tdRef = useRef3(null);
579
+ const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID2;
580
+ const {
581
+ isContextMenuOpen,
582
+ handleOpenContextMenu,
583
+ handleCloseContextMenu,
584
+ popoverPosition
585
+ } = useCellContextMenu({
586
+ tdRef
587
+ });
588
+ const {
589
+ columnStyles
590
+ } = getColumnPinningStyles2(cell.column);
591
+ return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement("td", {
592
+ ref: tdRef,
593
+ "data-pinned": cell.column.getIsPinned(),
594
+ className: TableCell_default3.osdkTableCell,
595
+ style: columnStyles,
596
+ onContextMenu: handleOpenContextMenu
597
+ }, /* @__PURE__ */ React10.createElement("div", {
598
+ className: TableCell_default3.osdkTableCellContent
599
+ }, flexRender2(cell.column.columnDef.cell, cell.getContext()))), !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu && /* @__PURE__ */ React10.createElement(CellContextMenu, {
600
+ cell,
601
+ position: popoverPosition,
602
+ onClose: handleCloseContextMenu,
603
+ renderContent: renderCellContextMenu
604
+ }));
605
+ }
606
+
607
+ // build/browser/object-table/TableRow.module.css
608
+ var css14 = '/*\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\n.osdkTableRow {\n position: absolute;\n display: flex;\n background-color: var(--osdk-table-row-bg-default);\n border-top: var(--osdk-table-row-divider);\n border-bottom: var(--osdk-table-border-width) solid transparent;\n\n &:last-child {\n border-bottom: var(--osdk-table-border);\n }\n\n /* Zebra rows */\n &:nth-child(even) {\n background-color: var(\n --osdk-table-row-bg-alternate,\n var(--osdk-table-row-bg-default)\n );\n }\n\n &:hover {\n z-index: 1;\n background-color: var(\n --osdk-table-row-bg-hover,\n var(--osdk-surface-background-color-default-hover)\n );\n border-top-color: var(--osdk-table-row-border-color-hover);\n border-bottom-color: var(--osdk-table-row-border-color-hover);\n }\n\n &[data-selected="true"] {\n z-index: 2;\n background-color: var(--osdk-table-row-bg-active);\n border-top-color: var(--osdk-table-row-border-color-active);\n border-bottom-color: var(--osdk-table-row-border-color-active);\n }\n\n &[data-selected="true"] + &[data-selected="true"] {\n border-top-color: transparent;\n }\n\n &[data-selected="true"]:has(+ &[data-selected="true"]) {\n border-bottom-color: transparent;\n }\n}\n';
609
+ if (typeof document !== "undefined") {
610
+ const style = document.createElement("style");
611
+ style.textContent = css14;
612
+ document.head.appendChild(style);
613
+ }
614
+ var TableRow_default3 = { "osdkTableRow": "osdkTableRow" };
615
+
616
+ // build/browser/object-table/TableRow.js
617
+ function TableRow({
618
+ row,
619
+ virtualRow,
620
+ onRowClick,
621
+ renderCellContextMenu
622
+ }) {
623
+ const handleClick = useCallback3(() => {
624
+ onRowClick?.(row.original);
625
+ }, [onRowClick, row.original]);
626
+ return /* @__PURE__ */ React11.createElement("tr", {
627
+ "data-selected": row.getIsSelected(),
628
+ className: TableRow_default3.osdkTableRow,
629
+ style: {
630
+ height: `${virtualRow.size}px`,
631
+ transform: `translateY(${virtualRow.start}px)`
632
+ },
633
+ onClick: handleClick
634
+ }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React11.createElement(TableCell, {
635
+ key: cell.id,
636
+ cell,
637
+ renderCellContextMenu
638
+ })));
639
+ }
640
+
641
+ // build/browser/object-table/TableBody.js
642
+ function TableBody({
643
+ rows,
644
+ tableContainerRef,
645
+ onRowClick,
646
+ renderCellContextMenu,
647
+ rowHeight = 40,
648
+ isLoadingMore = false,
649
+ headerGroups = []
650
+ }) {
651
+ const rowVirtualizer = useVirtualizer({
652
+ count: rows.length,
653
+ estimateSize: () => rowHeight,
654
+ getScrollElement: () => tableContainerRef.current,
655
+ overscan: 5
656
+ });
657
+ useLayoutEffect(() => {
658
+ rowVirtualizer.measure();
659
+ }, [rowVirtualizer, rows.length]);
660
+ const totalSize = rowVirtualizer.getTotalSize();
661
+ const bodyHeight = isLoadingMore ? totalSize + rowHeight : totalSize;
662
+ const headers = headerGroups[0]?.headers ?? [];
663
+ return /* @__PURE__ */ React12.createElement("tbody", {
664
+ className: TableBody_default2.osdkTableBody,
665
+ style: {
666
+ height: `${bodyHeight}px`
667
+ }
668
+ }, rowVirtualizer.getVirtualItems().map((virtualRow) => {
669
+ const row = rows[virtualRow.index];
670
+ return /* @__PURE__ */ React12.createElement(TableRow, {
671
+ key: row.id,
672
+ row,
673
+ virtualRow,
674
+ onRowClick,
675
+ renderCellContextMenu
676
+ });
677
+ }), isLoadingMore && /* @__PURE__ */ React12.createElement(LoadingRow2, {
678
+ headers,
679
+ translateY: totalSize,
680
+ rowHeight,
681
+ columnCount: headers.length
682
+ }));
683
+ }
684
+
685
+ // build/browser/object-table/TableHeader.js
686
+ import React15 from "react";
687
+
688
+ // build/browser/object-table/TableHeader.module.css
689
+ var css15 = '/*\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\n.osdkTableHeader {\n display: grid;\n position: sticky;\n top: 0;\n z-index: var(--osdk-surface-z-index-1);\n background-color: var(--osdk-table-header-bg);\n}\n\n.osdkTableHeader[data-resizing="true"] {\n cursor: col-resize;\n user-select: none;\n}\n\n.osdkTableHeaderRow {\n display: flex;\n}\n\n.osdkTableHeaderCell {\n display: flex;\n align-items: center;\n text-align: left;\n position: relative;\n padding: var(--osdk-table-cell-padding);\n font-weight: var(--osdk-table-header-fontWeight);\n font-size: var(--osdk-table-header-fontSize);\n color: var(--osdk-table-header-color);\n border-top: var(--osdk-table-border);\n border-right: var(--osdk-table-header-divider);\n background-color: inherit;\n\n &:first-child {\n border-left: var(--osdk-table-border);\n }\n\n &:last-child {\n border-right: var(--osdk-table-border);\n }\n}\n\n.osdkTableHeaderCell[data-pinned="left"],\n.osdkTableHeaderCell[data-pinned="right"] {\n position: sticky;\n z-index: var(--osdk-surface-z-index-2);\n}\n\n/* Last left-pinned column - no left-pinned siblings after it */\n.osdkTableHeaderCell[data-pinned="left"]:not(:has(~ [data-pinned="left"])) {\n border-right: var(--osdk-table-pinned-column-border);\n}\n\n/* First right-pinned column - no right-pinned siblings before it */\n.osdkTableHeaderCell[data-pinned="right"]:not(\n :has(~ [data-pinned="right"]):nth-child(n + 2)\n ) {\n border-left: var(--osdk-table-pinned-column-border);\n}\n\n.osdkTableHeaderCell:has([role="checkbox"]) {\n justify-content: center;\n}\n\n.osdkTableHeaderResizer {\n background: none;\n cursor: col-resize;\n height: 100%;\n position: absolute;\n right: calc(-1 * var(--osdk-table-border-width));\n top: 0;\n touch-action: none;\n width: 3px;\n z-index: var(--osdk-surface-z-index-2);\n\n &:hover {\n background: var(--osdk-intent-primary-hover);\n }\n\n &:active {\n background: var(--osdk-intent-primary-active);\n }\n}\n\n.osdkLoadingHeaderCell {\n height: var(--osdk-table-header-fontSize);\n flex: 1;\n}\n';
690
+ if (typeof document !== "undefined") {
691
+ const style = document.createElement("style");
692
+ style.textContent = css15;
693
+ document.head.appendChild(style);
694
+ }
695
+ var TableHeader_default2 = { "osdkTableHeader": "osdkTableHeader", "osdkTableHeaderRow": "osdkTableHeaderRow", "osdkTableHeaderCell": "osdkTableHeaderCell", "osdkTableHeaderResizer": "osdkTableHeaderResizer", "osdkLoadingHeaderCell": "osdkLoadingHeaderCell" };
696
+
697
+ // build/browser/object-table/TableHeaderContent.js
698
+ import { flexRender as flexRender3 } from "@tanstack/react-table";
699
+ import React13 from "react";
700
+
701
+ // build/browser/object-table/TableHeaderContent.module.css
702
+ var css16 = '/*\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\n.osdkHeaderContent {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.osdkHeaderContent:has([role="checkbox"]) {\n display: flex;\n justify-content: center;\n}\n';
703
+ if (typeof document !== "undefined") {
704
+ const style = document.createElement("style");
705
+ style.textContent = css16;
706
+ document.head.appendChild(style);
707
+ }
708
+ var TableHeaderContent_default2 = { "osdkHeaderContent": "osdkHeaderContent" };
709
+
710
+ // build/browser/object-table/TableHeaderContent.js
711
+ function TableHeaderContent2({
712
+ header
713
+ }) {
714
+ return /* @__PURE__ */ React13.createElement("div", {
715
+ className: TableHeaderContent_default2.osdkHeaderContent
716
+ }, flexRender3(header.column.columnDef.header, header.getContext()));
717
+ }
718
+
719
+ // build/browser/object-table/TableHeaderWithPopover.js
720
+ import { Menu as Menu2 } from "@base-ui/react/menu";
721
+ import { ChevronDown as ChevronDown2, Pin as Pin2, Remove as Remove2, SortAlphabetical as SortAlphabetical2, SortAlphabeticalDesc as SortAlphabeticalDesc2, Unpin as Unpin2, VerticalDistribution as VerticalDistribution2 } from "@blueprintjs/icons";
722
+ import classNames5 from "classnames";
723
+ import React14, { useCallback as useCallback4, useState as useState4 } from "react";
724
+
725
+ // build/browser/object-table/TableHeaderWithPopover.module.css
726
+ var css17 = '/*\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\n.osdkCenterContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.osdkContentGap {\n display: flex;\n gap: var(--osdk-surface-spacing);\n}\n\n.osdkHeaderContainer {\n justify-content: space-between;\n flex: 1;\n min-width: 0;\n align-self: stretch;\n}\n\n.osdkHeaderContentLeft {\n min-width: 0;\n flex-shrink: 1;\n}\n\n.osdkHeaderContentRight {\n flex-shrink: 0;\n}\n\n.osdkHeaderPopoverTrigger {\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n border: var(--osdk-surface-border-width) solid\n var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-surface-border-radius);\n color: var(--osdk-intent-default-foreground);\n user-select: none;\n outline: none;\n\n &:hover {\n background-color: var(--osdk-intent-default-hover);\n }\n\n &[data-popup-open] {\n background-color: var(--osdk-intent-primary-rest);\n }\n\n &:focus-visible {\n outline: var(--osdk-focus-visible-outline);\n outline-offset: var(--osdk-focus-visible-outline-offset);\n }\n}\n\n.osdkHeaderIcon {\n width: var(--osdk-iconography-size-small);\n height: var(--osdk-iconography-size-small);\n}\n\n.osdkHeaderPopup {\n box-sizing: border-box;\n padding: var(--osdk-surface-spacing);\n border-radius: var(--osdk-surface-border-radius);\n border: var(--osdk-surface-border-width) solid\n var(--osdk-surface-border-color-default);\n background-color: var(--osdk-surface-background-color-default);\n color: var(--osdk-typography-color-default-rest);\n box-shadow: var(--osdk-surface-shadow-2);\n font-size: var(--osdk-typography-size-body-medium);\n outline: none;\n}\n\n.osdkHeaderMenuItem {\n justify-content: flex-start;\n padding: var(--osdk-surface-spacing);\n cursor: pointer;\n}\n\n.osdkHeaderMenuItem:hover {\n outline: none;\n background-color: var(--osdk-surface-background-color-default-hover);\n border-radius: var(--osdk-surface-border-radius);\n}\n\n.osdkHeaderActiveMenuItem {\n background-color: var(--osdk-intent-primary-rest);\n color: var(--osdk-intent-primary-foreground);\n}\n\n.osdkHeaderActiveMenuItem:hover {\n background-color: var(--osdk-intent-primary-hover);\n}\n\n.osdkHeaderActiveMenuItem:active {\n background-color: var(--osdk-intent-primary-active);\n}\n';
727
+ if (typeof document !== "undefined") {
728
+ const style = document.createElement("style");
729
+ style.textContent = css17;
730
+ document.head.appendChild(style);
731
+ }
732
+ var TableHeaderWithPopover_default2 = { "osdkCenterContainer": "osdkCenterContainer", "osdkContentGap": "osdkContentGap", "osdkHeaderContainer": "osdkHeaderContainer", "osdkHeaderContentLeft": "osdkHeaderContentLeft", "osdkHeaderContentRight": "osdkHeaderContentRight", "osdkHeaderPopoverTrigger": "osdkHeaderPopoverTrigger", "osdkHeaderIcon": "osdkHeaderIcon", "osdkHeaderPopup": "osdkHeaderPopup", "osdkHeaderMenuItem": "osdkHeaderMenuItem", "osdkHeaderActiveMenuItem": "osdkHeaderActiveMenuItem" };
733
+
734
+ // build/browser/object-table/TableHeaderWithPopover.js
735
+ function HeaderMenuItem2({
736
+ onClick,
737
+ icon: Icon,
738
+ label,
739
+ active = false
740
+ }) {
741
+ return /* @__PURE__ */ React14.createElement(Menu2.Item, {
742
+ closeOnClick: true,
743
+ className: classNames5(TableHeaderWithPopover_default2.osdkCenterContainer, TableHeaderWithPopover_default2.osdkContentGap, TableHeaderWithPopover_default2.osdkHeaderMenuItem, active && TableHeaderWithPopover_default2.osdkHeaderActiveMenuItem),
744
+ onClick
745
+ }, /* @__PURE__ */ React14.createElement(Icon, {
746
+ className: TableHeaderWithPopover_default2.osdkHeaderIcon,
747
+ color: "currentColor"
748
+ }), /* @__PURE__ */ React14.createElement("span", null, label));
749
+ }
750
+ function TableHeaderWithPopover2({
751
+ header,
752
+ isColumnPinned,
753
+ setColumnPinning,
754
+ onSortChange,
755
+ onResetSize
756
+ }) {
757
+ const [isOpen, setIsOpen] = useState4(false);
758
+ const handlePinLeft = useCallback4(() => {
759
+ setColumnPinning((prev) => {
760
+ return {
761
+ left: [...prev.left || [], header.column.id],
762
+ right: prev.right?.filter((id) => id !== header.column.id) || []
763
+ };
764
+ });
765
+ }, [header.column.id, setColumnPinning]);
766
+ const handleUnpin = useCallback4(() => {
767
+ setColumnPinning((prev) => {
768
+ return {
769
+ left: prev.left?.filter((id) => id !== header.column.id) || [],
770
+ right: prev.right?.filter((id) => id !== header.column.id) || []
771
+ };
772
+ });
773
+ }, [header.column.id, setColumnPinning]);
774
+ const handleSortAscending = useCallback4(() => {
775
+ header.column.toggleSorting(false);
776
+ onSortChange?.([{
777
+ id: header.column.id,
778
+ desc: false
779
+ }]);
780
+ }, [header.column, onSortChange]);
781
+ const handleSortDescending = useCallback4(() => {
782
+ header.column.toggleSorting(true);
783
+ onSortChange?.([{
784
+ id: header.column.id,
785
+ desc: true
786
+ }]);
787
+ }, [header.column, onSortChange]);
788
+ const handleClearAllSorts = useCallback4(() => {
789
+ header.column.clearSorting();
790
+ onSortChange?.([]);
791
+ }, [header.column, onSortChange]);
792
+ const handleResetSize = useCallback4(() => {
793
+ header.column.resetSize();
794
+ if (onResetSize) {
795
+ onResetSize();
796
+ }
797
+ }, [header.column, onResetSize]);
798
+ const handleInteraction = useCallback4((e) => {
799
+ e.preventDefault();
800
+ setIsOpen((prev) => !prev);
801
+ }, []);
802
+ const isSorted = header.column.getIsSorted();
803
+ const isSortable = header.column.getCanSort();
804
+ return /* @__PURE__ */ React14.createElement(Menu2.Root, {
805
+ open: isOpen,
806
+ onOpenChange: setIsOpen
807
+ }, /* @__PURE__ */ React14.createElement("div", {
808
+ className: classNames5(TableHeaderWithPopover_default2.osdkCenterContainer, TableHeaderWithPopover_default2.osdkContentGap, TableHeaderWithPopover_default2.osdkHeaderContainer),
809
+ onContextMenu: handleInteraction
810
+ }, /* @__PURE__ */ React14.createElement("div", {
811
+ className: classNames5(TableHeaderWithPopover_default2.osdkCenterContainer, TableHeaderWithPopover_default2.osdkContentGap, TableHeaderWithPopover_default2.osdkHeaderContentLeft)
812
+ }, isColumnPinned && /* @__PURE__ */ React14.createElement(Pin2, {
813
+ className: TableHeaderWithPopover_default2.osdkHeaderIcon,
814
+ color: "currentColor"
815
+ }), /* @__PURE__ */ React14.createElement(TableHeaderContent2, {
816
+ header
817
+ })), /* @__PURE__ */ React14.createElement("div", {
818
+ className: classNames5(TableHeaderWithPopover_default2.osdkCenterContainer, TableHeaderWithPopover_default2.osdkContentGap, TableHeaderWithPopover_default2.osdkHeaderContentRight)
819
+ }, isSorted && /* @__PURE__ */ React14.createElement("div", {
820
+ className: TableHeaderWithPopover_default2.osdkCenterContainer
821
+ }, isSorted === "asc" ? /* @__PURE__ */ React14.createElement(SortAlphabetical2, {
822
+ className: TableHeaderWithPopover_default2.osdkHeaderIcon,
823
+ color: "currentColor"
824
+ }) : /* @__PURE__ */ React14.createElement(SortAlphabeticalDesc2, {
825
+ className: TableHeaderWithPopover_default2.osdkHeaderIcon,
826
+ color: "currentColor"
827
+ })), /* @__PURE__ */ React14.createElement(Menu2.Trigger, {
828
+ "aria-label": `Open header menu for column with id=${header.column.id}`,
829
+ className: classNames5(TableHeaderWithPopover_default2.osdkCenterContainer, TableHeaderWithPopover_default2.osdkHeaderPopoverTrigger)
830
+ }, /* @__PURE__ */ React14.createElement(ChevronDown2, {
831
+ className: TableHeaderWithPopover_default2.osdkHeaderIcon
832
+ }))), /* @__PURE__ */ React14.createElement(Menu2.Portal, {
833
+ container: document.body
834
+ }, /* @__PURE__ */ React14.createElement(Menu2.Positioner, {
835
+ sideOffset: 4
836
+ }, /* @__PURE__ */ React14.createElement(Menu2.Popup, {
837
+ className: TableHeaderWithPopover_default2.osdkHeaderPopup
838
+ }, !isColumnPinned && /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
839
+ onClick: handlePinLeft,
840
+ icon: Pin2,
841
+ label: "Pin column"
842
+ }), isColumnPinned && /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
843
+ onClick: handleUnpin,
844
+ icon: Unpin2,
845
+ label: "Unpin Column",
846
+ active: true
847
+ }), isSortable && /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
848
+ onClick: handleSortAscending,
849
+ icon: SortAlphabetical2,
850
+ label: "Sort ascending",
851
+ active: isSorted === "asc"
852
+ }), /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
853
+ onClick: handleSortDescending,
854
+ icon: SortAlphabeticalDesc2,
855
+ label: "Sort descending",
856
+ active: isSorted === "desc"
857
+ })), !!isSorted && /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
858
+ onClick: handleClearAllSorts,
859
+ icon: Remove2,
860
+ label: "Clear all sorts"
861
+ }), /* @__PURE__ */ React14.createElement(HeaderMenuItem2, {
862
+ onClick: handleResetSize,
863
+ icon: VerticalDistribution2,
864
+ label: "Reset Column Size"
865
+ }))))));
866
+ }
867
+
868
+ // build/browser/object-table/TableHeader.js
869
+ function TableHeader2({
870
+ table
871
+ }) {
872
+ const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
873
+ return /* @__PURE__ */ React15.createElement("thead", {
874
+ className: TableHeader_default2.osdkTableHeader,
875
+ "data-resizing": isResizing
876
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React15.createElement("tr", {
877
+ key: headerGroup.id,
878
+ className: TableHeader_default2.osdkTableHeaderRow
879
+ }, headerGroup.headers.map((header) => {
880
+ const {
881
+ columnStyles
882
+ } = getColumnPinningStyles2(header.column);
883
+ const isColumnPinned = header.column.getIsPinned();
884
+ const isSelectColumn = header.id === SELECTION_COLUMN_ID2;
885
+ return /* @__PURE__ */ React15.createElement("th", {
886
+ key: header.id,
887
+ "data-pinned": header.column.getIsPinned(),
888
+ className: TableHeader_default2.osdkTableHeaderCell,
889
+ style: columnStyles
890
+ }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React15.createElement(TableHeaderContent2, {
891
+ header
892
+ }) : /* @__PURE__ */ React15.createElement(TableHeaderWithPopover2, {
893
+ header,
894
+ isColumnPinned,
895
+ setColumnPinning: table.setColumnPinning
896
+ }), header.column.getCanResize() && /* @__PURE__ */ React15.createElement("div", {
897
+ className: TableHeader_default2.osdkTableHeaderResizer,
898
+ onDoubleClick: () => header.column.resetSize(),
899
+ onMouseDown: header.getResizeHandler(),
900
+ onTouchStart: header.getResizeHandler()
901
+ }));
902
+ }))));
903
+ }
904
+
905
+ // build/browser/object-table/Table.js
906
+ function BaseTable({
23
907
  table,
24
908
  isLoading,
25
909
  fetchNextPage,
26
910
  onRowClick,
27
911
  rowHeight,
28
912
  renderCellContextMenu,
29
- className
913
+ className,
914
+ error
30
915
  }) {
31
- const tableContainerRef = useRef(null);
32
-
33
- // Using a ref to prevent duplicate fetches from rapid scroll events while a fetch is in-flight
34
- const fetchingRef = useRef(false);
35
- const fetchMoreOnEndReached = useCallback(async containerRefElement => {
36
- if (containerRefElement && !fetchingRef.current) {
916
+ const tableContainerRef = useRef4(null);
917
+ const [isLoadingMore, setIsLoadingMore] = useState5(false);
918
+ const fetchingRef = useRef4(false);
919
+ useEffect3(() => {
920
+ if (!isLoading || fetchNextPage == null) {
921
+ setIsLoadingMore(false);
922
+ }
923
+ }, [isLoading, fetchNextPage]);
924
+ const fetchMoreOnEndReached = useCallback5(async (containerRefElement) => {
925
+ if (containerRefElement && !fetchingRef.current && !isLoadingMore) {
37
926
  const {
38
927
  scrollHeight,
39
928
  scrollTop,
40
929
  clientHeight
41
930
  } = containerRefElement;
42
- if (scrollHeight - scrollTop - clientHeight < 100 && !isLoading) {
931
+ if (scrollHeight - scrollTop - clientHeight < 100 && !isLoading && fetchNextPage != null) {
43
932
  fetchingRef.current = true;
933
+ setIsLoadingMore(true);
44
934
  try {
45
- await fetchNextPage?.();
935
+ await fetchNextPage();
46
936
  } finally {
47
937
  fetchingRef.current = false;
48
938
  }
49
939
  }
50
940
  }
51
- }, [fetchNextPage, isLoading]);
52
- const handleScroll = useCallback(async e => {
941
+ }, [fetchNextPage, isLoading, isLoadingMore]);
942
+ const handleScroll = useCallback5(async (e) => {
53
943
  await fetchMoreOnEndReached(e.currentTarget);
54
944
  }, [fetchMoreOnEndReached]);
55
-
56
- // TODO: Handle error, loading and empty states
57
-
58
- return /*#__PURE__*/React.createElement("div", {
945
+ const rows = table.getRowModel().rows;
946
+ const headerGroups = table.getHeaderGroups();
947
+ const hasData = rows.length > 0;
948
+ return /* @__PURE__ */ React16.createElement("div", {
59
949
  ref: tableContainerRef,
60
- className: classNames(styles.osdkTableContainer, className),
950
+ className: classNames6(Table_default.osdkTableContainer, className),
61
951
  onScroll: handleScroll
62
- }, /*#__PURE__*/React.createElement("table", null, /*#__PURE__*/React.createElement(TableHeader, {
63
- table: table
64
- }), /*#__PURE__*/React.createElement(TableBody, {
65
- rows: table.getRowModel().rows,
66
- tableContainerRef: tableContainerRef,
67
- onRowClick: onRowClick,
68
- rowHeight: rowHeight,
69
- renderCellContextMenu: renderCellContextMenu
952
+ }, /* @__PURE__ */ React16.createElement("table", null, isLoading && !hasData ? /* @__PURE__ */ React16.createElement(LoadingStateTable, {
953
+ table,
954
+ headerGroups,
955
+ rowHeight,
956
+ tableContainerRef
957
+ }) : /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(TableHeader2, {
958
+ table
959
+ }), !hasData && error == null ? /* @__PURE__ */ React16.createElement(NonIdealState, {
960
+ message: "No Data"
961
+ }) : /* @__PURE__ */ React16.createElement(TableBody, {
962
+ rows,
963
+ tableContainerRef,
964
+ onRowClick,
965
+ rowHeight,
966
+ renderCellContextMenu,
967
+ isLoadingMore,
968
+ headerGroups
969
+ })), error != null && /* @__PURE__ */ React16.createElement(NonIdealState, {
970
+ message: `Error Loading Data: ${error.message}`
70
971
  })));
71
972
  }
72
- //# sourceMappingURL=Table.js.map
973
+ export {
974
+ BaseTable
975
+ };